!function(e){function r(r){for(var n,i,a=r[0],c=r[1],l=r[2],p=0,f=[];p<a.length;p++)o[i=a[p]]&&f.push(o[i][0]),o[i]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(r);f.length;)f.shift()();return u.push.apply(u,l||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,a=1;a<t.length;a++)0!==o[t[a]]&&(n=!1);n&&(u.splice(r--,1),e=i(i.s=t[0]))}return e}var n={},o={5:0},u=[];function i(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,i),t.l=!0,t.exports}i.e=function(e){var r=[],t=o[e];if(0!==t)if(t)r.push(t[2]);else{var n=new Promise(function(r,n){t=o[e]=[r,n]});r.push(t[2]=n);var u=document.getElementsByTagName("head")[0],a=document.createElement("script");a.charset="utf-8",a.timeout=120,i.nc&&a.setAttribute("nonce",i.nc),a.src=function(e){return i.p+""+({}[e]||e)+".js"}(e);var c=setTimeout(function(){l({type:"timeout",target:a})},12e4);function l(r){a.onerror=a.onload=null,clearTimeout(c);var t=o[e];if(0!==t){if(t){var n=r&&("load"===r.type?"missing":r.type),u=r&&r.target&&r.target.src,i=new Error("Loading chunk "+e+" failed.\n("+n+": "+u+")");i.type=n,i.request=u,t[1](i)}o[e]=void 0}}a.onerror=a.onload=l,u.appendChild(a)}return Promise.all(r)},i.m=e,i.c=n,i.d=function(e,r,t){i.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:t})},i.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},i.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(r,"a",r),r},i.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},i.p="",i.oe=function(e){throw console.error(e),e};var a=window.webpackJsonp=window.webpackJsonp||[],c=a.push.bind(a);a.push=r,a=a.slice();for(var l=0;l<a.length;l++)r(a[l]);var s=c;t()}([]);(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{"+rLv":function(e,t,n){var r=n("dyZX").document;e.exports=r&&r.documentElement},"0/R4":function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},"0TWp":function(e,t,n){!function(){"use strict";!function(e){var t=e.performance;function n(e){t&&t.mark&&t.mark(e)}function r(e,n){t&&t.measure&&t.measure(e,n)}if(n("Zone"),e.Zone)throw new Error("Zone already loaded.");var o,i=function(){function t(e,t){this._properties=null,this._parent=e,this._name=t?t.name||"unnamed":"<root>",this._properties=t&&t.properties||{},this._zoneDelegate=new c(this,this._parent&&this._parent._zoneDelegate,t)}return t.assertZonePatched=function(){if(e.Promise!==O.ZoneAwarePromise)throw new Error("Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten.\nMost likely cause is that a Promise polyfill has been loaded after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. If you must load one, do so before loading zone.js.)")},Object.defineProperty(t,"root",{get:function(){for(var e=t.current;e.parent;)e=e.parent;return e},enumerable:!0,configurable:!0}),Object.defineProperty(t,"current",{get:function(){return D.zone},enumerable:!0,configurable:!0}),Object.defineProperty(t,"currentTask",{get:function(){return j},enumerable:!0,configurable:!0}),t.__load_patch=function(o,i){if(O.hasOwnProperty(o))throw Error("Already loaded patch: "+o);if(!e["__Zone_disable_"+o]){var a="Zone:"+o;n(a),O[o]=i(e,t,S),r(a,a)}},Object.defineProperty(t.prototype,"parent",{get:function(){return this._parent},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"name",{get:function(){return this._name},enumerable:!0,configurable:!0}),t.prototype.get=function(e){var t=this.getZoneWith(e);if(t)return t._properties[e]},t.prototype.getZoneWith=function(e){for(var t=this;t;){if(t._properties.hasOwnProperty(e))return t;t=t._parent}return null},t.prototype.fork=function(e){if(!e)throw new Error("ZoneSpec required!");return this._zoneDelegate.fork(this,e)},t.prototype.wrap=function(e,t){if("function"!=typeof e)throw new Error("Expecting function got: "+e);var n=this._zoneDelegate.intercept(this,e,t),r=this;return function(){return r.runGuarded(n,this,arguments,t)}},t.prototype.run=function(e,t,n,r){void 0===t&&(t=void 0),void 0===n&&(n=null),void 0===r&&(r=null),D={parent:D,zone:this};try{return this._zoneDelegate.invoke(this,e,t,n,r)}finally{D=D.parent}},t.prototype.runGuarded=function(e,t,n,r){void 0===t&&(t=null),void 0===n&&(n=null),void 0===r&&(r=null),D={parent:D,zone:this};try{try{return this._zoneDelegate.invoke(this,e,t,n,r)}catch(e){if(this._zoneDelegate.handleError(this,e))throw e}}finally{D=D.parent}},t.prototype.runTask=function(e,t,n){if(e.zone!=this)throw new Error("A task can only be run in the zone of creation! (Creation: "+(e.zone||g).name+"; Execution: "+this.name+")");if(e.state!==y||e.type!==x){var r=e.state!=k;r&&e._transitionTo(k,m),e.runCount++;var o=j;j=e,D={parent:D,zone:this};try{e.type==E&&e.data&&!e.data.isPeriodic&&(e.cancelFn=null);try{return this._zoneDelegate.invokeTask(this,e,t,n)}catch(e){if(this._zoneDelegate.handleError(this,e))throw e}}finally{e.state!==y&&e.state!==T&&(e.type==x||e.data&&e.data.isPeriodic?r&&e._transitionTo(m,k):(e.runCount=0,this._updateTaskCount(e,-1),r&&e._transitionTo(y,k,y))),D=D.parent,j=o}}},t.prototype.scheduleTask=function(e){if(e.zone&&e.zone!==this)for(var t=this;t;){if(t===e.zone)throw Error("can not reschedule task to "+this.name+" which is descendants of the original zone "+e.zone.name);t=t.parent}e._transitionTo(_,y);var n=[];e._zoneDelegates=n,e._zone=this;try{e=this._zoneDelegate.scheduleTask(this,e)}catch(t){throw e._transitionTo(T,_,y),this._zoneDelegate.handleError(this,t),t}return e._zoneDelegates===n&&this._updateTaskCount(e,1),e.state==_&&e._transitionTo(m,_),e},t.prototype.scheduleMicroTask=function(e,t,n,r){return this.scheduleTask(new u(w,e,t,n,r,null))},t.prototype.scheduleMacroTask=function(e,t,n,r,o){return this.scheduleTask(new u(E,e,t,n,r,o))},t.prototype.scheduleEventTask=function(e,t,n,r,o){return this.scheduleTask(new u(x,e,t,n,r,o))},t.prototype.cancelTask=function(e){if(e.zone!=this)throw new Error("A task can only be cancelled in the zone of creation! (Creation: "+(e.zone||g).name+"; Execution: "+this.name+")");e._transitionTo(b,m,k);try{this._zoneDelegate.cancelTask(this,e)}catch(t){throw e._transitionTo(T,b),this._zoneDelegate.handleError(this,t),t}return this._updateTaskCount(e,-1),e._transitionTo(y,b),e.runCount=0,e},t.prototype._updateTaskCount=function(e,t){var n=e._zoneDelegates;-1==t&&(e._zoneDelegates=null);for(var r=0;r<n.length;r++)n[r]._updateTaskCount(e.type,t)},t.__symbol__=z,t}(),a={name:"",onHasTask:function(e,t,n,r){return e.hasTask(n,r)},onScheduleTask:function(e,t,n,r){return e.scheduleTask(n,r)},onInvokeTask:function(e,t,n,r,o,i){return e.invokeTask(n,r,o,i)},onCancelTask:function(e,t,n,r){return e.cancelTask(n,r)}},c=function(){function e(e,t,n){this._taskCounts={microTask:0,macroTask:0,eventTask:0},this.zone=e,this._parentDelegate=t,this._forkZS=n&&(n&&n.onFork?n:t._forkZS),this._forkDlgt=n&&(n.onFork?t:t._forkDlgt),this._forkCurrZone=n&&(n.onFork?this.zone:t.zone),this._interceptZS=n&&(n.onIntercept?n:t._interceptZS),this._interceptDlgt=n&&(n.onIntercept?t:t._interceptDlgt),this._interceptCurrZone=n&&(n.onIntercept?this.zone:t.zone),this._invokeZS=n&&(n.onInvoke?n:t._invokeZS),this._invokeDlgt=n&&(n.onInvoke?t:t._invokeDlgt),this._invokeCurrZone=n&&(n.onInvoke?this.zone:t.zone),this._handleErrorZS=n&&(n.onHandleError?n:t._handleErrorZS),this._handleErrorDlgt=n&&(n.onHandleError?t:t._handleErrorDlgt),this._handleErrorCurrZone=n&&(n.onHandleError?this.zone:t.zone),this._scheduleTaskZS=n&&(n.onScheduleTask?n:t._scheduleTaskZS),this._scheduleTaskDlgt=n&&(n.onScheduleTask?t:t._scheduleTaskDlgt),this._scheduleTaskCurrZone=n&&(n.onScheduleTask?this.zone:t.zone),this._invokeTaskZS=n&&(n.onInvokeTask?n:t._invokeTaskZS),this._invokeTaskDlgt=n&&(n.onInvokeTask?t:t._invokeTaskDlgt),this._invokeTaskCurrZone=n&&(n.onInvokeTask?this.zone:t.zone),this._cancelTaskZS=n&&(n.onCancelTask?n:t._cancelTaskZS),this._cancelTaskDlgt=n&&(n.onCancelTask?t:t._cancelTaskDlgt),this._cancelTaskCurrZone=n&&(n.onCancelTask?this.zone:t.zone),this._hasTaskZS=null,this._hasTaskDlgt=null,this._hasTaskDlgtOwner=null,this._hasTaskCurrZone=null;var r=n&&n.onHasTask;(r||t&&t._hasTaskZS)&&(this._hasTaskZS=r?n:a,this._hasTaskDlgt=t,this._hasTaskDlgtOwner=this,this._hasTaskCurrZone=e,n.onScheduleTask||(this._scheduleTaskZS=a,this._scheduleTaskDlgt=t,this._scheduleTaskCurrZone=this.zone),n.onInvokeTask||(this._invokeTaskZS=a,this._invokeTaskDlgt=t,this._invokeTaskCurrZone=this.zone),n.onCancelTask||(this._cancelTaskZS=a,this._cancelTaskDlgt=t,this._cancelTaskCurrZone=this.zone))}return e.prototype.fork=function(e,t){return this._forkZS?this._forkZS.onFork(this._forkDlgt,this.zone,e,t):new i(e,t)},e.prototype.intercept=function(e,t,n){return this._interceptZS?this._interceptZS.onIntercept(this._interceptDlgt,this._interceptCurrZone,e,t,n):t},e.prototype.invoke=function(e,t,n,r,o){return this._invokeZS?this._invokeZS.onInvoke(this._invokeDlgt,this._invokeCurrZone,e,t,n,r,o):t.apply(n,r)},e.prototype.handleError=function(e,t){return!this._handleErrorZS||this._handleErrorZS.onHandleError(this._handleErrorDlgt,this._handleErrorCurrZone,e,t)},e.prototype.scheduleTask=function(e,t){var n=t;if(this._scheduleTaskZS)this._hasTaskZS&&n._zoneDelegates.push(this._hasTaskDlgtOwner),(n=this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt,this._scheduleTaskCurrZone,e,t))||(n=t);else if(t.scheduleFn)t.scheduleFn(t);else{if(t.type!=w)throw new Error("Task is missing scheduleFn.");v(t)}return n},e.prototype.invokeTask=function(e,t,n,r){return this._invokeTaskZS?this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt,this._invokeTaskCurrZone,e,t,n,r):t.callback.apply(n,r)},e.prototype.cancelTask=function(e,t){var n;if(this._cancelTaskZS)n=this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt,this._cancelTaskCurrZone,e,t);else{if(!t.cancelFn)throw Error("Task is not cancelable");n=t.cancelFn(t)}return n},e.prototype.hasTask=function(e,t){try{return this._hasTaskZS&&this._hasTaskZS.onHasTask(this._hasTaskDlgt,this._hasTaskCurrZone,e,t)}catch(t){this.handleError(e,t)}},e.prototype._updateTaskCount=function(e,t){var n=this._taskCounts,r=n[e],o=n[e]=r+t;if(o<0)throw new Error("More tasks executed then were scheduled.");0!=r&&0!=o||this.hasTask(this.zone,{microTask:n.microTask>0,macroTask:n.macroTask>0,eventTask:n.eventTask>0,change:e})},e}(),u=function(){function t(n,r,o,i,a,c){this._zone=null,this.runCount=0,this._zoneDelegates=null,this._state="notScheduled",this.type=n,this.source=r,this.data=i,this.scheduleFn=a,this.cancelFn=c,this.callback=o;var u=this;this.invoke=n===x&&i&&i.useG?t.invokeTask:function(){return t.invokeTask.call(e,u,this,arguments)}}return t.invokeTask=function(e,t,n){e||(e=this),P++;try{return e.runCount++,e.zone.runTask(e,t,n)}finally{1==P&&d(),P--}},Object.defineProperty(t.prototype,"zone",{get:function(){return this._zone},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"state",{get:function(){return this._state},enumerable:!0,configurable:!0}),t.prototype.cancelScheduleRequest=function(){this._transitionTo(y,_)},t.prototype._transitionTo=function(e,t,n){if(this._state!==t&&this._state!==n)throw new Error(this.type+" '"+this.source+"': can not transition to '"+e+"', expecting state '"+t+"'"+(n?" or '"+n+"'":"")+", was '"+this._state+"'.");this._state=e,e==y&&(this._zoneDelegates=null)},t.prototype.toString=function(){return this.data&&void 0!==this.data.handleId?this.data.handleId:Object.prototype.toString.call(this)},t.prototype.toJSON=function(){return{type:this.type,state:this.state,source:this.source,zone:this.zone.name,runCount:this.runCount}},t}(),s=z("setTimeout"),l=z("Promise"),f=z("then"),p=[],h=!1;function v(t){0===P&&0===p.length&&(o||e[l]&&(o=e[l].resolve(0)),o?o[f](d):e[s](d,0)),t&&p.push(t)}function d(){if(!h){for(h=!0;p.length;){var e=p;p=[];for(var t=0;t<e.length;t++){var n=e[t];try{n.zone.runTask(n,null,null)}catch(e){S.onUnhandledError(e)}}}S.microtaskDrainDone(),h=!1}}var g={name:"NO ZONE"},y="notScheduled",_="scheduling",m="scheduled",k="running",b="canceling",T="unknown",w="microTask",E="macroTask",x="eventTask",O={},S={symbol:z,currentZoneFrame:function(){return D},onUnhandledError:Z,microtaskDrainDone:Z,scheduleMicroTask:v,showUncaughtError:function(){return!i[z("ignoreConsoleErrorUncaughtError")]},patchEventTarget:function(){return[]},patchOnProperties:Z,patchMethod:function(){return Z},bindArguments:function(){return null},setNativePromise:function(e){e&&"function"==typeof e.resolve&&(o=e.resolve(0))}},D={parent:null,zone:new i(null,null)},j=null,P=0;function Z(){}function z(e){return"__zone_symbol__"+e}r("Zone","Zone"),e.Zone=i}("undefined"!=typeof window&&window||"undefined"!=typeof self&&self||global),Zone.__load_patch("ZoneAwarePromise",function(e,t,n){var r=Object.getOwnPropertyDescriptor,o=Object.defineProperty,i=n.symbol,a=[],c=i("Promise"),u=i("then"),s="__creationTrace__";n.onUnhandledError=function(e){if(n.showUncaughtError()){var t=e&&e.rejection;t?console.error("Unhandled Promise rejection:",t instanceof Error?t.message:t,"; Zone:",e.zone.name,"; Task:",e.task&&e.task.source,"; Value:",t,t instanceof Error?t.stack:void 0):console.error(e)}},n.microtaskDrainDone=function(){for(;a.length;)for(var e=function(){var e=a.shift();try{e.zone.runGuarded(function(){throw e})}catch(e){f(e)}};a.length;)e()};var l=i("unhandledPromiseRejectionHandler");function f(e){n.onUnhandledError(e);try{var r=t[l];r&&"function"==typeof r&&r.call(this,e)}catch(e){}}function p(e){return e&&e.then}function h(e){return e}function v(e){return M.reject(e)}var d=i("state"),g=i("value"),y=i("finally"),_=i("parentPromiseValue"),m=i("parentPromiseState"),k="Promise.then",b=null,T=!0,w=!1,E=0;function x(e,t){return function(n){try{j(e,t,n)}catch(t){j(e,!1,t)}}}var O=function(){var e=!1;return function(t){return function(){e||(e=!0,t.apply(null,arguments))}}},S="Promise resolved with itself",D=i("currentTaskTrace");function j(e,r,i){var c,u=O();if(e===i)throw new TypeError(S);if(e[d]===b){var l=null;try{"object"!=typeof i&&"function"!=typeof i||(l=i&&i.then)}catch(t){return u(function(){j(e,!1,t)})(),e}if(r!==w&&i instanceof M&&i.hasOwnProperty(d)&&i.hasOwnProperty(g)&&i[d]!==b)Z(i),j(e,i[d],i[g]);else if(r!==w&&"function"==typeof l)try{l.call(i,u(x(e,r)),u(x(e,!1)))}catch(t){u(function(){j(e,!1,t)})()}else{e[d]=r;var f=e[g];if(e[g]=i,e[y]===y&&r===T&&(e[d]=e[m],e[g]=e[_]),r===w&&i instanceof Error){var p=t.currentTask&&t.currentTask.data&&t.currentTask.data[s];p&&o(i,D,{configurable:!0,enumerable:!1,writable:!0,value:p})}for(var h=0;h<f.length;)z(e,f[h++],f[h++],f[h++],f[h++]);if(0==f.length&&r==w){e[d]=E;try{throw new Error("Uncaught (in promise): "+((c=i)&&c.toString===Object.prototype.toString?(c.constructor&&c.constructor.name||"")+": "+JSON.stringify(c):c?c.toString():Object.prototype.toString.call(c))+(i&&i.stack?"\n"+i.stack:""))}catch(r){var v=r;v.rejection=i,v.promise=e,v.zone=t.current,v.task=t.currentTask,a.push(v),n.scheduleMicroTask()}}}}return e}var P=i("rejectionHandledHandler");function Z(e){if(e[d]===E){try{var n=t[P];n&&"function"==typeof n&&n.call(this,{rejection:e[g],promise:e})}catch(e){}e[d]=w;for(var r=0;r<a.length;r++)e===a[r].promise&&a.splice(r,1)}}function z(e,t,n,r,o){Z(e);var i=e[d],a=i?"function"==typeof r?r:h:"function"==typeof o?o:v;t.scheduleMicroTask(k,function(){try{var r=e[g],o=n&&y===n[y];o&&(n[_]=r,n[m]=i);var c=t.run(a,void 0,o&&a!==v&&a!==h?[]:[r]);j(n,!0,c)}catch(e){j(n,!1,e)}},n)}var M=function(){function e(t){if(!(this instanceof e))throw new Error("Must be an instanceof Promise.");this[d]=b,this[g]=[];try{t&&t(x(this,T),x(this,w))}catch(e){j(this,!1,e)}}return e.toString=function(){return"function ZoneAwarePromise() { [native code] }"},e.resolve=function(e){return j(new this(null),T,e)},e.reject=function(e){return j(new this(null),w,e)},e.race=function(e){var t,n,r=new this(function(e,r){t=e,n=r});function o(e){r&&(r=t(e))}function i(e){r&&(r=n(e))}for(var a=0,c=e;a<c.length;a++){var u=c[a];p(u)||(u=this.resolve(u)),u.then(o,i)}return r},e.all=function(e){for(var t,n,r=new this(function(e,r){t=e,n=r}),o=0,i=[],a=0,c=e;a<c.length;a++){var u=c[a];p(u)||(u=this.resolve(u)),u.then(function(e){return function(n){i[e]=n,--o||t(i)}}(o),n),o++}return o||t(i),r},e.prototype.then=function(e,n){var r=new this.constructor(null),o=t.current;return this[d]==b?this[g].push(o,r,e,n):z(this,o,r,e,n),r},e.prototype.catch=function(e){return this.then(null,e)},e.prototype.finally=function(e){var n=new this.constructor(null);n[y]=y;var r=t.current;return this[d]==b?this[g].push(r,n,e,e):z(this,r,n,e,e),n},e}();M.resolve=M.resolve,M.reject=M.reject,M.race=M.race,M.all=M.all;var C=e[c]=e.Promise,R=t.__symbol__("ZoneAwarePromise"),I=r(e,"Promise");I&&!I.configurable||(I&&delete I.writable,I&&delete I.value,I||(I={configurable:!0,enumerable:!0}),I.get=function(){return e[R]?e[R]:e[c]},I.set=function(t){t===M?e[R]=t:(e[c]=t,t.prototype[u]||q(t),n.setNativePromise(t))},o(e,"Promise",I)),e.Promise=M;var F,L=i("thenPatched");function q(e){var t=e.prototype,n=r(t,"then");if(!n||!1!==n.writable&&n.configurable){var o=t.then;t[u]=o,e.prototype.then=function(e,t){var n=this;return new M(function(e,t){o.call(n,e,t)}).then(e,t)},e[L]=!0}}if(C){q(C);var A=e.fetch;"function"==typeof A&&(e.fetch=(F=A,function(){var e=F.apply(this,arguments);if(e instanceof M)return e;var t=e.constructor;return t[L]||q(t),e}))}return Promise[t.__symbol__("uncaughtPromiseErrors")]=a,M});var e=Object.getOwnPropertyDescriptor,t=Object.defineProperty,n=Object.getPrototypeOf,r=Object.create,o=Array.prototype.slice,i="addEventListener",a="removeEventListener",c=Zone.__symbol__(i),u=Zone.__symbol__(a),s="true",l="false",f="__zone_symbol__";function p(e,t){return Zone.current.wrap(e,t)}function h(e,t,n,r,o){return Zone.current.scheduleMacroTask(e,t,n,r,o)}var v=Zone.__symbol__,d="undefined"!=typeof window,g=d?window:void 0,y=d&&g||"object"==typeof self&&self||global,_="removeAttribute",m=[null];function k(e,t){for(var n=e.length-1;n>=0;n--)"function"==typeof e[n]&&(e[n]=p(e[n],t+"_"+n));return e}function b(e){return!e||!1!==e.writable&&!("function"==typeof e.get&&void 0===e.set)}var T="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,w=!("nw"in y)&&void 0!==y.process&&"[object process]"==={}.toString.call(y.process),E=!w&&!T&&!(!d||!g.HTMLElement),x=void 0!==y.process&&"[object process]"==={}.toString.call(y.process)&&!T&&!(!d||!g.HTMLElement),O={},S=function(e){if(e=e||y.event){var t=O[e.type];t||(t=O[e.type]=v("ON_PROPERTY"+e.type));var n=(this||e.target||y)[t],r=n&&n.apply(this,arguments);return void 0==r||r||e.preventDefault(),r}};function D(n,r,o){var i=e(n,r);if(!i&&o&&e(o,r)&&(i={enumerable:!0,configurable:!0}),i&&i.configurable){delete i.writable,delete i.value;var a=i.get,c=i.set,u=r.substr(2),s=O[u];s||(s=O[u]=v("ON_PROPERTY"+u)),i.set=function(e){var t=this;t||n!==y||(t=y),t&&(t[s]&&t.removeEventListener(u,S),c&&c.apply(t,m),"function"==typeof e?(t[s]=e,t.addEventListener(u,S,!1)):t[s]=null)},i.get=function(){var e=this;if(e||n!==y||(e=y),!e)return null;var t=e[s];if(t)return t;if(a){var o=a&&a.call(this);if(o)return i.set.call(this,o),"function"==typeof e[_]&&e.removeAttribute(r),o}return null},t(n,r,i)}}function j(e,t,n){if(t)for(var r=0;r<t.length;r++)D(e,"on"+t[r],n);else{var o=[];for(var i in e)"on"==i.substr(0,2)&&o.push(i);for(var a=0;a<o.length;a++)D(e,o[a],n)}}var P=v("originalInstance");function Z(e){var n=y[e];if(n){y[v(e)]=n,y[e]=function(){var t=k(arguments,e);switch(t.length){case 0:this[P]=new n;break;case 1:this[P]=new n(t[0]);break;case 2:this[P]=new n(t[0],t[1]);break;case 3:this[P]=new n(t[0],t[1],t[2]);break;case 4:this[P]=new n(t[0],t[1],t[2],t[3]);break;default:throw new Error("Arg list too long.")}},M(y[e],n);var r,o=new n(function(){});for(r in o)"XMLHttpRequest"===e&&"responseBlob"===r||function(n){"function"==typeof o[n]?y[e].prototype[n]=function(){return this[P][n].apply(this[P],arguments)}:t(y[e].prototype,n,{set:function(t){"function"==typeof t?(this[P][n]=p(t,e+"."+n),M(this[P][n],t)):this[P][n]=t},get:function(){return this[P][n]}})}(r);for(r in n)"prototype"!==r&&n.hasOwnProperty(r)&&(y[e][r]=n[r])}}function z(t,r,o){for(var i=t;i&&!i.hasOwnProperty(r);)i=n(i);!i&&t[r]&&(i=t);var a,c=v(r);if(i&&!(a=i[c])&&(a=i[c]=i[r],b(i&&e(i,r)))){var u=o(a,c,r);i[r]=function(){return u(this,arguments)},M(i[r],a)}return a}function M(e,t){e[v("OriginalDelegate")]=t}var C=!1,R=!1;function I(){if(C)return R;C=!0;try{var e=g.navigator.userAgent;return-1===e.indexOf("MSIE ")&&-1===e.indexOf("Trident/")&&-1===e.indexOf("Edge/")||(R=!0),R}catch(e){}}Zone.__load_patch("toString",function(e){var t=Function.prototype.toString,n=v("OriginalDelegate"),r=v("Promise"),o=v("Error"),i=function(){if("function"==typeof this){var i=this[n];if(i)return"function"==typeof i?t.apply(this[n],arguments):Object.prototype.toString.call(i);if(this===Promise){var a=e[r];if(a)return t.apply(a,arguments)}if(this===Error){var c=e[o];if(c)return t.apply(c,arguments)}}return t.apply(this,arguments)};i[n]=t,Function.prototype.toString=i;var a=Object.prototype.toString;Object.prototype.toString=function(){return this instanceof Promise?"[object Promise]":a.apply(this,arguments)}});var F={useG:!0},L={},q={},A=/^__zone_symbol__(\w+)(true|false)$/,H="__zone_symbol__propagationStopped";function N(e,t,r){var o=r&&r.add||i,c=r&&r.rm||a,u=r&&r.listeners||"eventListeners",p=r&&r.rmAll||"removeAllListeners",h=v(o),d="."+o+":",g="prependListener",y="."+g+":",_=function(e,t,n){if(!e.isRemoved){var r=e.callback;"object"==typeof r&&r.handleEvent&&(e.callback=function(e){return r.handleEvent(e)},e.originalDelegate=r),e.invoke(e,t,[n]);var o=e.options;o&&"object"==typeof o&&o.once&&t[c].call(t,n.type,e.originalDelegate?e.originalDelegate:e.callback,o)}},m=function(t){if(t=t||e.event){var n=this||t.target||e,r=n[L[t.type][l]];if(r)if(1===r.length)_(r[0],n,t);else for(var o=r.slice(),i=0;i<o.length&&(!t||!0!==t[H]);i++)_(o[i],n,t)}},k=function(t){if(t=t||e.event){var n=this||t.target||e,r=n[L[t.type][s]];if(r)if(1===r.length)_(r[0],n,t);else for(var o=r.slice(),i=0;i<o.length&&(!t||!0!==t[H]);i++)_(o[i],n,t)}};function b(t,r){if(!t)return!1;var i=!0;r&&void 0!==r.useG&&(i=r.useG);var a=r&&r.vh,_=!0;r&&void 0!==r.chkDup&&(_=r.chkDup);var b=!1;r&&void 0!==r.rt&&(b=r.rt);for(var T=t;T&&!T.hasOwnProperty(o);)T=n(T);if(!T&&t[o]&&(T=t),!T)return!1;if(T[h])return!1;var w,E={},x=T[h]=T[o],O=T[v(c)]=T[c],S=T[v(u)]=T[u],D=T[v(p)]=T[p];r&&r.prepend&&(w=T[v(r.prepend)]=T[r.prepend]);var j=i?function(){if(!E.isExisting)return x.call(E.target,E.eventName,E.capture?k:m,E.options)}:function(e){return x.call(E.target,E.eventName,e.invoke,E.options)},P=i?function(e){if(!e.isRemoved){var t=L[e.eventName],n=void 0;t&&(n=t[e.capture?s:l]);var r=n&&e.target[n];if(r)for(var o=0;o<r.length;o++)if(r[o]===e){r.splice(o,1),e.isRemoved=!0,0===r.length&&(e.allRemoved=!0,e.target[n]=null);break}}if(e.allRemoved)return O.call(e.target,e.eventName,e.capture?k:m,e.options)}:function(e){return O.call(e.target,e.eventName,e.invoke,e.options)},Z=r&&r.diff?r.diff:function(e,t){var n=typeof t;return"function"===n&&e.callback===t||"object"===n&&e.originalDelegate===t},z=Zone[Zone.__symbol__("BLACK_LISTED_EVENTS")],C=function(t,n,r,o,c,u){return void 0===c&&(c=!1),void 0===u&&(u=!1),function(){var p=this||e,h=arguments[1];if(!h)return t.apply(this,arguments);var v=!1;if("function"!=typeof h){if(!h.handleEvent)return t.apply(this,arguments);v=!0}if(!a||a(t,h,p,arguments)){var d,g=arguments[0],y=arguments[2];if(z)for(var m=0;m<z.length;m++)if(g===z[m])return t.apply(this,arguments);var k=!1;void 0===y?d=!1:!0===y?d=!0:!1===y?d=!1:(d=!!y&&!!y.capture,k=!!y&&!!y.once);var b,T=Zone.current,w=L[g];if(w)b=w[d?s:l];else{var x=f+(g+l),O=f+(g+s);L[g]={},L[g][l]=x,L[g][s]=O,b=d?O:x}var S,D=p[b],j=!1;if(D){if(j=!0,_)for(m=0;m<D.length;m++)if(Z(D[m],h))return}else D=p[b]=[];var P=p.constructor.name,M=q[P];M&&(S=M[g]),S||(S=P+n+g),E.options=y,k&&(E.options.once=!1),E.target=p,E.capture=d,E.eventName=g,E.isExisting=j;var C=i?F:null;C&&(C.taskData=E);var R=T.scheduleEventTask(S,h,C,r,o);return E.target=null,C&&(C.taskData=null),k&&(y.once=!0),R.options=y,R.target=p,R.capture=d,R.eventName=g,v&&(R.originalDelegate=h),u?D.unshift(R):D.push(R),c?p:void 0}}};return T[o]=C(x,d,j,P,b),w&&(T[g]=C(w,y,function(e){return w.call(E.target,E.eventName,e.invoke,E.options)},P,b,!0)),T[c]=function(){var t,n=this||e,r=arguments[0],o=arguments[2];t=void 0!==o&&(!0===o||!1!==o&&!!o&&!!o.capture);var i=arguments[1];if(!i)return O.apply(this,arguments);if(!a||a(O,i,n,arguments)){var c,u=L[r];u&&(c=u[t?s:l]);var f=c&&n[c];if(f)for(var p=0;p<f.length;p++){var h=f[p];if(Z(h,i))return f.splice(p,1),h.isRemoved=!0,0===f.length&&(h.allRemoved=!0,n[c]=null),h.zone.cancelTask(h),b?n:void 0}return O.apply(this,arguments)}},T[u]=function(){for(var t=[],n=W(this||e,arguments[0]),r=0;r<n.length;r++){var o=n[r];t.push(o.originalDelegate?o.originalDelegate:o.callback)}return t},T[p]=function(){var t=this||e,n=arguments[0];if(n){var r=L[n];if(r){var o=t[r[l]],i=t[r[s]];if(o){var a=o.slice();for(h=0;h<a.length;h++)this[c].call(this,n,(u=a[h]).originalDelegate?u.originalDelegate:u.callback,u.options)}if(i)for(a=i.slice(),h=0;h<a.length;h++){var u;this[c].call(this,n,(u=a[h]).originalDelegate?u.originalDelegate:u.callback,u.options)}}}else{for(var f=Object.keys(t),h=0;h<f.length;h++){var v=A.exec(f[h]),d=v&&v[1];d&&"removeListener"!==d&&this[p].call(this,d)}this[p].call(this,"removeListener")}if(b)return this},M(T[o],x),M(T[c],O),D&&M(T[p],D),S&&M(T[u],S),!0}for(var T=[],w=0;w<t.length;w++)T[w]=b(t[w],r);return T}function W(e,t){var n=[];for(var r in e){var o=A.exec(r),i=o&&o[1];if(i&&(!t||i===t)){var a=e[r];if(a)for(var c=0;c<a.length;c++)n.push(a[c])}}return n}var X=v("zoneTask");function K(e,t,n,r){var o=null,i=null;n+=r;var a={};function c(t){var n=t.data;return n.args[0]=function(){try{t.invoke.apply(this,arguments)}finally{t.data&&t.data.isPeriodic||("number"==typeof n.handleId?delete a[n.handleId]:n.handleId&&(n.handleId[X]=null))}},n.handleId=o.apply(e,n.args),t}function u(e){return i(e.data.handleId)}o=z(e,t+=r,function(n){return function(o,i){if("function"==typeof i[0]){var s=h(t,i[0],{handleId:null,isPeriodic:"Interval"===r,delay:"Timeout"===r||"Interval"===r?i[1]||0:null,args:i},c,u);if(!s)return s;var l=s.data.handleId;return"number"==typeof l?a[l]=s:l&&(l[X]=s),l&&l.ref&&l.unref&&"function"==typeof l.ref&&"function"==typeof l.unref&&(s.ref=l.ref.bind(l),s.unref=l.unref.bind(l)),"number"==typeof l||l?l:s}return n.apply(e,i)}}),i=z(e,n,function(t){return function(n,r){var o,i=r[0];"number"==typeof i?o=a[i]:(o=i&&i[X])||(o=i),o&&"string"==typeof o.type?"notScheduled"!==o.state&&(o.cancelFn&&o.data.isPeriodic||0===o.runCount)&&("number"==typeof i?delete a[i]:i&&(i[X]=null),o.zone.cancelTask(o)):t.apply(e,r)}})}var U=Object[v("defineProperty")]=Object.defineProperty,B=Object[v("getOwnPropertyDescriptor")]=Object.getOwnPropertyDescriptor,Y=Object.create,J=v("unconfigurables");function V(e,t){return e&&e[J]&&e[J][t]}function G(e,t,n){return Object.isFrozen(n)||(n.configurable=!0),n.configurable||(e[J]||Object.isFrozen(e)||U(e,J,{writable:!0,value:{}}),e[J]&&(e[J][t]=!0)),n}function Q(e,t,n,r){try{return U(e,t,n)}catch(i){if(!n.configurable)throw i;void 0===r?delete n.configurable:n.configurable=r;try{return U(e,t,n)}catch(r){var o=null;try{o=JSON.stringify(n)}catch(e){o=n.toString()}console.log("Attempting to configure '"+t+"' with descriptor '"+o+"' on object '"+e+"' and got error, giving up: "+r)}}}var $=["absolutedeviceorientation","afterinput","afterprint","appinstalled","beforeinstallprompt","beforeprint","beforeunload","devicelight","devicemotion","deviceorientation","deviceorientationabsolute","deviceproximity","hashchange","languagechange","message","mozbeforepaint","offline","online","paint","pageshow","pagehide","popstate","rejectionhandled","storage","unhandledrejection","unload","userproximity","vrdisplyconnected","vrdisplaydisconnected","vrdisplaypresentchange"],ee=["encrypted","waitingforkey","msneedkey","mozinterruptbegin","mozinterruptend"],te=["load"],ne=["blur","error","focus","load","resize","scroll","messageerror"],re=["bounce","finish","start"],oe=["loadstart","progress","abort","error","load","progress","timeout","loadend","readystatechange"],ie=["upgradeneeded","complete","abort","success","error","blocked","versionchange","close"],ae=["close","error","open","message"],ce=["error","message"],ue=["abort","animationcancel","animationend","animationiteration","auxclick","beforeinput","blur","cancel","canplay","canplaythrough","change","compositionstart","compositionupdate","compositionend","cuechange","click","close","contextmenu","curechange","dblclick","drag","dragend","dragenter","dragexit","dragleave","dragover","drop","durationchange","emptied","ended","error","focus","focusin","focusout","gotpointercapture","input","invalid","keydown","keypress","keyup","load","loadstart","loadeddata","loadedmetadata","lostpointercapture","mousedown","mouseenter","mouseleave","mousemove","mouseout","mouseover","mouseup","mousewheel","orientationchange","pause","play","playing","pointercancel","pointerdown","pointerenter","pointerleave","pointerlockchange","mozpointerlockchange","webkitpointerlockerchange","pointerlockerror","mozpointerlockerror","webkitpointerlockerror","pointermove","pointout","pointerover","pointerup","progress","ratechange","reset","resize","scroll","seeked","seeking","select","selectionchange","selectstart","show","sort","stalled","submit","suspend","timeupdate","volumechange","touchcancel","touchmove","touchstart","touchend","transitioncancel","transitionend","waiting","wheel"].concat(["webglcontextrestored","webglcontextlost","webglcontextcreationerror"],["autocomplete","autocompleteerror"],["toggle"],["afterscriptexecute","beforescriptexecute","DOMContentLoaded","fullscreenchange","mozfullscreenchange","webkitfullscreenchange","msfullscreenchange","fullscreenerror","mozfullscreenerror","webkitfullscreenerror","msfullscreenerror","readystatechange","visibilitychange"],$,["beforecopy","beforecut","beforepaste","copy","cut","paste","dragstart","loadend","animationstart","search","transitionrun","transitionstart","webkitanimationend","webkitanimationiteration","webkitanimationstart","webkittransitionend"],["activate","afterupdate","ariarequest","beforeactivate","beforedeactivate","beforeeditfocus","beforeupdate","cellchange","controlselect","dataavailable","datasetchanged","datasetcomplete","errorupdate","filterchange","layoutcomplete","losecapture","move","moveend","movestart","propertychange","resizeend","resizestart","rowenter","rowexit","rowsdelete","rowsinserted","command","compassneedscalibration","deactivate","help","mscontentzoom","msmanipulationstatechanged","msgesturechange","msgesturedoubletap","msgestureend","msgesturehold","msgesturestart","msgesturetap","msgotpointercapture","msinertiastart","mslostpointercapture","mspointercancel","mspointerdown","mspointerenter","mspointerhover","mspointerleave","mspointermove","mspointerout","mspointerover","mspointerup","pointerout","mssitemodejumplistitemremoved","msthumbnailclick","stop","storagecommit"]);function se(e,t,n,r){e&&j(e,function(e,t,n){if(!n)return t;var r=n.filter(function(t){return t.target===e});if(!r||0===r.length)return t;var o=r[0].ignoreProperties;return t.filter(function(e){return-1===o.indexOf(e)})}(e,t,n),r)}function le(c,u){if(!w||x){var s="undefined"!=typeof WebSocket;if(function(){if((E||x)&&!e(HTMLElement.prototype,"onclick")&&"undefined"!=typeof Element){var n=e(Element.prototype,"onclick");if(n&&!n.configurable)return!1}var r=XMLHttpRequest.prototype,o=e(r,"onreadystatechange");if(o){t(r,"onreadystatechange",{enumerable:!0,configurable:!0,get:function(){return!0}});var i=!!(c=new XMLHttpRequest).onreadystatechange;return t(r,"onreadystatechange",o||{}),i}var a=v("fake");t(r,"onreadystatechange",{enumerable:!0,configurable:!0,get:function(){return this[a]},set:function(e){this[a]=e}});var c,u=function(){};return(c=new XMLHttpRequest).onreadystatechange=u,i=c[a]===u,c.onreadystatechange=null,i}()){var l=u.__Zone_ignore_on_properties;if(E){var f=window;se(f,ue.concat(["messageerror"]),l,n(f)),se(Document.prototype,ue,l),void 0!==f.SVGElement&&se(f.SVGElement.prototype,ue,l),se(Element.prototype,ue,l),se(HTMLElement.prototype,ue,l),se(HTMLMediaElement.prototype,ee,l),se(HTMLFrameSetElement.prototype,$.concat(ne),l),se(HTMLBodyElement.prototype,$.concat(ne),l),se(HTMLFrameElement.prototype,te,l),se(HTMLIFrameElement.prototype,te,l);var h=f.HTMLMarqueeElement;h&&se(h.prototype,re,l);var d=f.Worker;d&&se(d.prototype,ce,l)}se(XMLHttpRequest.prototype,oe,l);var g=u.XMLHttpRequestEventTarget;g&&se(g&&g.prototype,oe,l),"undefined"!=typeof IDBIndex&&(se(IDBIndex.prototype,ie,l),se(IDBRequest.prototype,ie,l),se(IDBOpenDBRequest.prototype,ie,l),se(IDBDatabase.prototype,ie,l),se(IDBTransaction.prototype,ie,l),se(IDBCursor.prototype,ie,l)),s&&se(WebSocket.prototype,ae,l)}else!function(){for(var e=function(e){var t=ue[e],n="on"+t;self.addEventListener(t,function(e){var t,r,o=e.target;for(r=o?o.constructor.name+"."+n:"unknown."+n;o;)o[n]&&!o[n][fe]&&((t=p(o[n],r))[fe]=o[n],o[n]=t),o=o.parentElement},!0)},t=0;t<ue.length;t++)e(t)}(),Z("XMLHttpRequest"),s&&function(t,n){var c=n.WebSocket;n.EventTarget||N(n,[c.prototype]),n.WebSocket=function(t,n){var u,s,l=arguments.length>1?new c(t,n):new c(t),f=e(l,"onmessage");return f&&!1===f.configurable?(u=r(l),s=l,[i,a,"send","close"].forEach(function(e){u[e]=function(){var t=o.call(arguments);if(e===i||e===a){var n=t.length>0?t[0]:void 0;if(n){var r=Zone.__symbol__("ON_PROPERTY"+n);l[r]=u[r]}}return l[e].apply(l,t)}})):u=l,j(u,["close","error","message","open"],s),u};var u=n.WebSocket;for(var s in c)u[s]=c[s]}(0,u)}}var fe=v("unbound");Zone.__load_patch("util",function(e,t,n){n.patchOnProperties=j,n.patchMethod=z,n.bindArguments=k}),Zone.__load_patch("timers",function(e){K(e,"set","clear","Timeout"),K(e,"set","clear","Interval"),K(e,"set","clear","Immediate")}),Zone.__load_patch("requestAnimationFrame",function(e){K(e,"request","cancel","AnimationFrame"),K(e,"mozRequest","mozCancel","AnimationFrame"),K(e,"webkitRequest","webkitCancel","AnimationFrame")}),Zone.__load_patch("blocking",function(e,t){for(var n=["alert","prompt","confirm"],r=0;r<n.length;r++)z(e,n[r],function(n,r,o){return function(r,i){return t.current.run(n,e,i,o)}})}),Zone.__load_patch("EventTarget",function(e,t,n){var r=t.__symbol__("BLACK_LISTED_EVENTS");e[r]&&(t[r]=e[r]),function(e,t){!function(e,t){var n=e.Event;n&&n.prototype&&t.patchMethod(n.prototype,"stopImmediatePropagation",function(e){return function(t,n){t[H]=!0,e&&e.apply(t,n)}})}(e,t)}(e,n),function(e,t){var n="Anchor,Area,Audio,BR,Base,BaseFont,Body,Button,Canvas,Content,DList,Directory,Div,Embed,FieldSet,Font,Form,Frame,FrameSet,HR,Head,Heading,Html,IFrame,Image,Input,Keygen,LI,Label,Legend,Link,Map,Marquee,Media,Menu,Meta,Meter,Mod,OList,Object,OptGroup,Option,Output,Paragraph,Pre,Progress,Quote,Script,Select,Source,Span,Style,TableCaption,TableCell,TableCol,Table,TableRow,TableSection,TextArea,Title,Track,UList,Unknown,Video",r="ApplicationCache,EventSource,FileReader,InputMethodContext,MediaController,MessagePort,Node,Performance,SVGElementInstance,SharedWorker,TextTrack,TextTrackCue,TextTrackList,WebKitNamedFlow,Window,Worker,WorkerGlobalScope,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload,IDBRequest,IDBOpenDBRequest,IDBDatabase,IDBTransaction,IDBCursor,DBIndex,WebSocket".split(","),o=[],i=e.wtf,a=n.split(",");i?o=a.map(function(e){return"HTML"+e+"Element"}).concat(r):e.EventTarget?o.push("EventTarget"):o=r;for(var c=e.__Zone_disable_IE_check||!1,u=e.__Zone_enable_cross_context_check||!1,p=I(),h="function __BROWSERTOOLS_CONSOLE_SAFEFUNC() { [native code] }",v=0;v<ue.length;v++){var d=f+((k=ue[v])+l),g=f+(k+s);L[k]={},L[k][l]=d,L[k][s]=g}for(v=0;v<n.length;v++)for(var y=a[v],_=q[y]={},m=0;m<ue.length;m++){var k;_[k=ue[m]]=y+".addEventListener:"+k}var b=[];for(v=0;v<o.length;v++){var T=e[o[v]];b.push(T&&T.prototype)}N(e,b,{vh:function(e,t,n,r){if(!c&&p){if(u)try{var o;if("[object FunctionWrapper]"===(o=t.toString())||o==h)return e.apply(n,r),!1}catch(t){return e.apply(n,r),!1}else if("[object FunctionWrapper]"===(o=t.toString())||o==h)return e.apply(n,r),!1}else if(u)try{t.toString()}catch(t){return e.apply(n,r),!1}return!0}}),t.patchEventTarget=N}(e,n);var o=e.XMLHttpRequestEventTarget;o&&o.prototype&&n.patchEventTarget(e,[o.prototype]),Z("MutationObserver"),Z("WebKitMutationObserver"),Z("IntersectionObserver"),Z("FileReader")}),Zone.__load_patch("on_property",function(t,n,r){le(0,t),Object.defineProperty=function(e,t,n){if(V(e,t))throw new TypeError("Cannot assign to read only property '"+t+"' of "+e);var r=n.configurable;return"prototype"!==t&&(n=G(e,t,n)),Q(e,t,n,r)},Object.defineProperties=function(e,t){return Object.keys(t).forEach(function(n){Object.defineProperty(e,n,t[n])}),e},Object.create=function(e,t){return"object"!=typeof t||Object.isFrozen(t)||Object.keys(t).forEach(function(n){t[n]=G(e,n,t[n])}),Y(e,t)},Object.getOwnPropertyDescriptor=function(e,t){var n=B(e,t);return V(e,t)&&(n.configurable=!1),n},function(n){if((E||x)&&"registerElement"in t.document){var r=document.registerElement,o=["createdCallback","attachedCallback","detachedCallback","attributeChangedCallback"];document.registerElement=function(t,n){return n&&n.prototype&&o.forEach(function(t){var r,o,i,a,c="Document.registerElement::"+t,u=n.prototype;if(u.hasOwnProperty(t)){var s=e(u,t);s&&s.value?(s.value=p(s.value,c),a=(i=s).configurable,Q(r=n.prototype,o=t,i=G(r,o,i),a)):u[t]=p(u[t],c)}else u[t]&&(u[t]=p(u[t],c))}),r.call(document,t,n)},M(document.registerElement,r)}}()}),Zone.__load_patch("canvas",function(e){var t=e.HTMLCanvasElement;void 0!==t&&t.prototype&&t.prototype.toBlob&&function(e,n,r){var o=null;function i(e){var t=e.data;return t.args[t.cbIdx]=function(){e.invoke.apply(this,arguments)},o.apply(t.target,t.args),e}o=z(t.prototype,"toBlob",function(e){return function(t,n){var r=function(e,t){return{name:"HTMLCanvasElement.toBlob",target:e,cbIdx:0,args:t}}(t,n);return r.cbIdx>=0&&"function"==typeof n[r.cbIdx]?h(r.name,n[r.cbIdx],r,i,null):e.apply(t,n)}})}()}),Zone.__load_patch("XHR",function(e,t){!function(t){var s=XMLHttpRequest.prototype,l=s[c],f=s[u];if(!l){var p=e.XMLHttpRequestEventTarget;if(p){var v=p.prototype;l=v[c],f=v[u]}}var d="readystatechange",g="scheduled";function y(e){XMLHttpRequest[i]=!1;var t=e.data,r=t.target,a=r[o];l||(l=r[c],f=r[u]),a&&f.call(r,d,a);var s=r[o]=function(){r.readyState===r.DONE&&!t.aborted&&XMLHttpRequest[i]&&e.state===g&&e.invoke()};return l.call(r,d,s),r[n]||(r[n]=e),b.apply(r,t.args),XMLHttpRequest[i]=!0,e}function _(){}function m(e){var t=e.data;return t.aborted=!0,T.apply(t.target,t.args)}var k=z(s,"open",function(){return function(e,t){return e[r]=0==t[2],e[a]=t[1],k.apply(e,t)}}),b=z(s,"send",function(){return function(e,t){return e[r]?b.apply(e,t):h("XMLHttpRequest.send",_,{target:e,url:e[a],isPeriodic:!1,delay:null,args:t,aborted:!1},y,m)}}),T=z(s,"abort",function(){return function(e){var t=e[n];if(t&&"string"==typeof t.type){if(null==t.cancelFn||t.data&&t.data.aborted)return;t.zone.cancelTask(t)}}})}();var n=v("xhrTask"),r=v("xhrSync"),o=v("xhrListener"),i=v("xhrScheduled"),a=v("xhrURL")}),Zone.__load_patch("geolocation",function(t){t.navigator&&t.navigator.geolocation&&function(t,n){for(var r=t.constructor.name,o=function(o){var i=n[o],a=t[i];if(a){if(!b(e(t,i)))return"continue";t[i]=function(e){var t=function(){return e.apply(this,k(arguments,r+"."+i))};return M(t,e),t}(a)}},i=0;i<n.length;i++)o(i)}(t.navigator.geolocation,["getCurrentPosition","watchPosition"])}),Zone.__load_patch("PromiseRejectionEvent",function(e,t){function n(t){return function(n){W(e,t).forEach(function(r){var o=e.PromiseRejectionEvent;if(o){var i=new o(t,{promise:n.promise,reason:n.rejection});r.invoke(i)}})}}e.PromiseRejectionEvent&&(t[v("unhandledPromiseRejectionHandler")]=n("unhandledrejection"),t[v("rejectionHandledHandler")]=n("rejectionhandled"))})}()},"1TsA":function(e,t){e.exports=function(e,t){return{value:t,done:!!e}}},"2OiF":function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},3:function(e,t,n){e.exports=n("hN/g")},"3Lyj":function(e,t,n){var r=n("KroJ");e.exports=function(e,t,n){for(var o in t)r(e,o,t[o],n);return e}},"45Tv":function(e,t,n){var r=n("N6cJ"),o=n("y3w9"),i=n("OP3Y"),a=r.has,c=r.get,u=r.key,s=function(e,t,n){if(a(e,t,n))return c(e,t,n);var r=i(t);return null!==r?s(e,r,n):void 0};r.exp({getMetadata:function(e,t){return s(e,o(t),arguments.length<3?void 0:u(arguments[2]))}})},"49D4":function(e,t,n){var r=n("N6cJ"),o=n("y3w9"),i=r.key,a=r.set;r.exp({defineMetadata:function(e,t,n,r){a(e,t,o(n),i(r))}})},"4LiD":function(e,t,n){"use strict";var r=n("dyZX"),o=n("XKFU"),i=n("KroJ"),a=n("3Lyj"),c=n("Z6vF"),u=n("SlkY"),s=n("9gX7"),l=n("0/R4"),f=n("eeVq"),p=n("XMVh"),h=n("fyDq"),v=n("Xbzi");e.exports=function(e,t,n,d,g,y){var _=r[e],m=_,k=g?"set":"add",b=m&&m.prototype,T={},w=function(e){var t=b[e];i(b,e,"delete"==e?function(e){return!(y&&!l(e))&&t.call(this,0===e?0:e)}:"has"==e?function(e){return!(y&&!l(e))&&t.call(this,0===e?0:e)}:"get"==e?function(e){return y&&!l(e)?void 0:t.call(this,0===e?0:e)}:"add"==e?function(e){return t.call(this,0===e?0:e),this}:function(e,n){return t.call(this,0===e?0:e,n),this})};if("function"==typeof m&&(y||b.forEach&&!f(function(){(new m).entries().next()}))){var E=new m,x=E[k](y?{}:-0,1)!=E,O=f(function(){E.has(1)}),S=p(function(e){new m(e)}),D=!y&&f(function(){for(var e=new m,t=5;t--;)e[k](t,t);return!e.has(-0)});S||((m=t(function(t,n){s(t,m,e);var r=v(new _,t,m);return void 0!=n&&u(n,g,r[k],r),r})).prototype=b,b.constructor=m),(O||D)&&(w("delete"),w("has"),g&&w("get")),(D||x)&&w(k),y&&b.clear&&delete b.clear}else m=d.getConstructor(t,e,g,k),a(m.prototype,n),c.NEED=!0;return h(m,e),T[e]=m,o(o.G+o.W+o.F*(m!=_),T),y||d.setStrong(m,e,g),m}},"4R4u":function(e,t){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},"6FMO":function(e,t,n){var r=n("0/R4"),o=n("EWmC"),i=n("K0xU")("species");e.exports=function(e){var t;return o(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!o(t.prototype)||(t=void 0),r(t)&&null===(t=t[i])&&(t=void 0)),void 0===t?Array:t}},"7Dlh":function(e,t,n){var r=n("N6cJ"),o=n("y3w9"),i=r.has,a=r.key;r.exp({hasOwnMetadata:function(e,t){return i(e,o(t),arguments.length<3?void 0:a(arguments[2]))}})},"9AAn":function(e,t,n){"use strict";var r=n("wmvG"),o=n("s5qY");e.exports=n("4LiD")("Map",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{get:function(e){var t=r.getEntry(o(this,"Map"),e);return t&&t.v},set:function(e,t){return r.def(o(this,"Map"),0===e?0:e,t)}},r,!0)},"9gX7":function(e,t){e.exports=function(e,t,n,r){if(!(e instanceof t)||void 0!==r&&r in e)throw TypeError(n+": incorrect invocation!");return e}},Afnz:function(e,t,n){"use strict";var r=n("LQAc"),o=n("XKFU"),i=n("KroJ"),a=n("Mukb"),c=n("hPIQ"),u=n("QaDb"),s=n("fyDq"),l=n("OP3Y"),f=n("K0xU")("iterator"),p=!([].keys&&"next"in[].keys()),h=function(){return this};e.exports=function(e,t,n,v,d,g,y){u(n,t,v);var _,m,k,b=function(e){if(!p&&e in x)return x[e];switch(e){case"keys":case"values":return function(){return new n(this,e)}}return function(){return new n(this,e)}},T=t+" Iterator",w="values"==d,E=!1,x=e.prototype,O=x[f]||x["@@iterator"]||d&&x[d],S=O||b(d),D=d?w?b("entries"):S:void 0,j="Array"==t&&x.entries||O;if(j&&(k=l(j.call(new e)))!==Object.prototype&&k.next&&(s(k,T,!0),r||"function"==typeof k[f]||a(k,f,h)),w&&O&&"values"!==O.name&&(E=!0,S=function(){return O.call(this)}),r&&!y||!p&&!E&&x[f]||a(x,f,S),c[t]=S,c[T]=h,d)if(_={values:w?S:b("values"),keys:g?S:b("keys"),entries:D},y)for(m in _)m in x||i(x,m,_[m]);else o(o.P+o.F*(p||E),t,_);return _}},BqfV:function(e,t,n){var r=n("N6cJ"),o=n("y3w9"),i=r.get,a=r.key;r.exp({getOwnMetadata:function(e,t){return i(e,o(t),arguments.length<3?void 0:a(arguments[2]))}})},CkkT:function(e,t,n){var r=n("m0Pp"),o=n("Ymqv"),i=n("S/j/"),a=n("ne8i"),c=n("zRwo");e.exports=function(e,t){var n=1==e,u=2==e,s=3==e,l=4==e,f=6==e,p=5==e||f,h=t||c;return function(t,c,v){for(var d,g,y=i(t),_=o(y),m=r(c,v,3),k=a(_.length),b=0,T=n?h(t,k):u?h(t,0):void 0;k>b;b++)if((p||b in _)&&(g=m(d=_[b],b,y),e))if(n)T[b]=g;else if(g)switch(e){case 3:return!0;case 5:return d;case 6:return b;case 2:T.push(d)}else if(l)return!1;return f?-1:s||l?l:T}}},DVgA:function(e,t,n){var r=n("zhAb"),o=n("4R4u");e.exports=Object.keys||function(e){return r(e,o)}},EK0E:function(e,t,n){"use strict";var r,o=n("CkkT")(0),i=n("KroJ"),a=n("Z6vF"),c=n("czNK"),u=n("ZD67"),s=n("0/R4"),l=n("eeVq"),f=n("s5qY"),p=a.getWeak,h=Object.isExtensible,v=u.ufstore,d={},g=function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},y={get:function(e){if(s(e)){var t=p(e);return!0===t?v(f(this,"WeakMap")).get(e):t?t[this._i]:void 0}},set:function(e,t){return u.def(f(this,"WeakMap"),e,t)}},_=e.exports=n("4LiD")("WeakMap",g,y,u,!0,!0);l(function(){return 7!=(new _).set((Object.freeze||Object)(d),7).get(d)})&&(c((r=u.getConstructor(g,"WeakMap")).prototype,y),a.NEED=!0,o(["delete","has","get","set"],function(e){var t=_.prototype,n=t[e];i(t,e,function(t,o){if(s(t)&&!h(t)){this._f||(this._f=new r);var i=this._f[e](t,o);return"set"==e?this:i}return n.call(this,t,o)})}))},EWmC:function(e,t,n){var r=n("LZWt");e.exports=Array.isArray||function(e){return"Array"==r(e)}},EemH:function(e,t,n){var r=n("UqcF"),o=n("RjD/"),i=n("aCFj"),a=n("apmT"),c=n("aagx"),u=n("xpql"),s=Object.getOwnPropertyDescriptor;t.f=n("nh4g")?s:function(e,t){if(e=i(e),t=a(t,!0),u)try{return s(e,t)}catch(e){}if(c(e,t))return o(!r.f.call(e,t),e[t])}},FJW5:function(e,t,n){var r=n("hswa"),o=n("y3w9"),i=n("DVgA");e.exports=n("nh4g")?Object.defineProperties:function(e,t){o(e);for(var n,a=i(t),c=a.length,u=0;c>u;)r.f(e,n=a[u++],t[n]);return e}},FZcq:function(e,t,n){n("49D4"),n("zq+C"),n("45Tv"),n("uAtd"),n("BqfV"),n("fN/3"),n("iW+S"),n("7Dlh"),n("Opxb"),e.exports=n("g3g5").Reflect},H6hf:function(e,t,n){var r=n("y3w9");e.exports=function(e,t,n,o){try{return o?t(r(n)[0],n[1]):t(n)}catch(t){var i=e.return;throw void 0!==i&&r(i.call(e)),t}}},"I8a+":function(e,t,n){var r=n("LZWt"),o=n("K0xU")("toStringTag"),i="Arguments"==r(function(){return arguments}());e.exports=function(e){var t,n,a;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),o))?n:i?r(t):"Object"==(a=r(t))&&"function"==typeof t.callee?"Arguments":a}},Iw71:function(e,t,n){var r=n("0/R4"),o=n("dyZX").document,i=r(o)&&r(o.createElement);e.exports=function(e){return i?o.createElement(e):{}}},"J+6e":function(e,t,n){var r=n("I8a+"),o=n("K0xU")("iterator"),i=n("hPIQ");e.exports=n("g3g5").getIteratorMethod=function(e){if(void 0!=e)return e[o]||e["@@iterator"]||i[r(e)]}},JiEa:function(e,t){t.f=Object.getOwnPropertySymbols},K0xU:function(e,t,n){var r=n("VTer")("wks"),o=n("ylqs"),i=n("dyZX").Symbol,a="function"==typeof i;(e.exports=function(e){return r[e]||(r[e]=a&&i[e]||(a?i:o)("Symbol."+e))}).store=r},KroJ:function(e,t,n){var r=n("dyZX"),o=n("Mukb"),i=n("aagx"),a=n("ylqs")("src"),c=Function.toString,u=(""+c).split("toString");n("g3g5").inspectSource=function(e){return c.call(e)},(e.exports=function(e,t,n,c){var s="function"==typeof n;s&&(i(n,"name")||o(n,"name",t)),e[t]!==n&&(s&&(i(n,a)||o(n,a,e[t]?""+e[t]:u.join(String(t)))),e===r?e[t]=n:c?e[t]?e[t]=n:o(e,t,n):(delete e[t],o(e,t,n)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[a]||c.call(this)})},Kuth:function(e,t,n){var r=n("y3w9"),o=n("FJW5"),i=n("4R4u"),a=n("YTvA")("IE_PROTO"),c=function(){},u=function(){var e,t=n("Iw71")("iframe"),r=i.length;for(t.style.display="none",n("+rLv").appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),u=e.F;r--;)delete u.prototype[i[r]];return u()};e.exports=Object.create||function(e,t){var n;return null!==e?(c.prototype=r(e),n=new c,c.prototype=null,n[a]=e):n=u(),void 0===t?n:o(n,t)}},LQAc:function(e,t){e.exports=!1},LZWt:function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},M6Qj:function(e,t,n){var r=n("hPIQ"),o=n("K0xU")("iterator"),i=Array.prototype;e.exports=function(e){return void 0!==e&&(r.Array===e||i[o]===e)}},Mukb:function(e,t,n){var r=n("hswa"),o=n("RjD/");e.exports=n("nh4g")?function(e,t,n){return r.f(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},N6cJ:function(e,t,n){var r=n("9AAn"),o=n("XKFU"),i=n("VTer")("metadata"),a=i.store||(i.store=new(n("EK0E"))),c=function(e,t,n){var o=a.get(e);if(!o){if(!n)return;a.set(e,o=new r)}var i=o.get(t);if(!i){if(!n)return;o.set(t,i=new r)}return i};e.exports={store:a,map:c,has:function(e,t,n){var r=c(t,n,!1);return void 0!==r&&r.has(e)},get:function(e,t,n){var r=c(t,n,!1);return void 0===r?void 0:r.get(e)},set:function(e,t,n,r){c(n,r,!0).set(e,t)},keys:function(e,t){var n=c(e,t,!1),r=[];return n&&n.forEach(function(e,t){r.push(t)}),r},key:function(e){return void 0===e||"symbol"==typeof e?e:String(e)},exp:function(e){o(o.S,"Reflect",e)}}},OP3Y:function(e,t,n){var r=n("aagx"),o=n("S/j/"),i=n("YTvA")("IE_PROTO"),a=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=o(e),r(e,i)?e[i]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?a:null}},Opxb:function(e,t,n){var r=n("N6cJ"),o=n("y3w9"),i=n("2OiF"),a=r.key,c=r.set;r.exp({metadata:function(e,t){return function(n,r){c(e,t,(void 0!==r?o:i)(n),a(r))}}})},Q3ne:function(e,t,n){var r=n("SlkY");e.exports=function(e,t){var n=[];return r(e,!1,n.push,n,t),n}},QaDb:function(e,t,n){"use strict";var r=n("Kuth"),o=n("RjD/"),i=n("fyDq"),a={};n("Mukb")(a,n("K0xU")("iterator"),function(){return this}),e.exports=function(e,t,n){e.prototype=r(a,{next:o(1,n)}),i(e,t+" Iterator")}},RYi7:function(e,t){var n=Math.ceil,r=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?r:n)(e)}},"RjD/":function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},"S/j/":function(e,t,n){var r=n("vhPU");e.exports=function(e){return Object(r(e))}},SlkY:function(e,t,n){var r=n("m0Pp"),o=n("H6hf"),i=n("M6Qj"),a=n("y3w9"),c=n("ne8i"),u=n("J+6e"),s={},l={};(t=e.exports=function(e,t,n,f,p){var h,v,d,g,y=p?function(){return e}:u(e),_=r(n,f,t?2:1),m=0;if("function"!=typeof y)throw TypeError(e+" is not iterable!");if(i(y)){for(h=c(e.length);h>m;m++)if((g=t?_(a(v=e[m])[0],v[1]):_(e[m]))===s||g===l)return g}else for(d=y.call(e);!(v=d.next()).done;)if((g=o(d,_,v.value,t))===s||g===l)return g}).BREAK=s,t.RETURN=l},T39b:function(e,t,n){"use strict";var r=n("wmvG"),o=n("s5qY");e.exports=n("4LiD")("Set",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return r.def(o(this,"Set"),e=0===e?0:e,e)}},r)},UqcF:function(e,t){t.f={}.propertyIsEnumerable},VTer:function(e,t,n){var r=n("g3g5"),o=n("dyZX"),i=o["__core-js_shared__"]||(o["__core-js_shared__"]={});(e.exports=function(e,t){return i[e]||(i[e]=void 0!==t?t:{})})("versions",[]).push({version:r.version,mode:n("LQAc")?"pure":"global",copyright:"\xa9 2018 Denis Pushkarev (zloirock.ru)"})},XKFU:function(e,t,n){var r=n("dyZX"),o=n("g3g5"),i=n("Mukb"),a=n("KroJ"),c=n("m0Pp"),u=function(e,t,n){var s,l,f,p,h=e&u.F,v=e&u.G,d=e&u.P,g=e&u.B,y=v?r:e&u.S?r[t]||(r[t]={}):(r[t]||{}).prototype,_=v?o:o[t]||(o[t]={}),m=_.prototype||(_.prototype={});for(s in v&&(n=t),n)f=((l=!h&&y&&void 0!==y[s])?y:n)[s],p=g&&l?c(f,r):d&&"function"==typeof f?c(Function.call,f):f,y&&a(y,s,f,e&u.U),_[s]!=f&&i(_,s,p),d&&m[s]!=f&&(m[s]=f)};r.core=o,u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,u.U=64,u.R=128,e.exports=u},XMVh:function(e,t,n){var r=n("K0xU")("iterator"),o=!1;try{var i=[7][r]();i.return=function(){o=!0},Array.from(i,function(){throw 2})}catch(e){}e.exports=function(e,t){if(!t&&!o)return!1;var n=!1;try{var i=[7],a=i[r]();a.next=function(){return{done:n=!0}},i[r]=function(){return a},e(i)}catch(e){}return n}},Xbzi:function(e,t,n){var r=n("0/R4"),o=n("i5dc").set;e.exports=function(e,t,n){var i,a=t.constructor;return a!==n&&"function"==typeof a&&(i=a.prototype)!==n.prototype&&r(i)&&o&&o(e,i),e}},YTvA:function(e,t,n){var r=n("VTer")("keys"),o=n("ylqs");e.exports=function(e){return r[e]||(r[e]=o(e))}},Ymqv:function(e,t,n){var r=n("LZWt");e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},Z6vF:function(e,t,n){var r=n("ylqs")("meta"),o=n("0/R4"),i=n("aagx"),a=n("hswa").f,c=0,u=Object.isExtensible||function(){return!0},s=!n("eeVq")(function(){return u(Object.preventExtensions({}))}),l=function(e){a(e,r,{value:{i:"O"+ ++c,w:{}}})},f=e.exports={KEY:r,NEED:!1,fastKey:function(e,t){if(!o(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!i(e,r)){if(!u(e))return"F";if(!t)return"E";l(e)}return e[r].i},getWeak:function(e,t){if(!i(e,r)){if(!u(e))return!0;if(!t)return!1;l(e)}return e[r].w},onFreeze:function(e){return s&&f.NEED&&u(e)&&!i(e,r)&&l(e),e}}},ZD67:function(e,t,n){"use strict";var r=n("3Lyj"),o=n("Z6vF").getWeak,i=n("y3w9"),a=n("0/R4"),c=n("9gX7"),u=n("SlkY"),s=n("CkkT"),l=n("aagx"),f=n("s5qY"),p=s(5),h=s(6),v=0,d=function(e){return e._l||(e._l=new g)},g=function(){this.a=[]},y=function(e,t){return p(e.a,function(e){return e[0]===t})};g.prototype={get:function(e){var t=y(this,e);if(t)return t[1]},has:function(e){return!!y(this,e)},set:function(e,t){var n=y(this,e);n?n[1]=t:this.a.push([e,t])},delete:function(e){var t=h(this.a,function(t){return t[0]===e});return~t&&this.a.splice(t,1),!!~t}},e.exports={getConstructor:function(e,t,n,i){var s=e(function(e,r){c(e,s,t,"_i"),e._t=t,e._i=v++,e._l=void 0,void 0!=r&&u(r,n,e[i],e)});return r(s.prototype,{delete:function(e){if(!a(e))return!1;var n=o(e);return!0===n?d(f(this,t)).delete(e):n&&l(n,this._i)&&delete n[this._i]},has:function(e){if(!a(e))return!1;var n=o(e);return!0===n?d(f(this,t)).has(e):n&&l(n,this._i)}}),s},def:function(e,t,n){var r=o(i(t),!0);return!0===r?d(e).set(t,n):r[e._i]=n,e},ufstore:d}},aCFj:function(e,t,n){var r=n("Ymqv"),o=n("vhPU");e.exports=function(e){return r(o(e))}},aagx:function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},apmT:function(e,t,n){var r=n("0/R4");e.exports=function(e,t){if(!r(e))return e;var n,o;if(t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;if("function"==typeof(n=e.valueOf)&&!r(o=n.call(e)))return o;if(!t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;throw TypeError("Can't convert object to primitive value")}},czNK:function(e,t,n){"use strict";var r=n("DVgA"),o=n("JiEa"),i=n("UqcF"),a=n("S/j/"),c=n("Ymqv"),u=Object.assign;e.exports=!u||n("eeVq")(function(){var e={},t={},n=Symbol(),r="abcdefghijklmnopqrst";return e[n]=7,r.split("").forEach(function(e){t[e]=e}),7!=u({},e)[n]||Object.keys(u({},t)).join("")!=r})?function(e,t){for(var n=a(e),u=arguments.length,s=1,l=o.f,f=i.f;u>s;)for(var p,h=c(arguments[s++]),v=l?r(h).concat(l(h)):r(h),d=v.length,g=0;d>g;)f.call(h,p=v[g++])&&(n[p]=h[p]);return n}:u},"d/Gc":function(e,t,n){var r=n("RYi7"),o=Math.max,i=Math.min;e.exports=function(e,t){return(e=r(e))<0?o(e+t,0):i(e,t)}},dyZX:function(e,t){var n=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},eeVq:function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},elZq:function(e,t,n){"use strict";var r=n("dyZX"),o=n("hswa"),i=n("nh4g"),a=n("K0xU")("species");e.exports=function(e){var t=r[e];i&&t&&!t[a]&&o.f(t,a,{configurable:!0,get:function(){return this}})}},"fN/3":function(e,t,n){var r=n("N6cJ"),o=n("y3w9"),i=r.keys,a=r.key;r.exp({getOwnMetadataKeys:function(e){return i(o(e),arguments.length<2?void 0:a(arguments[1]))}})},fyDq:function(e,t,n){var r=n("hswa").f,o=n("aagx"),i=n("K0xU")("toStringTag");e.exports=function(e,t,n){e&&!o(e=n?e:e.prototype,i)&&r(e,i,{configurable:!0,value:t})}},g3g5:function(e,t){var n=e.exports={version:"2.5.7"};"number"==typeof __e&&(__e=n)},"hN/g":function(e,t,n){"use strict";n.r(t),n("FZcq"),n("0TWp")},hPIQ:function(e,t){e.exports={}},hswa:function(e,t,n){var r=n("y3w9"),o=n("xpql"),i=n("apmT"),a=Object.defineProperty;t.f=n("nh4g")?Object.defineProperty:function(e,t,n){if(r(e),t=i(t,!0),r(n),o)try{return a(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},i5dc:function(e,t,n){var r=n("0/R4"),o=n("y3w9"),i=function(e,t){if(o(e),!r(t)&&null!==t)throw TypeError(t+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t,r){try{(r=n("m0Pp")(Function.call,n("EemH").f(Object.prototype,"__proto__").set,2))(e,[]),t=!(e instanceof Array)}catch(e){t=!0}return function(e,n){return i(e,n),t?e.__proto__=n:r(e,n),e}}({},!1):void 0),check:i}},"iW+S":function(e,t,n){var r=n("N6cJ"),o=n("y3w9"),i=n("OP3Y"),a=r.has,c=r.key,u=function(e,t,n){if(a(e,t,n))return!0;var r=i(t);return null!==r&&u(e,r,n)};r.exp({hasMetadata:function(e,t){return u(e,o(t),arguments.length<3?void 0:c(arguments[2]))}})},m0Pp:function(e,t,n){var r=n("2OiF");e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,o){return e.call(t,n,r,o)}}return function(){return e.apply(t,arguments)}}},ne8i:function(e,t,n){var r=n("RYi7"),o=Math.min;e.exports=function(e){return e>0?o(r(e),9007199254740991):0}},nh4g:function(e,t,n){e.exports=!n("eeVq")(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},s5qY:function(e,t,n){var r=n("0/R4");e.exports=function(e,t){if(!r(e)||e._t!==t)throw TypeError("Incompatible receiver, "+t+" required!");return e}},uAtd:function(e,t,n){var r=n("T39b"),o=n("Q3ne"),i=n("N6cJ"),a=n("y3w9"),c=n("OP3Y"),u=i.keys,s=i.key,l=function(e,t){var n=u(e,t),i=c(e);if(null===i)return n;var a=l(i,t);return a.length?n.length?o(new r(n.concat(a))):a:n};i.exp({getMetadataKeys:function(e){return l(a(e),arguments.length<2?void 0:s(arguments[1]))}})},vhPU:function(e,t){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on  "+e);return e}},w2a5:function(e,t,n){var r=n("aCFj"),o=n("ne8i"),i=n("d/Gc");e.exports=function(e){return function(t,n,a){var c,u=r(t),s=o(u.length),l=i(a,s);if(e&&n!=n){for(;s>l;)if((c=u[l++])!=c)return!0}else for(;s>l;l++)if((e||l in u)&&u[l]===n)return e||l||0;return!e&&-1}}},wmvG:function(e,t,n){"use strict";var r=n("hswa").f,o=n("Kuth"),i=n("3Lyj"),a=n("m0Pp"),c=n("9gX7"),u=n("SlkY"),s=n("Afnz"),l=n("1TsA"),f=n("elZq"),p=n("nh4g"),h=n("Z6vF").fastKey,v=n("s5qY"),d=p?"_s":"size",g=function(e,t){var n,r=h(t);if("F"!==r)return e._i[r];for(n=e._f;n;n=n.n)if(n.k==t)return n};e.exports={getConstructor:function(e,t,n,s){var l=e(function(e,r){c(e,l,t,"_i"),e._t=t,e._i=o(null),e._f=void 0,e._l=void 0,e[d]=0,void 0!=r&&u(r,n,e[s],e)});return i(l.prototype,{clear:function(){for(var e=v(this,t),n=e._i,r=e._f;r;r=r.n)r.r=!0,r.p&&(r.p=r.p.n=void 0),delete n[r.i];e._f=e._l=void 0,e[d]=0},delete:function(e){var n=v(this,t),r=g(n,e);if(r){var o=r.n,i=r.p;delete n._i[r.i],r.r=!0,i&&(i.n=o),o&&(o.p=i),n._f==r&&(n._f=o),n._l==r&&(n._l=i),n[d]--}return!!r},forEach:function(e){v(this,t);for(var n,r=a(e,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(r(n.v,n.k,this);n&&n.r;)n=n.p},has:function(e){return!!g(v(this,t),e)}}),p&&r(l.prototype,"size",{get:function(){return v(this,t)[d]}}),l},def:function(e,t,n){var r,o,i=g(e,t);return i?i.v=n:(e._l=i={i:o=h(t,!0),k:t,v:n,p:r=e._l,n:void 0,r:!1},e._f||(e._f=i),r&&(r.n=i),e[d]++,"F"!==o&&(e._i[o]=i)),e},getEntry:g,setStrong:function(e,t,n){s(e,t,function(e,n){this._t=v(e,t),this._k=n,this._l=void 0},function(){for(var e=this._k,t=this._l;t&&t.r;)t=t.p;return this._t&&(this._l=t=t?t.n:this._t._f)?l(0,"keys"==e?t.k:"values"==e?t.v:[t.k,t.v]):(this._t=void 0,l(1))},n?"entries":"values",!n,!0),f(t)}}},xpql:function(e,t,n){e.exports=!n("nh4g")&&!n("eeVq")(function(){return 7!=Object.defineProperty(n("Iw71")("div"),"a",{get:function(){return 7}}).a})},y3w9:function(e,t,n){var r=n("0/R4");e.exports=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e}},ylqs:function(e,t){var n=0,r=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++n+r).toString(36))}},zRwo:function(e,t,n){var r=n("6FMO");e.exports=function(e,t){return new(r(e))(t)}},zhAb:function(e,t,n){var r=n("aagx"),o=n("aCFj"),i=n("w2a5")(!1),a=n("YTvA")("IE_PROTO");e.exports=function(e,t){var n,c=o(e),u=0,s=[];for(n in c)n!=a&&r(c,n)&&s.push(n);for(;t.length>u;)r(c,n=t[u++])&&(~i(s,n)||s.push(n));return s}},"zq+C":function(e,t,n){var r=n("N6cJ"),o=n("y3w9"),i=r.key,a=r.map,c=r.store;r.exp({deleteMetadata:function(e,t){var n=arguments.length<3?void 0:i(arguments[2]),r=a(o(t),n,!1);if(void 0===r||!r.delete(e))return!1;if(r.size)return!0;var u=c.get(t);return u.delete(n),!!u.size||c.delete(t)}})}},[[3,5]]]);!function(e,t){"use strict";var n=e.document,r=e.Object,o=function(e){var t,n,o,l,a=/^[A-Z]+[a-z]/,i=function(e,t){(t=t.toLowerCase())in u||(u[e]=(u[e]||[]).concat(t),u[t]=u[t.toUpperCase()]=e)},u=(r.create||r)(null),c={};for(n in e)for(l in e[n])for(u[l]=o=e[n][l],t=0;t<o.length;t++)u[o[t].toLowerCase()]=u[o[t].toUpperCase()]=l;return c.get=function(e){return"string"==typeof e?u[e]||(a.test(e)?[]:""):function(e){var t,n=[];for(t in u)e.test(t)&&n.push(t);return n}(e)},c.set=function(e,t){return a.test(e)?i(e,t):i(t,e),c},c}({collections:{HTMLAllCollection:["all"],HTMLCollection:["forms"],HTMLFormControlsCollection:["elements"],HTMLOptionsCollection:["options"]},elements:{Element:["element"],HTMLAnchorElement:["a"],HTMLAppletElement:["applet"],HTMLAreaElement:["area"],HTMLAttachmentElement:["attachment"],HTMLAudioElement:["audio"],HTMLBRElement:["br"],HTMLBaseElement:["base"],HTMLBodyElement:["body"],HTMLButtonElement:["button"],HTMLCanvasElement:["canvas"],HTMLContentElement:["content"],HTMLDListElement:["dl"],HTMLDataElement:["data"],HTMLDataListElement:["datalist"],HTMLDetailsElement:["details"],HTMLDialogElement:["dialog"],HTMLDirectoryElement:["dir"],HTMLDivElement:["div"],HTMLDocument:["document"],HTMLElement:["element","abbr","address","article","aside","b","bdi","bdo","cite","code","command","dd","dfn","dt","em","figcaption","figure","footer","header","i","kbd","mark","nav","noscript","rp","rt","ruby","s","samp","section","small","strong","sub","summary","sup","u","var","wbr"],HTMLEmbedElement:["embed"],HTMLFieldSetElement:["fieldset"],HTMLFontElement:["font"],HTMLFormElement:["form"],HTMLFrameElement:["frame"],HTMLFrameSetElement:["frameset"],HTMLHRElement:["hr"],HTMLHeadElement:["head"],HTMLHeadingElement:["h1","h2","h3","h4","h5","h6"],HTMLHtmlElement:["html"],HTMLIFrameElement:["iframe"],HTMLImageElement:["img"],HTMLInputElement:["input"],HTMLKeygenElement:["keygen"],HTMLLIElement:["li"],HTMLLabelElement:["label"],HTMLLegendElement:["legend"],HTMLLinkElement:["link"],HTMLMapElement:["map"],HTMLMarqueeElement:["marquee"],HTMLMediaElement:["media"],HTMLMenuElement:["menu"],HTMLMenuItemElement:["menuitem"],HTMLMetaElement:["meta"],HTMLMeterElement:["meter"],HTMLModElement:["del","ins"],HTMLOListElement:["ol"],HTMLObjectElement:["object"],HTMLOptGroupElement:["optgroup"],HTMLOptionElement:["option"],HTMLOutputElement:["output"],HTMLParagraphElement:["p"],HTMLParamElement:["param"],HTMLPictureElement:["picture"],HTMLPreElement:["pre"],HTMLProgressElement:["progress"],HTMLQuoteElement:["blockquote","q","quote"],HTMLScriptElement:["script"],HTMLSelectElement:["select"],HTMLShadowElement:["shadow"],HTMLSlotElement:["slot"],HTMLSourceElement:["source"],HTMLSpanElement:["span"],HTMLStyleElement:["style"],HTMLTableCaptionElement:["caption"],HTMLTableCellElement:["td","th"],HTMLTableColElement:["col","colgroup"],HTMLTableElement:["table"],HTMLTableRowElement:["tr"],HTMLTableSectionElement:["thead","tbody","tfoot"],HTMLTemplateElement:["template"],HTMLTextAreaElement:["textarea"],HTMLTimeElement:["time"],HTMLTitleElement:["title"],HTMLTrackElement:["track"],HTMLUListElement:["ul"],HTMLUnknownElement:["unknown","vhgroupv","vkeygen"],HTMLVideoElement:["video"]},nodes:{Attr:["node"],Audio:["audio"],CDATASection:["node"],CharacterData:["node"],Comment:["#comment"],Document:["#document"],DocumentFragment:["#document-fragment"],DocumentType:["node"],HTMLDocument:["#document"],Image:["img"],Option:["option"],ProcessingInstruction:["node"],ShadowRoot:["#shadow-root"],Text:["#text"],XMLDocument:["xml"]}});"object"!=typeof t&&(t={type:t||"auto"});var l,a,i,u,c,s,m,f,p,d="registerElement",h="__"+d+(1e5*e.Math.random()>>0),T="addEventListener",L="attached",M="Callback",E="detached",v="extends",H="attributeChanged"+M,g=L+M,b="connected"+M,y="disconnected"+M,C="created"+M,w=E+M,A="ADDITION",O="REMOVAL",N="DOMAttrModified",D="DOMContentLoaded",I="DOMSubtreeModified",F="<",S="=",V=/^[A-Z][A-Z0-9]*(?:-[A-Z0-9]+)+$/,P=["ANNOTATION-XML","COLOR-PROFILE","FONT-FACE","FONT-FACE-SRC","FONT-FACE-URI","FONT-FACE-FORMAT","FONT-FACE-NAME","MISSING-GLYPH"],R=[],U=[],k="",_=n.documentElement,q=R.indexOf||function(e){for(var t=this.length;t--&&this[t]!==e;);return t},x=r.prototype,B=x.hasOwnProperty,Z=x.isPrototypeOf,j=r.defineProperty,G=[],z=r.getOwnPropertyDescriptor,K=r.getOwnPropertyNames,X=r.getPrototypeOf,$=r.setPrototypeOf,Q=!!r.__proto__,W="__dreCEv1",Y=e.customElements,J=!/^force/.test(t.type)&&!!(Y&&Y.define&&Y.get&&Y.whenDefined),ee=r.create||r,te=e.Map||function(){var e,t=[],n=[];return{get:function(e){return n[q.call(t,e)]},set:function(r,o){(e=q.call(t,r))<0?n[t.push(r)-1]=o:n[e]=o}}},ne=e.Promise||function(e){var t=[],n=!1,r={catch:function(){return r},then:function(e){return t.push(e),n&&setTimeout(o,1),r}};function o(e){for(n=!0;t.length;)t.shift()(e)}return e(o),r},re=!1,oe=ee(null),le=ee(null),ae=new te,ie=function(e){return e.toLowerCase()},ue=r.create||function e(t){return t?(e.prototype=t,new e):this},ce=$||(Q?function(e,t){return e.__proto__=t,e}:K&&z?function(){function e(e,t){for(var n,r=K(t),o=0,l=r.length;o<l;o++)B.call(e,n=r[o])||j(e,n,z(t,n))}return function(t,n){do{e(t,n)}while((n=X(n))&&!Z.call(n,t));return t}}():function(e,t){for(var n in t)e[n]=t[n];return e}),se=e.MutationObserver||e.WebKitMutationObserver,me=(e.HTMLElement||e.Element||e.Node).prototype,fe=!Z.call(me,_),pe=fe?function(e,t,n){return e[t]=n.value,e}:j,de=fe?function(e){return 1===e.nodeType}:function(e){return Z.call(me,e)},he=fe&&[],Te=me.attachShadow,Le=me.cloneNode,Me=me.dispatchEvent,Ee=me.getAttribute,ve=me.hasAttribute,He=me.removeAttribute,ge=me.setAttribute,be=n.createElement,ye=be,Ce=se&&{attributes:!0,characterData:!0,attributeOldValue:!0},we=se||function(e){Ie=!1,_.removeEventListener(N,we)},Ae=0,Oe=d in n&&!/^force-all/.test(t.type),Ne=!0,De=!1,Ie=!0,Fe=!0,Se=!0;function Ve(){var e=l.splice(0,l.length);for(Ae=0;e.length;)e.shift().call(null,e.shift())}function Pe(e,t){for(var n=0,r=e.length;n<r;n++)Ge(e[n],t)}function Re(e){return function(t){de(t)&&(Ge(t,e),k.length&&Pe(t.querySelectorAll(k),e))}}function Ue(e){var t=Ee.call(e,"is"),n=e.nodeName.toUpperCase(),r=q.call(R,t?S+t.toUpperCase():F+n);return t&&-1<r&&!ke(n,t)?-1:r}function ke(e,t){return-1<k.indexOf(e+'[is="'+t+'"]')}function _e(e){var t=e.currentTarget,n=e.attrChange,r=e.attrName,o=e.target,l=e[A]||2,a=e[O]||3;!Se||o&&o!==t||!t[H]||"style"===r||e.prevValue===e.newValue&&(""!==e.newValue||n!==l&&n!==a)||t[H](r,n===l?null:e.prevValue,n===a?null:e.newValue)}function qe(e){var t=Re(e);return function(e){l.push(t,e.target),Ae&&clearTimeout(Ae),Ae=setTimeout(Ve,1)}}function xe(e){Fe&&(Fe=!1,e.currentTarget.removeEventListener(D,xe)),k.length&&Pe((e.target||n).querySelectorAll(k),e.detail===E?E:L),fe&&function(){for(var e,t=0,n=he.length;t<n;t++)_.contains(e=he[t])||(n--,he.splice(t--,1),Ge(e,E))}()}function Be(e,t){ge.call(this,e,t),a.call(this,{target:this})}function Ze(e,t){ce(e,t),c?c.observe(e,Ce):(Ie&&(e.setAttribute=Be,e[h]=u(e),e[T](I,a)),e[T](N,_e)),e[C]&&Se&&(e.created=!0,e[C](),e.created=!1)}function je(e){throw new Error("A "+e+" type is already registered")}function Ge(e,t){var n,r,o=Ue(e);-1<o&&(m(e,U[o]),o=0,t!==L||e[L]?t!==E||e[E]||(e[L]=!1,e[E]=!0,r="disconnected",o=1):(e[E]=!1,e[L]=!0,r="connected",o=1,fe&&q.call(he,e)<0&&he.push(e)),o&&(n=e[t+M]||e[r+M])&&n.call(e))}function ze(){}function Ke(e,t,r){var o=r&&r[v]||"",l=t.prototype,a=ue(l),i=t.observedAttributes||G,u={prototype:a};pe(a,C,{value:function(){if(re)re=!1;else if(!this[W]){this[W]=!0,new t(this),l[C]&&l[C].call(this);var e=oe[ae.get(t)];(!J||e.create.length>1)&&Qe(this)}}}),pe(a,H,{value:function(e){-1<q.call(i,e)&&l[H].apply(this,arguments)}}),l[b]&&pe(a,g,{value:l[b]}),l[y]&&pe(a,w,{value:l[y]}),o&&(u[v]=o),e=e.toUpperCase(),oe[e]={constructor:t,create:o?[o,ie(e)]:[e]},ae.set(t,e),n[d](e.toLowerCase(),u),We(e),le[e].r()}function Xe(e){var t=oe[e.toUpperCase()];return t&&t.constructor}function $e(e){return"string"==typeof e?e:e&&e.is||""}function Qe(e){for(var t,n=e[H],r=n?e.attributes:G,o=r.length;o--;)n.call(e,(t=r[o]).name||t.nodeName,null,t.value||t.nodeValue)}function We(e){return(e=e.toUpperCase())in le||(le[e]={},le[e].p=new ne(function(t){le[e].r=t})),le[e].p}function Ye(){Y&&delete e.customElements,j(e,"customElements",{configurable:!0,value:new ze}),j(e,"CustomElementRegistry",{configurable:!0,value:ze});for(var t=function(t){var r=e[t];if(r){e[t]=function(e){var t,o;return e||(e=this),e[W]||(re=!0,t=oe[ae.get(e.constructor)],(e=(o=J&&1===t.create.length)?Reflect.construct(r,G,t.constructor):n.createElement.apply(n,t.create))[W]=!0,re=!1,o||Qe(e)),e},e[t].prototype=r.prototype;try{r.prototype.constructor=e[t]}catch(n){j(r,W,{value:e[t]})}}},r=o.get(/^HTML[A-Z]*[a-z]/),l=r.length;l--;t(r[l]));n.createElement=function(e,t){var n=$e(t);return n?ye.call(this,e,ie(n)):ye.call(this,e)},Oe||(De=!0,n[d](""))}if(se&&((p=n.createElement("div")).innerHTML="<div><div></div></div>",new se(function(e,t){if(e[0]&&"childList"==e[0].type&&!e[0].removedNodes[0].childNodes.length){var n=(p=z(me,"innerHTML"))&&p.set;n&&j(me,"innerHTML",{set:function(e){for(;this.lastChild;)this.removeChild(this.lastChild);n.call(this,e)}})}t.disconnect(),p=null}).observe(p,{childList:!0,subtree:!0}),p.innerHTML=""),Oe||($||Q?(m=function(e,t){Z.call(t,e)||Ze(e,t)},f=Ze):f=m=function(e,t){e[h]||(e[h]=r(!0),Ze(e,t))},fe?(Ie=!1,function(){var e=z(me,T),t=e.value,n=function(e){var t=new CustomEvent(N,{bubbles:!0});t.attrName=e,t.prevValue=Ee.call(this,e),t.newValue=null,t[O]=t.attrChange=2,He.call(this,e),Me.call(this,t)},r=function(e,t){var n=ve.call(this,e),r=n&&Ee.call(this,e),o=new CustomEvent(N,{bubbles:!0});ge.call(this,e,t),o.attrName=e,o.prevValue=n?r:null,o.newValue=t,n?o.MODIFICATION=o.attrChange=1:o[A]=o.attrChange=0,Me.call(this,o)},o=function(e){var t,n=e.currentTarget,r=n[h],o=e.propertyName;r.hasOwnProperty(o)&&(r=r[o],(t=new CustomEvent(N,{bubbles:!0})).attrName=r.name,t.prevValue=r.value||null,t.newValue=r.value=n[o]||null,null==t.prevValue?t[A]=t.attrChange=0:t.MODIFICATION=t.attrChange=1,Me.call(n,t))};e.value=function(e,l,a){e===N&&this[H]&&this.setAttribute!==r&&(this[h]={className:{name:"class",value:this.className}},this.setAttribute=r,this.removeAttribute=n,t.call(this,"propertychange",o)),t.call(this,e,l,a)},j(me,T,e)}()):se||(_[T](N,we),_.setAttribute(h,1),_.removeAttribute(h),Ie&&(a=function(e){var t,n,r;if(this===e.target){for(r in t=this[h],this[h]=n=u(this),n){if(!(r in t))return i(0,this,r,t[r],n[r],A);if(n[r]!==t[r])return i(1,this,r,t[r],n[r],"MODIFICATION")}for(r in t)if(!(r in n))return i(2,this,r,t[r],n[r],O)}},i=function(e,t,n,r,o,l){var a={attrChange:e,currentTarget:t,attrName:n,prevValue:r,newValue:o};a[l]=e,_e(a)},u=function(e){for(var t,n,r={},o=e.attributes,l=0,a=o.length;l<a;l++)"setAttribute"!==(n=(t=o[l]).name)&&(r[n]=t.value);return r})),n[d]=function(e,t){if(r=e.toUpperCase(),Ne&&(Ne=!1,se?(c=function(e,t){function n(e,t){for(var n=0,r=e.length;n<r;t(e[n++]));}return new se(function(r){for(var o,l,a,i=0,u=r.length;i<u;i++)"childList"===(o=r[i]).type?(n(o.addedNodes,e),n(o.removedNodes,t)):(l=o.target,Se&&l[H]&&"style"!==o.attributeName&&(a=Ee.call(l,o.attributeName))!==o.oldValue&&l[H](o.attributeName,o.oldValue,a))})}(Re(L),Re(E)),(s=function(e){return c.observe(e,{childList:!0,subtree:!0}),e})(n),Te&&(me.attachShadow=function(){return s(Te.apply(this,arguments))})):(l=[],n[T]("DOMNodeInserted",qe(L)),n[T]("DOMNodeRemoved",qe(E))),n[T](D,xe),n[T]("readystatechange",xe),me.cloneNode=function(e){var t=Le.call(this,!!e),n=Ue(t);return-1<n&&f(t,U[n]),e&&k.length&&function(e){for(var t,n=0,r=e.length;n<r;n++)f(t=e[n],U[Ue(t)])}(t.querySelectorAll(k)),t}),De)return De=!1;if(-2<q.call(R,S+r)+q.call(R,F+r)&&je(e),!V.test(r)||-1<q.call(P,r))throw new Error("The type "+e+" is invalid");var r,o,a=function(){return u?n.createElement(m,r):n.createElement(m)},i=t||x,u=B.call(i,v),m=u?t[v].toUpperCase():r;return u&&-1<q.call(R,F+m)&&je(m),o=R.push((u?S:F)+r)-1,k=k.concat(k.length?",":"",u?m+'[is="'+e.toLowerCase()+'"]':m),a.prototype=U[o]=B.call(i,"prototype")?i.prototype:ue(me),k.length&&Pe(n.querySelectorAll(k),L),a},n.createElement=ye=function(e,t){var r=$e(t),o=r?be.call(n,e,ie(r)):be.call(n,e),l=""+e,a=q.call(R,(r?S:F)+(r||l).toUpperCase()),i=-1<a;return r&&(o.setAttribute("is",r=r.toLowerCase()),i&&(i=ke(l.toUpperCase(),r))),Se=!n.createElement.innerHTMLHelper,i&&f(o,U[a]),o}),ze.prototype={constructor:ze,define:J?function(e,t,n){if(n)Ke(e,t,n);else{var r=e.toUpperCase();oe[r]={constructor:t,create:[r]},ae.set(t,r),Y.define(e,t)}}:Ke,get:J?function(e){return Y.get(e)||Xe(e)}:Xe,whenDefined:J?function(e){return ne.race([Y.whenDefined(e),We(e)])}:We},!Y||/^force/.test(t.type))Ye();else if(!t.noBuiltIn)try{!function(t,r,o){var l=new RegExp("^<a\\s+is=('|\")"+o+"\\1></a>$");if(r[v]="a",(t.prototype=ue(HTMLAnchorElement.prototype)).constructor=t,e.customElements.define(o,t,r),!l.test(n.createElement("a",{is:o}).outerHTML)||!l.test((new t).outerHTML))throw r}(function e(){return Reflect.construct(HTMLAnchorElement,[],e)},{},"document-register-element-a")}catch(e){Ye()}if(!t.noBuiltIn)try{be.call(n,"a","a")}catch(e){ie=function(e){return{is:e.toLowerCase()}}}}(window);(window.webpackJsonp=window.webpackJsonp||[]).push([[8],{"+tJ4":function(t,e,n){"use strict";n.d(e,"a",function(){return r});var r=function(t){return function(e){for(var n=0,r=t.length;n<r&&!e.closed;n++)e.next(t[n]);e.closed||e.complete()}}},"+umK":function(t,e,n){"use strict";function r(){}n.d(e,"a",function(){return r})},"/21U":function(t,e,n){"use strict";n.d(e,"a",function(){return i});var r=n("isby");function i(t){return!Object(r.a)(t)&&t-parseFloat(t)+1>=0}},"/WYv":function(t,e,n){"use strict";function r(t){return t&&"function"!=typeof t.subscribe&&"function"==typeof t.then}n.d(e,"a",function(){return r})},"/dO6":function(t,e,n){"use strict";n.d(e,"d",function(){return v}),n.d(e,"c",function(){return y}),n.d(e,"b",function(){return m}),n.d(e,"a",function(){return g});var r=n("mrSG"),i=n("n6gG"),o=n("YSh2"),l=n("CcnG"),a=n("Wf4p"),u=n("K9Ia"),s=n("pugT"),c=n("p0ib"),h=n("lLAP"),f=n("YlbQ"),d=n("p0Sj"),p=["mat-basic-chip"],m=function(t){function e(e,n,r,i){var o=t.call(this,e)||this;return o._elementRef=e,o._ripplesGloballyDisabled=!1,o.rippleConfig={},o._hasFocus=!1,o.chipListSelectable=!0,o._selected=!1,o._selectable=!0,o._removable=!0,o._onFocus=new u.a,o._onBlur=new u.a,o.selectionChange=new l.n,o.destroyed=new l.n,o.removed=new l.n,o._addHostClassName(),o._chipRipple=new a.z(o,n,e,r),o._chipRipple.setupTriggerEvents(e.nativeElement),i&&(o._ripplesGloballyDisabled=!!i.disabled,o.rippleConfig={speedFactor:i.baseSpeedFactor,animation:i.animation,terminateOnPointerUp:i.terminateOnPointerUp}),o}return Object(r.b)(e,t),Object.defineProperty(e.prototype,"rippleDisabled",{get:function(){return this.disabled||this.disableRipple||this._ripplesGloballyDisabled},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"selected",{get:function(){return this._selected},set:function(t){this._selected=Object(i.c)(t),this.selectionChange.emit({source:this,isUserInput:!1,selected:t})},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"value",{get:function(){return void 0!=this._value?this._value:this._elementRef.nativeElement.textContent},set:function(t){this._value=t},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"selectable",{get:function(){return this._selectable&&this.chipListSelectable},set:function(t){this._selectable=Object(i.c)(t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"removable",{get:function(){return this._removable},set:function(t){this._removable=Object(i.c)(t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"ariaSelected",{get:function(){return this.selectable?this.selected.toString():null},enumerable:!0,configurable:!0}),e.prototype._addHostClassName=function(){for(var t=0,e=p;t<e.length;t++){var n=e[t];if(this._elementRef.nativeElement.hasAttribute(n)||this._elementRef.nativeElement.tagName.toLowerCase()===n)return void this._elementRef.nativeElement.classList.add(n)}this._elementRef.nativeElement.classList.add("mat-standard-chip")},e.prototype.ngOnDestroy=function(){this.destroyed.emit({chip:this}),this._chipRipple._removeTriggerEvents()},e.prototype.select=function(){this._selected=!0,this.selectionChange.emit({source:this,isUserInput:!1,selected:!0})},e.prototype.deselect=function(){this._selected=!1,this.selectionChange.emit({source:this,isUserInput:!1,selected:!1})},e.prototype.selectViaInteraction=function(){this._selected=!0,this.selectionChange.emit({source:this,isUserInput:!0,selected:!0})},e.prototype.toggleSelected=function(t){return void 0===t&&(t=!1),this._selected=!this.selected,this.selectionChange.emit({source:this,isUserInput:t,selected:this._selected}),this.selected},e.prototype.focus=function(){this._hasFocus||(this._elementRef.nativeElement.focus(),this._onFocus.next({chip:this})),this._hasFocus=!0},e.prototype.remove=function(){this.removable&&this.removed.emit({chip:this})},e.prototype._handleClick=function(t){this.disabled||(t.preventDefault(),t.stopPropagation())},e.prototype._handleKeydown=function(t){if(!this.disabled)switch(t.keyCode){case o.c:case o.b:this.remove(),t.preventDefault();break;case o.l:this.selectable&&this.toggleSelected(!0),t.preventDefault()}},e.prototype._blur=function(){this._hasFocus=!1,this._onBlur.next({chip:this})},e}(Object(a.C)(Object(a.D)(Object(a.E)(function(t){this._elementRef=t})),"primary")),g=new l.q("mat-chips-default-options"),b=0,y=function(t){function e(e,n,r,i,o,a,u){var c=t.call(this,a,i,o,u)||this;return c._elementRef=e,c._changeDetectorRef=n,c._dir=r,c.ngControl=u,c.controlType="mat-chip-list",c._lastDestroyedIndex=null,c._chipSet=new WeakMap,c._tabOutSubscription=s.a.EMPTY,c._uid="mat-chip-list-"+b++,c._tabIndex=0,c._userTabIndex=null,c._onTouched=function(){},c._onChange=function(){},c._multiple=!1,c._compareWith=function(t,e){return t===e},c._required=!1,c._disabled=!1,c.ariaOrientation="horizontal",c._selectable=!0,c.change=new l.n,c.valueChange=new l.n,c.ngControl&&(c.ngControl.valueAccessor=c),c}return Object(r.b)(e,t),Object.defineProperty(e.prototype,"selected",{get:function(){return this.multiple?this._selectionModel.selected:this._selectionModel.selected[0]},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"role",{get:function(){return this.empty?null:"listbox"},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"multiple",{get:function(){return this._multiple},set:function(t){this._multiple=Object(i.c)(t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"compareWith",{get:function(){return this._compareWith},set:function(t){this._compareWith=t,this._selectionModel&&this._initializeSelection()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"value",{get:function(){return this._value},set:function(t){this.writeValue(t),this._value=t},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"id",{get:function(){return this._chipInput?this._chipInput.id:this._uid},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"required",{get:function(){return this._required},set:function(t){this._required=Object(i.c)(t),this.stateChanges.next()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"placeholder",{get:function(){return this._chipInput?this._chipInput.placeholder:this._placeholder},set:function(t){this._placeholder=t,this.stateChanges.next()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"focused",{get:function(){return this._chipInput&&this._chipInput.focused||this.chips.some(function(t){return t._hasFocus})},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"empty",{get:function(){return(!this._chipInput||this._chipInput.empty)&&0===this.chips.length},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"shouldLabelFloat",{get:function(){return!this.empty||this.focused},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"disabled",{get:function(){return this.ngControl?!!this.ngControl.disabled:this._disabled},set:function(t){this._disabled=Object(i.c)(t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"selectable",{get:function(){return this._selectable},set:function(t){var e=this;this._selectable=Object(i.c)(t),this.chips&&this.chips.forEach(function(t){return t.chipListSelectable=e._selectable})},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"tabIndex",{set:function(t){this._userTabIndex=t,this._tabIndex=t},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"chipSelectionChanges",{get:function(){return c.a.apply(void 0,this.chips.map(function(t){return t.selectionChange}))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"chipFocusChanges",{get:function(){return c.a.apply(void 0,this.chips.map(function(t){return t._onFocus}))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"chipBlurChanges",{get:function(){return c.a.apply(void 0,this.chips.map(function(t){return t._onBlur}))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"chipRemoveChanges",{get:function(){return c.a.apply(void 0,this.chips.map(function(t){return t.destroyed}))},enumerable:!0,configurable:!0}),e.prototype.ngAfterContentInit=function(){var t=this;this._keyManager=new h.c(this.chips).withWrap().withVerticalOrientation().withHorizontalOrientation(this._dir?this._dir.value:"ltr"),this._tabOutSubscription=this._keyManager.tabOut.subscribe(function(){t._tabIndex=-1,setTimeout(function(){return t._tabIndex=t._userTabIndex||0})}),this._changeSubscription=this.chips.changes.pipe(Object(d.a)(null)).subscribe(function(){t._resetChips(),t._initializeSelection(),t._updateTabIndex(),t._updateFocusForDestroyedChips(),t.stateChanges.next()})},e.prototype.ngOnInit=function(){this._selectionModel=new f.b(this.multiple,void 0,!1),this.stateChanges.next()},e.prototype.ngDoCheck=function(){this.ngControl&&this.updateErrorState()},e.prototype.ngOnDestroy=function(){this._tabOutSubscription.unsubscribe(),this._changeSubscription&&this._changeSubscription.unsubscribe(),this._chipRemoveSubscription&&this._chipRemoveSubscription.unsubscribe(),this._dropSubscriptions(),this.stateChanges.complete()},e.prototype.registerInput=function(t){this._chipInput=t},e.prototype.setDescribedByIds=function(t){this._ariaDescribedby=t.join(" ")},e.prototype.writeValue=function(t){this.chips&&this._setSelectionByValue(t,!1)},e.prototype.registerOnChange=function(t){this._onChange=t},e.prototype.registerOnTouched=function(t){this._onTouched=t},e.prototype.setDisabledState=function(t){this.disabled=t,this._elementRef.nativeElement.disabled=t,this.stateChanges.next()},e.prototype.onContainerClick=function(){this.focus()},e.prototype.focus=function(){this._chipInput&&this._chipInput.focused||(this.chips.length>0?(this._keyManager.setFirstItemActive(),this.stateChanges.next()):(this._focusInput(),this.stateChanges.next()))},e.prototype._focusInput=function(){this._chipInput&&this._chipInput.focus()},e.prototype._keydown=function(t){var e=t.target;t.keyCode===o.b&&this._isInputEmpty(e)?(this._keyManager.setLastItemActive(),t.preventDefault()):e&&e.classList.contains("mat-chip")&&(this._keyManager.onKeydown(t),this.stateChanges.next())},e.prototype._updateTabIndex=function(){this._tabIndex=this._userTabIndex||(0===this.chips.length?-1:0)},e.prototype._updateKeyManager=function(t){var e=this.chips.toArray().indexOf(t);this._isValidIndex(e)&&(t._hasFocus&&(e<this.chips.length-1?this._keyManager.setActiveItem(e):e-1>=0&&this._keyManager.setActiveItem(e-1)),this._keyManager.activeItemIndex===e&&(this._lastDestroyedIndex=e))},e.prototype._updateFocusForDestroyedChips=function(){var t=this.chips.toArray();if(null!=this._lastDestroyedIndex&&t.length>0&&(this.focused||this._keyManager.activeItem&&-1===t.indexOf(this._keyManager.activeItem))){var e=Math.min(this._lastDestroyedIndex,t.length-1);this._keyManager.setActiveItem(e);var n=this._keyManager.activeItem;n&&n.focus()}this._lastDestroyedIndex=null},e.prototype._isValidIndex=function(t){return t>=0&&t<this.chips.length},e.prototype._isInputEmpty=function(t){return!(!t||"input"!==t.nodeName.toLowerCase()||t.value)},e.prototype._setSelectionByValue=function(t,e){var n=this;if(void 0===e&&(e=!0),this._clearSelection(),this.chips.forEach(function(t){return t.deselect()}),Array.isArray(t))t.forEach(function(t){return n._selectValue(t,e)}),this._sortValues();else{var r=this._selectValue(t,e);r&&e&&this._keyManager.setActiveItem(r)}},e.prototype._selectValue=function(t,e){var n=this;void 0===e&&(e=!0);var r=this.chips.find(function(e){return null!=e.value&&n._compareWith(e.value,t)});return r&&(e?r.selectViaInteraction():r.select(),this._selectionModel.select(r)),r},e.prototype._initializeSelection=function(){var t=this;Promise.resolve().then(function(){(t.ngControl||t._value)&&(t._setSelectionByValue(t.ngControl?t.ngControl.value:t._value,!1),t.stateChanges.next())})},e.prototype._clearSelection=function(t){this._selectionModel.clear(),this.chips.forEach(function(e){e!==t&&e.deselect()}),this.stateChanges.next()},e.prototype._sortValues=function(){var t=this;this._multiple&&(this._selectionModel.clear(),this.chips.forEach(function(e){e.selected&&t._selectionModel.select(e)}),this.stateChanges.next())},e.prototype._propagateChanges=function(t){var e;e=Array.isArray(this.selected)?this.selected.map(function(t){return t.value}):this.selected?this.selected.value:t,this._value=e,this.change.emit(new function(t,e){this.source=t,this.value=e}(this,e)),this.valueChange.emit(e),this._onChange(e),this._changeDetectorRef.markForCheck()},e.prototype._blur=function(){var t=this;this._keyManager.setActiveItem(-1),this.disabled||(this._chipInput?setTimeout(function(){t.focused||t._markAsTouched()}):this._markAsTouched())},e.prototype._markAsTouched=function(){this._onTouched(),this._changeDetectorRef.markForCheck(),this.stateChanges.next()},e.prototype._resetChips=function(){this._dropSubscriptions(),this._listenToChipsFocus(),this._listenToChipsSelection(),this._listenToChipsRemoved()},e.prototype._dropSubscriptions=function(){this._chipFocusSubscription&&(this._chipFocusSubscription.unsubscribe(),this._chipFocusSubscription=null),this._chipBlurSubscription&&(this._chipBlurSubscription.unsubscribe(),this._chipBlurSubscription=null),this._chipSelectionSubscription&&(this._chipSelectionSubscription.unsubscribe(),this._chipSelectionSubscription=null)},e.prototype._listenToChipsSelection=function(){var t=this;this._chipSelectionSubscription=this.chipSelectionChanges.subscribe(function(e){e.source.selected?t._selectionModel.select(e.source):t._selectionModel.deselect(e.source),t.multiple||t.chips.forEach(function(e){!t._selectionModel.isSelected(e)&&e.selected&&e.deselect()}),e.isUserInput&&t._propagateChanges()})},e.prototype._listenToChipsFocus=function(){var t=this;this._chipFocusSubscription=this.chipFocusChanges.subscribe(function(e){var n=t.chips.toArray().indexOf(e.chip);t._isValidIndex(n)&&t._keyManager.updateActiveItemIndex(n),t.stateChanges.next()}),this._chipBlurSubscription=this.chipBlurChanges.subscribe(function(){t._blur(),t.stateChanges.next()})},e.prototype._listenToChipsRemoved=function(){var t=this;this._chipRemoveSubscription=this.chipRemoveChanges.subscribe(function(e){t._updateKeyManager(e.chip)})},e}(Object(a.F)(function(t,e,n,r){this._defaultErrorStateMatcher=t,this._parentForm=e,this._parentFormGroup=n,this.ngControl=r})),v=function(){}},"0/Q6":function(t,e,n){"use strict";n.d(e,"d",function(){return _}),n.d(e,"f",function(){return d}),n.d(e,"a",function(){return p}),n.d(e,"b",function(){return m}),n.d(e,"c",function(){return g}),n.d(e,"e",function(){return y}),n.d(e,"g",function(){return v});var r=n("mrSG"),i=n("CcnG"),o=n("Wf4p"),l=n("lLAP"),a=n("n6gG"),u=n("YlbQ"),s=n("YSh2"),c=(n("gIcY"),n("pugT")),h=Object(o.D)(function(){}),f=Object(o.D)(function(){}),d=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Object(r.b)(e,t),e}(h),p=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Object(r.b)(e,t),e}(h),m=function(){},g=function(t){function e(e,n){var r=t.call(this)||this;return r._element=e,r._navList=n,r._isNavList=!1,r._isNavList=!!n,r}return Object(r.b)(e,t),e.prototype.ngAfterContentInit=function(){new o.o(this._lines,this._element)},e.prototype._isRippleDisabled=function(){return!this._isNavList||this.disableRipple||this._navList.disableRipple},e.prototype._handleFocus=function(){this._element.nativeElement.classList.add("mat-list-item-focus")},e.prototype._handleBlur=function(){this._element.nativeElement.classList.remove("mat-list-item-focus")},e.prototype._getHostElement=function(){return this._element.nativeElement},e}(f),b=Object(o.D)(function(){}),y=function(t){function e(e,n,r){var i=t.call(this)||this;return i._element=e,i._changeDetector=n,i.selectionList=r,i._selected=!1,i._disabled=!1,i._hasFocus=!1,i.checkboxPosition="after",i}return Object(r.b)(e,t),Object.defineProperty(e.prototype,"disabled",{get:function(){return this._disabled||this.selectionList&&this.selectionList.disabled},set:function(t){var e=Object(a.c)(t);e!==this._disabled&&(this._disabled=e,this._changeDetector.markForCheck())},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"selected",{get:function(){return this.selectionList.selectedOptions.isSelected(this)},set:function(t){var e=Object(a.c)(t);e!==this._selected&&(this._setSelected(e),this.selectionList._reportValueChange())},enumerable:!0,configurable:!0}),e.prototype.ngOnInit=function(){var t=this,e=this._selected;Promise.resolve().then(function(){(t._selected||e)&&(t.selected=!0,t._changeDetector.markForCheck())})},e.prototype.ngAfterContentInit=function(){new o.o(this._lines,this._element)},e.prototype.ngOnDestroy=function(){var t=this;this.selected&&Promise.resolve().then(function(){return t.selected=!1}),this.selectionList._removeOptionFromList(this)},e.prototype.toggle=function(){this.selected=!this.selected},e.prototype.focus=function(){this._element.nativeElement.focus()},e.prototype.getLabel=function(){return this._text?this._text.nativeElement.textContent:""},e.prototype._isRippleDisabled=function(){return this.disabled||this.disableRipple||this.selectionList.disableRipple},e.prototype._handleClick=function(){this.disabled||(this.toggle(),this.selectionList._emitChangeEvent(this))},e.prototype._handleFocus=function(){this._hasFocus=!0,this.selectionList._setFocusedOption(this)},e.prototype._handleBlur=function(){this._hasFocus=!1,this.selectionList._onTouched()},e.prototype._getHostElement=function(){return this._element.nativeElement},e.prototype._setSelected=function(t){return t!==this._selected&&(this._selected=t,t?this.selectionList.selectedOptions.select(this):this.selectionList.selectedOptions.deselect(this),this._changeDetector.markForCheck(),!0)},e.prototype._markForCheck=function(){this._changeDetector.markForCheck()},e}(Object(o.D)(function(){})),v=function(t){function e(e,n){var r=t.call(this)||this;return r._element=e,r.selectionChange=new i.n,r.tabIndex=0,r._disabled=!1,r.selectedOptions=new u.b(!0),r._onChange=function(t){},r._modelChanges=c.a.EMPTY,r._onTouched=function(){},r.tabIndex=parseInt(n)||0,r}return Object(r.b)(e,t),Object.defineProperty(e.prototype,"disabled",{get:function(){return this._disabled},set:function(t){this._disabled=Object(a.c)(t),this.options&&this.options.forEach(function(t){return t._markForCheck()})},enumerable:!0,configurable:!0}),e.prototype.ngAfterContentInit=function(){this._keyManager=new l.c(this.options).withWrap().withTypeAhead().skipPredicate(function(){return!1}),this._tempValues&&(this._setOptionsFromValues(this._tempValues),this._tempValues=null),this._modelChanges=this.selectedOptions.onChange.subscribe(function(t){if(t.added)for(var e=0,n=t.added;e<n.length;e++)n[e].selected=!0;if(t.removed)for(var r=0,i=t.removed;r<i.length;r++)i[r].selected=!1})},e.prototype.ngOnDestroy=function(){this._modelChanges.unsubscribe()},e.prototype.focus=function(){this._element.nativeElement.focus()},e.prototype.selectAll=function(){this._setAllOptionsSelected(!0)},e.prototype.deselectAll=function(){this._setAllOptionsSelected(!1)},e.prototype._setFocusedOption=function(t){this._keyManager.updateActiveItemIndex(this._getOptionIndex(t))},e.prototype._removeOptionFromList=function(t){if(t._hasFocus){var e=this._getOptionIndex(t);e>0?this._keyManager.setPreviousItemActive():0===e&&this.options.length>1&&this._keyManager.setNextItemActive()}},e.prototype._keydown=function(t){var e=t.keyCode,n=this._keyManager,r=n.activeItemIndex;switch(e){case s.l:case s.f:this._toggleFocusedOption(),t.preventDefault();break;case s.h:case s.e:e===s.h?n.setFirstItemActive():n.setLastItemActive(),t.preventDefault();break;case s.a:t.ctrlKey&&(this.options.find(function(t){return!t.selected})?this.selectAll():this.deselectAll(),t.preventDefault());break;default:n.onKeydown(t)}e!==s.n&&e!==s.d||!t.shiftKey||n.activeItemIndex===r||this._toggleFocusedOption()},e.prototype._reportValueChange=function(){this.options&&this._onChange(this._getSelectedOptionValues())},e.prototype._emitChangeEvent=function(t){this.selectionChange.emit(new function(t,e){this.source=t,this.option=e}(this,t))},e.prototype.writeValue=function(t){this.options?this._setOptionsFromValues(t||[]):this._tempValues=t},e.prototype.setDisabledState=function(t){this.disabled=t},e.prototype.registerOnChange=function(t){this._onChange=t},e.prototype.registerOnTouched=function(t){this._onTouched=t},e.prototype._setOptionsFromValues=function(t){var e=this;this.options.forEach(function(t){return t._setSelected(!1)}),t.map(function(t){return e.options.find(function(n){return e.compareWith?e.compareWith(n.value,t):n.value===t})}).filter(Boolean).forEach(function(t){return t._setSelected(!0)})},e.prototype._getSelectedOptionValues=function(){return this.options.filter(function(t){return t.selected}).map(function(t){return t.value})},e.prototype._toggleFocusedOption=function(){var t=this._keyManager.activeItemIndex;if(null!=t&&this._isValidIndex(t)){var e=this.options.toArray()[t];e&&!e.disabled&&(e.toggle(),this._emitChangeEvent(e))}},e.prototype._setAllOptionsSelected=function(t){var e=!1;this.options.forEach(function(n){n._setSelected(t)&&(e=!0)}),e&&this._reportValueChange()},e.prototype._isValidIndex=function(t){return t>=0&&t<this.options.length},e.prototype._getOptionIndex=function(t){return this.options.toArray().indexOf(t)},e}(b),_=function(){}},"0/uQ":function(t,e,n){"use strict";var r=n("6blF"),i=n("/WYv"),o=n("2ePl"),l=n("xTla"),a=n("En8+"),u=n("IUTb"),s=n("pugT"),c=n("S5XQ"),h=n("u67D"),f=n("JcRv"),d=n("Fxb1");function p(t,e){if(!e)return t instanceof r.a?t:new r.a(Object(d.a)(t));if(null!=t){if(function(t){return t&&"function"==typeof t[l.a]}(t))return function(t,e){return new r.a(e?function(n){var r=new s.a;return r.add(e.schedule(function(){var i=t[l.a]();r.add(i.subscribe({next:function(t){r.add(e.schedule(function(){return n.next(t)}))},error:function(t){r.add(e.schedule(function(){return n.error(t)}))},complete:function(){r.add(e.schedule(function(){return n.complete()}))}}))})),r}:Object(f.a)(t))}(t,e);if(Object(i.a)(t))return function(t,e){return new r.a(e?function(n){var r=new s.a;return r.add(e.schedule(function(){return t.then(function(t){r.add(e.schedule(function(){n.next(t),r.add(e.schedule(function(){return n.complete()}))}))},function(t){r.add(e.schedule(function(){return n.error(t)}))})})),r}:Object(c.a)(t))}(t,e);if(Object(o.a)(t))return Object(u.a)(t,e);if(function(t){return t&&"function"==typeof t[a.a]}(t)||"string"==typeof t)return function(t,e){if(!t)throw new Error("Iterable cannot be null");return new r.a(e?function(n){var r,i=new s.a;return i.add(function(){r&&"function"==typeof r.return&&r.return()}),i.add(e.schedule(function(){r=t[a.a](),i.add(e.schedule(function(){if(!n.closed){var t,e;try{var i=r.next();t=i.value,e=i.done}catch(t){return void n.error(t)}e?n.complete():(n.next(t),this.schedule())}}))})),i}:Object(h.a)(t))}(t,e)}throw new TypeError((null!==t&&typeof t||t)+" is not observable")}n.d(e,"a",function(){return p})},"15JJ":function(t,e,n){"use strict";n.d(e,"a",function(){return u});var r=n("mrSG"),i=n("MGBS"),o=n("zotm"),l=n("67Y/"),a=n("0/uQ");function u(t,e){return"function"==typeof e?function(n){return n.pipe(u(function(n,r){return Object(a.a)(t(n,r)).pipe(Object(l.a)(function(t,i){return e(n,t,r,i)}))}))}:function(e){return e.lift(new s(t))}}var s=function(){function t(t){this.project=t}return t.prototype.call=function(t,e){return e.subscribe(new c(t,this.project))},t}(),c=function(t){function e(e,n){var r=t.call(this,e)||this;return r.project=n,r.index=0,r}return r.b(e,t),e.prototype._next=function(t){var e,n=this.index++;try{e=this.project(t,n)}catch(t){return void this.destination.error(t)}this._innerSub(e,t,n)},e.prototype._innerSub=function(t,e,n){var r=this.innerSubscription;r&&r.unsubscribe(),this.add(this.innerSubscription=Object(o.a)(this,t,e,n))},e.prototype._complete=function(){var e=this.innerSubscription;e&&!e.closed||t.prototype._complete.call(this)},e.prototype._unsubscribe=function(){this.innerSubscription=null},e.prototype.notifyComplete=function(e){this.remove(e),this.innerSubscription=null,this.isStopped&&t.prototype._complete.call(this)},e.prototype.notifyNext=function(t,e,n,r,i){this.destination.next(e)},e}(i.a)},"21Lb":function(t,e,n){"use strict";n.d(e,"c",function(){return g}),n.d(e,"a",function(){return f}),n.d(e,"b",function(){return p}),n.d(e,"e",function(){return c}),n.d(e,"d",function(){return m});var r=n("mrSG"),i=n("OzfB"),o=n("S5bw"),l="inline",a=["row","column","row-reverse","column-reverse"];function u(t){var e=(t=t?t.toLowerCase():"").split(" "),n=e[0],r=e[1],i=e[2];return a.find(function(t){return t===n})||(n=a[0]),r===l&&(r=i!==l?i:"",i=l),[n,function(t){if(t)switch(t.toLowerCase()){case"reverse":case"wrap-reverse":case"reverse-wrap":t="wrap-reverse";break;case"no":case"none":case"nowrap":t="nowrap";break;default:t="wrap"}return t}(r),!!i]}function s(t){return u(t)[0].indexOf("row")>-1}var c=function(t){function e(e,n,r){var i=t.call(this,e,n,r)||this;return i._announcer=new o.a(1),i.layout$=i._announcer.asObservable(),i}return Object(r.b)(e,t),Object.defineProperty(e.prototype,"layout",{set:function(t){this._cacheInput("layout",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"layoutXs",{set:function(t){this._cacheInput("layoutXs",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"layoutSm",{set:function(t){this._cacheInput("layoutSm",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"layoutMd",{set:function(t){this._cacheInput("layoutMd",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"layoutLg",{set:function(t){this._cacheInput("layoutLg",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"layoutXl",{set:function(t){this._cacheInput("layoutXl",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"layoutGtXs",{set:function(t){this._cacheInput("layoutGtXs",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"layoutGtSm",{set:function(t){this._cacheInput("layoutGtSm",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"layoutGtMd",{set:function(t){this._cacheInput("layoutGtMd",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"layoutGtLg",{set:function(t){this._cacheInput("layoutGtLg",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"layoutLtSm",{set:function(t){this._cacheInput("layoutLtSm",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"layoutLtMd",{set:function(t){this._cacheInput("layoutLtMd",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"layoutLtLg",{set:function(t){this._cacheInput("layoutLtLg",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"layoutLtXl",{set:function(t){this._cacheInput("layoutLtXl",t)},enumerable:!0,configurable:!0}),e.prototype.ngOnChanges=function(t){(null!=t.layout||this._mqActivation)&&this._updateWithDirection()},e.prototype.ngOnInit=function(){var e=this;t.prototype.ngOnInit.call(this),this._listenForMediaQueryChanges("layout","row",function(t){e._updateWithDirection(t.value)}),this._updateWithDirection()},e.prototype._updateWithDirection=function(t){t=t||this._queryInput("layout")||"row",this._mqActivation&&(t=this._mqActivation.activatedInput);var e=function(t){var e=u(t);return function(t,n,r){return void 0===n&&(n=null),void 0===r&&(r=!1),{display:r?"inline-flex":"flex","box-sizing":"border-box","flex-direction":e[0],"flex-wrap":n||null}}(0,e[1],e[2])}(t||"");this._applyStyleToElement(e),this._announcer.next({direction:e["flex-direction"],wrap:!!e["flex-wrap"]&&"nowrap"!==e["flex-wrap"]})},e}(i.b);function h(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n];if(null==t)throw TypeError("Cannot convert undefined or null to object");for(var r=0,i=e;r<i.length;r++){var o=i[r];if(null!=o)for(var l in o)o.hasOwnProperty(l)&&(t[l]=o[l])}return t}var f=function(t){function e(e,n,r,i,o){var l=t.call(this,e,n,i)||this;return l._container=r,l.styleUtils=i,l.layoutConfig=o,l._cacheInput("flex",""),l._cacheInput("shrink",1),l._cacheInput("grow",1),r&&(l._layoutWatcher=r.layout$.subscribe(function(t){l._onLayoutChange(t)})),l}return Object(r.b)(e,t),Object.defineProperty(e.prototype,"shrink",{set:function(t){this._cacheInput("shrink",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"grow",{set:function(t){this._cacheInput("grow",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"flex",{set:function(t){this._cacheInput("flex",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"flexXs",{set:function(t){this._cacheInput("flexXs",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"flexSm",{set:function(t){this._cacheInput("flexSm",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"flexMd",{set:function(t){this._cacheInput("flexMd",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"flexLg",{set:function(t){this._cacheInput("flexLg",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"flexXl",{set:function(t){this._cacheInput("flexXl",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"flexGtXs",{set:function(t){this._cacheInput("flexGtXs",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"flexGtSm",{set:function(t){this._cacheInput("flexGtSm",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"flexGtMd",{set:function(t){this._cacheInput("flexGtMd",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"flexGtLg",{set:function(t){this._cacheInput("flexGtLg",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"flexLtSm",{set:function(t){this._cacheInput("flexLtSm",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"flexLtMd",{set:function(t){this._cacheInput("flexLtMd",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"flexLtLg",{set:function(t){this._cacheInput("flexLtLg",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"flexLtXl",{set:function(t){this._cacheInput("flexLtXl",t)},enumerable:!0,configurable:!0}),e.prototype.ngOnChanges=function(t){(null!=t.flex||this._mqActivation)&&this._updateStyle()},e.prototype.ngOnInit=function(){var e=this;t.prototype.ngOnInit.call(this),this._listenForMediaQueryChanges("flex","",function(t){e._updateStyle(t.value)}),this._updateStyle()},e.prototype.ngOnDestroy=function(){t.prototype.ngOnDestroy.call(this),this._layoutWatcher&&this._layoutWatcher.unsubscribe()},e.prototype._onLayoutChange=function(t){this._layout=t||this._layout||{direction:"row",wrap:!1},this._updateStyle()},e.prototype._updateStyle=function(t){var e=t||this._queryInput("flex")||"";this._mqActivation&&(e=this._mqActivation.activatedInput);var n=String(e).replace(";",""),r=Object(i.o)(n,this._queryInput("grow"),this._queryInput("shrink"));this._applyStyleToElement(this._validateValue.apply(this,r))},e.prototype._validateValue=function(t,e,n){var r=this._getFlexFlowDirection(this.parentElement,this.layoutConfig.addFlexToParent).indexOf("column")>-1?"column":"row",i=s(r)?"max-width":"max-height",o=s(r)?"min-width":"min-height",l=String(n).indexOf("calc")>-1,a=l||"auto"==n,u=String(n).indexOf("%")>-1&&!l,c=String(n).indexOf("px")>-1||String(n).indexOf("em")>-1||String(n).indexOf("vw")>-1||String(n).indexOf("vh")>-1,f=String(n).indexOf("px")>-1||a,d=l||c;t="0"==t?0:t,e="0"==e?0:e;var p=!t&&!e,m={},g={"max-width":null,"max-height":null,"min-width":null,"min-height":null};switch(n||""){case"":n="row"===r?"0%":this.layoutConfig.useColumnBasisZero?"0.000000001px":"auto";break;case"initial":case"nogrow":t=0,n="auto";break;case"grow":n="100%";break;case"noshrink":e=0,n="auto";break;case"auto":break;case"none":t=0,e=0,n="auto";break;default:d||u||isNaN(n)||(n+="%"),"0%"===n&&(d=!0),"0px"===n&&(n="0%"),m=h(g,l?{"flex-grow":t,"flex-shrink":e,"flex-basis":d?n:"100%"}:{flex:t+" "+e+" "+(d?n:"100%")})}return m.flex||m["flex-grow"]||(m=h(g,l?{"flex-grow":t,"flex-shrink":e,"flex-basis":n}:{flex:t+" "+e+" "+n})),"0%"!==n&&"0px"!==n&&"0.000000001px"!==n&&"auto"!==n&&(m[o]=p||f&&t?n:null,m[i]=p||!a&&e?n:null),m[o]||m[i]?this._layout&&this._layout.wrap&&(m[l?"flex-basis":"flex"]=m[i]?l?m[i]:t+" "+e+" "+m[i]:l?m[o]:t+" "+e+" "+m[o]):m=h(g,l?{"flex-grow":t,"flex-shrink":e,"flex-basis":n}:{flex:t+" "+e+" "+n}),h(m,{"box-sizing":"border-box"})},e}(i.b),d={margin:0,width:"100%",height:"100%","min-width":"100%","min-height":"100%"},p=function(t){function e(e,n,r){var i=t.call(this,e,n,r)||this;return i.elRef=n,i._applyStyleToElement(d),i}return Object(r.b)(e,t),e}(i.b),m=function(t){function e(e,n,r,i){var o=t.call(this,e,n,i)||this;return o._layout="row",r&&(o._layoutWatcher=r.layout$.subscribe(o._onLayoutChange.bind(o))),o}return Object(r.b)(e,t),Object.defineProperty(e.prototype,"align",{set:function(t){this._cacheInput("align",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"alignXs",{set:function(t){this._cacheInput("alignXs",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"alignSm",{set:function(t){this._cacheInput("alignSm",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"alignMd",{set:function(t){this._cacheInput("alignMd",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"alignLg",{set:function(t){this._cacheInput("alignLg",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"alignXl",{set:function(t){this._cacheInput("alignXl",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"alignGtXs",{set:function(t){this._cacheInput("alignGtXs",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"alignGtSm",{set:function(t){this._cacheInput("alignGtSm",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"alignGtMd",{set:function(t){this._cacheInput("alignGtMd",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"alignGtLg",{set:function(t){this._cacheInput("alignGtLg",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"alignLtSm",{set:function(t){this._cacheInput("alignLtSm",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"alignLtMd",{set:function(t){this._cacheInput("alignLtMd",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"alignLtLg",{set:function(t){this._cacheInput("alignLtLg",t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"alignLtXl",{set:function(t){this._cacheInput("alignLtXl",t)},enumerable:!0,configurable:!0}),e.prototype.ngOnChanges=function(t){(null!=t.align||this._mqActivation)&&this._updateWithValue()},e.prototype.ngOnInit=function(){var e=this;t.prototype.ngOnInit.call(this),this._listenForMediaQueryChanges("align","start stretch",function(t){e._updateWithValue(t.value)}),this._updateWithValue()},e.prototype.ngOnDestroy=function(){t.prototype.ngOnDestroy.call(this),this._layoutWatcher&&this._layoutWatcher.unsubscribe()},e.prototype._updateWithValue=function(t){t=t||this._queryInput("align")||"start stretch",this._mqActivation&&(t=this._mqActivation.activatedInput),this._applyStyleToElement(this._buildCSS(t)),this._allowStretching(t,this._layout?this._layout:"row")},e.prototype._onLayoutChange=function(t){var e=this;this._layout=(t.direction||"").toLowerCase(),a.find(function(t){return t===e._layout})||(this._layout="row");var n=this._queryInput("align")||"start stretch";this._mqActivation&&(n=this._mqActivation.activatedInput),this._allowStretching(n,this._layout||"row")},e.prototype._buildCSS=function(t){var e={},n=t.split(" "),r=n[1];switch(n[0]){case"center":e["justify-content"]="center";break;case"space-around":e["justify-content"]="space-around";break;case"space-between":e["justify-content"]="space-between";break;case"space-evenly":e["justify-content"]="space-evenly";break;case"end":case"flex-end":e["justify-content"]="flex-end";break;case"start":case"flex-start":default:e["justify-content"]="flex-start"}switch(r){case"start":case"flex-start":e["align-items"]=e["align-content"]="flex-start";break;case"baseline":e["align-items"]="baseline";break;case"center":e["align-items"]=e["align-content"]="center";break;case"end":case"flex-end":e["align-items"]=e["align-content"]="flex-end";break;case"stretch":default:e["align-items"]=e["align-content"]="stretch"}return h(e,{display:"flex","flex-direction":this._layout||"row","box-sizing":"border-box"})},e.prototype._allowStretching=function(t,e){"stretch"==t.split(" ")[1]&&this._applyStyleToElement({"box-sizing":"border-box","max-width":s(e)?null:"100%","max-height":s(e)?"100%":null})},e}(i.b),g=function(){}},"26FU":function(t,e,n){"use strict";n.d(e,"a",function(){return l});var r=n("mrSG"),i=n("K9Ia"),o=n("8g8A"),l=function(t){function e(e){var n=t.call(this)||this;return n._value=e,n}return r.b(e,t),Object.defineProperty(e.prototype,"value",{get:function(){return this.getValue()},enumerable:!0,configurable:!0}),e.prototype._subscribe=function(e){var n=t.prototype._subscribe.call(this,e);return n&&!n.closed&&e.next(this._value),n},e.prototype.getValue=function(){if(this.hasError)throw this.thrownError;if(this.closed)throw new o.a;return this._value},e.prototype.next=function(e){t.prototype.next.call(this,this._value=e)},e}(i.a)},"2Bdj":function(t,e,n){"use strict";function r(t){return"function"==typeof t}n.d(e,"a",function(){return r})},"2WpN":function(t,e,n){"use strict";n.d(e,"a",function(){return l});var r=n("mrSG"),i=n("FFOo"),o=n("pugT");function l(t){return function(e){return e.lift(new a(t))}}var a=function(){function t(t){this.callback=t}return t.prototype.call=function(t,e){return e.subscribe(new u(t,this.callback))},t}(),u=function(t){function e(e,n){var r=t.call(this,e)||this;return r.add(new o.a(n)),r}return r.b(e,t),e}(i.a)},"2ePl":function(t,e,n){"use strict";n.d(e,"a",function(){return r});var r=function(t){return t&&"number"==typeof t.length&&"function"!=typeof t}},"3U0i":function(t,e,n){"use strict";n.d(e,"a",function(){return i});var r=n("mrSG"),i=function(t){function e(){var n=t.call(this,"Timeout has occurred")||this;return n.name="TimeoutError",Object.setPrototypeOf(n,e.prototype),n}return r.b(e,t),e}(Error)},"3fWJ":function(t,e,n){"use strict";n.d(e,"a",function(){return i});var r=n("mrSG"),i=function(t){function e(){var n=t.call(this,"no elements in sequence")||this;return n.name="EmptyError",Object.setPrototypeOf(n,e.prototype),n}return r.b(e,t),e}(Error)},"3pJQ":function(t,e,n){"use strict";n.d(e,"a",function(){return r}),n("mrSG"),n("OzfB"),n("n6gG");var r=function(){}},4:function(t,e,n){t.exports=n("zUnb")},"4c35":function(t,e,n){"use strict";n.d(e,"d",function(){return a}),n.d(e,"h",function(){return u}),n.d(e,"a",function(){return s}),n.d(e,"e",function(){return c}),n.d(e,"b",function(){return h}),n.d(e,"c",function(){return f}),n.d(e,"g",function(){return d}),n.d(e,"f",function(){return p});var r=n("mrSG"),i=n("CcnG");function o(){throw Error("Host already has a portal attached")}var l=function(){function t(){}return t.prototype.attach=function(t){return null==t&&function(){throw Error("Attempting to attach a portal to a null PortalOutlet")}(),t.hasAttached()&&o(),this._attachedHost=t,t.attach(this)},t.prototype.detach=function(){var t=this._attachedHost;null==t?function(){throw Error("Attempting to detach a portal that is not attached to a host")}():(this._attachedHost=null,t.detach())},Object.defineProperty(t.prototype,"isAttached",{get:function(){return null!=this._attachedHost},enumerable:!0,configurable:!0}),t.prototype.setAttachedHost=function(t){this._attachedHost=t},t}(),a=function(t){function e(e,n,r){var i=t.call(this)||this;return i.component=e,i.viewContainerRef=n,i.injector=r,i}return Object(r.b)(e,t),e}(l),u=function(t){function e(e,n,r){var i=t.call(this)||this;return i.templateRef=e,i.viewContainerRef=n,i.context=r,i}return Object(r.b)(e,t),Object.defineProperty(e.prototype,"origin",{get:function(){return this.templateRef.elementRef},enumerable:!0,configurable:!0}),e.prototype.attach=function(e,n){return void 0===n&&(n=this.context),this.context=n,t.prototype.attach.call(this,e)},e.prototype.detach=function(){return this.context=void 0,t.prototype.detach.call(this)},e}(l),s=function(){function t(){this._isDisposed=!1}return t.prototype.hasAttached=function(){return!!this._attachedPortal},t.prototype.attach=function(t){return t||function(){throw Error("Must provide a portal to attach")}(),this.hasAttached()&&o(),this._isDisposed&&function(){throw Error("This PortalOutlet has already been disposed")}(),t instanceof a?(this._attachedPortal=t,this.attachComponentPortal(t)):t instanceof u?(this._attachedPortal=t,this.attachTemplatePortal(t)):void function(){throw Error("Attempting to attach an unknown Portal type. BasePortalOutlet accepts either a ComponentPortal or a TemplatePortal.")}()},t.prototype.detach=function(){this._attachedPortal&&(this._attachedPortal.setAttachedHost(null),this._attachedPortal=null),this._invokeDisposeFn()},t.prototype.dispose=function(){this.hasAttached()&&this.detach(),this._invokeDisposeFn(),this._isDisposed=!0},t.prototype.setDisposeFn=function(t){this._disposeFn=t},t.prototype._invokeDisposeFn=function(){this._disposeFn&&(this._disposeFn(),this._disposeFn=null)},t}(),c=function(t){function e(e,n,r,i){var o=t.call(this)||this;return o.outletElement=e,o._componentFactoryResolver=n,o._appRef=r,o._defaultInjector=i,o}return Object(r.b)(e,t),e.prototype.attachComponentPortal=function(t){var e,n=this,r=this._componentFactoryResolver.resolveComponentFactory(t.component);return t.viewContainerRef?(e=t.viewContainerRef.createComponent(r,t.viewContainerRef.length,t.injector||t.viewContainerRef.parentInjector),this.setDisposeFn(function(){return e.destroy()})):(e=r.create(t.injector||this._defaultInjector),this._appRef.attachView(e.hostView),this.setDisposeFn(function(){n._appRef.detachView(e.hostView),e.destroy()})),this.outletElement.appendChild(this._getComponentRootNode(e)),e},e.prototype.attachTemplatePortal=function(t){var e=this,n=t.viewContainerRef,r=n.createEmbeddedView(t.templateRef,t.context);return r.detectChanges(),r.rootNodes.forEach(function(t){return e.outletElement.appendChild(t)}),this.setDisposeFn(function(){var t=n.indexOf(r);-1!==t&&n.remove(t)}),r},e.prototype.dispose=function(){t.prototype.dispose.call(this),null!=this.outletElement.parentNode&&this.outletElement.parentNode.removeChild(this.outletElement)},e.prototype._getComponentRootNode=function(t){return t.hostView.rootNodes[0]},e}(s),h=function(t){function e(e,n){return t.call(this,e,n)||this}return Object(r.b)(e,t),e}(u),f=function(t){function e(e,n){var r=t.call(this)||this;return r._componentFactoryResolver=e,r._viewContainerRef=n,r._isInitialized=!1,r.attached=new i.n,r}return Object(r.b)(e,t),Object.defineProperty(e.prototype,"portal",{get:function(){return this._attachedPortal},set:function(e){(!this.hasAttached()||e||this._isInitialized)&&(this.hasAttached()&&t.prototype.detach.call(this),e&&t.prototype.attach.call(this,e),this._attachedPortal=e)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"attachedRef",{get:function(){return this._attachedRef},enumerable:!0,configurable:!0}),e.prototype.ngOnInit=function(){this._isInitialized=!0},e.prototype.ngOnDestroy=function(){t.prototype.dispose.call(this),this._attachedPortal=null,this._attachedRef=null},e.prototype.attachComponentPortal=function(e){e.setAttachedHost(this);var n=null!=e.viewContainerRef?e.viewContainerRef:this._viewContainerRef,r=this._componentFactoryResolver.resolveComponentFactory(e.component),i=n.createComponent(r,n.length,e.injector||n.parentInjector);return t.prototype.setDisposeFn.call(this,function(){return i.destroy()}),this._attachedPortal=e,this._attachedRef=i,this.attached.emit(i),i},e.prototype.attachTemplatePortal=function(e){var n=this;e.setAttachedHost(this);var r=this._viewContainerRef.createEmbeddedView(e.templateRef,e.context);return t.prototype.setDisposeFn.call(this,function(){return n._viewContainerRef.clear()}),this._attachedPortal=e,this._attachedRef=r,this.attached.emit(r),r},e}(s),d=function(){},p=function(){function t(t,e){this._parentInjector=t,this._customTokens=e}return t.prototype.get=function(t,e){var n=this._customTokens.get(t);return void 0!==n?n:this._parentInjector.get(t,e)},t}()},"60iU":function(t,e,n){"use strict";n.d(e,"a",function(){return l});var r=n("G5J1"),i=n("F/XL"),o=n("XlPw"),l=function(){function t(t,e,n){this.kind=t,this.value=e,this.error=n,this.hasValue="N"===t}return t.prototype.observe=function(t){switch(this.kind){case"N":return t.next&&t.next(this.value);case"E":return t.error&&t.error(this.error);case"C":return t.complete&&t.complete()}},t.prototype.do=function(t,e,n){switch(this.kind){case"N":return t&&t(this.value);case"E":return e&&e(this.error);case"C":return n&&n()}},t.prototype.accept=function(t,e,n){return t&&"function"==typeof t.next?this.observe(t):this.do(t,e,n)},t.prototype.toObservable=function(){switch(this.kind){case"N":return Object(i.a)(this.value);case"E":return Object(o.a)(this.error);case"C":return Object(r.b)()}throw new Error("unexpected notification kind value")},t.createNext=function(e){return void 0!==e?new t("N",e):t.undefinedValueNotification},t.createError=function(e){return new t("E",void 0,e)},t.createComplete=function(){return t.completeNotification},t.completeNotification=new t("C"),t.undefinedValueNotification=new t("N",void 0),t}()},"67Y/":function(t,e,n){"use strict";n.d(e,"a",function(){return o});var r=n("mrSG"),i=n("FFOo");function o(t,e){return function(n){if("function"!=typeof t)throw new TypeError("argument is not a function. Are you looking for `mapTo()`?");return n.lift(new l(t,e))}}var l=function(){function t(t,e){this.project=t,this.thisArg=e}return t.prototype.call=function(t,e){return e.subscribe(new a(t,this.project,this.thisArg))},t}(),a=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.project=n,i.count=0,i.thisArg=r||i,i}return r.b(e,t),e.prototype._next=function(t){var e;try{e=this.project.call(this.thisArg,t,this.count++)}catch(t){return void this.destination.error(t)}this.destination.next(e)},e}(i.a)},"6UMx":function(t,e,n){"use strict";n.d(e,"a",function(){return a}),n.d(e,"d",function(){return u}),n.d(e,"b",function(){return s}),n.d(e,"c",function(){return c});var r=n("CcnG"),i=(n("0/Q6"),n("Ip0R"),n("Fzqc"),n("Wf4p")),o=n("dWZg"),l=(n("LC5p"),n("wFw1"));n("MlvX"),n("gIcY");var a=r.Pa({encapsulation:2,styles:[".mat-divider{display:block;margin:0;border-top-width:1px;border-top-style:solid}.mat-divider.mat-divider-vertical{border-top:0;border-right-width:1px;border-right-style:solid}.mat-divider.mat-divider-inset{margin-left:80px}[dir=rtl] .mat-divider.mat-divider-inset{margin-left:auto;margin-right:80px}.mat-subheader{display:flex;box-sizing:border-box;padding:16px;align-items:center}.mat-list .mat-subheader,.mat-nav-list .mat-subheader,.mat-selection-list .mat-subheader{margin:0}.mat-list,.mat-nav-list,.mat-selection-list{padding-top:8px;display:block;-webkit-tap-highlight-color:transparent}.mat-list .mat-subheader,.mat-nav-list .mat-subheader,.mat-selection-list .mat-subheader{height:48px;line-height:16px}.mat-list .mat-subheader:first-child,.mat-nav-list .mat-subheader:first-child,.mat-selection-list .mat-subheader:first-child{margin-top:-8px}.mat-list .mat-list-item,.mat-list .mat-list-option,.mat-nav-list .mat-list-item,.mat-nav-list .mat-list-option,.mat-selection-list .mat-list-item,.mat-selection-list .mat-list-option{display:block;height:48px;-webkit-tap-highlight-color:transparent}.mat-list .mat-list-item .mat-list-item-content,.mat-list .mat-list-option .mat-list-item-content,.mat-nav-list .mat-list-item .mat-list-item-content,.mat-nav-list .mat-list-option .mat-list-item-content,.mat-selection-list .mat-list-item .mat-list-item-content,.mat-selection-list .mat-list-option .mat-list-item-content{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;padding:0 16px;position:relative;height:inherit}.mat-list .mat-list-item .mat-list-item-content-reverse,.mat-list .mat-list-option .mat-list-item-content-reverse,.mat-nav-list .mat-list-item .mat-list-item-content-reverse,.mat-nav-list .mat-list-option .mat-list-item-content-reverse,.mat-selection-list .mat-list-item .mat-list-item-content-reverse,.mat-selection-list .mat-list-option .mat-list-item-content-reverse{display:flex;align-items:center;padding:0 16px;flex-direction:row-reverse;justify-content:space-around}.mat-list .mat-list-item .mat-list-item-ripple,.mat-list .mat-list-option .mat-list-item-ripple,.mat-nav-list .mat-list-item .mat-list-item-ripple,.mat-nav-list .mat-list-option .mat-list-item-ripple,.mat-selection-list .mat-list-item .mat-list-item-ripple,.mat-selection-list .mat-list-option .mat-list-item-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-list .mat-list-item.mat-list-item-with-avatar,.mat-list .mat-list-option.mat-list-item-with-avatar,.mat-nav-list .mat-list-item.mat-list-item-with-avatar,.mat-nav-list .mat-list-option.mat-list-item-with-avatar,.mat-selection-list .mat-list-item.mat-list-item-with-avatar,.mat-selection-list .mat-list-option.mat-list-item-with-avatar{height:56px}.mat-list .mat-list-item.mat-2-line,.mat-list .mat-list-option.mat-2-line,.mat-nav-list .mat-list-item.mat-2-line,.mat-nav-list .mat-list-option.mat-2-line,.mat-selection-list .mat-list-item.mat-2-line,.mat-selection-list .mat-list-option.mat-2-line{height:72px}.mat-list .mat-list-item.mat-3-line,.mat-list .mat-list-option.mat-3-line,.mat-nav-list .mat-list-item.mat-3-line,.mat-nav-list .mat-list-option.mat-3-line,.mat-selection-list .mat-list-item.mat-3-line,.mat-selection-list .mat-list-option.mat-3-line{height:88px}.mat-list .mat-list-item.mat-multi-line,.mat-list .mat-list-option.mat-multi-line,.mat-nav-list .mat-list-item.mat-multi-line,.mat-nav-list .mat-list-option.mat-multi-line,.mat-selection-list .mat-list-item.mat-multi-line,.mat-selection-list .mat-list-option.mat-multi-line{height:auto}.mat-list .mat-list-item.mat-multi-line .mat-list-item-content,.mat-list .mat-list-option.mat-multi-line .mat-list-item-content,.mat-nav-list .mat-list-item.mat-multi-line .mat-list-item-content,.mat-nav-list .mat-list-option.mat-multi-line .mat-list-item-content,.mat-selection-list .mat-list-item.mat-multi-line .mat-list-item-content,.mat-selection-list .mat-list-option.mat-multi-line .mat-list-item-content{padding-top:16px;padding-bottom:16px}.mat-list .mat-list-item .mat-list-text,.mat-list .mat-list-option .mat-list-text,.mat-nav-list .mat-list-item .mat-list-text,.mat-nav-list .mat-list-option .mat-list-text,.mat-selection-list .mat-list-item .mat-list-text,.mat-selection-list .mat-list-option .mat-list-text{display:flex;flex-direction:column;width:100%;box-sizing:border-box;overflow:hidden;padding:0}.mat-list .mat-list-item .mat-list-text>*,.mat-list .mat-list-option .mat-list-text>*,.mat-nav-list .mat-list-item .mat-list-text>*,.mat-nav-list .mat-list-option .mat-list-text>*,.mat-selection-list .mat-list-item .mat-list-text>*,.mat-selection-list .mat-list-option .mat-list-text>*{margin:0;padding:0;font-weight:400;font-size:inherit}.mat-list .mat-list-item .mat-list-text:empty,.mat-list .mat-list-option .mat-list-text:empty,.mat-nav-list .mat-list-item .mat-list-text:empty,.mat-nav-list .mat-list-option .mat-list-text:empty,.mat-selection-list .mat-list-item .mat-list-text:empty,.mat-selection-list .mat-list-option .mat-list-text:empty{display:none}.mat-list .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,.mat-list .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text,.mat-nav-list .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-nav-list .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,.mat-nav-list .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-nav-list .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text,.mat-selection-list .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-selection-list .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,.mat-selection-list .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-selection-list .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:0;padding-left:16px}[dir=rtl] .mat-list .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text,[dir=rtl] .mat-nav-list .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-nav-list .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,[dir=rtl] .mat-nav-list .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-nav-list .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text,[dir=rtl] .mat-selection-list .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-selection-list .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,[dir=rtl] .mat-selection-list .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-selection-list .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:0}.mat-list .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-nav-list .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-nav-list .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-nav-list .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-nav-list .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-selection-list .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-selection-list .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-selection-list .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-selection-list .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-left:0;padding-right:16px}[dir=rtl] .mat-list .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-nav-list .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-nav-list .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-nav-list .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-nav-list .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-selection-list .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-selection-list .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-selection-list .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-selection-list .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-right:0;padding-left:16px}.mat-list .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text,.mat-list .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text,.mat-list .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-nav-list .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text,.mat-nav-list .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-nav-list .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text,.mat-nav-list .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-selection-list .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text,.mat-selection-list .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-selection-list .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text,.mat-selection-list .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-right:16px;padding-left:16px}.mat-list .mat-list-item .mat-list-avatar,.mat-list .mat-list-option .mat-list-avatar,.mat-nav-list .mat-list-item .mat-list-avatar,.mat-nav-list .mat-list-option .mat-list-avatar,.mat-selection-list .mat-list-item .mat-list-avatar,.mat-selection-list .mat-list-option .mat-list-avatar{flex-shrink:0;width:40px;height:40px;border-radius:50%}.mat-list .mat-list-item .mat-list-avatar~.mat-divider-inset,.mat-list .mat-list-option .mat-list-avatar~.mat-divider-inset,.mat-nav-list .mat-list-item .mat-list-avatar~.mat-divider-inset,.mat-nav-list .mat-list-option .mat-list-avatar~.mat-divider-inset,.mat-selection-list .mat-list-item .mat-list-avatar~.mat-divider-inset,.mat-selection-list .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:72px;width:calc(100% - 72px)}[dir=rtl] .mat-list .mat-list-item .mat-list-avatar~.mat-divider-inset,[dir=rtl] .mat-list .mat-list-option .mat-list-avatar~.mat-divider-inset,[dir=rtl] .mat-nav-list .mat-list-item .mat-list-avatar~.mat-divider-inset,[dir=rtl] .mat-nav-list .mat-list-option .mat-list-avatar~.mat-divider-inset,[dir=rtl] .mat-selection-list .mat-list-item .mat-list-avatar~.mat-divider-inset,[dir=rtl] .mat-selection-list .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:auto;margin-right:72px}.mat-list .mat-list-item .mat-list-icon,.mat-list .mat-list-option .mat-list-icon,.mat-nav-list .mat-list-item .mat-list-icon,.mat-nav-list .mat-list-option .mat-list-icon,.mat-selection-list .mat-list-item .mat-list-icon,.mat-selection-list .mat-list-option .mat-list-icon{flex-shrink:0;width:24px;height:24px;font-size:24px;box-sizing:content-box;border-radius:50%;padding:4px}.mat-list .mat-list-item .mat-list-icon~.mat-divider-inset,.mat-list .mat-list-option .mat-list-icon~.mat-divider-inset,.mat-nav-list .mat-list-item .mat-list-icon~.mat-divider-inset,.mat-nav-list .mat-list-option .mat-list-icon~.mat-divider-inset,.mat-selection-list .mat-list-item .mat-list-icon~.mat-divider-inset,.mat-selection-list .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:64px;width:calc(100% - 64px)}[dir=rtl] .mat-list .mat-list-item .mat-list-icon~.mat-divider-inset,[dir=rtl] .mat-list .mat-list-option .mat-list-icon~.mat-divider-inset,[dir=rtl] .mat-nav-list .mat-list-item .mat-list-icon~.mat-divider-inset,[dir=rtl] .mat-nav-list .mat-list-option .mat-list-icon~.mat-divider-inset,[dir=rtl] .mat-selection-list .mat-list-item .mat-list-icon~.mat-divider-inset,[dir=rtl] .mat-selection-list .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:auto;margin-right:64px}.mat-list .mat-list-item .mat-divider,.mat-list .mat-list-option .mat-divider,.mat-nav-list .mat-list-item .mat-divider,.mat-nav-list .mat-list-option .mat-divider,.mat-selection-list .mat-list-item .mat-divider,.mat-selection-list .mat-list-option .mat-divider{position:absolute;bottom:0;left:0;width:100%;margin:0}[dir=rtl] .mat-list .mat-list-item .mat-divider,[dir=rtl] .mat-list .mat-list-option .mat-divider,[dir=rtl] .mat-nav-list .mat-list-item .mat-divider,[dir=rtl] .mat-nav-list .mat-list-option .mat-divider,[dir=rtl] .mat-selection-list .mat-list-item .mat-divider,[dir=rtl] .mat-selection-list .mat-list-option .mat-divider{margin-left:auto;margin-right:0}.mat-list .mat-list-item .mat-divider.mat-divider-inset,.mat-list .mat-list-option .mat-divider.mat-divider-inset,.mat-nav-list .mat-list-item .mat-divider.mat-divider-inset,.mat-nav-list .mat-list-option .mat-divider.mat-divider-inset,.mat-selection-list .mat-list-item .mat-divider.mat-divider-inset,.mat-selection-list .mat-list-option .mat-divider.mat-divider-inset{position:absolute}.mat-list[dense],.mat-nav-list[dense],.mat-selection-list[dense]{padding-top:4px;display:block}.mat-list[dense] .mat-subheader,.mat-nav-list[dense] .mat-subheader,.mat-selection-list[dense] .mat-subheader{height:40px;line-height:8px}.mat-list[dense] .mat-subheader:first-child,.mat-nav-list[dense] .mat-subheader:first-child,.mat-selection-list[dense] .mat-subheader:first-child{margin-top:-4px}.mat-list[dense] .mat-list-item,.mat-list[dense] .mat-list-option,.mat-nav-list[dense] .mat-list-item,.mat-nav-list[dense] .mat-list-option,.mat-selection-list[dense] .mat-list-item,.mat-selection-list[dense] .mat-list-option{display:block;height:40px;-webkit-tap-highlight-color:transparent}.mat-list[dense] .mat-list-item .mat-list-item-content,.mat-list[dense] .mat-list-option .mat-list-item-content,.mat-nav-list[dense] .mat-list-item .mat-list-item-content,.mat-nav-list[dense] .mat-list-option .mat-list-item-content,.mat-selection-list[dense] .mat-list-item .mat-list-item-content,.mat-selection-list[dense] .mat-list-option .mat-list-item-content{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;padding:0 16px;position:relative;height:inherit}.mat-list[dense] .mat-list-item .mat-list-item-content-reverse,.mat-list[dense] .mat-list-option .mat-list-item-content-reverse,.mat-nav-list[dense] .mat-list-item .mat-list-item-content-reverse,.mat-nav-list[dense] .mat-list-option .mat-list-item-content-reverse,.mat-selection-list[dense] .mat-list-item .mat-list-item-content-reverse,.mat-selection-list[dense] .mat-list-option .mat-list-item-content-reverse{display:flex;align-items:center;padding:0 16px;flex-direction:row-reverse;justify-content:space-around}.mat-list[dense] .mat-list-item .mat-list-item-ripple,.mat-list[dense] .mat-list-option .mat-list-item-ripple,.mat-nav-list[dense] .mat-list-item .mat-list-item-ripple,.mat-nav-list[dense] .mat-list-option .mat-list-item-ripple,.mat-selection-list[dense] .mat-list-item .mat-list-item-ripple,.mat-selection-list[dense] .mat-list-option .mat-list-item-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-list[dense] .mat-list-item.mat-list-item-with-avatar,.mat-list[dense] .mat-list-option.mat-list-item-with-avatar,.mat-nav-list[dense] .mat-list-item.mat-list-item-with-avatar,.mat-nav-list[dense] .mat-list-option.mat-list-item-with-avatar,.mat-selection-list[dense] .mat-list-item.mat-list-item-with-avatar,.mat-selection-list[dense] .mat-list-option.mat-list-item-with-avatar{height:48px}.mat-list[dense] .mat-list-item.mat-2-line,.mat-list[dense] .mat-list-option.mat-2-line,.mat-nav-list[dense] .mat-list-item.mat-2-line,.mat-nav-list[dense] .mat-list-option.mat-2-line,.mat-selection-list[dense] .mat-list-item.mat-2-line,.mat-selection-list[dense] .mat-list-option.mat-2-line{height:60px}.mat-list[dense] .mat-list-item.mat-3-line,.mat-list[dense] .mat-list-option.mat-3-line,.mat-nav-list[dense] .mat-list-item.mat-3-line,.mat-nav-list[dense] .mat-list-option.mat-3-line,.mat-selection-list[dense] .mat-list-item.mat-3-line,.mat-selection-list[dense] .mat-list-option.mat-3-line{height:76px}.mat-list[dense] .mat-list-item.mat-multi-line,.mat-list[dense] .mat-list-option.mat-multi-line,.mat-nav-list[dense] .mat-list-item.mat-multi-line,.mat-nav-list[dense] .mat-list-option.mat-multi-line,.mat-selection-list[dense] .mat-list-item.mat-multi-line,.mat-selection-list[dense] .mat-list-option.mat-multi-line{height:auto}.mat-list[dense] .mat-list-item.mat-multi-line .mat-list-item-content,.mat-list[dense] .mat-list-option.mat-multi-line .mat-list-item-content,.mat-nav-list[dense] .mat-list-item.mat-multi-line .mat-list-item-content,.mat-nav-list[dense] .mat-list-option.mat-multi-line .mat-list-item-content,.mat-selection-list[dense] .mat-list-item.mat-multi-line .mat-list-item-content,.mat-selection-list[dense] .mat-list-option.mat-multi-line .mat-list-item-content{padding-top:16px;padding-bottom:16px}.mat-list[dense] .mat-list-item .mat-list-text,.mat-list[dense] .mat-list-option .mat-list-text,.mat-nav-list[dense] .mat-list-item .mat-list-text,.mat-nav-list[dense] .mat-list-option .mat-list-text,.mat-selection-list[dense] .mat-list-item .mat-list-text,.mat-selection-list[dense] .mat-list-option .mat-list-text{display:flex;flex-direction:column;width:100%;box-sizing:border-box;overflow:hidden;padding:0}.mat-list[dense] .mat-list-item .mat-list-text>*,.mat-list[dense] .mat-list-option .mat-list-text>*,.mat-nav-list[dense] .mat-list-item .mat-list-text>*,.mat-nav-list[dense] .mat-list-option .mat-list-text>*,.mat-selection-list[dense] .mat-list-item .mat-list-text>*,.mat-selection-list[dense] .mat-list-option .mat-list-text>*{margin:0;padding:0;font-weight:400;font-size:inherit}.mat-list[dense] .mat-list-item .mat-list-text:empty,.mat-list[dense] .mat-list-option .mat-list-text:empty,.mat-nav-list[dense] .mat-list-item .mat-list-text:empty,.mat-nav-list[dense] .mat-list-option .mat-list-text:empty,.mat-selection-list[dense] .mat-list-item .mat-list-text:empty,.mat-selection-list[dense] .mat-list-option .mat-list-text:empty{display:none}.mat-list[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list[dense] .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,.mat-list[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list[dense] .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text,.mat-nav-list[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-nav-list[dense] .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,.mat-nav-list[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-nav-list[dense] .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text,.mat-selection-list[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-selection-list[dense] .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,.mat-selection-list[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-selection-list[dense] .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:0;padding-left:16px}[dir=rtl] .mat-list[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list[dense] .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list[dense] .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text,[dir=rtl] .mat-nav-list[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-nav-list[dense] .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,[dir=rtl] .mat-nav-list[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-nav-list[dense] .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text,[dir=rtl] .mat-selection-list[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-selection-list[dense] .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,[dir=rtl] .mat-selection-list[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-selection-list[dense] .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:0}.mat-list[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list[dense] .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list[dense] .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-nav-list[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-nav-list[dense] .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-nav-list[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-nav-list[dense] .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-selection-list[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-selection-list[dense] .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-selection-list[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-selection-list[dense] .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-left:0;padding-right:16px}[dir=rtl] .mat-list[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list[dense] .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list[dense] .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-nav-list[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-nav-list[dense] .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-nav-list[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-nav-list[dense] .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-selection-list[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-selection-list[dense] .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-selection-list[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-selection-list[dense] .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-right:0;padding-left:16px}.mat-list[dense] .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text,.mat-list[dense] .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list[dense] .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text,.mat-list[dense] .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-nav-list[dense] .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text,.mat-nav-list[dense] .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-nav-list[dense] .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text,.mat-nav-list[dense] .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-selection-list[dense] .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text,.mat-selection-list[dense] .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-selection-list[dense] .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text,.mat-selection-list[dense] .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-right:16px;padding-left:16px}.mat-list[dense] .mat-list-item .mat-list-avatar,.mat-list[dense] .mat-list-option .mat-list-avatar,.mat-nav-list[dense] .mat-list-item .mat-list-avatar,.mat-nav-list[dense] .mat-list-option .mat-list-avatar,.mat-selection-list[dense] .mat-list-item .mat-list-avatar,.mat-selection-list[dense] .mat-list-option .mat-list-avatar{flex-shrink:0;width:36px;height:36px;border-radius:50%}.mat-list[dense] .mat-list-item .mat-list-avatar~.mat-divider-inset,.mat-list[dense] .mat-list-option .mat-list-avatar~.mat-divider-inset,.mat-nav-list[dense] .mat-list-item .mat-list-avatar~.mat-divider-inset,.mat-nav-list[dense] .mat-list-option .mat-list-avatar~.mat-divider-inset,.mat-selection-list[dense] .mat-list-item .mat-list-avatar~.mat-divider-inset,.mat-selection-list[dense] .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:68px;width:calc(100% - 68px)}[dir=rtl] .mat-list[dense] .mat-list-item .mat-list-avatar~.mat-divider-inset,[dir=rtl] .mat-list[dense] .mat-list-option .mat-list-avatar~.mat-divider-inset,[dir=rtl] .mat-nav-list[dense] .mat-list-item .mat-list-avatar~.mat-divider-inset,[dir=rtl] .mat-nav-list[dense] .mat-list-option .mat-list-avatar~.mat-divider-inset,[dir=rtl] .mat-selection-list[dense] .mat-list-item .mat-list-avatar~.mat-divider-inset,[dir=rtl] .mat-selection-list[dense] .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:auto;margin-right:68px}.mat-list[dense] .mat-list-item .mat-list-icon,.mat-list[dense] .mat-list-option .mat-list-icon,.mat-nav-list[dense] .mat-list-item .mat-list-icon,.mat-nav-list[dense] .mat-list-option .mat-list-icon,.mat-selection-list[dense] .mat-list-item .mat-list-icon,.mat-selection-list[dense] .mat-list-option .mat-list-icon{flex-shrink:0;width:20px;height:20px;font-size:20px;box-sizing:content-box;border-radius:50%;padding:4px}.mat-list[dense] .mat-list-item .mat-list-icon~.mat-divider-inset,.mat-list[dense] .mat-list-option .mat-list-icon~.mat-divider-inset,.mat-nav-list[dense] .mat-list-item .mat-list-icon~.mat-divider-inset,.mat-nav-list[dense] .mat-list-option .mat-list-icon~.mat-divider-inset,.mat-selection-list[dense] .mat-list-item .mat-list-icon~.mat-divider-inset,.mat-selection-list[dense] .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:60px;width:calc(100% - 60px)}[dir=rtl] .mat-list[dense] .mat-list-item .mat-list-icon~.mat-divider-inset,[dir=rtl] .mat-list[dense] .mat-list-option .mat-list-icon~.mat-divider-inset,[dir=rtl] .mat-nav-list[dense] .mat-list-item .mat-list-icon~.mat-divider-inset,[dir=rtl] .mat-nav-list[dense] .mat-list-option .mat-list-icon~.mat-divider-inset,[dir=rtl] .mat-selection-list[dense] .mat-list-item .mat-list-icon~.mat-divider-inset,[dir=rtl] .mat-selection-list[dense] .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:auto;margin-right:60px}.mat-list[dense] .mat-list-item .mat-divider,.mat-list[dense] .mat-list-option .mat-divider,.mat-nav-list[dense] .mat-list-item .mat-divider,.mat-nav-list[dense] .mat-list-option .mat-divider,.mat-selection-list[dense] .mat-list-item .mat-divider,.mat-selection-list[dense] .mat-list-option .mat-divider{position:absolute;bottom:0;left:0;width:100%;margin:0}[dir=rtl] .mat-list[dense] .mat-list-item .mat-divider,[dir=rtl] .mat-list[dense] .mat-list-option .mat-divider,[dir=rtl] .mat-nav-list[dense] .mat-list-item .mat-divider,[dir=rtl] .mat-nav-list[dense] .mat-list-option .mat-divider,[dir=rtl] .mat-selection-list[dense] .mat-list-item .mat-divider,[dir=rtl] .mat-selection-list[dense] .mat-list-option .mat-divider{margin-left:auto;margin-right:0}.mat-list[dense] .mat-list-item .mat-divider.mat-divider-inset,.mat-list[dense] .mat-list-option .mat-divider.mat-divider-inset,.mat-nav-list[dense] .mat-list-item .mat-divider.mat-divider-inset,.mat-nav-list[dense] .mat-list-option .mat-divider.mat-divider-inset,.mat-selection-list[dense] .mat-list-item .mat-divider.mat-divider-inset,.mat-selection-list[dense] .mat-list-option .mat-divider.mat-divider-inset{position:absolute}.mat-nav-list a{text-decoration:none;color:inherit}.mat-nav-list .mat-list-item{cursor:pointer;outline:0}.mat-list-option:not(.mat-list-item-disabled){cursor:pointer;outline:0}@media (hover:none){.mat-list-option:hover,.mat-nav-list .mat-list-item:hover{background:0 0}}"],data:{}});function u(t){return r.lb(2,[r.ab(null,0)],null,null)}var s=r.Pa({encapsulation:2,styles:[],data:{}});function c(t){return r.lb(2,[(t()(),r.Ra(0,0,null,null,6,"div",[["class","mat-list-item-content"]],null,null,null,null,null)),(t()(),r.Ra(1,0,null,null,1,"div",[["class","mat-list-item-ripple mat-ripple"],["mat-ripple",""]],[[2,"mat-ripple-unbounded",null]],null,null,null,null)),r.Qa(2,212992,null,0,i.v,[r.k,r.z,o.a,[2,i.k],[2,l.a]],{disabled:[0,"disabled"],trigger:[1,"trigger"]},null),r.ab(null,0),(t()(),r.Ra(4,0,null,null,1,"div",[["class","mat-list-text"]],null,null,null,null,null)),r.ab(null,1),r.ab(null,2)],function(t,e){var n=e.component;t(e,2,0,n._isRippleDisabled(),n._getHostElement())},function(t,e){t(e,1,0,r.bb(e,2).unbounded)})}},"6ahw":function(t,e,n){"use strict";n.d(e,"a",function(){return o});var r=n("iLxQ"),i=n("DKTb"),o={closed:!0,next:function(t){},error:function(t){if(r.a.useDeprecatedSynchronousErrorHandling)throw t;Object(i.a)(t)},complete:function(){}}},"6blF":function(t,e,n){"use strict";var r=n("FFOo"),i=n("L/V9"),o=n("6ahw"),l=n("xTla"),a=n("y3By"),u=n("iLxQ");n.d(e,"a",function(){return s});var s=function(){function t(t){this._isScalar=!1,t&&(this._subscribe=t)}return t.prototype.lift=function(e){var n=new t;return n.source=this,n.operator=e,n},t.prototype.subscribe=function(t,e,n){var l=this.operator,a=function(t,e,n){if(t){if(t instanceof r.a)return t;if(t[i.a])return t[i.a]()}return t||e||n?new r.a(t,e,n):new r.a(o.a)}(t,e,n);if(l?l.call(a,this.source):a.add(this.source||u.a.useDeprecatedSynchronousErrorHandling&&!a.syncErrorThrowable?this._subscribe(a):this._trySubscribe(a)),u.a.useDeprecatedSynchronousErrorHandling&&a.syncErrorThrowable&&(a.syncErrorThrowable=!1,a.syncErrorThrown))throw a.syncErrorValue;return a},t.prototype._trySubscribe=function(t){try{return this._subscribe(t)}catch(e){u.a.useDeprecatedSynchronousErrorHandling&&(t.syncErrorThrown=!0,t.syncErrorValue=e),t.error(e)}},t.prototype.forEach=function(t,e){var n=this;return new(e=c(e))(function(e,r){var i;i=n.subscribe(function(e){try{t(e)}catch(t){r(t),i&&i.unsubscribe()}},r,e)})},t.prototype._subscribe=function(t){var e=this.source;return e&&e.subscribe(t)},t.prototype[l.a]=function(){return this},t.prototype.pipe=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return 0===t.length?this:Object(a.b)(t)(this)},t.prototype.toPromise=function(t){var e=this;return new(t=c(t))(function(t,n){var r;e.subscribe(function(t){return r=t},function(t){return n(t)},function(){return t(r)})})},t.create=function(e){return new t(e)},t}();function c(t){if(t||(t=u.a.Promise||Promise),!t)throw new Error("no Promise impl found");return t}},"8ZXz":function(t,e,n){"use strict";n.d(e,"a",function(){return r});var r=function(){}},"8dSa":function(t,e,n){"use strict";var r=n("CcnG"),i=n("PHGO"),o=(n("9Asj"),n("BgWK")),l=n("/dO6"),a=n("dWZg"),u=n("Wf4p"),s=n("bujt"),c=n("UodH"),h=n("lLAP"),f=n("wFw1"),d=n("Mr+X"),p=n("SMsm"),m=n("tRTW"),g=n("seP3"),b=n("Fzqc"),y=n("gIcY"),v=n("Ip0R");n.d(e,"b",function(){return _}),n.d(e,"c",function(){return w}),n.d(e,"a",function(){return k});var _=r.Pa({encapsulation:0,styles:[[""]],data:{}});function w(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,2,"sup",[],null,null,null,null,null)),(t()(),r.Ra(1,0,null,null,1,"a",[["style","color: rgb(32,56,100);font-size: 12pt;font-weight:normal;cursor: pointer;"]],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.openRefBottomSheet()&&r),r},null,null)),(t()(),r.jb(2,null,["[","]"]))],null,function(t,e){t(e,2,0,e.component.ref.index)})}var x=r.Pa({encapsulation:2,styles:[],data:{}});function S(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,5,"mat-chip",[["class","mat-chip"],["role","option"]],[[1,"tabindex",0],[2,"mat-chip-selected",null],[2,"mat-chip-with-avatar",null],[2,"mat-chip-with-trailing-icon",null],[2,"mat-chip-disabled",null],[1,"disabled",0],[1,"aria-disabled",0],[1,"aria-selected",0]],[[null,"click"],[null,"keydown"],[null,"focus"],[null,"blur"]],function(t,e,n){var i=!0;return"click"===e&&(i=!1!==r.bb(t,1)._handleClick(n)&&i),"keydown"===e&&(i=!1!==r.bb(t,1)._handleKeydown(n)&&i),"focus"===e&&(i=!1!==r.bb(t,1).focus()&&i),"blur"===e&&(i=!1!==r.bb(t,1)._blur()&&i),i},null,null)),r.Qa(1,147456,[[1,4]],3,l.b,[r.k,r.z,a.a,[2,u.k]],null,null),r.hb(335544320,2,{avatar:0}),r.hb(335544320,3,{trailingIcon:0}),r.hb(335544320,4,{removeIcon:0}),(t()(),r.jb(5,null,["",""]))],null,function(t,e){t(e,0,0,r.bb(e,1).disabled?null:-1,r.bb(e,1).selected,r.bb(e,1).avatar,r.bb(e,1).trailingIcon||r.bb(e,1).removeIcon,r.bb(e,1).disabled,r.bb(e,1).disabled||null,r.bb(e,1).disabled.toString(),r.bb(e,1).ariaSelected),t(e,5,0,e.context.$implicit)})}function C(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,8,"p",[["class","mat-subheading-2"]],null,null,null,null,null)),(t()(),r.jb(1,null,[""," "])),(t()(),r.Ra(2,0,null,null,6,"span",[["style","position: absolute;\n    right: 5px;"]],null,null,null,null,null)),(t()(),r.jb(3,null,[" [","] : "," "])),(t()(),r.Ra(4,0,null,null,4,"button",[["mat-icon-button",""]],[[8,"disabled",0],[2,"_mat-animation-noopable",null]],[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.bottomSheetRef.dismiss()&&r),r},s.d,s.b)),r.Qa(5,180224,null,0,c.b,[r.k,a.a,h.d,[2,f.a]],null,null),(t()(),r.Ra(6,0,null,0,2,"mat-icon",[["aria-label","Close reference sheet"],["class","mat-icon"],["role","img"]],[[2,"mat-icon-inline",null]],null,null,d.b,d.a)),r.Qa(7,638976,null,0,p.a,[r.k,p.c,[8,null]],null,null),(t()(),r.jb(-1,0,["close"])),(t()(),r.Ra(9,0,null,null,1,"p",[["class","mat-title"]],null,null,null,null,null)),(t()(),r.jb(10,null,[" ",""])),(t()(),r.Ra(11,0,null,null,1,"p",[["class","mat-subheading-1"]],null,null,null,null,null)),(t()(),r.jb(12,null,["",""])),(t()(),r.Ra(13,0,null,null,1,"p",[["class","mat-caption"]],null,null,null,null,null)),(t()(),r.jb(14,null,["",""])),(t()(),r.Ra(15,0,null,null,1,"p",[["class","mat-caption"]],null,null,null,null,null)),(t()(),r.jb(16,null,[""," \u2014 doi:",""])),(t()(),r.Ra(17,0,null,null,6,"mat-chip-list",[["class","mat-chip-list"]],[[1,"tabindex",0],[1,"aria-describedby",0],[1,"aria-required",0],[1,"aria-disabled",0],[1,"aria-invalid",0],[1,"aria-multiselectable",0],[1,"role",0],[2,"mat-chip-list-disabled",null],[2,"mat-chip-list-invalid",null],[2,"mat-chip-list-required",null],[1,"aria-orientation",0],[8,"id",0]],[[null,"focus"],[null,"blur"],[null,"keydown"]],function(t,e,n){var i=!0;return"focus"===e&&(i=!1!==r.bb(t,19).focus()&&i),"blur"===e&&(i=!1!==r.bb(t,19)._blur()&&i),"keydown"===e&&(i=!1!==r.bb(t,19)._keydown(n)&&i),i},m.b,m.a)),r.gb(6144,null,g.c,null,[l.c]),r.Qa(19,1556480,null,1,l.c,[r.k,r.h,[2,b.b],[2,y.c],[2,y.a],u.d,[8,null]],null,null),r.hb(603979776,1,{chips:1}),(t()(),r.jb(-1,0,[" Tags: "])),(t()(),r.Ia(16777216,null,0,1,null,S)),r.Qa(23,278528,null,0,v.j,[r.Q,r.N,r.s],{ngForOf:[0,"ngForOf"]},null),(t()(),r.Ra(24,0,null,null,13,"p",[],null,null,null,null,null)),(t()(),r.Ra(25,0,null,null,5,"a",[["mat-raised-button",""],["target","_blank"]],[[8,"href",4],[1,"tabindex",0],[1,"disabled",0],[1,"aria-disabled",0],[2,"_mat-animation-noopable",null]],[[null,"click"]],function(t,e,n){var i=!0;return"click"===e&&(i=!1!==r.bb(t,26)._haltDisabledEvents(n)&&i),i},s.c,s.a)),r.Qa(26,180224,null,0,c.a,[a.a,h.d,r.k,[2,f.a]],null,null),(t()(),r.Ra(27,0,null,0,2,"mat-icon",[["class","mat-icon"],["role","img"]],[[2,"mat-icon-inline",null]],null,null,d.b,d.a)),r.Qa(28,638976,null,0,p.a,[r.k,p.c,[8,null]],null,null),(t()(),r.jb(-1,0,["open_in_new"])),(t()(),r.jb(-1,0,[" Open article page"])),(t()(),r.Ra(31,0,null,null,6,"span",[["style","position: absolute;\n    right: 15px;"]],null,null,null,null,null)),(t()(),r.Ra(32,0,null,null,5,"a",[["href","#/references"],["mat-raised-button",""]],[[1,"tabindex",0],[1,"disabled",0],[1,"aria-disabled",0],[2,"_mat-animation-noopable",null]],[[null,"click"]],function(t,e,n){var i=!0;return"click"===e&&(i=!1!==r.bb(t,33)._haltDisabledEvents(n)&&i),i},s.c,s.a)),r.Qa(33,180224,null,0,c.a,[a.a,h.d,r.k,[2,f.a]],null,null),(t()(),r.Ra(34,0,null,0,2,"mat-icon",[["class","mat-icon"],["role","img"]],[[2,"mat-icon-inline",null]],null,null,d.b,d.a)),r.Qa(35,638976,null,0,p.a,[r.k,p.c,[8,null]],null,null),(t()(),r.jb(-1,0,["book"])),(t()(),r.jb(-1,0,[" Go to references list"]))],function(t,e){var n=e.component;t(e,7,0),t(e,19,0),t(e,23,0,n.ref.tags),t(e,28,0),t(e,35,0)},function(t,e){var n=e.component;t(e,1,0,n.ref.journal),t(e,3,0,n.ref.index,n.ref.shorthand),t(e,4,0,r.bb(e,5).disabled||null,"NoopAnimations"===r.bb(e,5)._animationMode),t(e,6,0,r.bb(e,7).inline),t(e,10,0,n.ref.title),t(e,12,0,n.ref.authors),t(e,14,0,n.ref.abstract),t(e,16,0,n.ref.pubDetails,n.ref.doi),t(e,17,1,[r.bb(e,19)._tabIndex,r.bb(e,19)._ariaDescribedby||null,r.bb(e,19).required.toString(),r.bb(e,19).disabled.toString(),r.bb(e,19).errorState,r.bb(e,19).multiple,r.bb(e,19).role,r.bb(e,19).disabled,r.bb(e,19).errorState,r.bb(e,19).required,r.bb(e,19).ariaOrientation,r.bb(e,19)._uid]),t(e,25,0,r.Ta(1,"",n.ref.url,""),r.bb(e,26).disabled?-1:r.bb(e,26).tabIndex||0,r.bb(e,26).disabled||null,r.bb(e,26).disabled.toString(),"NoopAnimations"===r.bb(e,26)._animationMode),t(e,27,0,r.bb(e,28).inline),t(e,32,0,r.bb(e,33).disabled?-1:r.bb(e,33).tabIndex||0,r.bb(e,33).disabled||null,r.bb(e,33).disabled.toString(),"NoopAnimations"===r.bb(e,33)._animationMode),t(e,34,0,r.bb(e,35).inline)})}var k=r.Na("reference-sheet",i.b,function(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,1,"reference-sheet",[],null,null,null,C,x)),r.Qa(1,49152,null,0,i.b,[o.e],null,null)],null,null)},{},{},[])},"8g8A":function(t,e,n){"use strict";n.d(e,"a",function(){return i});var r=n("mrSG"),i=function(t){function e(){var n=t.call(this,"object unsubscribed")||this;return n.name="ObjectUnsubscribedError",Object.setPrototypeOf(n,e.prototype),n}return r.b(e,t),e}(Error)},"909l":function(t,e,n){"use strict";n.d(e,"b",function(){return c}),n.d(e,"a",function(){return h});var r=n("mrSG"),i=n("IUTb"),o=n("isby"),l=n("FFOo"),a=n("MGBS"),u=n("zotm"),s=n("En8+");function c(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var n=t[t.length-1];return"function"==typeof n&&t.pop(),Object(i.a)(t,void 0).lift(new h(n))}var h=function(){function t(t){this.resultSelector=t}return t.prototype.call=function(t,e){return e.subscribe(new f(t,this.resultSelector))},t}(),f=function(t){function e(e,n,r){void 0===r&&(r=Object.create(null));var i=t.call(this,e)||this;return i.iterators=[],i.active=0,i.resultSelector="function"==typeof n?n:null,i.values=r,i}return r.b(e,t),e.prototype._next=function(t){var e=this.iterators;Object(o.a)(t)?e.push(new p(t)):e.push("function"==typeof t[s.a]?new d(t[s.a]()):new m(this.destination,this,t))},e.prototype._complete=function(){var t=this.iterators,e=t.length;if(0!==e){this.active=e;for(var n=0;n<e;n++){var r=t[n];r.stillUnsubscribed?this.add(r.subscribe(r,n)):this.active--}}else this.destination.complete()},e.prototype.notifyInactive=function(){this.active--,0===this.active&&this.destination.complete()},e.prototype.checkIterators=function(){for(var t=this.iterators,e=t.length,n=this.destination,r=0;r<e;r++)if("function"==typeof(l=t[r]).hasValue&&!l.hasValue())return;var i=!1,o=[];for(r=0;r<e;r++){var l,a=(l=t[r]).next();if(l.hasCompleted()&&(i=!0),a.done)return void n.complete();o.push(a.value)}this.resultSelector?this._tryresultSelector(o):n.next(o),i&&n.complete()},e.prototype._tryresultSelector=function(t){var e;try{e=this.resultSelector.apply(this,t)}catch(t){return void this.destination.error(t)}this.destination.next(e)},e}(l.a),d=function(){function t(t){this.iterator=t,this.nextResult=t.next()}return t.prototype.hasValue=function(){return!0},t.prototype.next=function(){var t=this.nextResult;return this.nextResult=this.iterator.next(),t},t.prototype.hasCompleted=function(){var t=this.nextResult;return t&&t.done},t}(),p=function(){function t(t){this.array=t,this.index=0,this.length=0,this.length=t.length}return t.prototype[s.a]=function(){return this},t.prototype.next=function(t){var e=this.index++;return e<this.length?{value:this.array[e],done:!1}:{value:null,done:!0}},t.prototype.hasValue=function(){return this.array.length>this.index},t.prototype.hasCompleted=function(){return this.array.length===this.index},t}(),m=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.parent=n,i.observable=r,i.stillUnsubscribed=!0,i.buffer=[],i.isComplete=!1,i}return r.b(e,t),e.prototype[s.a]=function(){return this},e.prototype.next=function(){var t=this.buffer;return 0===t.length&&this.isComplete?{value:null,done:!0}:{value:t.shift(),done:!1}},e.prototype.hasValue=function(){return this.buffer.length>0},e.prototype.hasCompleted=function(){return 0===this.buffer.length&&this.isComplete},e.prototype.notifyComplete=function(){this.buffer.length>0?(this.isComplete=!0,this.parent.notifyInactive()):this.destination.complete()},e.prototype.notifyNext=function(t,e,n,r,i){this.buffer.push(e),this.parent.checkIterators()},e.prototype.subscribe=function(t,e){return Object(u.a)(this,this.observable,this,e)},e}(a.a)},"9Asj":function(t,e,n){"use strict";n.d(e,"b",function(){return u}),n.d(e,"a",function(){return s});var r=n("6blF"),i=n("0/uQ"),o=n("CcnG"),l=n("t/Na"),a=0,u=new(function(){return function(t,e,n,r,i,o,l,u,s){this.shorthand=t,this.authors=e,this.title=n,this.doi=r,this.journal=i,this.url=o,this.pubDetails=l,this.tags=u,this.abstract=s,this.index=a,a++}}())("Error2018","E. Rror","This reference : not found","404","Journal of Error Not Found","http://error.404","Publication not found",["publicationNotFound"],"Error abstract..."),s=function(){function t(e){var n=this;if(this.http=e,this.errref=u,this.alreadyRan=!1,t.singletonInstance)return t.singletonInstance;t.singletonInstance=this,this.reflist=new r.a(function(t){1!=n.alreadyRan||n.internal_reflist?(n.alreadyRan=!0,n.fetchReflist(t)):(console.log("ReferenceManagerService::constructor() : Debounced call (waiting 1 second)"),setTimeout(function(){n.fetchReflist(t)},1e3))})}return t.prototype.fetchReflist=function(t){var e=this;this.internal_reflist?(t.next(this.internal_reflist),t.complete()):this.http.get("http://2018.igem.org/wiki/images/d/df/T--GO_Paris-Saclay--references_list.txt",{responseType:"text"}).subscribe(function(n){console.log("ReferenceManagerService::fetchReflist() :  Parsing reference list...");var r=JSON.parse(n);e.internal_reflist=r,t.next(e.internal_reflist),t.complete()},function(t){return console.log(t)})},t.prototype.getRefFromShorthand=function(t){var e=this,n=new Promise(function(n,r){e.reflist.subscribe(function(r){var i=r.findIndex(function(e){return e.shorthand==t});void 0==i&&(console.log("ReferenceManagerService::GetRefFromShorthand : Failed to get ref. (shorthand = "+t+")"),n(e.errref)),n(r[i])},function(t){return console.log(t)})});return Object(i.a)(n)},t.ngInjectableDef=o.U({factory:function(){return new t(o.Y(l.c))},token:t,providedIn:"root"}),t}()},"9Z1F":function(t,e,n){"use strict";n.d(e,"a",function(){return l});var r=n("mrSG"),i=n("MGBS"),o=n("zotm");function l(t){return function(e){var n=new a(t),r=e.lift(n);return n.caught=r}}var a=function(){function t(t){this.selector=t}return t.prototype.call=function(t,e){return e.subscribe(new u(t,this.selector,this.caught))},t}(),u=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.selector=n,i.caught=r,i}return r.b(e,t),e.prototype.error=function(e){if(!this.isStopped){var n=void 0;try{n=this.selector(e,this.caught)}catch(e){return void t.prototype.error.call(this,e)}this._unsubscribeAndRecycle(),this.add(Object(o.a)(this,n))}},e}(i.a)},AxiF:function(t,e,n){"use strict";n.d(e,"a",function(){return a});var r=n("mrSG"),i=n("FFOo"),o=n("b7mW"),l=n("G5J1");function a(t){return function(e){return 0===t?Object(l.b)():e.lift(new u(t))}}var u=function(){function t(t){if(this.total=t,this.total<0)throw new o.a}return t.prototype.call=function(t,e){return e.subscribe(new s(t,this.total))},t}(),s=function(t){function e(e,n){var r=t.call(this,e)||this;return r.total=n,r.ring=new Array,r.count=0,r}return r.b(e,t),e.prototype._next=function(t){var e=this.ring,n=this.total,r=this.count++;e.length<n?e.push(t):e[r%n]=t},e.prototype._complete=function(){var t=this.destination,e=this.count;if(e>0)for(var n=this.count>=this.total?this.total:this.count,r=this.ring,i=0;i<n;i++){var o=e++%n;t.next(r[o])}t.complete()},e}(i.a)},AyJq:function(t,e,n){"use strict";n.d(e,"a",function(){return l}),n.d(e,"d",function(){return u}),n.d(e,"b",function(){return s}),n.d(e,"c",function(){return h});var r=n("CcnG"),i=(n("jlZm"),n("Ip0R")),o=(n("YhbO"),n("4c35")),l=(n("YlbQ"),n("lLAP"),r.Pa({encapsulation:2,styles:[".mat-expansion-panel{transition:box-shadow 280ms cubic-bezier(.4,0,.2,1);box-sizing:content-box;display:block;margin:0;transition:margin 225ms cubic-bezier(.4,0,.2,1)}.mat-expansion-panel:not([class*=mat-elevation-z]){box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}@media screen and (-ms-high-contrast:active){.mat-expansion-panel{outline:solid 1px}}.mat-expansion-panel-content{overflow:hidden}.mat-expansion-panel-content.mat-expanded{overflow:visible}.mat-expansion-panel-body{padding:0 24px 16px}.mat-expansion-panel-spacing{margin:16px 0}.mat-accordion>.mat-expansion-panel-spacing:first-child,.mat-accordion>:first-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing{margin-top:0}.mat-accordion>.mat-expansion-panel-spacing:last-child,.mat-accordion>:last-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing{margin-bottom:0}.mat-action-row{border-top-style:solid;border-top-width:1px;display:flex;flex-direction:row;justify-content:flex-end;padding:16px 8px 16px 24px}.mat-action-row button.mat-button{margin-left:8px}[dir=rtl] .mat-action-row button.mat-button{margin-left:0;margin-right:8px}"],data:{animation:[{type:7,name:"bodyExpansion",definitions:[{type:0,name:"collapsed",styles:{type:6,styles:{height:"0px",visibility:"hidden"},offset:null},options:void 0},{type:0,name:"expanded",styles:{type:6,styles:{height:"*",visibility:"visible"},offset:null},options:void 0},{type:1,expr:"expanded <=> collapsed",animation:{type:4,styles:null,timings:"225ms cubic-bezier(0.4,0.0,0.2,1)"},options:null}],options:{}}]}}));function a(t){return r.lb(0,[(t()(),r.Ia(0,null,null,0))],null,null)}function u(t){return r.lb(2,[r.ab(null,0),(t()(),r.Ra(1,0,[["body",1]],null,5,"div",[["class","mat-expansion-panel-content"],["role","region"]],[[24,"@bodyExpansion",0],[1,"aria-labelledby",0],[8,"id",0]],[[null,"@bodyExpansion.done"],[null,"@bodyExpansion.start"]],function(t,e,n){var r=!0,i=t.component;return"@bodyExpansion.done"===e&&(r=!1!==i._bodyAnimation(n)&&r),"@bodyExpansion.start"===e&&(r=!1!==i._bodyAnimation(n)&&r),r},null,null)),(t()(),r.Ra(2,0,null,null,3,"div",[["class","mat-expansion-panel-body"]],null,null,null,null,null)),r.ab(null,1),(t()(),r.Ia(16777216,null,null,1,null,a)),r.Qa(5,212992,null,0,o.c,[r.j,r.Q],{portal:[0,"portal"]},null),r.ab(null,2)],function(t,e){t(e,5,0,e.component._portal)},function(t,e){var n=e.component;t(e,1,0,n._getExpandedState(),n._headerId,n.id)})}var s=r.Pa({encapsulation:2,styles:[".mat-expansion-panel-header{display:flex;flex-direction:row;align-items:center;padding:0 24px}.mat-expansion-panel-header:focus,.mat-expansion-panel-header:hover{outline:0}.mat-expansion-panel-header.mat-expanded:focus,.mat-expansion-panel-header.mat-expanded:hover{background:inherit}.mat-expansion-panel-header:not([aria-disabled=true]){cursor:pointer}.mat-content{display:flex;flex:1;flex-direction:row;overflow:hidden}.mat-expansion-panel-header-description,.mat-expansion-panel-header-title{display:flex;flex-grow:1;margin-right:16px}[dir=rtl] .mat-expansion-panel-header-description,[dir=rtl] .mat-expansion-panel-header-title{margin-right:0;margin-left:16px}.mat-expansion-panel-header-description{flex-grow:2}.mat-expansion-indicator::after{border-style:solid;border-width:0 2px 2px 0;content:'';display:inline-block;padding:3px;transform:rotate(45deg);vertical-align:middle}"],data:{animation:[{type:7,name:"indicatorRotate",definitions:[{type:0,name:"collapsed",styles:{type:6,styles:{transform:"rotate(0deg)"},offset:null},options:void 0},{type:0,name:"expanded",styles:{type:6,styles:{transform:"rotate(180deg)"},offset:null},options:void 0},{type:1,expr:"expanded <=> collapsed",animation:{type:4,styles:null,timings:"225ms cubic-bezier(0.4,0.0,0.2,1)"},options:null}],options:{}},{type:7,name:"expansionHeight",definitions:[{type:0,name:"collapsed",styles:{type:6,styles:{height:"{{collapsedHeight}}"},offset:null},options:{params:{collapsedHeight:"48px"}}},{type:0,name:"expanded",styles:{type:6,styles:{height:"{{expandedHeight}}"},offset:null},options:{params:{expandedHeight:"64px"}}},{type:1,expr:"expanded <=> collapsed",animation:{type:3,steps:[{type:11,selector:"@indicatorRotate",animation:{type:9,options:null},options:{optional:!0}},{type:4,styles:null,timings:"225ms cubic-bezier(0.4,0.0,0.2,1)"}],options:null},options:null}],options:{}}]}});function c(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,0,"span",[["class","mat-expansion-indicator"]],[[24,"@indicatorRotate",0]],null,null,null,null))],null,function(t,e){t(e,0,0,e.component._getExpandedState())})}function h(t){return r.lb(2,[(t()(),r.Ra(0,0,null,null,3,"span",[["class","mat-content"]],null,null,null,null,null)),r.ab(null,0),r.ab(null,1),r.ab(null,2),(t()(),r.Ia(16777216,null,null,1,null,c)),r.Qa(5,16384,null,0,i.k,[r.Q,r.N],{ngIf:[0,"ngIf"]},null)],function(t,e){t(e,5,0,e.component._showToggle())},null)}},AytR:function(t,e,n){"use strict";n.d(e,"a",function(){return r});var r={production:!0}},BHnd:function(t,e,n){"use strict";n.d(e,"m",function(){return C}),n.d(e,"b",function(){return p}),n.d(e,"f",function(){return m}),n.d(e,"c",function(){return g}),n.d(e,"e",function(){return b}),n.d(e,"a",function(){return y}),n.d(e,"k",function(){return d}),n.d(e,"h",function(){return v}),n.d(e,"j",function(){return _}),n.d(e,"g",function(){return w}),n.d(e,"d",function(){return x}),n.d(e,"i",function(){return S}),n.d(e,"l",function(){return R});var r=n("mrSG"),i=n("y4qS"),o=n("YlbQ"),l=n("n6gG"),a=n("26FU"),u=n("pugT"),s=n("p0ib"),c=n("F/XL"),h=n("dzgT"),f=n("67Y/"),d=function(t){function e(e,n,r,i,o){var l=t.call(this,e,n,r,i,o)||this;return l._differs=e,l._changeDetectorRef=n,l._elementRef=r,l._dir=o,l.stickyCssClass="mat-table-sticky",l}return Object(r.b)(e,t),e}(i.o),p=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Object(r.b)(e,t),e}(i.b),m=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Object(r.b)(e,t),e}(i.j),g=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Object(r.b)(e,t),e}(i.d),b=function(t){function e(e,n){var r=t.call(this,e,n)||this;return n.nativeElement.classList.add("mat-column-"+e.cssClassFriendlyName),r}return Object(r.b)(e,t),e}(i.i),y=function(t){function e(e,n){var r=t.call(this,e,n)||this;return n.nativeElement.classList.add("mat-column-"+e.cssClassFriendlyName),r}return Object(r.b)(e,t),e}(i.a),v=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Object(r.b)(e,t),e}(i.l),_=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Object(r.b)(e,t),e}(i.n),w=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Object(r.b)(e,t),e}(i.k),x=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Object(r.b)(e,t),e}(i.g),S=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Object(r.b)(e,t),e}(i.m),C=function(){},k=9007199254740991,R=function(t){function e(e){void 0===e&&(e=[]);var n=t.call(this)||this;return n._renderData=new a.a([]),n._filter=new a.a(""),n._renderChangesSubscription=u.a.EMPTY,n.sortingDataAccessor=function(t,e){var n=t[e];if(Object(l.a)(n)){var r=Number(n);return r<k?r:n}return n},n.sortData=function(t,e){var r=e.active,i=e.direction;return r&&""!=i?t.sort(function(t,e){var o=n.sortingDataAccessor(t,r),l=n.sortingDataAccessor(e,r),a=0;return null!=o&&null!=l?o>l?a=1:o<l&&(a=-1):null!=o?a=1:null!=l&&(a=-1),a*("asc"==i?1:-1)}):t},n.filterPredicate=function(t,e){var n=Object.keys(t).reduce(function(e,n){return e+t[n]},"").toLowerCase(),r=e.trim().toLowerCase();return-1!=n.indexOf(r)},n._data=new a.a(e),n._updateChangeSubscription(),n}return Object(r.b)(e,t),Object.defineProperty(e.prototype,"data",{get:function(){return this._data.value},set:function(t){this._data.next(t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"filter",{get:function(){return this._filter.value},set:function(t){this._filter.next(t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"sort",{get:function(){return this._sort},set:function(t){this._sort=t,this._updateChangeSubscription()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"paginator",{get:function(){return this._paginator},set:function(t){this._paginator=t,this._updateChangeSubscription()},enumerable:!0,configurable:!0}),e.prototype._updateChangeSubscription=function(){var t=this,e=this._sort?Object(s.a)(this._sort.sortChange,this._sort.initialized):Object(c.a)(null),n=this._paginator?Object(s.a)(this._paginator.page,this._paginator.initialized):Object(c.a)(null),r=this._data,i=Object(h.b)(r,this._filter).pipe(Object(f.a)(function(e){return t._filterData(e[0])})),o=Object(h.b)(i,e).pipe(Object(f.a)(function(e){return t._orderData(e[0])})),l=Object(h.b)(o,n).pipe(Object(f.a)(function(e){return t._pageData(e[0])}));this._renderChangesSubscription.unsubscribe(),this._renderChangesSubscription=l.subscribe(function(e){return t._renderData.next(e)})},e.prototype._filterData=function(t){var e=this;return this.filteredData=this.filter?t.filter(function(t){return e.filterPredicate(t,e.filter)}):t,this.paginator&&this._updatePaginator(this.filteredData.length),this.filteredData},e.prototype._orderData=function(t){return this.sort?this.sortData(t.slice(),this.sort):t},e.prototype._pageData=function(t){if(!this.paginator)return t;var e=this.paginator.pageIndex*this.paginator.pageSize;return t.slice().splice(e,this.paginator.pageSize)},e.prototype._updatePaginator=function(t){var e=this;Promise.resolve().then(function(){if(e.paginator&&(e.paginator.length=t,e.paginator.pageIndex>0)){var n=Math.ceil(e.paginator.length/e.paginator.pageSize)-1||0;e.paginator.pageIndex=Math.min(e.paginator.pageIndex,n)}})},e.prototype.connect=function(){return this._renderData},e.prototype.disconnect=function(){},e}(o.a)},BgWK:function(t,e,n){"use strict";n.d(e,"d",function(){return _}),n.d(e,"a",function(){return x}),n.d(e,"b",function(){return y}),n.d(e,"c",function(){return v}),n.d(e,"e",function(){return w});var r=n("CcnG"),i=(n("ihYY"),n("Wf4p"),n("mrSG")),o=n("4c35"),l=n("vGXY"),a=n("Ip0R"),u=n("eDkP"),s=n("YSh2"),c=n("K9Ia"),h=n("pugT"),f=n("p0ib"),d=n("F/XL"),p=n("VnD/"),m=n("t9fZ"),g=n("Fzqc"),b=new r.q("MatBottomSheetData"),y=function(){this.data=null,this.hasBackdrop=!0,this.disableClose=!1,this.ariaLabel=null,this.closeOnNavigation=!0},v=function(t){function e(e,n,i,o,a,u){var s=t.call(this)||this;return s._elementRef=e,s._changeDetectorRef=n,s._focusTrapFactory=i,s.bottomSheetConfig=u,s._animationState="void",s._animationStateChanged=new r.n,s._elementFocusedBeforeOpened=null,s._document=a,s._breakpointSubscription=o.observe([l.b.Medium,l.b.Large,l.b.XLarge]).subscribe(function(){s._toggleClass("mat-bottom-sheet-container-medium",o.isMatched(l.b.Medium)),s._toggleClass("mat-bottom-sheet-container-large",o.isMatched(l.b.Large)),s._toggleClass("mat-bottom-sheet-container-xlarge",o.isMatched(l.b.XLarge))}),s}return Object(i.b)(e,t),e.prototype.attachComponentPortal=function(t){return this._validatePortalAttached(),this._setPanelClass(),this._savePreviouslyFocusedElement(),this._portalOutlet.attachComponentPortal(t)},e.prototype.attachTemplatePortal=function(t){return this._validatePortalAttached(),this._setPanelClass(),this._savePreviouslyFocusedElement(),this._portalOutlet.attachTemplatePortal(t)},e.prototype.enter=function(){this._destroyed||(this._animationState="visible",this._changeDetectorRef.detectChanges())},e.prototype.exit=function(){this._destroyed||(this._animationState="hidden",this._changeDetectorRef.markForCheck())},e.prototype.ngOnDestroy=function(){this._breakpointSubscription.unsubscribe(),this._destroyed=!0},e.prototype._onAnimationDone=function(t){"visible"===t.toState?this._trapFocus():"hidden"===t.toState&&this._restoreFocus(),this._animationStateChanged.emit(t)},e.prototype._onAnimationStart=function(t){this._animationStateChanged.emit(t)},e.prototype._toggleClass=function(t,e){var n=this._elementRef.nativeElement.classList;e?n.add(t):n.remove(t)},e.prototype._validatePortalAttached=function(){if(this._portalOutlet.hasAttached())throw Error("Attempting to attach bottom sheet content after content is already attached")},e.prototype._setPanelClass=function(){var t=this._elementRef.nativeElement,e=this.bottomSheetConfig.panelClass;Array.isArray(e)?e.forEach(function(e){return t.classList.add(e)}):e&&t.classList.add(e)},e.prototype._trapFocus=function(){this._focusTrap||(this._focusTrap=this._focusTrapFactory.create(this._elementRef.nativeElement)),this._focusTrap.focusInitialElementWhenReady()},e.prototype._restoreFocus=function(){var t=this._elementFocusedBeforeOpened;t&&"function"==typeof t.focus&&t.focus(),this._focusTrap&&this._focusTrap.destroy()},e.prototype._savePreviouslyFocusedElement=function(){var t=this;this._elementFocusedBeforeOpened=this._document.activeElement,this._elementRef.nativeElement.focus&&Promise.resolve().then(function(){return t._elementRef.nativeElement.focus()})},e}(o.a),_=function(){},w=function(){function t(t,e,n){var r=this;this._overlayRef=e,this._afterDismissed=new c.a,this._afterOpened=new c.a,this._locationChanges=h.a.EMPTY,this.containerInstance=t,t._animationStateChanged.pipe(Object(p.a)(function(t){return"done"===t.phaseName&&"visible"===t.toState}),Object(m.a)(1)).subscribe(function(){r._afterOpened.next(),r._afterOpened.complete()}),t._animationStateChanged.pipe(Object(p.a)(function(t){return"done"===t.phaseName&&"hidden"===t.toState}),Object(m.a)(1)).subscribe(function(){r._locationChanges.unsubscribe(),r._overlayRef.dispose(),r._afterDismissed.next(r._result),r._afterDismissed.complete()}),t.bottomSheetConfig.disableClose||Object(f.a)(e.backdropClick(),e.keydownEvents().pipe(Object(p.a)(function(t){return t.keyCode===s.g}))).subscribe(function(){return r.dismiss()}),n&&(this._locationChanges=n.subscribe(function(){t.bottomSheetConfig.closeOnNavigation&&r.dismiss()}))}return t.prototype.dismiss=function(t){var e=this;this._afterDismissed.closed||(this.containerInstance._animationStateChanged.pipe(Object(p.a)(function(t){return"start"===t.phaseName}),Object(m.a)(1)).subscribe(function(){return e._overlayRef.detachBackdrop()}),this._result=t,this.containerInstance.exit())},t.prototype.afterDismissed=function(){return this._afterDismissed.asObservable()},t.prototype.afterOpened=function(){return this._afterOpened.asObservable()},t.prototype.backdropClick=function(){return this._overlayRef.backdropClick()},t.prototype.keydownEvents=function(){return this._overlayRef.keydownEvents()},t}(),x=function(){function t(t,e,n,r){this._overlay=t,this._injector=e,this._parentBottomSheet=n,this._location=r,this._bottomSheetRefAtThisLevel=null}return Object.defineProperty(t.prototype,"_openedBottomSheetRef",{get:function(){var t=this._parentBottomSheet;return t?t._openedBottomSheetRef:this._bottomSheetRefAtThisLevel},set:function(t){this._parentBottomSheet?this._parentBottomSheet._openedBottomSheetRef=t:this._bottomSheetRefAtThisLevel=t},enumerable:!0,configurable:!0}),t.prototype.open=function(t,e){var n=this,l=function(t){return Object(i.a)({},new y,t)}(e),a=this._createOverlay(l),u=this._attachContainer(a,l),s=new w(u,a,this._location);if(t instanceof r.N)u.attachTemplatePortal(new o.h(t,null,{$implicit:l.data,bottomSheetRef:s}));else{var c=new o.d(t,void 0,this._createInjector(l,s)),h=u.attachComponentPortal(c);s.instance=h.instance}return s.afterDismissed().subscribe(function(){n._openedBottomSheetRef==s&&(n._openedBottomSheetRef=null)}),this._openedBottomSheetRef?(this._openedBottomSheetRef.afterDismissed().subscribe(function(){return s.containerInstance.enter()}),this._openedBottomSheetRef.dismiss()):s.containerInstance.enter(),this._openedBottomSheetRef=s,s},t.prototype.dismiss=function(){this._openedBottomSheetRef&&this._openedBottomSheetRef.dismiss()},t.prototype._attachContainer=function(t,e){var n=new o.f(e&&e.viewContainerRef&&e.viewContainerRef.injector||this._injector,new WeakMap([[y,e]])),r=new o.d(v,e.viewContainerRef,n);return t.attach(r).instance},t.prototype._createOverlay=function(t){var e=new u.d({direction:t.direction,hasBackdrop:t.hasBackdrop,maxWidth:"100%",scrollStrategy:this._overlay.scrollStrategies.block(),positionStrategy:this._overlay.position().global().centerHorizontally().bottom("0")});return t.backdropClass&&(e.backdropClass=t.backdropClass),this._overlay.create(e)},t.prototype._createInjector=function(t,e){var n=t&&t.viewContainerRef&&t.viewContainerRef.injector,r=new WeakMap([[w,e],[b,t.data]]);return!t.direction||n&&n.get(g.b,null)||r.set(g.b,{value:t.direction,change:Object(d.a)()}),new o.f(n||this._injector,r)},t.ngInjectableDef=Object(r.U)({factory:function(){return new t(Object(r.Y)(u.c),Object(r.Y)(r.o),Object(r.Y)(t,12),Object(r.Y)(a.g,8))},token:t,providedIn:_}),t}()},CS9Q:function(t,e,n){"use strict";n.d(e,"a",function(){return o});var r=n("mrSG"),i=n("siIJ"),o=function(t){function e(n,r){void 0===r&&(r=i.a.now);var o=t.call(this,n,function(){return e.delegate&&e.delegate!==o?e.delegate.now():r()})||this;return o.actions=[],o.active=!1,o.scheduled=void 0,o}return r.b(e,t),e.prototype.schedule=function(n,r,i){return void 0===r&&(r=0),e.delegate&&e.delegate!==this?e.delegate.schedule(n,r,i):t.prototype.schedule.call(this,n,r,i)},e.prototype.flush=function(t){var e=this.actions;if(this.active)e.push(t);else{var n;this.active=!0;do{if(n=t.execute(t.state,t.delay))break}while(t=e.shift());if(this.active=!1,n){for(;t=e.shift();)t.unsubscribe();throw n}}},e}(i.a)},CcnG:function(t,e,n){"use strict";n.d(e,"Ka",function(){return cn}),n.d(e,"La",function(){return hn}),n.d(e,"Ma",function(){return fn}),n.d(e,"Ja",function(){return Ct}),n.d(e,"g",function(){return ye}),n.d(e,"V",function(){return he}),n.d(e,"Z",function(){return fe}),n.d(e,"T",function(){return pe}),n.d(e,"y",function(){return de}),n.d(e,"c",function(){return St}),n.d(e,"C",function(){return Rt}),n.d(e,"B",function(){return jt}),n.d(e,"b",function(){return Ot}),n.d(e,"d",function(){return wt}),n.d(e,"e",function(){return xt}),n.d(e,"X",function(){return ze}),n.d(e,"O",function(){return re}),n.d(e,"Ba",function(){return oe}),n.d(e,"u",function(){return sn}),n.d(e,"f",function(){return dn}),n.d(e,"n",function(){return Zt}),n.d(e,"m",function(){return at}),n.d(e,"H",function(){return zn}),n.d(e,"I",function(){return Fn}),n.d(e,"a",function(){return d}),n.d(e,"R",function(){return $}),n.d(e,"P",function(){return J}),n.d(e,"U",function(){return s}),n.d(e,"W",function(){return S}),n.d(e,"Y",function(){return K}),n.d(e,"o",function(){return I}),n.d(e,"r",function(){return M}),n.d(e,"q",function(){return c}),n.d(e,"p",function(){return k}),n.d(e,"A",function(){return R}),n.d(e,"K",function(){return O}),n.d(e,"z",function(){return Kt}),n.d(e,"E",function(){return xe}),n.d(e,"F",function(){return _e}),n.d(e,"G",function(){return we}),n.d(e,"i",function(){return Pt}),n.d(e,"j",function(){return Vt}),n.d(e,"k",function(){return Se}),n.d(e,"v",function(){return Ut}),n.d(e,"x",function(){return Gt}),n.d(e,"w",function(){return Ce}),n.d(e,"D",function(){return ke}),n.d(e,"L",function(){return Oe}),n.d(e,"M",function(){return Re}),n.d(e,"N",function(){return Te}),n.d(e,"Q",function(){return Pe}),n.d(e,"l",function(){return Ae}),n.d(e,"h",function(){return Ie}),n.d(e,"s",function(){return nn}),n.d(e,"t",function(){return rn}),n.d(e,"J",function(){return Ge}),n.d(e,"S",function(){return He}),n.d(e,"Aa",function(){return un}),n.d(e,"Ua",function(){return Ue}),n.d(e,"Ea",function(){return Et}),n.d(e,"Ca",function(){return ut}),n.d(e,"Da",function(){return Bt}),n.d(e,"Fa",function(){return An}),n.d(e,"Ga",function(){return Ln}),n.d(e,"Ha",function(){return bn}),n.d(e,"Sa",function(){return g}),n.d(e,"Xa",function(){return w}),n.d(e,"ib",function(){return x}),n.d(e,"Va",function(){return _t}),n.d(e,"Wa",function(){return vt}),n.d(e,"Ia",function(){return Ir}),n.d(e,"Na",function(){return $r}),n.d(e,"Oa",function(){return al}),n.d(e,"Pa",function(){return rr}),n.d(e,"Qa",function(){return xi}),n.d(e,"Ra",function(){return Ar}),n.d(e,"Ta",function(){return Tr}),n.d(e,"Ya",function(){return Gr}),n.d(e,"Za",function(){return Hr}),n.d(e,"ab",function(){return Ui}),n.d(e,"bb",function(){return si}),n.d(e,"db",function(){return Si}),n.d(e,"gb",function(){return Ci}),n.d(e,"cb",function(){return Wi}),n.d(e,"eb",function(){return Yi}),n.d(e,"fb",function(){return Qi}),n.d(e,"hb",function(){return zi}),n.d(e,"jb",function(){return Ki}),n.d(e,"kb",function(){return tr}),n.d(e,"lb",function(){return Ji});var r=n("mrSG"),i=n("pugT"),o=n("K9Ia"),l=n("6blF"),a=n("p0ib"),u=n("S1nX");function s(t){return{providedIn:t.providedIn||null,factory:t.factory,value:void 0}}var c=function(){function t(t,e){this._desc=t,this.ngMetadataName="InjectionToken",this.ngInjectableDef=void 0!==e?s({providedIn:e.providedIn||"root",factory:e.factory}):void 0}return t.prototype.toString=function(){return"InjectionToken "+this._desc},t}(),h="__parameters__";function f(t,e,n){var i=function(t){return function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];if(t){var i=t.apply(void 0,Object(r.d)(e));for(var o in i)this[o]=i[o]}}}(e);function o(){for(var t,e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];if(this instanceof o)return i.apply(this,e),this;var l=new((t=o).bind.apply(t,Object(r.d)([void 0],e)));return a.annotation=l,a;function a(t,e,n){for(var r=t.hasOwnProperty(h)?t[h]:Object.defineProperty(t,h,{value:[]})[h];r.length<=n;)r.push(null);return(r[n]=r[n]||[]).push(l),t}}return n&&(o.prototype=Object.create(n.prototype)),o.prototype.ngMetadataName=t,o.annotationCls=o,o}var d=new c("AnalyzeForEntryComponents");Function;var p="undefined"!=typeof window&&window,m="undefined"!=typeof self&&"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&self,g="undefined"!=typeof global&&global||p||m,b=Promise.resolve(0),y=null;function v(){if(!y){var t=g.Symbol;if(t&&t.iterator)y=t.iterator;else for(var e=Object.getOwnPropertyNames(Map.prototype),n=0;n<e.length;++n){var r=e[n];"entries"!==r&&"size"!==r&&Map.prototype[r]===Map.prototype.entries&&(y=r)}}return y}function _(t){"undefined"==typeof Zone?b.then(function(){t&&t.apply(null,null)}):Zone.current.scheduleMicroTask("scheduleMicrotask",t)}function w(t,e){return t===e||"number"==typeof t&&"number"==typeof e&&isNaN(t)&&isNaN(e)}function x(t){if("string"==typeof t)return t;if(t instanceof Array)return"["+t.map(x).join(", ")+"]";if(null==t)return""+t;if(t.overriddenName)return""+t.overriddenName;if(t.name)return""+t.name;var e=t.toString();if(null==e)return""+e;var n=e.indexOf("\n");return-1===n?e:e.substring(0,n)}function S(t){return t.__forward_ref__=S,t.toString=function(){return x(this())},t}function C(t){return"function"==typeof t&&t.hasOwnProperty("__forward_ref__")&&t.__forward_ref__===S?t():t}var k=f("Inject",function(t){return{token:t}}),R=f("Optional"),j=f("Self"),O=f("SkipSelf"),E="__source",T=new Object,P=T,I=new c("INJECTOR"),A=function(){function t(){}return t.prototype.get=function(t,e){if(void 0===e&&(e=T),e===T)throw new Error("NullInjectorError: No provider for "+x(t)+"!");return e},t}(),M=function(){function t(){}return t.create=function(t,e){return Array.isArray(t)?new U(t,e):new U(t.providers,t.parent,t.name||null)},t.THROW_IF_NOT_FOUND=T,t.NULL=new A,t.ngInjectableDef=s({providedIn:"any",factory:function(){return K(I)}}),t}(),D=function(t){return t},N=[],L=D,F=function(){return Array.prototype.slice.call(arguments)},z={},V=function(t){for(var e in t)if(t[e]===z)return e;throw Error("!prop")}({provide:String,useValue:z}),B=M.NULL,H=/\n/gm,G="\u0275",U=function(){function t(t,e,n){void 0===e&&(e=B),void 0===n&&(n=null),this.parent=e,this.source=n;var r=this._records=new Map;r.set(M,{token:M,fn:D,deps:N,value:this,useNew:!1}),r.set(I,{token:I,fn:D,deps:N,value:this,useNew:!1}),function t(e,n){if(n)if((n=C(n))instanceof Array)for(var r=0;r<n.length;r++)t(e,n[r]);else{if("function"==typeof n)throw W("Function/Class not supported",n);if(!n||"object"!=typeof n||!n.provide)throw W("Unexpected provider",n);var i=C(n.provide),o=function(t){var e=function(t){var e=N,n=t.deps;if(n&&n.length){e=[];for(var r=0;r<n.length;r++){var i=6;if((u=C(n[r]))instanceof Array)for(var o=0,l=u;o<l.length;o++){var a=l[o];a instanceof R||a==R?i|=1:a instanceof O||a==O?i&=-3:a instanceof j||a==j?i&=-5:u=a instanceof k?a.token:C(a)}e.push({token:u,options:i})}}else if(t.useExisting){var u;e=[{token:u=C(t.useExisting),options:6}]}else if(!(n||V in t))throw W("'deps' required",t);return e}(t),n=D,r=N,i=!1,o=C(t.provide);if(V in t)r=t.useValue;else if(t.useFactory)n=t.useFactory;else if(t.useExisting);else if(t.useClass)i=!0,n=C(t.useClass);else{if("function"!=typeof o)throw W("StaticProvider does not have [useValue|useFactory|useExisting|useClass] or [provide] is not newable",t);i=!0,n=o}return{deps:e,fn:n,useNew:i,value:r}}(n);if(!0===n.multi){var l=e.get(i);if(l){if(l.fn!==F)throw q(i)}else e.set(i,l={token:n.provide,deps:[],useNew:!1,fn:F,value:N});l.deps.push({token:i=n,options:6})}var a=e.get(i);if(a&&a.fn==F)throw q(i);e.set(i,o)}}(r,t)}return t.prototype.get=function(t,e,n){void 0===n&&(n=0);var i=this._records.get(t);try{return function t(e,n,i,o,l,a){try{return function(e,n,i,o,l,a){var u,s;if(!n||4&a)2&a||(s=o.get(e,l,0));else{if((s=n.value)==L)throw Error(G+"Circular dependency");if(s===N){n.value=L;var c=n.useNew,h=n.fn,f=n.deps,d=N;if(f.length){d=[];for(var p=0;p<f.length;p++){var m=f[p],g=m.options,b=2&g?i.get(m.token):void 0;d.push(t(m.token,b,i,b||4&g?o:B,1&g?null:M.THROW_IF_NOT_FOUND,0))}}n.value=s=c?new((u=h).bind.apply(u,Object(r.d)([void 0],d))):h.apply(void 0,d)}}return s}(e,n,i,o,l,a)}catch(t){throw t instanceof Error||(t=new Error(t)),(t.ngTempTokenPath=t.ngTempTokenPath||[]).unshift(e),n&&n.value==L&&(n.value=N),t}}(t,i,this._records,this.parent,e,n)}catch(e){var o=e.ngTempTokenPath;throw t[E]&&o.unshift(t[E]),e.message=Q("\n"+e.message,o,this.source),e.ngTokenPath=o,e.ngTempTokenPath=null,e}},t.prototype.toString=function(){var t=[];return this._records.forEach(function(e,n){return t.push(x(n))}),"StaticInjector["+t.join(", ")+"]"},t}();function q(t){return W("Cannot mix multi providers and regular providers",t)}function Q(t,e,n){void 0===n&&(n=null),t=t&&"\n"===t.charAt(0)&&t.charAt(1)==G?t.substr(2):t;var r=x(e);if(e instanceof Array)r=e.map(x).join(" -> ");else if("object"==typeof e){var i=[];for(var o in e)if(e.hasOwnProperty(o)){var l=e[o];i.push(o+":"+("string"==typeof l?JSON.stringify(l):x(l)))}r="{"+i.join(", ")+"}"}return"StaticInjectorError"+(n?"("+n+")":"")+"["+r+"]: "+t.replace(H,"\n  ")}function W(t,e){return new Error(Q(t,e))}var Y=void 0;function Z(t){var e=Y;return Y=t,e}function K(t,e){if(void 0===e&&(e=0),void 0===Y)throw new Error("inject() must be called from an injection context");if(null===Y){var n=t.ngInjectableDef;if(n&&"root"==n.providedIn)return void 0===n.value?n.value=n.factory():n.value;if(8&e)return null;throw new Error("Injector: NOT_FOUND ["+x(t)+"]")}return Y.get(t,8&e?null:void 0,e)}function X(t){for(var e=[],n=0;n<t.length;n++){var r=t[n];if(Array.isArray(r)){if(0===r.length)throw new Error("Arguments array must have arguments.");for(var i=void 0,o=0,l=0;l<r.length;l++){var a=r[l];a instanceof R||"Optional"===a.ngMetadataName?o|=8:a instanceof O||"SkipSelf"===a.ngMetadataName?o|=4:a instanceof j||"Self"===a.ngMetadataName?o|=2:i=a instanceof k?a.token:a}e.push(K(i,o))}else e.push(K(r))}return e}String;var $=function(t){return t[t.Emulated=0]="Emulated",t[t.Native=1]="Native",t[t.None=2]="None",t[t.ShadowDom=3]="ShadowDom",t}({}),J=function(t){this.full=t,this.major=t.split(".")[0],this.minor=t.split(".")[1],this.patch=t.split(".").slice(2).join(".")},tt=new J("6.1.4"),et="ngDebugContext",nt="ngOriginalError",rt="ngErrorLogger";function it(t){return t[et]}function ot(t){return t[nt]}function lt(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n];t.error.apply(t,Object(r.d)(e))}var at=function(){function t(){this._console=console}return t.prototype.handleError=function(t){var e=this._findOriginalError(t),n=this._findContext(t),r=function(t){return t[rt]||lt}(t);r(this._console,"ERROR",t),e&&r(this._console,"ORIGINAL ERROR",e),n&&r(this._console,"ERROR CONTEXT",n)},t.prototype._findContext=function(t){return t?it(t)?it(t):this._findContext(ot(t)):null},t.prototype._findOriginalError=function(t){for(var e=ot(t);e&&ot(e);)e=ot(e);return e},t}(),ut=new c("The presence of this token marks an injector as being the root injector."),st={},ct={},ht=[],ft=void 0;function dt(){return void 0===ft&&(ft=new A),ft}var pt=function(){function t(t,e,n){var r=this;this.parent=n,this.records=new Map,this.injectorDefTypes=new Set,this.onDestroy=new Set,this.destroyed=!1,bt([t],function(t){return r.processInjectorType(t,new Set)}),e&&bt(e,function(t){return r.processProvider(t)}),this.records.set(I,gt(void 0,this)),this.isRootInjector=this.records.has(ut),this.injectorDefTypes.forEach(function(t){return r.get(t)})}return t.prototype.destroy=function(){this.assertNotDestroyed(),this.destroyed=!0;try{this.onDestroy.forEach(function(t){return t.ngOnDestroy()})}finally{this.records.clear(),this.onDestroy.clear(),this.injectorDefTypes.clear()}},t.prototype.get=function(t,e,n){void 0===e&&(e=P),void 0===n&&(n=0),this.assertNotDestroyed();var r,i=Z(this);try{if(!(4&n)){var o=this.records.get(t);if(void 0===o){var l=("function"==typeof(r=t)||"object"==typeof r&&r instanceof c)&&t.ngInjectableDef||void 0;void 0!==l&&this.injectableDefInScope(l)&&(o=mt(t),this.records.set(t,o))}if(void 0!==o)return this.hydrate(t,o)}return 2&n&&dt(),this.parent.get(t,e)}finally{Z(i)}},t.prototype.assertNotDestroyed=function(){if(this.destroyed)throw new Error("Injector has already been destroyed.")},t.prototype.processInjectorType=function(t,e){var n=this,r=(t=C(t)).ngInjectorDef,i=null==r&&t.ngModule||void 0,o=void 0===i?t:i,l=void 0!==i&&t.providers||ht;if(void 0!==i&&(r=i.ngInjectorDef),null!=r){if(e.has(o))throw new Error("Circular dependency: type "+x(o)+" ends up importing itself.");if(this.injectorDefTypes.add(o),this.records.set(o,gt(r.factory)),null!=r.imports){e.add(o);try{bt(r.imports,function(t){return n.processInjectorType(t,e)})}finally{e.delete(o)}}null!=r.providers&&bt(r.providers,function(t){return n.processProvider(t)}),bt(l,function(t){return n.processProvider(t)})}},t.prototype.processProvider=function(t){var e=yt(t=C(t))?t:C(t.provide),n=function(t){var e=C(t),n=st,i=void 0;if(yt(t))return mt(t);if(e=C(t.provide),V in t)n=t.useValue;else if(t.useExisting)i=function(){return K(t.useExisting)};else if(t.useFactory)i=function(){return t.useFactory.apply(t,Object(r.d)(X(t.deps||[])))};else{var o=t.useClass||e;if(!t.deps)return mt(o);i=function(){return new(o.bind.apply(o,Object(r.d)([void 0],X(t.deps))))}}return gt(i,n)}(t);if(yt(t)||!0!==t.multi){var i=this.records.get(e);if(i&&void 0!==i.multi)throw new Error("Mixed multi-provider for "+x(e))}else{var o=this.records.get(e);if(o){if(void 0===o.multi)throw new Error("Mixed multi-provider for "+e+".")}else(o=gt(void 0,st,!0)).factory=function(){return X(o.multi)},this.records.set(e,o);e=t,o.multi.push(t)}this.records.set(e,n)},t.prototype.hydrate=function(t,e){if(e.value===ct)throw new Error("Circular dep for "+x(t));var n;return e.value===st&&(e.value=ct,e.value=e.factory()),"object"==typeof e.value&&e.value&&"object"==typeof(n=e.value)&&null!=n&&n.ngOnDestroy&&"function"==typeof n.ngOnDestroy&&this.onDestroy.add(e.value),e.value},t.prototype.injectableDefInScope=function(t){return!!t.providedIn&&("string"==typeof t.providedIn?"any"===t.providedIn||"root"===t.providedIn&&this.isRootInjector:this.injectorDefTypes.has(t.providedIn))},t}();function mt(t){var e=t.ngInjectableDef;if(void 0===e){if(t instanceof c)throw new Error("Token "+x(t)+" is missing an ngInjectableDef definition.");return gt(function(){return new t})}return gt(e.factory)}function gt(t,e,n){return void 0===e&&(e=st),void 0===n&&(n=!1),{factory:t,value:e,multi:n?[]:void 0}}function bt(t,e){t.forEach(function(t){return Array.isArray(t)?bt(t,e):e(t)})}function yt(t){return"function"==typeof t}function vt(t){return!!t&&"function"==typeof t.then}function _t(t){return!!t&&"function"==typeof t.subscribe}var wt=new c("Application Initializer"),xt=function(){function t(t){var e=this;this.appInits=t,this.initialized=!1,this.done=!1,this.donePromise=new Promise(function(t,n){e.resolve=t,e.reject=n})}return t.prototype.runInitializers=function(){var t=this;if(!this.initialized){var e=[],n=function(){t.done=!0,t.resolve()};if(this.appInits)for(var r=0;r<this.appInits.length;r++){var i=this.appInits[r]();vt(i)&&e.push(i)}Promise.all(e).then(function(){n()}).catch(function(e){t.reject(e)}),0===e.length&&n(),this.initialized=!0}},t}(),St=new c("AppId");function Ct(){return""+kt()+kt()+kt()}function kt(){return String.fromCharCode(97+Math.floor(25*Math.random()))}var Rt=new c("Platform Initializer"),jt=new c("Platform ID"),Ot=new c("appBootstrapListener"),Et=function(){function t(){}return t.prototype.log=function(t){console.log(t)},t.prototype.warn=function(t){console.warn(t)},t}();function Tt(){throw new Error("Runtime compiler is not loaded")}var Pt=function(){function t(){}return t.prototype.compileModuleSync=function(t){throw Tt()},t.prototype.compileModuleAsync=function(t){throw Tt()},t.prototype.compileModuleAndAllComponentsSync=function(t){throw Tt()},t.prototype.compileModuleAndAllComponentsAsync=function(t){throw Tt()},t.prototype.clearCache=function(){},t.prototype.clearCacheFor=function(t){},t.prototype.getModuleId=function(t){},t}(),It=function(){},At=function(){},Mt=function(){};function Dt(t){var e=Error("No component factory found for "+x(t)+". Did you add it to @NgModule.entryComponents?");return e[Ft]=t,e}var Nt,Lt,Ft="ngComponent",zt=function(){function t(){}return t.prototype.resolveComponentFactory=function(t){throw Dt(t)},t}(),Vt=function(){function t(){}return t.NULL=new zt,t}(),Bt=function(){function t(t,e,n){this._parent=e,this._ngModule=n,this._factories=new Map;for(var r=0;r<t.length;r++){var i=t[r];this._factories.set(i.componentType,i)}}return t.prototype.resolveComponentFactory=function(t){var e=this._factories.get(t);if(!e&&this._parent&&(e=this._parent.resolveComponentFactory(t)),!e)throw Dt(t);return new Ht(e,this._ngModule)},t}(),Ht=function(t){function e(e,n){var r=t.call(this)||this;return r.factory=e,r.ngModule=n,r.selector=e.selector,r.componentType=e.componentType,r.ngContentSelectors=e.ngContentSelectors,r.inputs=e.inputs,r.outputs=e.outputs,r}return Object(r.b)(e,t),e.prototype.create=function(t,e,n,r){return this.factory.create(t,e,n,r||this.ngModule)},e}(Mt),Gt=function(){},Ut=function(){},qt=function(){var t=g.wtf;return!(!t||!(Nt=t.trace)||(Lt=Nt.events,0))}();function Qt(t,e){return null}var Wt=qt?function(t,e){return void 0===e&&(e=null),Lt.createScope(t,e)}:function(t,e){return Qt},Yt=qt?function(t,e){return Nt.leaveScope(t,e),e}:function(t,e){return e},Zt=function(t){function e(e){void 0===e&&(e=!1);var n=t.call(this)||this;return n.__isAsync=e,n}return Object(r.b)(e,t),e.prototype.emit=function(e){t.prototype.next.call(this,e)},e.prototype.subscribe=function(e,n,r){var o,l=function(t){return null},a=function(){return null};e&&"object"==typeof e?(o=this.__isAsync?function(t){setTimeout(function(){return e.next(t)})}:function(t){e.next(t)},e.error&&(l=this.__isAsync?function(t){setTimeout(function(){return e.error(t)})}:function(t){e.error(t)}),e.complete&&(a=this.__isAsync?function(){setTimeout(function(){return e.complete()})}:function(){e.complete()})):(o=this.__isAsync?function(t){setTimeout(function(){return e(t)})}:function(t){e(t)},n&&(l=this.__isAsync?function(t){setTimeout(function(){return n(t)})}:function(t){n(t)}),r&&(a=this.__isAsync?function(){setTimeout(function(){return r()})}:function(){r()}));var u=t.prototype.subscribe.call(this,o,l,a);return e instanceof i.a&&e.add(u),u},e}(o.a),Kt=function(){function t(t){var e,n=t.enableLongStackTrace,r=void 0!==n&&n;if(this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new Zt(!1),this.onMicrotaskEmpty=new Zt(!1),this.onStable=new Zt(!1),this.onError=new Zt(!1),"undefined"==typeof Zone)throw new Error("In this configuration Angular requires Zone.js");Zone.assertZonePatched(),this._nesting=0,this._outer=this._inner=Zone.current,Zone.wtfZoneSpec&&(this._inner=this._inner.fork(Zone.wtfZoneSpec)),Zone.TaskTrackingZoneSpec&&(this._inner=this._inner.fork(new Zone.TaskTrackingZoneSpec)),r&&Zone.longStackTraceZoneSpec&&(this._inner=this._inner.fork(Zone.longStackTraceZoneSpec)),(e=this)._inner=e._inner.fork({name:"angular",properties:{isAngularZone:!0},onInvokeTask:function(t,n,r,i,o,l){try{return te(e),t.invokeTask(r,i,o,l)}finally{ee(e)}},onInvoke:function(t,n,r,i,o,l,a){try{return te(e),t.invoke(r,i,o,l,a)}finally{ee(e)}},onHasTask:function(t,n,r,i){t.hasTask(r,i),n===r&&("microTask"==i.change?(e.hasPendingMicrotasks=i.microTask,Jt(e)):"macroTask"==i.change&&(e.hasPendingMacrotasks=i.macroTask))},onHandleError:function(t,n,r,i){return t.handleError(r,i),e.runOutsideAngular(function(){return e.onError.emit(i)}),!1}})}return t.isInAngularZone=function(){return!0===Zone.current.get("isAngularZone")},t.assertInAngularZone=function(){if(!t.isInAngularZone())throw new Error("Expected to be in Angular Zone, but it is not!")},t.assertNotInAngularZone=function(){if(t.isInAngularZone())throw new Error("Expected to not be in Angular Zone, but it is!")},t.prototype.run=function(t,e,n){return this._inner.run(t,e,n)},t.prototype.runTask=function(t,e,n,r){var i=this._inner,o=i.scheduleEventTask("NgZoneEvent: "+r,t,$t,Xt,Xt);try{return i.runTask(o,e,n)}finally{i.cancelTask(o)}},t.prototype.runGuarded=function(t,e,n){return this._inner.runGuarded(t,e,n)},t.prototype.runOutsideAngular=function(t){return this._outer.run(t)},t}();function Xt(){}var $t={};function Jt(t){if(0==t._nesting&&!t.hasPendingMicrotasks&&!t.isStable)try{t._nesting++,t.onMicrotaskEmpty.emit(null)}finally{if(t._nesting--,!t.hasPendingMicrotasks)try{t.runOutsideAngular(function(){return t.onStable.emit(null)})}finally{t.isStable=!0}}}function te(t){t._nesting++,t.isStable&&(t.isStable=!1,t.onUnstable.emit(null))}function ee(t){t._nesting--,Jt(t)}var ne=function(){function t(){this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new Zt,this.onMicrotaskEmpty=new Zt,this.onStable=new Zt,this.onError=new Zt}return t.prototype.run=function(t){return t()},t.prototype.runGuarded=function(t){return t()},t.prototype.runOutsideAngular=function(t){return t()},t.prototype.runTask=function(t){return t()},t}(),re=function(){function t(t){var e=this;this._ngZone=t,this._pendingCount=0,this._isZoneStable=!0,this._didWork=!1,this._callbacks=[],this._watchAngularEvents(),t.run(function(){e.taskTrackingZone=Zone.current.get("TaskTrackingZone")})}return t.prototype._watchAngularEvents=function(){var t=this;this._ngZone.onUnstable.subscribe({next:function(){t._didWork=!0,t._isZoneStable=!1}}),this._ngZone.runOutsideAngular(function(){t._ngZone.onStable.subscribe({next:function(){Kt.assertNotInAngularZone(),_(function(){t._isZoneStable=!0,t._runCallbacksIfReady()})}})})},t.prototype.increasePendingRequestCount=function(){return this._pendingCount+=1,this._didWork=!0,this._pendingCount},t.prototype.decreasePendingRequestCount=function(){if(this._pendingCount-=1,this._pendingCount<0)throw new Error("pending async requests below zero");return this._runCallbacksIfReady(),this._pendingCount},t.prototype.isStable=function(){return this._isZoneStable&&0===this._pendingCount&&!this._ngZone.hasPendingMacrotasks},t.prototype._runCallbacksIfReady=function(){var t=this;if(this.isStable())_(function(){for(;0!==t._callbacks.length;){var e=t._callbacks.pop();clearTimeout(e.timeoutId),e.doneCb(t._didWork)}t._didWork=!1});else{var e=this.getPendingTasks();this._callbacks=this._callbacks.filter(function(t){return!t.updateCb||!t.updateCb(e)||(clearTimeout(t.timeoutId),!1)}),this._didWork=!0}},t.prototype.getPendingTasks=function(){return this.taskTrackingZone?this.taskTrackingZone.macroTasks.map(function(t){return{source:t.source,isPeriodic:t.data.isPeriodic,delay:t.data.delay,creationLocation:t.creationLocation,xhr:t.data.target}}):[]},t.prototype.addCallback=function(t,e,n){var r=this,i=-1;e&&e>0&&(i=setTimeout(function(){r._callbacks=r._callbacks.filter(function(t){return t.timeoutId!==i}),t(r._didWork,r.getPendingTasks())},e)),this._callbacks.push({doneCb:t,timeoutId:i,updateCb:n})},t.prototype.whenStable=function(t,e,n){if(n&&!this.taskTrackingZone)throw new Error('Task tracking zone is required when passing an update callback to whenStable(). Is "zone.js/dist/task-tracking.js" loaded?');this.addCallback(t,e,n),this._runCallbacksIfReady()},t.prototype.getPendingRequestCount=function(){return this._pendingCount},t.prototype.findProviders=function(t,e,n){return[]},t}(),ie=function(){function t(){this._applications=new Map,ae.addToWindow(this)}return t.prototype.registerApplication=function(t,e){this._applications.set(t,e)},t.prototype.unregisterApplication=function(t){this._applications.delete(t)},t.prototype.unregisterAllApplications=function(){this._applications.clear()},t.prototype.getTestability=function(t){return this._applications.get(t)||null},t.prototype.getAllTestabilities=function(){return Array.from(this._applications.values())},t.prototype.getAllRootElements=function(){return Array.from(this._applications.keys())},t.prototype.findTestabilityInTree=function(t,e){return void 0===e&&(e=!0),ae.findTestabilityInTree(this,t,e)},t.ctorParameters=function(){return[]},t}();function oe(t){ae=t}var le,ae=new(function(){function t(){}return t.prototype.addToWindow=function(t){},t.prototype.findTestabilityInTree=function(t,e,n){return null},t}()),ue=!0,se=!1,ce=new c("AllowMultipleToken");function he(){if(se)throw new Error("Cannot enable prod mode after platform setup.");ue=!1}function fe(){return se=!0,ue}var de=function(t,e){this.name=t,this.token=e};function pe(t,e,n){void 0===n&&(n=[]);var r="Platform: "+e,i=new c(r);return function(e){void 0===e&&(e=[]);var o=me();if(!o||o.injector.get(ce,!1))if(t)t(n.concat(e).concat({provide:i,useValue:!0}));else{var l=n.concat(e).concat({provide:i,useValue:!0});!function(t){if(le&&!le.destroyed&&!le.injector.get(ce,!1))throw new Error("There can be only one platform. Destroy the previous one to create a new one.");le=t.get(ge);var e=t.get(Rt,null);e&&e.forEach(function(t){return t()})}(M.create({providers:l,name:r}))}return function(t){var e=me();if(!e)throw new Error("No platform exists!");if(!e.injector.get(t,null))throw new Error("A platform with a different configuration has been created. Please destroy it first.");return e}(i)}}function me(){return le&&!le.destroyed?le:null}var ge=function(){function t(t){this._injector=t,this._modules=[],this._destroyListeners=[],this._destroyed=!1}return t.prototype.bootstrapModuleFactory=function(t,e){var n,r=this,i="noop"===(n=e?e.ngZone:void 0)?new ne:("zone.js"===n?void 0:n)||new Kt({enableLongStackTrace:fe()}),o=[{provide:Kt,useValue:i}];return i.run(function(){var e=M.create({providers:o,parent:r.injector,name:t.moduleType.name}),n=t.create(e),l=n.injector.get(at,null);if(!l)throw new Error("No ErrorHandler. Is platform module (BrowserModule) included?");return n.onDestroy(function(){return ve(r._modules,n)}),i.runOutsideAngular(function(){return i.onError.subscribe({next:function(t){l.handleError(t)}})}),function(t,e,i){try{var o=((l=n.injector.get(xt)).runInitializers(),l.donePromise.then(function(){return r._moduleDoBootstrap(n),n}));return vt(o)?o.catch(function(n){throw e.runOutsideAngular(function(){return t.handleError(n)}),n}):o}catch(n){throw e.runOutsideAngular(function(){return t.handleError(n)}),n}var l}(l,i)})},t.prototype.bootstrapModule=function(t,e){var n=this;void 0===e&&(e=[]);var r=this.injector.get(It),i=be({},e);return r.createCompiler([i]).compileModuleAsync(t).then(function(t){return n.bootstrapModuleFactory(t,i)})},t.prototype._moduleDoBootstrap=function(t){var e=t.injector.get(ye);if(t._bootstrapComponents.length>0)t._bootstrapComponents.forEach(function(t){return e.bootstrap(t)});else{if(!t.instance.ngDoBootstrap)throw new Error("The module "+x(t.instance.constructor)+' was bootstrapped, but it does not declare "@NgModule.bootstrap" components nor a "ngDoBootstrap" method. Please define one of these.');t.instance.ngDoBootstrap(e)}this._modules.push(t)},t.prototype.onDestroy=function(t){this._destroyListeners.push(t)},Object.defineProperty(t.prototype,"injector",{get:function(){return this._injector},enumerable:!0,configurable:!0}),t.prototype.destroy=function(){if(this._destroyed)throw new Error("The platform has already been destroyed!");this._modules.slice().forEach(function(t){return t.destroy()}),this._destroyListeners.forEach(function(t){return t()}),this._destroyed=!0},Object.defineProperty(t.prototype,"destroyed",{get:function(){return this._destroyed},enumerable:!0,configurable:!0}),t}();function be(t,e){return Array.isArray(e)?e.reduce(be,t):Object(r.a)({},t,e)}var ye=function(){function t(t,e,n,r,i,o){var s=this;this._zone=t,this._console=e,this._injector=n,this._exceptionHandler=r,this._componentFactoryResolver=i,this._initStatus=o,this._bootstrapListeners=[],this._views=[],this._runningTick=!1,this._enforceNoNewChanges=!1,this._stable=!0,this.componentTypes=[],this.components=[],this._enforceNoNewChanges=fe(),this._zone.onMicrotaskEmpty.subscribe({next:function(){s._zone.run(function(){s.tick()})}});var c=new l.a(function(t){s._stable=s._zone.isStable&&!s._zone.hasPendingMacrotasks&&!s._zone.hasPendingMicrotasks,s._zone.runOutsideAngular(function(){t.next(s._stable),t.complete()})}),h=new l.a(function(t){var e;s._zone.runOutsideAngular(function(){e=s._zone.onStable.subscribe(function(){Kt.assertNotInAngularZone(),_(function(){s._stable||s._zone.hasPendingMacrotasks||s._zone.hasPendingMicrotasks||(s._stable=!0,t.next(!0))})})});var n=s._zone.onUnstable.subscribe(function(){Kt.assertInAngularZone(),s._stable&&(s._stable=!1,s._zone.runOutsideAngular(function(){t.next(!1)}))});return function(){e.unsubscribe(),n.unsubscribe()}});this.isStable=Object(a.a)(c,h.pipe(Object(u.a)()))}return t.prototype.bootstrap=function(t,e){var n,r=this;if(!this._initStatus.done)throw new Error("Cannot bootstrap as there are still asynchronous initializers running. Bootstrap components in the `ngDoBootstrap` method of the root module.");n=t instanceof Mt?t:this._componentFactoryResolver.resolveComponentFactory(t),this.componentTypes.push(n.componentType);var i=n instanceof Ht?null:this._injector.get(Gt),o=n.create(M.NULL,[],e||n.selector,i);o.onDestroy(function(){r._unloadComponent(o)});var l=o.injector.get(re,null);return l&&o.injector.get(ie).registerApplication(o.location.nativeElement,l),this._loadComponent(o),fe()&&this._console.log("Angular is running in the development mode. Call enableProdMode() to enable the production mode."),o},t.prototype.tick=function(){var e=this;if(this._runningTick)throw new Error("ApplicationRef.tick is called recursively");var n=t._tickScope();try{this._runningTick=!0,this._views.forEach(function(t){return t.detectChanges()}),this._enforceNoNewChanges&&this._views.forEach(function(t){return t.checkNoChanges()})}catch(t){this._zone.runOutsideAngular(function(){return e._exceptionHandler.handleError(t)})}finally{this._runningTick=!1,Yt(n)}},t.prototype.attachView=function(t){var e=t;this._views.push(e),e.attachToAppRef(this)},t.prototype.detachView=function(t){var e=t;ve(this._views,e),e.detachFromAppRef()},t.prototype._loadComponent=function(t){this.attachView(t.hostView),this.tick(),this.components.push(t),this._injector.get(Ot,[]).concat(this._bootstrapListeners).forEach(function(e){return e(t)})},t.prototype._unloadComponent=function(t){this.detachView(t.hostView),ve(this.components,t)},t.prototype.ngOnDestroy=function(){this._views.slice().forEach(function(t){return t.destroy()})},Object.defineProperty(t.prototype,"viewCount",{get:function(){return this._views.length},enumerable:!0,configurable:!0}),t._tickScope=Wt("ApplicationRef#tick()"),t}();function ve(t,e){var n=t.indexOf(e);n>-1&&t.splice(n,1)}var _e=function(){},we=function(t){return t[t.Important=1]="Important",t[t.DashCase=2]="DashCase",t}({}),xe=function(){},Se=function(t){this.nativeElement=t},Ce=function(){},ke=function(){function t(){this.dirty=!0,this._results=[],this.changes=new Zt,this.length=0}return t.prototype.map=function(t){return this._results.map(t)},t.prototype.filter=function(t){return this._results.filter(t)},t.prototype.find=function(t){return this._results.find(t)},t.prototype.reduce=function(t,e){return this._results.reduce(t,e)},t.prototype.forEach=function(t){this._results.forEach(t)},t.prototype.some=function(t){return this._results.some(t)},t.prototype.toArray=function(){return this._results.slice()},t.prototype[v()]=function(){return this._results[v()]()},t.prototype.toString=function(){return this._results.toString()},t.prototype.reset=function(t){this._results=function t(e){return e.reduce(function(e,n){var r=Array.isArray(n)?t(n):n;return e.concat(r)},[])}(t),this.dirty=!1,this.length=this._results.length,this.last=this._results[this.length-1],this.first=this._results[0]},t.prototype.notifyOnChanges=function(){this.changes.emit(this)},t.prototype.setDirty=function(){this.dirty=!0},t.prototype.destroy=function(){this.changes.complete(),this.changes.unsubscribe()},t}(),Re=function(){},je={factoryPathPrefix:"",factoryPathSuffix:".ngfactory"},Oe=function(){function t(t,e){this._compiler=t,this._config=e||je}return t.prototype.load=function(t){return this._compiler instanceof Pt?this.loadFactory(t):this.loadAndCompile(t)},t.prototype.loadAndCompile=function(t){var e=this,i=Object(r.c)(t.split("#"),2),o=i[0],l=i[1];return void 0===l&&(l="default"),n("crnd")(o).then(function(t){return t[l]}).then(function(t){return Ee(t,o,l)}).then(function(t){return e._compiler.compileModuleAsync(t)})},t.prototype.loadFactory=function(t){var e=Object(r.c)(t.split("#"),2),i=e[0],o=e[1],l="NgFactory";return void 0===o&&(o="default",l=""),n("crnd")(this._config.factoryPathPrefix+i+this._config.factoryPathSuffix).then(function(t){return t[o+l]}).then(function(t){return Ee(t,i,o)})},t}();function Ee(t,e,n){if(!t)throw new Error("Cannot find '"+n+"' in '"+e+"'");return t}var Te=function(){},Pe=function(){},Ie=function(){},Ae=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Object(r.b)(e,t),e}(function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Object(r.b)(e,t),e}(Ie)),Me=function(){function t(t,e,n){this._debugContext=n,this.nativeNode=t,e&&e instanceof De?e.addChild(this):this.parent=null,this.listeners=[]}return Object.defineProperty(t.prototype,"injector",{get:function(){return this._debugContext.injector},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"componentInstance",{get:function(){return this._debugContext.component},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"context",{get:function(){return this._debugContext.context},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"references",{get:function(){return this._debugContext.references},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"providerTokens",{get:function(){return this._debugContext.providerTokens},enumerable:!0,configurable:!0}),t}(),De=function(t){function e(e,n,r){var i=t.call(this,e,n,r)||this;return i.properties={},i.attributes={},i.classes={},i.styles={},i.childNodes=[],i.nativeElement=e,i}return Object(r.b)(e,t),e.prototype.addChild=function(t){t&&(this.childNodes.push(t),t.parent=this)},e.prototype.removeChild=function(t){var e=this.childNodes.indexOf(t);-1!==e&&(t.parent=null,this.childNodes.splice(e,1))},e.prototype.insertChildrenAfter=function(t,e){var n,i=this,o=this.childNodes.indexOf(t);-1!==o&&((n=this.childNodes).splice.apply(n,Object(r.d)([o+1,0],e)),e.forEach(function(t){t.parent&&t.parent.removeChild(t),t.parent=i}))},e.prototype.insertBefore=function(t,e){var n=this.childNodes.indexOf(t);-1===n?this.addChild(e):(e.parent&&e.parent.removeChild(e),e.parent=this,this.childNodes.splice(n,0,e))},e.prototype.query=function(t){return this.queryAll(t)[0]||null},e.prototype.queryAll=function(t){var e=[];return Ne(this,t,e),e},e.prototype.queryAllNodes=function(t){var e=[];return Le(this,t,e),e},Object.defineProperty(e.prototype,"children",{get:function(){return this.childNodes.filter(function(t){return t instanceof e})},enumerable:!0,configurable:!0}),e.prototype.triggerEventHandler=function(t,e){this.listeners.forEach(function(n){n.name==t&&n.callback(e)})},e}(Me);function Ne(t,e,n){t.childNodes.forEach(function(t){t instanceof De&&(e(t)&&n.push(t),Ne(t,e,n))})}function Le(t,e,n){t instanceof De&&t.childNodes.forEach(function(t){e(t)&&n.push(t),t instanceof De&&Le(t,e,n)})}var Fe=new Map;function ze(t){return Fe.get(t)||null}function Ve(t){Fe.set(t.nativeNode,t)}function Be(t,e){var n=Ue(t),r=Ue(e);return n&&r?function(t,e,n){for(var r=t[v()](),i=e[v()]();;){var o=r.next(),l=i.next();if(o.done&&l.done)return!0;if(o.done||l.done)return!1;if(!n(o.value,l.value))return!1}}(t,e,Be):!(n||!t||"object"!=typeof t&&"function"!=typeof t||r||!e||"object"!=typeof e&&"function"!=typeof e)||w(t,e)}var He=function(){function t(t){this.wrapped=t}return t.wrap=function(e){return new t(e)},t.unwrap=function(e){return t.isWrapped(e)?e.wrapped:e},t.isWrapped=function(e){return e instanceof t},t}(),Ge=function(){function t(t,e,n){this.previousValue=t,this.currentValue=e,this.firstChange=n}return t.prototype.isFirstChange=function(){return this.firstChange},t}();function Ue(t){return!!qe(t)&&(Array.isArray(t)||!(t instanceof Map)&&v()in t)}function qe(t){return null!==t&&("function"==typeof t||"object"==typeof t)}var Qe=function(){function t(){}return t.prototype.supports=function(t){return Ue(t)},t.prototype.create=function(t){return new Ye(t)},t}(),We=function(t,e){return e},Ye=function(){function t(t){this.length=0,this._linkedRecords=null,this._unlinkedRecords=null,this._previousItHead=null,this._itHead=null,this._itTail=null,this._additionsHead=null,this._additionsTail=null,this._movesHead=null,this._movesTail=null,this._removalsHead=null,this._removalsTail=null,this._identityChangesHead=null,this._identityChangesTail=null,this._trackByFn=t||We}return t.prototype.forEachItem=function(t){var e;for(e=this._itHead;null!==e;e=e._next)t(e)},t.prototype.forEachOperation=function(t){for(var e=this._itHead,n=this._removalsHead,r=0,i=null;e||n;){var o=!n||e&&e.currentIndex<$e(n,r,i)?e:n,l=$e(o,r,i),a=o.currentIndex;if(o===n)r--,n=n._nextRemoved;else if(e=e._next,null==o.previousIndex)r++;else{i||(i=[]);var u=l-r,s=a-r;if(u!=s){for(var c=0;c<u;c++){var h=c<i.length?i[c]:i[c]=0,f=h+c;s<=f&&f<u&&(i[c]=h+1)}i[o.previousIndex]=s-u}}l!==a&&t(o,l,a)}},t.prototype.forEachPreviousItem=function(t){var e;for(e=this._previousItHead;null!==e;e=e._nextPrevious)t(e)},t.prototype.forEachAddedItem=function(t){var e;for(e=this._additionsHead;null!==e;e=e._nextAdded)t(e)},t.prototype.forEachMovedItem=function(t){var e;for(e=this._movesHead;null!==e;e=e._nextMoved)t(e)},t.prototype.forEachRemovedItem=function(t){var e;for(e=this._removalsHead;null!==e;e=e._nextRemoved)t(e)},t.prototype.forEachIdentityChange=function(t){var e;for(e=this._identityChangesHead;null!==e;e=e._nextIdentityChange)t(e)},t.prototype.diff=function(t){if(null==t&&(t=[]),!Ue(t))throw new Error("Error trying to diff '"+x(t)+"'. Only arrays and iterables are allowed");return this.check(t)?this:null},t.prototype.onDestroy=function(){},t.prototype.check=function(t){var e=this;this._reset();var n,r,i,o=this._itHead,l=!1;if(Array.isArray(t)){this.length=t.length;for(var a=0;a<this.length;a++)i=this._trackByFn(a,r=t[a]),null!==o&&w(o.trackById,i)?(l&&(o=this._verifyReinsertion(o,r,i,a)),w(o.item,r)||this._addIdentityChange(o,r)):(o=this._mismatch(o,r,i,a),l=!0),o=o._next}else n=0,function(t,e){if(Array.isArray(t))for(var n=0;n<t.length;n++)e(t[n]);else for(var r=t[v()](),i=void 0;!(i=r.next()).done;)e(i.value)}(t,function(t){i=e._trackByFn(n,t),null!==o&&w(o.trackById,i)?(l&&(o=e._verifyReinsertion(o,t,i,n)),w(o.item,t)||e._addIdentityChange(o,t)):(o=e._mismatch(o,t,i,n),l=!0),o=o._next,n++}),this.length=n;return this._truncate(o),this.collection=t,this.isDirty},Object.defineProperty(t.prototype,"isDirty",{get:function(){return null!==this._additionsHead||null!==this._movesHead||null!==this._removalsHead||null!==this._identityChangesHead},enumerable:!0,configurable:!0}),t.prototype._reset=function(){if(this.isDirty){var t=void 0,e=void 0;for(t=this._previousItHead=this._itHead;null!==t;t=t._next)t._nextPrevious=t._next;for(t=this._additionsHead;null!==t;t=t._nextAdded)t.previousIndex=t.currentIndex;for(this._additionsHead=this._additionsTail=null,t=this._movesHead;null!==t;t=e)t.previousIndex=t.currentIndex,e=t._nextMoved;this._movesHead=this._movesTail=null,this._removalsHead=this._removalsTail=null,this._identityChangesHead=this._identityChangesTail=null}},t.prototype._mismatch=function(t,e,n,r){var i;return null===t?i=this._itTail:(i=t._prev,this._remove(t)),null!==(t=null===this._linkedRecords?null:this._linkedRecords.get(n,r))?(w(t.item,e)||this._addIdentityChange(t,e),this._moveAfter(t,i,r)):null!==(t=null===this._unlinkedRecords?null:this._unlinkedRecords.get(n,null))?(w(t.item,e)||this._addIdentityChange(t,e),this._reinsertAfter(t,i,r)):t=this._addAfter(new Ze(e,n),i,r),t},t.prototype._verifyReinsertion=function(t,e,n,r){var i=null===this._unlinkedRecords?null:this._unlinkedRecords.get(n,null);return null!==i?t=this._reinsertAfter(i,t._prev,r):t.currentIndex!=r&&(t.currentIndex=r,this._addToMoves(t,r)),t},t.prototype._truncate=function(t){for(;null!==t;){var e=t._next;this._addToRemovals(this._unlink(t)),t=e}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)},t.prototype._reinsertAfter=function(t,e,n){null!==this._unlinkedRecords&&this._unlinkedRecords.remove(t);var r=t._prevRemoved,i=t._nextRemoved;return null===r?this._removalsHead=i:r._nextRemoved=i,null===i?this._removalsTail=r:i._prevRemoved=r,this._insertAfter(t,e,n),this._addToMoves(t,n),t},t.prototype._moveAfter=function(t,e,n){return this._unlink(t),this._insertAfter(t,e,n),this._addToMoves(t,n),t},t.prototype._addAfter=function(t,e,n){return this._insertAfter(t,e,n),this._additionsTail=null===this._additionsTail?this._additionsHead=t:this._additionsTail._nextAdded=t,t},t.prototype._insertAfter=function(t,e,n){var r=null===e?this._itHead:e._next;return t._next=r,t._prev=e,null===r?this._itTail=t:r._prev=t,null===e?this._itHead=t:e._next=t,null===this._linkedRecords&&(this._linkedRecords=new Xe),this._linkedRecords.put(t),t.currentIndex=n,t},t.prototype._remove=function(t){return this._addToRemovals(this._unlink(t))},t.prototype._unlink=function(t){null!==this._linkedRecords&&this._linkedRecords.remove(t);var e=t._prev,n=t._next;return null===e?this._itHead=n:e._next=n,null===n?this._itTail=e:n._prev=e,t},t.prototype._addToMoves=function(t,e){return t.previousIndex===e?t:(this._movesTail=null===this._movesTail?this._movesHead=t:this._movesTail._nextMoved=t,t)},t.prototype._addToRemovals=function(t){return null===this._unlinkedRecords&&(this._unlinkedRecords=new Xe),this._unlinkedRecords.put(t),t.currentIndex=null,t._nextRemoved=null,null===this._removalsTail?(this._removalsTail=this._removalsHead=t,t._prevRemoved=null):(t._prevRemoved=this._removalsTail,this._removalsTail=this._removalsTail._nextRemoved=t),t},t.prototype._addIdentityChange=function(t,e){return t.item=e,this._identityChangesTail=null===this._identityChangesTail?this._identityChangesHead=t:this._identityChangesTail._nextIdentityChange=t,t},t}(),Ze=function(t,e){this.item=t,this.trackById=e,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},Ke=function(){function t(){this._head=null,this._tail=null}return t.prototype.add=function(t){null===this._head?(this._head=this._tail=t,t._nextDup=null,t._prevDup=null):(this._tail._nextDup=t,t._prevDup=this._tail,t._nextDup=null,this._tail=t)},t.prototype.get=function(t,e){var n;for(n=this._head;null!==n;n=n._nextDup)if((null===e||e<=n.currentIndex)&&w(n.trackById,t))return n;return null},t.prototype.remove=function(t){var e=t._prevDup,n=t._nextDup;return null===e?this._head=n:e._nextDup=n,null===n?this._tail=e:n._prevDup=e,null===this._head},t}(),Xe=function(){function t(){this.map=new Map}return t.prototype.put=function(t){var e=t.trackById,n=this.map.get(e);n||(n=new Ke,this.map.set(e,n)),n.add(t)},t.prototype.get=function(t,e){var n=this.map.get(t);return n?n.get(t,e):null},t.prototype.remove=function(t){var e=t.trackById;return this.map.get(e).remove(t)&&this.map.delete(e),t},Object.defineProperty(t.prototype,"isEmpty",{get:function(){return 0===this.map.size},enumerable:!0,configurable:!0}),t.prototype.clear=function(){this.map.clear()},t}();function $e(t,e,n){var r=t.previousIndex;if(null===r)return r;var i=0;return n&&r<n.length&&(i=n[r]),r+e+i}var Je=function(){function t(){}return t.prototype.supports=function(t){return t instanceof Map||qe(t)},t.prototype.create=function(){return new tn},t}(),tn=function(){function t(){this._records=new Map,this._mapHead=null,this._appendAfter=null,this._previousMapHead=null,this._changesHead=null,this._changesTail=null,this._additionsHead=null,this._additionsTail=null,this._removalsHead=null,this._removalsTail=null}return Object.defineProperty(t.prototype,"isDirty",{get:function(){return null!==this._additionsHead||null!==this._changesHead||null!==this._removalsHead},enumerable:!0,configurable:!0}),t.prototype.forEachItem=function(t){var e;for(e=this._mapHead;null!==e;e=e._next)t(e)},t.prototype.forEachPreviousItem=function(t){var e;for(e=this._previousMapHead;null!==e;e=e._nextPrevious)t(e)},t.prototype.forEachChangedItem=function(t){var e;for(e=this._changesHead;null!==e;e=e._nextChanged)t(e)},t.prototype.forEachAddedItem=function(t){var e;for(e=this._additionsHead;null!==e;e=e._nextAdded)t(e)},t.prototype.forEachRemovedItem=function(t){var e;for(e=this._removalsHead;null!==e;e=e._nextRemoved)t(e)},t.prototype.diff=function(t){if(t){if(!(t instanceof Map||qe(t)))throw new Error("Error trying to diff '"+x(t)+"'. Only maps and objects are allowed")}else t=new Map;return this.check(t)?this:null},t.prototype.onDestroy=function(){},t.prototype.check=function(t){var e=this;this._reset();var n=this._mapHead;if(this._appendAfter=null,this._forEach(t,function(t,r){if(n&&n.key===r)e._maybeAddToChanges(n,t),e._appendAfter=n,n=n._next;else{var i=e._getOrCreateRecordForKey(r,t);n=e._insertBeforeOrAppend(n,i)}}),n){n._prev&&(n._prev._next=null),this._removalsHead=n;for(var r=n;null!==r;r=r._nextRemoved)r===this._mapHead&&(this._mapHead=null),this._records.delete(r.key),r._nextRemoved=r._next,r.previousValue=r.currentValue,r.currentValue=null,r._prev=null,r._next=null}return this._changesTail&&(this._changesTail._nextChanged=null),this._additionsTail&&(this._additionsTail._nextAdded=null),this.isDirty},t.prototype._insertBeforeOrAppend=function(t,e){if(t){var n=t._prev;return e._next=t,e._prev=n,t._prev=e,n&&(n._next=e),t===this._mapHead&&(this._mapHead=e),this._appendAfter=t,t}return this._appendAfter?(this._appendAfter._next=e,e._prev=this._appendAfter):this._mapHead=e,this._appendAfter=e,null},t.prototype._getOrCreateRecordForKey=function(t,e){if(this._records.has(t)){var n=this._records.get(t);this._maybeAddToChanges(n,e);var r=n._prev,i=n._next;return r&&(r._next=i),i&&(i._prev=r),n._next=null,n._prev=null,n}var o=new en(t);return this._records.set(t,o),o.currentValue=e,this._addToAdditions(o),o},t.prototype._reset=function(){if(this.isDirty){var t=void 0;for(this._previousMapHead=this._mapHead,t=this._previousMapHead;null!==t;t=t._next)t._nextPrevious=t._next;for(t=this._changesHead;null!==t;t=t._nextChanged)t.previousValue=t.currentValue;for(t=this._additionsHead;null!=t;t=t._nextAdded)t.previousValue=t.currentValue;this._changesHead=this._changesTail=null,this._additionsHead=this._additionsTail=null,this._removalsHead=null}},t.prototype._maybeAddToChanges=function(t,e){w(e,t.currentValue)||(t.previousValue=t.currentValue,t.currentValue=e,this._addToChanges(t))},t.prototype._addToAdditions=function(t){null===this._additionsHead?this._additionsHead=this._additionsTail=t:(this._additionsTail._nextAdded=t,this._additionsTail=t)},t.prototype._addToChanges=function(t){null===this._changesHead?this._changesHead=this._changesTail=t:(this._changesTail._nextChanged=t,this._changesTail=t)},t.prototype._forEach=function(t,e){t instanceof Map?t.forEach(e):Object.keys(t).forEach(function(n){return e(t[n],n)})},t}(),en=function(t){this.key=t,this.previousValue=null,this.currentValue=null,this._nextPrevious=null,this._next=null,this._prev=null,this._nextAdded=null,this._nextRemoved=null,this._nextChanged=null},nn=function(){function t(t){this.factories=t}return t.create=function(e,n){if(null!=n){var r=n.factories.slice();e=e.concat(r)}return new t(e)},t.extend=function(e){return{provide:t,useFactory:function(n){if(!n)throw new Error("Cannot extend IterableDiffers without a parent injector");return t.create(e,n)},deps:[[t,new O,new R]]}},t.prototype.find=function(t){var e,n=this.factories.find(function(e){return e.supports(t)});if(null!=n)return n;throw new Error("Cannot find a differ supporting object '"+t+"' of type '"+((e=t).name||typeof e)+"'")},t.ngInjectableDef=s({providedIn:"root",factory:function(){return new t([new Qe])}}),t}(),rn=function(){function t(t){this.factories=t}return t.create=function(e,n){if(n){var r=n.factories.slice();e=e.concat(r)}return new t(e)},t.extend=function(e){return{provide:t,useFactory:function(n){if(!n)throw new Error("Cannot extend KeyValueDiffers without a parent injector");return t.create(e,n)},deps:[[t,new O,new R]]}},t.prototype.find=function(t){var e=this.factories.find(function(e){return e.supports(t)});if(e)return e;throw new Error("Cannot find a differ supporting object '"+t+"'")},t}(),on=[new Je],ln=new nn([new Qe]),an=new rn(on),un=pe(null,"core",[{provide:jt,useValue:"unknown"},{provide:ge,deps:[M]},{provide:ie,deps:[]},{provide:Et,deps:[]}]),sn=new c("LocaleId");function cn(){return ln}function hn(){return an}function fn(t){return t||"en-US"}var dn=function(t){},pn=function(){function t(t){if(this.defaultDoc=t,this.inertDocument=this.defaultDoc.implementation.createHTMLDocument("sanitization-inert"),this.inertBodyElement=this.inertDocument.body,null==this.inertBodyElement){var e=this.inertDocument.createElement("html");this.inertDocument.appendChild(e),this.inertBodyElement=this.inertDocument.createElement("body"),e.appendChild(this.inertBodyElement)}this.inertBodyElement.innerHTML='<svg><g onload="this.parentNode.remove()"></g></svg>',!this.inertBodyElement.querySelector||this.inertBodyElement.querySelector("svg")?(this.inertBodyElement.innerHTML='<svg><p><style><img src="</style><img src=x onerror=alert(1)//">',this.getInertBodyElement=this.inertBodyElement.querySelector&&this.inertBodyElement.querySelector("svg img")&&function(){try{return!!window.DOMParser}catch(t){return!1}}()?this.getInertBodyElement_DOMParser:this.getInertBodyElement_InertDocument):this.getInertBodyElement=this.getInertBodyElement_XHR}return t.prototype.getInertBodyElement_XHR=function(t){t="<body><remove></remove>"+t+"</body>";try{t=encodeURI(t)}catch(t){return null}var e=new XMLHttpRequest;e.responseType="document",e.open("GET","data:text/html;charset=utf-8,"+t,!1),e.send(null);var n=e.response.body;return n.removeChild(n.firstChild),n},t.prototype.getInertBodyElement_DOMParser=function(t){t="<body><remove></remove>"+t+"</body>";try{var e=(new window.DOMParser).parseFromString(t,"text/html").body;return e.removeChild(e.firstChild),e}catch(t){return null}},t.prototype.getInertBodyElement_InertDocument=function(t){var e=this.inertDocument.createElement("template");return"content"in e?(e.innerHTML=t,e):(this.inertBodyElement.innerHTML=t,this.defaultDoc.documentMode&&this.stripCustomNsAttrs(this.inertBodyElement),this.inertBodyElement)},t.prototype.stripCustomNsAttrs=function(t){for(var e=t.attributes,n=e.length-1;0<n;n--){var r=e.item(n).name;"xmlns:ns1"!==r&&0!==r.indexOf("ns1:")||t.removeAttribute(r)}for(var i=t.firstChild;i;)i.nodeType===Node.ELEMENT_NODE&&this.stripCustomNsAttrs(i),i=i.nextSibling},t}(),mn=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,gn=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+\/]+=*$/i;function bn(t){return(t=String(t)).match(mn)||t.match(gn)?t:(fe()&&console.warn("WARNING: sanitizing unsafe URL value "+t+" (see http://g.co/ng/security#xss)"),"unsafe:"+t)}function yn(t){var e,n,i={};try{for(var o=Object(r.e)(t.split(",")),l=o.next();!l.done;l=o.next())i[l.value]=!0}catch(t){e={error:t}}finally{try{l&&!l.done&&(n=o.return)&&n.call(o)}finally{if(e)throw e.error}}return i}function vn(){for(var t,e,n=[],i=0;i<arguments.length;i++)n[i]=arguments[i];var o={};try{for(var l=Object(r.e)(n),a=l.next();!a.done;a=l.next()){var u=a.value;for(var s in u)u.hasOwnProperty(s)&&(o[s]=!0)}}catch(e){t={error:e}}finally{try{a&&!a.done&&(e=l.return)&&e.call(l)}finally{if(t)throw t.error}}return o}var _n,wn=yn("area,br,col,hr,img,wbr"),xn=yn("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),Sn=yn("rp,rt"),Cn=vn(Sn,xn),kn=vn(wn,vn(xn,yn("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")),vn(Sn,yn("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")),Cn),Rn=yn("background,cite,href,itemtype,longdesc,poster,src,xlink:href"),jn=yn("srcset"),On=vn(Rn,jn,yn("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,start,summary,tabindex,target,title,translate,type,usemap,valign,value,vspace,width")),En=function(){function t(){this.sanitizedSomething=!1,this.buf=[]}return t.prototype.sanitizeChildren=function(t){for(var e=t.firstChild;e;)if(e.nodeType===Node.ELEMENT_NODE?this.startElement(e):e.nodeType===Node.TEXT_NODE?this.chars(e.nodeValue):this.sanitizedSomething=!0,e.firstChild)e=e.firstChild;else for(;e;){e.nodeType===Node.ELEMENT_NODE&&this.endElement(e);var n=this.checkClobberedElement(e,e.nextSibling);if(n){e=n;break}e=this.checkClobberedElement(e,e.parentNode)}return this.buf.join("")},t.prototype.startElement=function(t){var e=t.nodeName.toLowerCase();if(kn.hasOwnProperty(e)){this.buf.push("<"),this.buf.push(e);for(var n,r=t.attributes,i=0;i<r.length;i++){var o=r.item(i),l=o.name,a=l.toLowerCase();if(On.hasOwnProperty(a)){var u=o.value;Rn[a]&&(u=bn(u)),jn[a]&&(n=u,u=(n=String(n)).split(",").map(function(t){return bn(t.trim())}).join(", ")),this.buf.push(" ",l,'="',In(u),'"')}else this.sanitizedSomething=!0}this.buf.push(">")}else this.sanitizedSomething=!0},t.prototype.endElement=function(t){var e=t.nodeName.toLowerCase();kn.hasOwnProperty(e)&&!wn.hasOwnProperty(e)&&(this.buf.push("</"),this.buf.push(e),this.buf.push(">"))},t.prototype.chars=function(t){this.buf.push(In(t))},t.prototype.checkClobberedElement=function(t,e){if(e&&(t.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_CONTAINED_BY)===Node.DOCUMENT_POSITION_CONTAINED_BY)throw new Error("Failed to sanitize html because the element is clobbered: "+t.outerHTML);return e},t}(),Tn=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,Pn=/([^\#-~ |!])/g;function In(t){return t.replace(/&/g,"&amp;").replace(Tn,function(t){return"&#"+(1024*(t.charCodeAt(0)-55296)+(t.charCodeAt(1)-56320)+65536)+";"}).replace(Pn,function(t){return"&#"+t.charCodeAt(0)+";"}).replace(/</g,"&lt;").replace(/>/g,"&gt;")}function An(t,e){var n=null;try{_n=_n||new pn(t);var r=e?String(e):"";n=_n.getInertBodyElement(r);var i=5,o=r;do{if(0===i)throw new Error("Failed to sanitize html because the input is unstable");i--,r=o,o=n.innerHTML,n=_n.getInertBodyElement(r)}while(r!==o);var l=new En,a=l.sanitizeChildren(Mn(n)||n);return fe()&&l.sanitizedSomething&&console.warn("WARNING: sanitizing HTML stripped some content (see http://g.co/ng/security#xss)."),a}finally{if(n)for(var u=Mn(n)||n;u.firstChild;)u.removeChild(u.firstChild)}}function Mn(t){return"content"in t&&function(t){return t.nodeType===Node.ELEMENT_NODE&&"TEMPLATE"===t.nodeName}(t)?t.content:null}var Dn=new RegExp("^([-,.\"'%_!# a-zA-Z0-9]+|(?:(?:matrix|translate|scale|rotate|skew|perspective)(?:X|Y|3d)?|(?:rgb|hsl)a?|(?:repeating-)?(?:linear|radial)-gradient|(?:calc|attr))\\([-0-9.%, #a-zA-Z]+\\))$","g"),Nn=/^url\(([^)]+)\)$/;function Ln(t){if(!(t=String(t).trim()))return"";var e=t.match(Nn);return e&&bn(e[1])===e[1]||t.match(Dn)&&function(t){for(var e=!0,n=!0,r=0;r<t.length;r++){var i=t.charAt(r);"'"===i&&n?e=!e:'"'===i&&e&&(n=!n)}return e&&n}(t)?t:(fe()&&console.warn("WARNING: sanitizing unsafe style value "+t+" (see http://g.co/ng/security#xss)."),"unsafe")}var Fn=function(t){return t[t.NONE=0]="NONE",t[t.HTML=1]="HTML",t[t.STYLE=2]="STYLE",t[t.SCRIPT=3]="SCRIPT",t[t.URL=4]="URL",t[t.RESOURCE_URL=5]="RESOURCE_URL",t}({}),zn=function(){};function Vn(t,e,n){var r=t.state,i=1792&r;return i===e?(t.state=-1793&r|n,t.initIndex=-1,!0):i===n}function Bn(t,e,n){return(1792&t.state)===e&&t.initIndex<=n&&(t.initIndex=n+1,!0)}function Hn(t,e){return t.nodes[e]}function Gn(t,e){return t.nodes[e]}function Un(t,e){return t.nodes[e]}function qn(t,e){return t.nodes[e]}function Qn(t,e){return t.nodes[e]}var Wn={setCurrentNode:void 0,createRootView:void 0,createEmbeddedView:void 0,createComponentView:void 0,createNgModuleRef:void 0,overrideProvider:void 0,overrideComponentView:void 0,clearOverrides:void 0,checkAndUpdateView:void 0,checkNoChangesView:void 0,destroyView:void 0,resolveDep:void 0,createDebugContext:void 0,handleEvent:void 0,updateDirectives:void 0,updateRenderer:void 0,dirtyParentQueries:void 0};function Yn(t,e,n,r){var i="ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: '"+e+"'. Current value: '"+n+"'.";return r&&(i+=" It seems like the view has been created after its parent and its children have been dirty checked. Has it been created in a change detection hook ?"),function(t,e){var n=new Error(t);return Zn(n,e),n}(i,t)}function Zn(t,e){t[et]=e,t[rt]=e.logError.bind(e)}function Kn(t){return new Error("ViewDestroyedError: Attempt to use a destroyed view: "+t)}var Xn=function(){},$n=new Map;function Jn(t){var e=$n.get(t);return e||(e=x(t)+"_"+$n.size,$n.set(t,e)),e}function tr(t,e,n,r){if(He.isWrapped(r)){r=He.unwrap(r);var i=t.def.nodes[e].bindingIndex+n,o=He.unwrap(t.oldValues[i]);t.oldValues[i]=new He(o)}return r}var er="$$undefined",nr="$$empty";function rr(t){return{id:er,styles:t.styles,encapsulation:t.encapsulation,data:t.data}}var ir=0;function or(t,e,n,r){return!(!(2&t.state)&&w(t.oldValues[e.bindingIndex+n],r))}function lr(t,e,n,r){return!!or(t,e,n,r)&&(t.oldValues[e.bindingIndex+n]=r,!0)}function ar(t,e,n,r){var i=t.oldValues[e.bindingIndex+n];if(1&t.state||!Be(i,r)){var o=e.bindings[n].name;throw Yn(Wn.createDebugContext(t,e.nodeIndex),o+": "+i,o+": "+r,0!=(1&t.state))}}function ur(t){for(var e=t;e;)2&e.def.flags&&(e.state|=8),e=e.viewContainerParent||e.parent}function sr(t,e){for(var n=t;n&&n!==e;)n.state|=64,n=n.viewContainerParent||n.parent}function cr(t,e,n,r){try{return ur(33554432&t.def.nodes[e].flags?Gn(t,e).componentView:t),Wn.handleEvent(t,e,n,r)}catch(e){t.root.errorHandler.handleError(e)}}function hr(t){return t.parent?Gn(t.parent,t.parentNodeDef.nodeIndex):null}function fr(t){return t.parent?t.parentNodeDef.parent:null}function dr(t,e){switch(201347067&e.flags){case 1:return Gn(t,e.nodeIndex).renderElement;case 2:return Hn(t,e.nodeIndex).renderText}}function pr(t){return!!t.parent&&!!(32768&t.parentNodeDef.flags)}function mr(t){return!(!t.parent||32768&t.parentNodeDef.flags)}function gr(t){return 1<<t%32}function br(t){var e={},n=0,i={};return t&&t.forEach(function(t){var o=Object(r.c)(t,2),l=o[0],a=o[1];"number"==typeof l?(e[l]=a,n|=gr(l)):i[l]=a}),{matchedQueries:e,references:i,matchedQueryIds:n}}function yr(t,e){return t.map(function(t){var n,i,o;return Array.isArray(t)?(o=(n=Object(r.c)(t,2))[0],i=n[1]):(o=0,i=t),i&&("function"==typeof i||"object"==typeof i)&&e&&Object.defineProperty(i,E,{value:e,configurable:!0}),{flags:o,token:i,tokenKey:Jn(i)}})}function vr(t,e,n){var r=n.renderParent;return r?0==(1&r.flags)||0==(33554432&r.flags)||r.element.componentRendererType&&r.element.componentRendererType.encapsulation===$.Native?Gn(t,n.renderParent.nodeIndex).renderElement:void 0:e}var _r=new WeakMap;function wr(t){var e=_r.get(t);return e||((e=t(function(){return Xn})).factory=t,_r.set(t,e)),e}function xr(t,e,n,r,i){3===e&&(n=t.renderer.parentNode(dr(t,t.def.lastRenderRootNode))),Sr(t,e,0,t.def.nodes.length-1,n,r,i)}function Sr(t,e,n,r,i,o,l){for(var a=n;a<=r;a++){var u=t.def.nodes[a];11&u.flags&&kr(t,u,e,i,o,l),a+=u.childCount}}function Cr(t,e,n,r,i,o){for(var l=t;l&&!pr(l);)l=l.parent;for(var a=l.parent,u=fr(l),s=u.nodeIndex+u.childCount,c=u.nodeIndex+1;c<=s;c++){var h=a.def.nodes[c];h.ngContentIndex===e&&kr(a,h,n,r,i,o),c+=h.childCount}if(!a.parent){var f=t.root.projectableNodes[e];if(f)for(c=0;c<f.length;c++)Rr(t,f[c],n,r,i,o)}}function kr(t,e,n,r,i,o){if(8&e.flags)Cr(t,e.ngContent.index,n,r,i,o);else{var l=dr(t,e);if(3===n&&33554432&e.flags&&48&e.bindingFlags?(16&e.bindingFlags&&Rr(t,l,n,r,i,o),32&e.bindingFlags&&Rr(Gn(t,e.nodeIndex).componentView,l,n,r,i,o)):Rr(t,l,n,r,i,o),16777216&e.flags)for(var a=Gn(t,e.nodeIndex).viewContainer._embeddedViews,u=0;u<a.length;u++)xr(a[u],n,r,i,o);1&e.flags&&!e.element.name&&Sr(t,n,e.nodeIndex+1,e.nodeIndex+e.childCount,r,i,o)}}function Rr(t,e,n,r,i,o){var l=t.renderer;switch(n){case 1:l.appendChild(r,e);break;case 2:l.insertBefore(r,e,i);break;case 3:l.removeChild(r,e);break;case 0:o.push(e)}}var jr=/^:([^:]+):(.+)$/;function Or(t){if(":"===t[0]){var e=t.match(jr);return[e[1],e[2]]}return["",t]}function Er(t){for(var e=0,n=0;n<t.length;n++)e|=t[n].flags;return e}function Tr(t,e,n,r,i,o,l,a,u,s,c,h,f,d,p,m,g,b,y,v){switch(t){case 1:return e+Pr(n)+r;case 2:return e+Pr(n)+r+Pr(i)+o;case 3:return e+Pr(n)+r+Pr(i)+o+Pr(l)+a;case 4:return e+Pr(n)+r+Pr(i)+o+Pr(l)+a+Pr(u)+s;case 5:return e+Pr(n)+r+Pr(i)+o+Pr(l)+a+Pr(u)+s+Pr(c)+h;case 6:return e+Pr(n)+r+Pr(i)+o+Pr(l)+a+Pr(u)+s+Pr(c)+h+Pr(f)+d;case 7:return e+Pr(n)+r+Pr(i)+o+Pr(l)+a+Pr(u)+s+Pr(c)+h+Pr(f)+d+Pr(p)+m;case 8:return e+Pr(n)+r+Pr(i)+o+Pr(l)+a+Pr(u)+s+Pr(c)+h+Pr(f)+d+Pr(p)+m+Pr(g)+b;case 9:return e+Pr(n)+r+Pr(i)+o+Pr(l)+a+Pr(u)+s+Pr(c)+h+Pr(f)+d+Pr(p)+m+Pr(g)+b+Pr(y)+v;default:throw new Error("Does not support more than 9 expressions")}}function Pr(t){return null!=t?t.toString():""}function Ir(t,e,n,r,i,o){t|=1;var l=br(e);return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,flags:t,checkIndex:-1,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:l.matchedQueries,matchedQueryIds:l.matchedQueryIds,references:l.references,ngContentIndex:n,childCount:r,bindings:[],bindingFlags:0,outputs:[],element:{ns:null,name:null,attrs:null,template:o?wr(o):null,componentProvider:null,componentView:null,componentRendererType:null,publicProviders:null,allProviders:null,handleEvent:i||Xn},provider:null,text:null,query:null,ngContent:null}}function Ar(t,e,n,i,o,l,a,u,s,c,h,f){var d;void 0===a&&(a=[]),c||(c=Xn);var p=br(n),m=p.matchedQueries,g=p.references,b=p.matchedQueryIds,y=null,v=null;l&&(y=(d=Object(r.c)(Or(l),2))[0],v=d[1]),u=u||[];for(var _=new Array(u.length),w=0;w<u.length;w++){var x=Object(r.c)(u[w],3),S=x[0],C=x[1],k=x[2],R=Object(r.c)(Or(C),2),j=R[0],O=R[1],E=void 0,T=void 0;switch(15&S){case 4:T=k;break;case 1:case 8:E=k}_[w]={flags:S,ns:j,name:O,nonMinifiedName:O,securityContext:E,suffix:T}}s=s||[];var P=new Array(s.length);for(w=0;w<s.length;w++){var I=Object(r.c)(s[w],2);P[w]={type:0,target:I[0],eventName:I[1],propName:null}}var A=(a=a||[]).map(function(t){var e=Object(r.c)(t,2),n=e[0],i=e[1],o=Object(r.c)(Or(n),2);return[o[0],o[1],i]});return f=function(t){if(t&&t.id===er){var e=null!=t.encapsulation&&t.encapsulation!==$.None||t.styles.length||Object.keys(t.data).length;t.id=e?"c"+ir++:nr}return t&&t.id===nr&&(t=null),t||null}(f),h&&(e|=33554432),{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:t,flags:e|=1,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:m,matchedQueryIds:b,references:g,ngContentIndex:i,childCount:o,bindings:_,bindingFlags:Er(_),outputs:P,element:{ns:y,name:v,attrs:A,template:null,componentProvider:null,componentView:h||null,componentRendererType:f,publicProviders:null,allProviders:null,handleEvent:c||Xn},provider:null,text:null,query:null,ngContent:null}}function Mr(t,e,n){var i,o=n.element,l=t.root.selectorOrNode,a=t.renderer;if(t.parent||!l){i=o.name?a.createElement(o.name,o.ns):a.createComment("");var u=vr(t,e,n);u&&a.appendChild(u,i)}else i=a.selectRootElement(l);if(o.attrs)for(var s=0;s<o.attrs.length;s++){var c=Object(r.c)(o.attrs[s],3);a.setAttribute(i,c[1],c[2],c[0])}return i}function Dr(t,e,n,r){for(var i=0;i<n.outputs.length;i++){var o=n.outputs[i],l=Nr(t,n.nodeIndex,(h=o.eventName,(c=o.target)?c+":"+h:h)),a=o.target,u=t;"component"===o.target&&(a=null,u=e);var s=u.renderer.listen(a||r,o.eventName,l);t.disposables[n.outputIndex+i]=s}var c,h}function Nr(t,e,n){return function(r){return cr(t,e,n,r)}}function Lr(t,e,n,r){if(!lr(t,e,n,r))return!1;var i=e.bindings[n],o=Gn(t,e.nodeIndex),l=o.renderElement,a=i.name;switch(15&i.flags){case 1:!function(t,e,n,r,i,o){var l=e.securityContext,a=l?t.root.sanitizer.sanitize(l,o):o;a=null!=a?a.toString():null;var u=t.renderer;null!=o?u.setAttribute(n,i,a,r):u.removeAttribute(n,i,r)}(t,i,l,i.ns,a,r);break;case 2:!function(t,e,n,r){var i=t.renderer;r?i.addClass(e,n):i.removeClass(e,n)}(t,l,a,r);break;case 4:!function(t,e,n,r,i){var o=t.root.sanitizer.sanitize(Fn.STYLE,i);if(null!=o){o=o.toString();var l=e.suffix;null!=l&&(o+=l)}else o=null;var a=t.renderer;null!=o?a.setStyle(n,r,o):a.removeStyle(n,r)}(t,i,l,a,r);break;case 8:!function(t,e,n,r,i){var o=e.securityContext,l=o?t.root.sanitizer.sanitize(o,i):i;t.renderer.setProperty(n,r,l)}(33554432&e.flags&&32&i.flags?o.componentView:t,i,l,a,r)}return!0}var Fr=new Object,zr=Jn(M),Vr=Jn(I),Br=Jn(Gt);function Hr(t,e,n,r){return n=C(n),{index:-1,deps:yr(r,x(e)),flags:t,token:e,value:n}}function Gr(t){for(var e={},n=[],r=!1,i=0;i<t.length;i++){var o=t[i];o.token===ut&&!0===o.value&&(r=!0),1073741824&o.flags&&n.push(o.token),o.index=i,e[Jn(o.token)]=o}return{factory:null,providersByKey:e,providers:t,modules:n,isRoot:r}}function Ur(t,e,n){void 0===n&&(n=M.THROW_IF_NOT_FOUND);var r,i,o=Z(t);try{if(8&e.flags)return e.token;if(2&e.flags&&(n=null),1&e.flags)return t._parent.get(e.token,n);var l=e.tokenKey;switch(l){case zr:case Vr:case Br:return t}var a=t._def.providersByKey[l];if(a){var u=t._providers[a.index];return void 0===u&&(u=t._providers[a.index]=qr(t,a)),u===Fr?void 0:u}if(e.token.ngInjectableDef&&(r=t,null!=(i=e.token.ngInjectableDef).providedIn&&(function(t,e){return t._def.modules.indexOf(i.providedIn)>-1}(r)||"root"===i.providedIn&&r._def.isRoot))){var s=t._providers.length;return t._def.providersByKey[e.tokenKey]={flags:5120,value:e.token.ngInjectableDef.factory,deps:[],index:s,token:e.token},t._providers[s]=Fr,t._providers[s]=qr(t,t._def.providersByKey[e.tokenKey])}return 4&e.flags?n:t._parent.get(e.token,n)}finally{Z(o)}}function qr(t,e){var n;switch(201347067&e.flags){case 512:n=function(t,e,n){var i=n.length;switch(i){case 0:return new e;case 1:return new e(Ur(t,n[0]));case 2:return new e(Ur(t,n[0]),Ur(t,n[1]));case 3:return new e(Ur(t,n[0]),Ur(t,n[1]),Ur(t,n[2]));default:for(var o=new Array(i),l=0;l<i;l++)o[l]=Ur(t,n[l]);return new(e.bind.apply(e,Object(r.d)([void 0],o)))}}(t,e.value,e.deps);break;case 1024:n=function(t,e,n){var i=n.length;switch(i){case 0:return e();case 1:return e(Ur(t,n[0]));case 2:return e(Ur(t,n[0]),Ur(t,n[1]));case 3:return e(Ur(t,n[0]),Ur(t,n[1]),Ur(t,n[2]));default:for(var o=Array(i),l=0;l<i;l++)o[l]=Ur(t,n[l]);return e.apply(void 0,Object(r.d)(o))}}(t,e.value,e.deps);break;case 2048:n=Ur(t,e.deps[0]);break;case 256:n=e.value}return n===Fr||null==n||"object"!=typeof n||131072&e.flags||"function"!=typeof n.ngOnDestroy||(e.flags|=131072),void 0===n?Fr:n}function Qr(t,e){var n=t.viewContainer._embeddedViews;if((null==e||e>=n.length)&&(e=n.length-1),e<0)return null;var r=n[e];return r.viewContainerParent=null,Kr(n,e),Wn.dirtyParentQueries(r),Yr(r),r}function Wr(t,e,n){var r=e?dr(e,e.def.lastRenderRootNode):t.renderElement;xr(n,2,n.renderer.parentNode(r),n.renderer.nextSibling(r),void 0)}function Yr(t){xr(t,3,null,null,void 0)}function Zr(t,e,n){e>=t.length?t.push(n):t.splice(e,0,n)}function Kr(t,e){e>=t.length-1?t.pop():t.splice(e,1)}var Xr=new Object;function $r(t,e,n,r,i,o){return new Jr(t,e,n,r,i,o)}var Jr=function(t){function e(e,n,r,i,o,l){var a=t.call(this)||this;return a.selector=e,a.componentType=n,a._inputs=i,a._outputs=o,a.ngContentSelectors=l,a.viewDefFactory=r,a}return Object(r.b)(e,t),Object.defineProperty(e.prototype,"inputs",{get:function(){var t=[],e=this._inputs;for(var n in e)t.push({propName:n,templateName:e[n]});return t},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"outputs",{get:function(){var t=[];for(var e in this._outputs)t.push({propName:e,templateName:this._outputs[e]});return t},enumerable:!0,configurable:!0}),e.prototype.create=function(t,e,n,r){if(!r)throw new Error("ngModule should be provided");var i=wr(this.viewDefFactory),o=i.nodes[0].element.componentProvider.nodeIndex,l=Wn.createRootView(t,e||[],n,i,r,Xr),a=Un(l,o).instance;return n&&l.renderer.setAttribute(Gn(l,0).renderElement,"ng-version",tt.full),new ti(l,new ii(l),a)},e}(Mt),ti=function(t){function e(e,n,r){var i=t.call(this)||this;return i._view=e,i._viewRef=n,i._component=r,i._elDef=i._view.def.nodes[0],i.hostView=n,i.changeDetectorRef=n,i.instance=r,i}return Object(r.b)(e,t),Object.defineProperty(e.prototype,"location",{get:function(){return new Se(Gn(this._view,this._elDef.nodeIndex).renderElement)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"injector",{get:function(){return new ui(this._view,this._elDef)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"componentType",{get:function(){return this._component.constructor},enumerable:!0,configurable:!0}),e.prototype.destroy=function(){this._viewRef.destroy()},e.prototype.onDestroy=function(t){this._viewRef.onDestroy(t)},e}(At);function ei(t,e,n){return new ni(t,e,n)}var ni=function(){function t(t,e,n){this._view=t,this._elDef=e,this._data=n,this._embeddedViews=[]}return Object.defineProperty(t.prototype,"element",{get:function(){return new Se(this._data.renderElement)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"injector",{get:function(){return new ui(this._view,this._elDef)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"parentInjector",{get:function(){for(var t=this._view,e=this._elDef.parent;!e&&t;)e=fr(t),t=t.parent;return t?new ui(t,e):new ui(this._view,null)},enumerable:!0,configurable:!0}),t.prototype.clear=function(){for(var t=this._embeddedViews.length-1;t>=0;t--){var e=Qr(this._data,t);Wn.destroyView(e)}},t.prototype.get=function(t){var e=this._embeddedViews[t];if(e){var n=new ii(e);return n.attachToViewContainerRef(this),n}return null},Object.defineProperty(t.prototype,"length",{get:function(){return this._embeddedViews.length},enumerable:!0,configurable:!0}),t.prototype.createEmbeddedView=function(t,e,n){var r=t.createEmbeddedView(e||{});return this.insert(r,n),r},t.prototype.createComponent=function(t,e,n,r,i){var o=n||this.parentInjector;i||t instanceof Ht||(i=o.get(Gt));var l=t.create(o,r,void 0,i);return this.insert(l.hostView,e),l},t.prototype.insert=function(t,e){if(t.destroyed)throw new Error("Cannot insert a destroyed View in a ViewContainer!");var n,r,i,o,l=t;return i=l._view,o=(n=this._data).viewContainer._embeddedViews,null!==(r=e)&&void 0!==r||(r=o.length),i.viewContainerParent=this._view,Zr(o,r,i),function(t,e){var n=hr(e);if(n&&n!==t&&!(16&e.state)){e.state|=16;var r=n.template._projectedViews;r||(r=n.template._projectedViews=[]),r.push(e),function(t,n){if(!(4&n.flags)){e.parent.def.nodeFlags|=4,n.flags|=4;for(var r=n.parent;r;)r.childFlags|=4,r=r.parent}}(0,e.parentNodeDef)}}(n,i),Wn.dirtyParentQueries(i),Wr(n,r>0?o[r-1]:null,i),l.attachToViewContainerRef(this),t},t.prototype.move=function(t,e){if(t.destroyed)throw new Error("Cannot move a destroyed View in a ViewContainer!");var n,r,i,o,l,a=this._embeddedViews.indexOf(t._view);return i=e,l=(o=(n=this._data).viewContainer._embeddedViews)[r=a],Kr(o,r),null==i&&(i=o.length),Zr(o,i,l),Wn.dirtyParentQueries(l),Yr(l),Wr(n,i>0?o[i-1]:null,l),t},t.prototype.indexOf=function(t){return this._embeddedViews.indexOf(t._view)},t.prototype.remove=function(t){var e=Qr(this._data,t);e&&Wn.destroyView(e)},t.prototype.detach=function(t){var e=Qr(this._data,t);return e?new ii(e):null},t}();function ri(t){return new ii(t)}var ii=function(){function t(t){this._view=t,this._viewContainerRef=null,this._appRef=null}return Object.defineProperty(t.prototype,"rootNodes",{get:function(){return xr(this._view,0,void 0,void 0,t=[]),t;var t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"context",{get:function(){return this._view.context},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"destroyed",{get:function(){return 0!=(128&this._view.state)},enumerable:!0,configurable:!0}),t.prototype.markForCheck=function(){ur(this._view)},t.prototype.detach=function(){this._view.state&=-5},t.prototype.detectChanges=function(){var t=this._view.root.rendererFactory;t.begin&&t.begin();try{Wn.checkAndUpdateView(this._view)}finally{t.end&&t.end()}},t.prototype.checkNoChanges=function(){Wn.checkNoChangesView(this._view)},t.prototype.reattach=function(){this._view.state|=4},t.prototype.onDestroy=function(t){this._view.disposables||(this._view.disposables=[]),this._view.disposables.push(t)},t.prototype.destroy=function(){this._appRef?this._appRef.detachView(this):this._viewContainerRef&&this._viewContainerRef.detach(this._viewContainerRef.indexOf(this)),Wn.destroyView(this._view)},t.prototype.detachFromAppRef=function(){this._appRef=null,Yr(this._view),Wn.dirtyParentQueries(this._view)},t.prototype.attachToAppRef=function(t){if(this._viewContainerRef)throw new Error("This view is already attached to a ViewContainer!");this._appRef=t},t.prototype.attachToViewContainerRef=function(t){if(this._appRef)throw new Error("This view is already attached directly to the ApplicationRef!");this._viewContainerRef=t},t}();function oi(t,e){return new li(t,e)}var li=function(t){function e(e,n){var r=t.call(this)||this;return r._parentView=e,r._def=n,r}return Object(r.b)(e,t),e.prototype.createEmbeddedView=function(t){return new ii(Wn.createEmbeddedView(this._parentView,this._def,this._def.element.template,t))},Object.defineProperty(e.prototype,"elementRef",{get:function(){return new Se(Gn(this._parentView,this._def.nodeIndex).renderElement)},enumerable:!0,configurable:!0}),e}(Te);function ai(t,e){return new ui(t,e)}var ui=function(){function t(t,e){this.view=t,this.elDef=e}return t.prototype.get=function(t,e){return void 0===e&&(e=M.THROW_IF_NOT_FOUND),Wn.resolveDep(this.view,this.elDef,!!this.elDef&&0!=(33554432&this.elDef.flags),{flags:0,token:t,tokenKey:Jn(t)},e)},t}();function si(t,e){var n=t.def.nodes[e];if(1&n.flags){var r=Gn(t,n.nodeIndex);return n.element.template?r.template:r.renderElement}if(2&n.flags)return Hn(t,n.nodeIndex).renderText;if(20240&n.flags)return Un(t,n.nodeIndex).instance;throw new Error("Illegal state: read nodeValue for node index "+e)}function ci(t){return new hi(t.renderer)}var hi=function(){function t(t){this.delegate=t}return t.prototype.selectRootElement=function(t){return this.delegate.selectRootElement(t)},t.prototype.createElement=function(t,e){var n=Object(r.c)(Or(e),2),i=this.delegate.createElement(n[1],n[0]);return t&&this.delegate.appendChild(t,i),i},t.prototype.createViewRoot=function(t){return t},t.prototype.createTemplateAnchor=function(t){var e=this.delegate.createComment("");return t&&this.delegate.appendChild(t,e),e},t.prototype.createText=function(t,e){var n=this.delegate.createText(e);return t&&this.delegate.appendChild(t,n),n},t.prototype.projectNodes=function(t,e){for(var n=0;n<e.length;n++)this.delegate.appendChild(t,e[n])},t.prototype.attachViewAfter=function(t,e){for(var n=this.delegate.parentNode(t),r=this.delegate.nextSibling(t),i=0;i<e.length;i++)this.delegate.insertBefore(n,e[i],r)},t.prototype.detachView=function(t){for(var e=0;e<t.length;e++){var n=t[e],r=this.delegate.parentNode(n);this.delegate.removeChild(r,n)}},t.prototype.destroyView=function(t,e){for(var n=0;n<e.length;n++)this.delegate.destroyNode(e[n])},t.prototype.listen=function(t,e,n){return this.delegate.listen(t,e,n)},t.prototype.listenGlobal=function(t,e,n){return this.delegate.listen(t,e,n)},t.prototype.setElementProperty=function(t,e,n){this.delegate.setProperty(t,e,n)},t.prototype.setElementAttribute=function(t,e,n){var i=Object(r.c)(Or(e),2),o=i[0],l=i[1];null!=n?this.delegate.setAttribute(t,l,n,o):this.delegate.removeAttribute(t,l,o)},t.prototype.setBindingDebugInfo=function(t,e,n){},t.prototype.setElementClass=function(t,e,n){n?this.delegate.addClass(t,e):this.delegate.removeClass(t,e)},t.prototype.setElementStyle=function(t,e,n){null!=n?this.delegate.setStyle(t,e,n):this.delegate.removeStyle(t,e)},t.prototype.invokeElementMethod=function(t,e,n){t[e].apply(t,n)},t.prototype.setText=function(t,e){this.delegate.setValue(t,e)},t.prototype.animate=function(){throw new Error("Renderer.animate is no longer supported!")},t}();function fi(t,e,n,r){return new di(t,e,n,r)}var di=function(){function t(t,e,n,r){this._moduleType=t,this._parent=e,this._bootstrapComponents=n,this._def=r,this._destroyListeners=[],this._destroyed=!1,this.injector=this,function(t){for(var e=t._def,n=t._providers=new Array(e.providers.length),r=0;r<e.providers.length;r++){var i=e.providers[r];4096&i.flags||void 0===n[r]&&(n[r]=qr(t,i))}}(this)}return t.prototype.get=function(t,e,n){void 0===e&&(e=M.THROW_IF_NOT_FOUND),void 0===n&&(n=0);var r=0;return 4&n?r|=1:2&n&&(r|=4),Ur(this,{token:t,tokenKey:Jn(t),flags:r},e)},Object.defineProperty(t.prototype,"instance",{get:function(){return this.get(this._moduleType)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"componentFactoryResolver",{get:function(){return this.get(Vt)},enumerable:!0,configurable:!0}),t.prototype.destroy=function(){if(this._destroyed)throw new Error("The ng module "+x(this.instance.constructor)+" has already been destroyed.");this._destroyed=!0,function(t,e){for(var n=t._def,r=new Set,i=0;i<n.providers.length;i++)if(131072&n.providers[i].flags){var o=t._providers[i];if(o&&o!==Fr){var l=o.ngOnDestroy;"function"!=typeof l||r.has(o)||(l.apply(o),r.add(o))}}}(this),this._destroyListeners.forEach(function(t){return t()})},t.prototype.onDestroy=function(t){this._destroyListeners.push(t)},t}(),pi=Jn(function(){}),mi=Jn(xe),gi=Jn(Se),bi=Jn(Pe),yi=Jn(Te),vi=Jn(Ie),_i=Jn(M),wi=Jn(I);function xi(t,e,n,i,o,l,a,u){var s=[];if(a)for(var c in a){var h=Object(r.c)(a[c],2);s[h[0]]={flags:8,name:c,nonMinifiedName:h[1],ns:null,securityContext:null,suffix:null}}var f=[];if(u)for(var d in u)f.push({type:1,propName:d,target:null,eventName:u[d]});return ki(t,e|=16384,n,i,o,o,l,s,f)}function Si(t,e,n){return ki(-1,t|=16,null,0,e,e,n)}function Ci(t,e,n,r,i){return ki(-1,t,e,0,n,r,i)}function ki(t,e,n,r,i,o,l,a,u){var s=br(n),c=s.matchedQueries,h=s.references,f=s.matchedQueryIds;u||(u=[]),a||(a=[]),o=C(o);var d=yr(l,x(i));return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:t,flags:e,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:c,matchedQueryIds:f,references:h,ngContentIndex:-1,childCount:r,bindings:a,bindingFlags:Er(a),outputs:u,element:null,provider:{token:i,value:o,deps:d},text:null,query:null,ngContent:null}}function Ri(t,e){return Ti(t,e)}function ji(t,e){for(var n=t;n.parent&&!pr(n);)n=n.parent;return Pi(n.parent,fr(n),!0,e.provider.value,e.provider.deps)}function Oi(t,e){var n=Pi(t,e.parent,(32768&e.flags)>0,e.provider.value,e.provider.deps);if(e.outputs.length)for(var r=0;r<e.outputs.length;r++){var i=e.outputs[r],o=n[i.propName].subscribe(Ei(t,e.parent.nodeIndex,i.eventName));t.disposables[e.outputIndex+r]=o.unsubscribe.bind(o)}return n}function Ei(t,e,n){return function(r){return cr(t,e,n,r)}}function Ti(t,e){var n=(8192&e.flags)>0,i=e.provider;switch(201347067&e.flags){case 512:return Pi(t,e.parent,n,i.value,i.deps);case 1024:return function(t,e,n,i,o){var l=o.length;switch(l){case 0:return i();case 1:return i(Ai(t,e,n,o[0]));case 2:return i(Ai(t,e,n,o[0]),Ai(t,e,n,o[1]));case 3:return i(Ai(t,e,n,o[0]),Ai(t,e,n,o[1]),Ai(t,e,n,o[2]));default:for(var a=Array(l),u=0;u<l;u++)a[u]=Ai(t,e,n,o[u]);return i.apply(void 0,Object(r.d)(a))}}(t,e.parent,n,i.value,i.deps);case 2048:return Ai(t,e.parent,n,i.deps[0]);case 256:return i.value}}function Pi(t,e,n,i,o){var l=o.length;switch(l){case 0:return new i;case 1:return new i(Ai(t,e,n,o[0]));case 2:return new i(Ai(t,e,n,o[0]),Ai(t,e,n,o[1]));case 3:return new i(Ai(t,e,n,o[0]),Ai(t,e,n,o[1]),Ai(t,e,n,o[2]));default:for(var a=new Array(l),u=0;u<l;u++)a[u]=Ai(t,e,n,o[u]);return new(i.bind.apply(i,Object(r.d)([void 0],a)))}}var Ii={};function Ai(t,e,n,r,i){if(void 0===i&&(i=M.THROW_IF_NOT_FOUND),8&r.flags)return r.token;var o=t;2&r.flags&&(i=null);var l=r.tokenKey;l===vi&&(n=!(!e||!e.element.componentView)),e&&1&r.flags&&(n=!1,e=e.parent);for(var a=t;a;){if(e)switch(l){case pi:return ci(Mi(a,e,n));case mi:return Mi(a,e,n).renderer;case gi:return new Se(Gn(a,e.nodeIndex).renderElement);case bi:return Gn(a,e.nodeIndex).viewContainer;case yi:if(e.element.template)return Gn(a,e.nodeIndex).template;break;case vi:return ri(Mi(a,e,n));case _i:case wi:return ai(a,e);default:var u=(n?e.element.allProviders:e.element.publicProviders)[l];if(u){var s=Un(a,u.nodeIndex);return s||(s={instance:Ti(a,u)},a.nodes[u.nodeIndex]=s),s.instance}}n=pr(a),e=fr(a),a=a.parent,4&r.flags&&(a=null)}var c=o.root.injector.get(r.token,Ii);return c!==Ii||i===Ii?c:o.root.ngModule.injector.get(r.token,i)}function Mi(t,e,n){var r;if(n)r=Gn(t,e.nodeIndex).componentView;else for(r=t;r.parent&&!pr(r);)r=r.parent;return r}function Di(t,e,n,r,i,o){if(32768&n.flags){var l=Gn(t,n.parent.nodeIndex).componentView;2&l.def.flags&&(l.state|=8)}if(e.instance[n.bindings[r].name]=i,524288&n.flags){o=o||{};var a=He.unwrap(t.oldValues[n.bindingIndex+r]);o[n.bindings[r].nonMinifiedName]=new Ge(a,i,0!=(2&t.state))}return t.oldValues[n.bindingIndex+r]=i,o}function Ni(t,e){if(t.def.nodeFlags&e)for(var n=t.def.nodes,r=0,i=0;i<n.length;i++){var o=n[i],l=o.parent;for(!l&&o.flags&e&&Fi(t,i,o.flags&e,r++),0==(o.childFlags&e)&&(i+=o.childCount);l&&1&l.flags&&i===l.nodeIndex+l.childCount;)l.directChildFlags&e&&(r=Li(t,l,e,r)),l=l.parent}}function Li(t,e,n,r){for(var i=e.nodeIndex+1;i<=e.nodeIndex+e.childCount;i++){var o=t.def.nodes[i];o.flags&n&&Fi(t,i,o.flags&n,r++),i+=o.childCount}return r}function Fi(t,e,n,r){var i=Un(t,e);if(i){var o=i.instance;o&&(Wn.setCurrentNode(t,e),1048576&n&&Bn(t,512,r)&&o.ngAfterContentInit(),2097152&n&&o.ngAfterContentChecked(),4194304&n&&Bn(t,768,r)&&o.ngAfterViewInit(),8388608&n&&o.ngAfterViewChecked(),131072&n&&o.ngOnDestroy())}}function zi(t,e,n){var r=[];for(var i in n)r.push({propName:i,bindingType:n[i]});return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:-1,flags:t,childFlags:0,directChildFlags:0,childMatchedQueries:0,ngContentIndex:-1,matchedQueries:{},matchedQueryIds:0,references:{},childCount:0,bindings:[],bindingFlags:0,outputs:[],element:null,provider:null,text:null,query:{id:e,filterId:gr(e),bindings:r},ngContent:null}}function Vi(t){for(var e=t.def.nodeMatchedQueries;t.parent&&mr(t);){var n=t.parentNodeDef;t=t.parent;for(var r=n.nodeIndex+n.childCount,i=0;i<=r;i++)67108864&(o=t.def.nodes[i]).flags&&536870912&o.flags&&(o.query.filterId&e)===o.query.filterId&&Qn(t,i).setDirty(),!(1&o.flags&&i+o.childCount<n.nodeIndex)&&67108864&o.childFlags&&536870912&o.childFlags||(i+=o.childCount)}if(134217728&t.def.nodeFlags)for(i=0;i<t.def.nodes.length;i++){var o;134217728&(o=t.def.nodes[i]).flags&&536870912&o.flags&&Qn(t,i).setDirty(),i+=o.childCount}}function Bi(t,e){var n=Qn(t,e.nodeIndex);if(n.dirty){var r,i=void 0;if(67108864&e.flags){var o=e.parent.parent;i=Hi(t,o.nodeIndex,o.nodeIndex+o.childCount,e.query,[]),r=Un(t,e.parent.nodeIndex).instance}else 134217728&e.flags&&(i=Hi(t,0,t.def.nodes.length-1,e.query,[]),r=t.component);n.reset(i);for(var l=e.query.bindings,a=!1,u=0;u<l.length;u++){var s=l[u],c=void 0;switch(s.bindingType){case 0:c=n.first;break;case 1:c=n,a=!0}r[s.propName]=c}a&&n.notifyOnChanges()}}function Hi(t,e,n,r,i){for(var o=e;o<=n;o++){var l=t.def.nodes[o],a=l.matchedQueries[r.id];if(null!=a&&i.push(Gi(t,l,a)),1&l.flags&&l.element.template&&(l.element.template.nodeMatchedQueries&r.filterId)===r.filterId){var u=Gn(t,o);if((l.childMatchedQueries&r.filterId)===r.filterId&&(Hi(t,o+1,o+l.childCount,r,i),o+=l.childCount),16777216&l.flags)for(var s=u.viewContainer._embeddedViews,c=0;c<s.length;c++){var h=s[c],f=hr(h);f&&f===u&&Hi(h,0,h.def.nodes.length-1,r,i)}var d=u.template._projectedViews;if(d)for(c=0;c<d.length;c++){var p=d[c];Hi(p,0,p.def.nodes.length-1,r,i)}}(l.childMatchedQueries&r.filterId)!==r.filterId&&(o+=l.childCount)}return i}function Gi(t,e,n){if(null!=n)switch(n){case 1:return Gn(t,e.nodeIndex).renderElement;case 0:return new Se(Gn(t,e.nodeIndex).renderElement);case 2:return Gn(t,e.nodeIndex).template;case 3:return Gn(t,e.nodeIndex).viewContainer;case 4:return Un(t,e.nodeIndex).instance}}function Ui(t,e){return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:-1,flags:8,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:{},matchedQueryIds:0,references:{},ngContentIndex:t,childCount:0,bindings:[],bindingFlags:0,outputs:[],element:null,provider:null,text:null,query:null,ngContent:{index:e}}}function qi(t,e,n){var r=vr(t,e,n);r&&Cr(t,n.ngContent.index,1,r,null,void 0)}function Qi(t,e){return Zi(128,t,new Array(e+1))}function Wi(t,e){return Zi(32,t,new Array(e))}function Yi(t,e){for(var n=Object.keys(e),r=n.length,i=new Array(r),o=0;o<r;o++){var l=n[o];i[e[l]]=l}return Zi(64,t,i)}function Zi(t,e,n){for(var r=new Array(n.length),i=0;i<n.length;i++){var o=n[i];r[i]={flags:8,name:o,ns:null,nonMinifiedName:o,securityContext:null,suffix:null}}return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:e,flags:t,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:{},matchedQueryIds:0,references:{},ngContentIndex:-1,childCount:0,bindings:r,bindingFlags:Er(r),outputs:[],element:null,provider:null,text:null,query:null,ngContent:null}}function Ki(t,e,n){for(var r=new Array(n.length-1),i=1;i<n.length;i++)r[i-1]={flags:8,name:null,ns:null,nonMinifiedName:null,securityContext:null,suffix:n[i]};return{nodeIndex:-1,parent:null,renderParent:null,bindingIndex:-1,outputIndex:-1,checkIndex:t,flags:2,childFlags:0,directChildFlags:0,childMatchedQueries:0,matchedQueries:{},matchedQueryIds:0,references:{},ngContentIndex:e,childCount:0,bindings:r,bindingFlags:8,outputs:[],element:null,provider:null,text:{prefix:n[0]},query:null,ngContent:null}}function Xi(t,e,n){var r,i=t.renderer;r=i.createText(n.text.prefix);var o=vr(t,e,n);return o&&i.appendChild(o,r),{renderText:r}}function $i(t,e){return(null!=t?t.toString():"")+e.suffix}function Ji(t,e,n,r){for(var i=0,o=0,l=0,a=0,u=0,s=null,c=null,h=!1,f=!1,d=null,p=0;p<e.length;p++){var m=e[p];if(m.nodeIndex=p,m.parent=s,m.bindingIndex=i,m.outputIndex=o,m.renderParent=c,l|=m.flags,u|=m.matchedQueryIds,m.element){var g=m.element;g.publicProviders=s?s.element.publicProviders:Object.create(null),g.allProviders=g.publicProviders,h=!1,f=!1,m.element.template&&(u|=m.element.template.nodeMatchedQueries)}if(eo(s,m,e.length),i+=m.bindings.length,o+=m.outputs.length,!c&&3&m.flags&&(d=m),20224&m.flags){h||(h=!0,s.element.publicProviders=Object.create(s.element.publicProviders),s.element.allProviders=s.element.publicProviders);var b=0!=(32768&m.flags);0==(8192&m.flags)||b?s.element.publicProviders[Jn(m.provider.token)]=m:(f||(f=!0,s.element.allProviders=Object.create(s.element.publicProviders)),s.element.allProviders[Jn(m.provider.token)]=m),b&&(s.element.componentProvider=m)}if(s?(s.childFlags|=m.flags,s.directChildFlags|=m.flags,s.childMatchedQueries|=m.matchedQueryIds,m.element&&m.element.template&&(s.childMatchedQueries|=m.element.template.nodeMatchedQueries)):a|=m.flags,m.childCount>0)s=m,to(m)||(c=m);else for(;s&&p===s.nodeIndex+s.childCount;){var y=s.parent;y&&(y.childFlags|=s.childFlags,y.childMatchedQueries|=s.childMatchedQueries),c=(s=y)&&to(s)?s.renderParent:s}}return{factory:null,nodeFlags:l,rootNodeFlags:a,nodeMatchedQueries:u,flags:t,nodes:e,updateDirectives:n||Xn,updateRenderer:r||Xn,handleEvent:function(t,n,r,i){return e[n].element.handleEvent(t,r,i)},bindingCount:i,outputCount:o,lastRenderRootNode:d}}function to(t){return 0!=(1&t.flags)&&null===t.element.name}function eo(t,e,n){var r=e.element&&e.element.template;if(r){if(!r.lastRenderRootNode)throw new Error("Illegal State: Embedded templates without nodes are not allowed!");if(r.lastRenderRootNode&&16777216&r.lastRenderRootNode.flags)throw new Error("Illegal State: Last root node of a template can't have embedded views, at index "+e.nodeIndex+"!")}if(20224&e.flags&&0==(1&(t?t.flags:0)))throw new Error("Illegal State: StaticProvider/Directive nodes need to be children of elements or anchors, at index "+e.nodeIndex+"!");if(e.query){if(67108864&e.flags&&(!t||0==(16384&t.flags)))throw new Error("Illegal State: Content Query nodes need to be children of directives, at index "+e.nodeIndex+"!");if(134217728&e.flags&&t)throw new Error("Illegal State: View Query nodes have to be top level nodes, at index "+e.nodeIndex+"!")}if(e.childCount){var i=t?t.nodeIndex+t.childCount:n-1;if(e.nodeIndex<=i&&e.nodeIndex+e.childCount>i)throw new Error("Illegal State: childCount of node leads outside of parent, at index "+e.nodeIndex+"!")}}function no(t,e,n,r){var i=oo(t.root,t.renderer,t,e,n);return lo(i,t.component,r),ao(i),i}function ro(t,e,n){var r=oo(t,t.renderer,null,null,e);return lo(r,n,n),ao(r),r}function io(t,e,n,r){var i,o=e.element.componentRendererType;return i=o?t.root.rendererFactory.createRenderer(r,o):t.root.renderer,oo(t.root,i,t,e.element.componentProvider,n)}function oo(t,e,n,r,i){var o=new Array(i.nodes.length),l=i.outputCount?new Array(i.outputCount):null;return{def:i,parent:n,viewContainerParent:null,parentNodeDef:r,context:null,component:null,nodes:o,state:13,root:t,renderer:e,oldValues:new Array(i.bindingCount),disposables:l,initIndex:-1}}function lo(t,e,n){t.component=e,t.context=n}function ao(t){var e;pr(t)&&(e=Gn(t.parent,t.parentNodeDef.parent.nodeIndex).renderElement);for(var n=t.def,r=t.nodes,i=0;i<n.nodes.length;i++){var o=n.nodes[i];Wn.setCurrentNode(t,i);var l=void 0;switch(201347067&o.flags){case 1:var a=Mr(t,e,o),u=void 0;if(33554432&o.flags){var s=wr(o.element.componentView);u=Wn.createComponentView(t,o,s,a)}Dr(t,u,o,a),l={renderElement:a,componentView:u,viewContainer:null,template:o.element.template?oi(t,o):void 0},16777216&o.flags&&(l.viewContainer=ei(t,o,l));break;case 2:l=Xi(t,e,o);break;case 512:case 1024:case 2048:case 256:(l=r[i])||4096&o.flags||(l={instance:Ri(t,o)});break;case 16:l={instance:ji(t,o)};break;case 16384:(l=r[i])||(l={instance:Oi(t,o)}),32768&o.flags&&lo(Gn(t,o.parent.nodeIndex).componentView,l.instance,l.instance);break;case 32:case 64:case 128:l={value:void 0};break;case 67108864:case 134217728:l=new ke;break;case 8:qi(t,e,o),l=void 0}r[i]=l}bo(t,go.CreateViewNodes),wo(t,201326592,268435456,0)}function uo(t){ho(t),Wn.updateDirectives(t,1),yo(t,go.CheckNoChanges),Wn.updateRenderer(t,1),bo(t,go.CheckNoChanges),t.state&=-97}function so(t){1&t.state?(t.state&=-2,t.state|=2):t.state&=-3,Vn(t,0,256),ho(t),Wn.updateDirectives(t,0),yo(t,go.CheckAndUpdate),wo(t,67108864,536870912,0);var e=Vn(t,256,512);Ni(t,2097152|(e?1048576:0)),Wn.updateRenderer(t,0),bo(t,go.CheckAndUpdate),wo(t,134217728,536870912,0),Ni(t,8388608|((e=Vn(t,512,768))?4194304:0)),2&t.def.flags&&(t.state&=-9),t.state&=-97,Vn(t,768,1024)}function co(t,e,n,i,o,l,a,u,s,c,h,f,d){return 0===n?function(t,e,n,r,i,o,l,a,u,s,c,h){switch(201347067&e.flags){case 1:return function(t,e,n,r,i,o,l,a,u,s,c,h){var f=e.bindings.length,d=!1;return f>0&&Lr(t,e,0,n)&&(d=!0),f>1&&Lr(t,e,1,r)&&(d=!0),f>2&&Lr(t,e,2,i)&&(d=!0),f>3&&Lr(t,e,3,o)&&(d=!0),f>4&&Lr(t,e,4,l)&&(d=!0),f>5&&Lr(t,e,5,a)&&(d=!0),f>6&&Lr(t,e,6,u)&&(d=!0),f>7&&Lr(t,e,7,s)&&(d=!0),f>8&&Lr(t,e,8,c)&&(d=!0),f>9&&Lr(t,e,9,h)&&(d=!0),d}(t,e,n,r,i,o,l,a,u,s,c,h);case 2:return function(t,e,n,r,i,o,l,a,u,s,c,h){var f=!1,d=e.bindings,p=d.length;if(p>0&&lr(t,e,0,n)&&(f=!0),p>1&&lr(t,e,1,r)&&(f=!0),p>2&&lr(t,e,2,i)&&(f=!0),p>3&&lr(t,e,3,o)&&(f=!0),p>4&&lr(t,e,4,l)&&(f=!0),p>5&&lr(t,e,5,a)&&(f=!0),p>6&&lr(t,e,6,u)&&(f=!0),p>7&&lr(t,e,7,s)&&(f=!0),p>8&&lr(t,e,8,c)&&(f=!0),p>9&&lr(t,e,9,h)&&(f=!0),f){var m=e.text.prefix;p>0&&(m+=$i(n,d[0])),p>1&&(m+=$i(r,d[1])),p>2&&(m+=$i(i,d[2])),p>3&&(m+=$i(o,d[3])),p>4&&(m+=$i(l,d[4])),p>5&&(m+=$i(a,d[5])),p>6&&(m+=$i(u,d[6])),p>7&&(m+=$i(s,d[7])),p>8&&(m+=$i(c,d[8])),p>9&&(m+=$i(h,d[9]));var g=Hn(t,e.nodeIndex).renderText;t.renderer.setValue(g,m)}return f}(t,e,n,r,i,o,l,a,u,s,c,h);case 16384:return function(t,e,n,r,i,o,l,a,u,s,c,h){var f=Un(t,e.nodeIndex),d=f.instance,p=!1,m=void 0,g=e.bindings.length;return g>0&&or(t,e,0,n)&&(p=!0,m=Di(t,f,e,0,n,m)),g>1&&or(t,e,1,r)&&(p=!0,m=Di(t,f,e,1,r,m)),g>2&&or(t,e,2,i)&&(p=!0,m=Di(t,f,e,2,i,m)),g>3&&or(t,e,3,o)&&(p=!0,m=Di(t,f,e,3,o,m)),g>4&&or(t,e,4,l)&&(p=!0,m=Di(t,f,e,4,l,m)),g>5&&or(t,e,5,a)&&(p=!0,m=Di(t,f,e,5,a,m)),g>6&&or(t,e,6,u)&&(p=!0,m=Di(t,f,e,6,u,m)),g>7&&or(t,e,7,s)&&(p=!0,m=Di(t,f,e,7,s,m)),g>8&&or(t,e,8,c)&&(p=!0,m=Di(t,f,e,8,c,m)),g>9&&or(t,e,9,h)&&(p=!0,m=Di(t,f,e,9,h,m)),m&&d.ngOnChanges(m),65536&e.flags&&Bn(t,256,e.nodeIndex)&&d.ngOnInit(),262144&e.flags&&d.ngDoCheck(),p}(t,e,n,r,i,o,l,a,u,s,c,h);case 32:case 64:case 128:return function(t,e,n,r,i,o,l,a,u,s,c,h){var f=e.bindings,d=!1,p=f.length;if(p>0&&lr(t,e,0,n)&&(d=!0),p>1&&lr(t,e,1,r)&&(d=!0),p>2&&lr(t,e,2,i)&&(d=!0),p>3&&lr(t,e,3,o)&&(d=!0),p>4&&lr(t,e,4,l)&&(d=!0),p>5&&lr(t,e,5,a)&&(d=!0),p>6&&lr(t,e,6,u)&&(d=!0),p>7&&lr(t,e,7,s)&&(d=!0),p>8&&lr(t,e,8,c)&&(d=!0),p>9&&lr(t,e,9,h)&&(d=!0),d){var m=qn(t,e.nodeIndex),g=void 0;switch(201347067&e.flags){case 32:g=new Array(f.length),p>0&&(g[0]=n),p>1&&(g[1]=r),p>2&&(g[2]=i),p>3&&(g[3]=o),p>4&&(g[4]=l),p>5&&(g[5]=a),p>6&&(g[6]=u),p>7&&(g[7]=s),p>8&&(g[8]=c),p>9&&(g[9]=h);break;case 64:g={},p>0&&(g[f[0].name]=n),p>1&&(g[f[1].name]=r),p>2&&(g[f[2].name]=i),p>3&&(g[f[3].name]=o),p>4&&(g[f[4].name]=l),p>5&&(g[f[5].name]=a),p>6&&(g[f[6].name]=u),p>7&&(g[f[7].name]=s),p>8&&(g[f[8].name]=c),p>9&&(g[f[9].name]=h);break;case 128:var b=n;switch(p){case 1:g=b.transform(n);break;case 2:g=b.transform(r);break;case 3:g=b.transform(r,i);break;case 4:g=b.transform(r,i,o);break;case 5:g=b.transform(r,i,o,l);break;case 6:g=b.transform(r,i,o,l,a);break;case 7:g=b.transform(r,i,o,l,a,u);break;case 8:g=b.transform(r,i,o,l,a,u,s);break;case 9:g=b.transform(r,i,o,l,a,u,s,c);break;case 10:g=b.transform(r,i,o,l,a,u,s,c,h)}}m.value=g}return d}(t,e,n,r,i,o,l,a,u,s,c,h);default:throw"unreachable"}}(t,e,i,o,l,a,u,s,c,h,f,d):function(t,e,n){switch(201347067&e.flags){case 1:return function(t,e,n){for(var r=!1,i=0;i<n.length;i++)Lr(t,e,i,n[i])&&(r=!0);return r}(t,e,n);case 2:return function(t,e,n){for(var r=e.bindings,i=!1,o=0;o<n.length;o++)lr(t,e,o,n[o])&&(i=!0);if(i){var l="";for(o=0;o<n.length;o++)l+=$i(n[o],r[o]);l=e.text.prefix+l;var a=Hn(t,e.nodeIndex).renderText;t.renderer.setValue(a,l)}return i}(t,e,n);case 16384:return function(t,e,n){for(var r=Un(t,e.nodeIndex),i=r.instance,o=!1,l=void 0,a=0;a<n.length;a++)or(t,e,a,n[a])&&(o=!0,l=Di(t,r,e,a,n[a],l));return l&&i.ngOnChanges(l),65536&e.flags&&Bn(t,256,e.nodeIndex)&&i.ngOnInit(),262144&e.flags&&i.ngDoCheck(),o}(t,e,n);case 32:case 64:case 128:return function(t,e,n){for(var i=e.bindings,o=!1,l=0;l<n.length;l++)lr(t,e,l,n[l])&&(o=!0);if(o){var a=qn(t,e.nodeIndex),u=void 0;switch(201347067&e.flags){case 32:u=n;break;case 64:for(u={},l=0;l<n.length;l++)u[i[l].name]=n[l];break;case 128:var s=n[0],c=n.slice(1);u=s.transform.apply(s,Object(r.d)(c))}a.value=u}return o}(t,e,n);default:throw"unreachable"}}(t,e,i)}function ho(t){var e=t.def;if(4&e.nodeFlags)for(var n=0;n<e.nodes.length;n++){var r=e.nodes[n];if(4&r.flags){var i=Gn(t,n).template._projectedViews;if(i)for(var o=0;o<i.length;o++){var l=i[o];l.state|=32,sr(l,t)}}else 0==(4&r.childFlags)&&(n+=r.childCount)}}function fo(t,e,n,r,i,o,l,a,u,s,c,h,f){return 0===n?function(t,e,n,r,i,o,l,a,u,s,c,h){var f=e.bindings.length;f>0&&ar(t,e,0,n),f>1&&ar(t,e,1,r),f>2&&ar(t,e,2,i),f>3&&ar(t,e,3,o),f>4&&ar(t,e,4,l),f>5&&ar(t,e,5,a),f>6&&ar(t,e,6,u),f>7&&ar(t,e,7,s),f>8&&ar(t,e,8,c),f>9&&ar(t,e,9,h)}(t,e,r,i,o,l,a,u,s,c,h,f):function(t,e,n){for(var r=0;r<n.length;r++)ar(t,e,r,n[r])}(t,e,r),!1}function po(t,e){if(Qn(t,e.nodeIndex).dirty)throw Yn(Wn.createDebugContext(t,e.nodeIndex),"Query "+e.query.id+" not dirty","Query "+e.query.id+" dirty",0!=(1&t.state))}function mo(t){if(!(128&t.state)){if(yo(t,go.Destroy),bo(t,go.Destroy),Ni(t,131072),t.disposables)for(var e=0;e<t.disposables.length;e++)t.disposables[e]();!function(t){if(16&t.state){var e=hr(t);if(e){var n=e.template._projectedViews;n&&(Kr(n,n.indexOf(t)),Wn.dirtyParentQueries(t))}}}(t),t.renderer.destroyNode&&function(t){for(var e=t.def.nodes.length,n=0;n<e;n++){var r=t.def.nodes[n];1&r.flags?t.renderer.destroyNode(Gn(t,n).renderElement):2&r.flags?t.renderer.destroyNode(Hn(t,n).renderText):(67108864&r.flags||134217728&r.flags)&&Qn(t,n).destroy()}}(t),pr(t)&&t.renderer.destroy(),t.state|=128}}var go=function(t){return t[t.CreateViewNodes=0]="CreateViewNodes",t[t.CheckNoChanges=1]="CheckNoChanges",t[t.CheckNoChangesProjectedViews=2]="CheckNoChangesProjectedViews",t[t.CheckAndUpdate=3]="CheckAndUpdate",t[t.CheckAndUpdateProjectedViews=4]="CheckAndUpdateProjectedViews",t[t.Destroy=5]="Destroy",t}({});function bo(t,e){var n=t.def;if(33554432&n.nodeFlags)for(var r=0;r<n.nodes.length;r++){var i=n.nodes[r];33554432&i.flags?vo(Gn(t,r).componentView,e):0==(33554432&i.childFlags)&&(r+=i.childCount)}}function yo(t,e){var n=t.def;if(16777216&n.nodeFlags)for(var r=0;r<n.nodes.length;r++){var i=n.nodes[r];if(16777216&i.flags)for(var o=Gn(t,r).viewContainer._embeddedViews,l=0;l<o.length;l++)vo(o[l],e);else 0==(16777216&i.childFlags)&&(r+=i.childCount)}}function vo(t,e){var n=t.state;switch(e){case go.CheckNoChanges:0==(128&n)&&(12==(12&n)?uo(t):64&n&&_o(t,go.CheckNoChangesProjectedViews));break;case go.CheckNoChangesProjectedViews:0==(128&n)&&(32&n?uo(t):64&n&&_o(t,e));break;case go.CheckAndUpdate:0==(128&n)&&(12==(12&n)?so(t):64&n&&_o(t,go.CheckAndUpdateProjectedViews));break;case go.CheckAndUpdateProjectedViews:0==(128&n)&&(32&n?so(t):64&n&&_o(t,e));break;case go.Destroy:mo(t);break;case go.CreateViewNodes:ao(t)}}function _o(t,e){yo(t,e),bo(t,e)}function wo(t,e,n,r){if(t.def.nodeFlags&e&&t.def.nodeFlags&n)for(var i=t.def.nodes.length,o=0;o<i;o++){var l=t.def.nodes[o];if(l.flags&e&&l.flags&n)switch(Wn.setCurrentNode(t,l.nodeIndex),r){case 0:Bi(t,l);break;case 1:po(t,l)}l.childFlags&e&&l.childFlags&n||(o+=l.childCount)}}var xo=!1;function So(t,e,n,r,i,o){return ro(ko(t,i,i.injector.get(_e),e,n),r,o)}function Co(t,e,n,r,i,o){var l=i.injector.get(_e),a=ko(t,i,new ol(l),e,n),u=Do(r);return rl(Uo.create,ro,null,[a,u,o])}function ko(t,e,n,r,i){var o=e.injector.get(zn),l=e.injector.get(at);return{ngModule:e,injector:t,projectableNodes:r,selectorOrNode:i,sanitizer:o,rendererFactory:n,renderer:n.createRenderer(null,null),errorHandler:l}}function Ro(t,e,n,r){var i=Do(n);return rl(Uo.create,no,null,[t,e,i,r])}function jo(t,e,n,r){return n=Po.get(e.element.componentProvider.provider.token)||Do(n),rl(Uo.create,io,null,[t,e,n,r])}function Oo(t,e,n,r){return fi(t,e,n,function(t){var e=function(t){var e=!1,n=!1;return 0===Eo.size?{hasOverrides:e,hasDeprecatedOverrides:n}:(t.providers.forEach(function(t){var r=Eo.get(t.token);3840&t.flags&&r&&(e=!0,n=n||r.deprecatedBehavior)}),t.modules.forEach(function(t){To.forEach(function(r,i){i.ngInjectableDef.providedIn===t&&(e=!0,n=n||r.deprecatedBehavior)})}),{hasOverrides:e,hasDeprecatedOverrides:n})}(t),n=e.hasDeprecatedOverrides;return e.hasOverrides?(function(t){for(var e=0;e<t.providers.length;e++){var r=t.providers[e];n&&(r.flags|=4096);var i=Eo.get(r.token);i&&(r.flags=-3841&r.flags|i.flags,r.deps=yr(i.deps),r.value=i.value)}if(To.size>0){var o=new Set(t.modules);To.forEach(function(e,r){if(o.has(r.ngInjectableDef.providedIn)){var i={token:r,flags:e.flags|(n?4096:0),deps:yr(e.deps),value:e.value,index:t.providers.length};t.providers.push(i),t.providersByKey[Jn(r)]=i}})}}(t=t.factory(function(){return Xn})),t):t}(r))}var Eo=new Map,To=new Map,Po=new Map;function Io(t){Eo.set(t.token,t),"function"==typeof t.token&&t.token.ngInjectableDef&&"function"==typeof t.token.ngInjectableDef.providedIn&&To.set(t.token,t)}function Ao(t,e){var n=wr(wr(e.viewDefFactory).nodes[0].element.componentView);Po.set(t,n)}function Mo(){Eo.clear(),To.clear(),Po.clear()}function Do(t){if(0===Eo.size)return t;var e=function(t){for(var e=[],n=null,r=0;r<t.nodes.length;r++){var i=t.nodes[r];1&i.flags&&(n=i),n&&3840&i.flags&&Eo.has(i.provider.token)&&(e.push(n.nodeIndex),n=null)}return e}(t);if(0===e.length)return t;t=t.factory(function(){return Xn});for(var n=0;n<e.length;n++)r(t,e[n]);return t;function r(t,e){for(var n=e+1;n<t.nodes.length;n++){var r=t.nodes[n];if(1&r.flags)return;if(3840&r.flags){var i=r.provider,o=Eo.get(i.token);o&&(r.flags=-3841&r.flags|o.flags,i.deps=yr(o.deps),i.value=o.value)}}}}function No(t,e,n,r,i,o,l,a,u,s,c,h,f){var d=t.def.nodes[e];return co(t,d,n,r,i,o,l,a,u,s,c,h,f),224&d.flags?qn(t,e).value:void 0}function Lo(t,e,n,r,i,o,l,a,u,s,c,h,f){var d=t.def.nodes[e];return fo(t,d,n,r,i,o,l,a,u,s,c,h,f),224&d.flags?qn(t,e).value:void 0}function Fo(t){return rl(Uo.detectChanges,so,null,[t])}function zo(t){return rl(Uo.checkNoChanges,uo,null,[t])}function Vo(t){return rl(Uo.destroy,mo,null,[t])}var Bo,Ho,Go,Uo=function(t){return t[t.create=0]="create",t[t.detectChanges=1]="detectChanges",t[t.checkNoChanges=2]="checkNoChanges",t[t.destroy=3]="destroy",t[t.handleEvent=4]="handleEvent",t}({});function qo(t,e){Ho=t,Go=e}function Qo(t,e,n,r){return qo(t,e),rl(Uo.handleEvent,t.def.handleEvent,null,[t,e,n,r])}function Wo(t,e){if(128&t.state)throw Kn(Uo[Bo]);return qo(t,Jo(t,0)),t.def.updateDirectives(function(t,n,r){for(var i=[],o=3;o<arguments.length;o++)i[o-3]=arguments[o];var l=t.def.nodes[n];return 0===e?Zo(t,l,r,i):Ko(t,l,r,i),16384&l.flags&&qo(t,Jo(t,n)),224&l.flags?qn(t,l.nodeIndex).value:void 0},t)}function Yo(t,e){if(128&t.state)throw Kn(Uo[Bo]);return qo(t,tl(t,0)),t.def.updateRenderer(function(t,n,r){for(var i=[],o=3;o<arguments.length;o++)i[o-3]=arguments[o];var l=t.def.nodes[n];return 0===e?Zo(t,l,r,i):Ko(t,l,r,i),3&l.flags&&qo(t,tl(t,n)),224&l.flags?qn(t,l.nodeIndex).value:void 0},t)}function Zo(t,e,n,i){if(co.apply(void 0,Object(r.d)([t,e,n],i))){var o=1===n?i[0]:i;if(16384&e.flags){for(var l={},a=0;a<e.bindings.length;a++){var u=e.bindings[a],s=o[a];8&u.flags&&(l[(d=u.nonMinifiedName,"ng-reflect-"+(d=d.replace(/[$@]/g,"_").replace(Xo,function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return"-"+t[1].toLowerCase()})))]=$o(s))}var c=e.parent,h=Gn(t,c.nodeIndex).renderElement;if(c.element.name)for(var f in l)null!=(s=l[f])?t.renderer.setAttribute(h,f,s):t.renderer.removeAttribute(h,f);else t.renderer.setValue(h,"bindings="+JSON.stringify(l,null,2))}}var d}function Ko(t,e,n,i){fo.apply(void 0,Object(r.d)([t,e,n],i))}var Xo=/([A-Z])/g;function $o(t){try{return null!=t?t.toString().slice(0,30):t}catch(t){return"[ERROR] Exception while trying to serialize the value"}}function Jo(t,e){for(var n=e;n<t.def.nodes.length;n++){var r=t.def.nodes[n];if(16384&r.flags&&r.bindings&&r.bindings.length)return n}return null}function tl(t,e){for(var n=e;n<t.def.nodes.length;n++){var r=t.def.nodes[n];if(3&r.flags&&r.bindings&&r.bindings.length)return n}return null}var el=function(){function t(t,e){this.view=t,this.nodeIndex=e,null==e&&(this.nodeIndex=e=0),this.nodeDef=t.def.nodes[e];for(var n=this.nodeDef,r=t;n&&0==(1&n.flags);)n=n.parent;if(!n)for(;!n&&r;)n=fr(r),r=r.parent;this.elDef=n,this.elView=r}return Object.defineProperty(t.prototype,"elOrCompView",{get:function(){return Gn(this.elView,this.elDef.nodeIndex).componentView||this.view},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"injector",{get:function(){return ai(this.elView,this.elDef)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"component",{get:function(){return this.elOrCompView.component},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"context",{get:function(){return this.elOrCompView.context},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"providerTokens",{get:function(){var t=[];if(this.elDef)for(var e=this.elDef.nodeIndex+1;e<=this.elDef.nodeIndex+this.elDef.childCount;e++){var n=this.elView.def.nodes[e];20224&n.flags&&t.push(n.provider.token),e+=n.childCount}return t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"references",{get:function(){var t={};if(this.elDef){nl(this.elView,this.elDef,t);for(var e=this.elDef.nodeIndex+1;e<=this.elDef.nodeIndex+this.elDef.childCount;e++){var n=this.elView.def.nodes[e];20224&n.flags&&nl(this.elView,n,t),e+=n.childCount}}return t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"componentRenderElement",{get:function(){var t=function(t){for(;t&&!pr(t);)t=t.parent;return t.parent?Gn(t.parent,fr(t).nodeIndex):null}(this.elOrCompView);return t?t.renderElement:void 0},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"renderNode",{get:function(){return 2&this.nodeDef.flags?dr(this.view,this.nodeDef):dr(this.elView,this.elDef)},enumerable:!0,configurable:!0}),t.prototype.logError=function(t){for(var e,n,i=[],o=1;o<arguments.length;o++)i[o-1]=arguments[o];2&this.nodeDef.flags?(e=this.view.def,n=this.nodeDef.nodeIndex):(e=this.elView.def,n=this.elDef.nodeIndex);var l=function(t,e){for(var n=-1,r=0;r<=e;r++)3&t.nodes[r].flags&&n++;return n}(e,n),a=-1;e.factory(function(){var e;return++a===l?(e=t.error).bind.apply(e,Object(r.d)([t],i)):Xn}),a<l&&(t.error("Illegal state: the ViewDefinitionFactory did not call the logger!"),t.error.apply(t,Object(r.d)(i)))},t}();function nl(t,e,n){for(var r in e.references)n[r]=Gi(t,e,e.references[r])}function rl(t,e,n,r){var i=Bo,o=Ho,l=Go;try{Bo=t;var a=e.apply(n,r);return Ho=o,Go=l,Bo=i,a}catch(t){if(it(t)||!Ho)throw t;throw function(t,e){return t instanceof Error||(t=new Error(t.toString())),Zn(t,e),t}(t,il())}}function il(){return Ho?new el(Ho,Go):null}var ol=function(){function t(t){this.delegate=t}return t.prototype.createRenderer=function(t,e){return new ll(this.delegate.createRenderer(t,e))},t.prototype.begin=function(){this.delegate.begin&&this.delegate.begin()},t.prototype.end=function(){this.delegate.end&&this.delegate.end()},t.prototype.whenRenderingDone=function(){return this.delegate.whenRenderingDone?this.delegate.whenRenderingDone():Promise.resolve(null)},t}(),ll=function(){function t(t){this.delegate=t,this.data=this.delegate.data}return t.prototype.destroyNode=function(t){!function(t){Fe.delete(t.nativeNode)}(ze(t)),this.delegate.destroyNode&&this.delegate.destroyNode(t)},t.prototype.destroy=function(){this.delegate.destroy()},t.prototype.createElement=function(t,e){var n=this.delegate.createElement(t,e),r=il();if(r){var i=new De(n,null,r);i.name=t,Ve(i)}return n},t.prototype.createComment=function(t){var e=this.delegate.createComment(t),n=il();return n&&Ve(new Me(e,null,n)),e},t.prototype.createText=function(t){var e=this.delegate.createText(t),n=il();return n&&Ve(new Me(e,null,n)),e},t.prototype.appendChild=function(t,e){var n=ze(t),r=ze(e);n&&r&&n instanceof De&&n.addChild(r),this.delegate.appendChild(t,e)},t.prototype.insertBefore=function(t,e,n){var r=ze(t),i=ze(e),o=ze(n);r&&i&&r instanceof De&&r.insertBefore(o,i),this.delegate.insertBefore(t,e,n)},t.prototype.removeChild=function(t,e){var n=ze(t),r=ze(e);n&&r&&n instanceof De&&n.removeChild(r),this.delegate.removeChild(t,e)},t.prototype.selectRootElement=function(t){var e=this.delegate.selectRootElement(t),n=il();return n&&Ve(new De(e,null,n)),e},t.prototype.setAttribute=function(t,e,n,r){var i=ze(t);i&&i instanceof De&&(i.attributes[r?r+":"+e:e]=n),this.delegate.setAttribute(t,e,n,r)},t.prototype.removeAttribute=function(t,e,n){var r=ze(t);r&&r instanceof De&&(r.attributes[n?n+":"+e:e]=null),this.delegate.removeAttribute(t,e,n)},t.prototype.addClass=function(t,e){var n=ze(t);n&&n instanceof De&&(n.classes[e]=!0),this.delegate.addClass(t,e)},t.prototype.removeClass=function(t,e){var n=ze(t);n&&n instanceof De&&(n.classes[e]=!1),this.delegate.removeClass(t,e)},t.prototype.setStyle=function(t,e,n,r){var i=ze(t);i&&i instanceof De&&(i.styles[e]=n),this.delegate.setStyle(t,e,n,r)},t.prototype.removeStyle=function(t,e,n){var r=ze(t);r&&r instanceof De&&(r.styles[e]=null),this.delegate.removeStyle(t,e,n)},t.prototype.setProperty=function(t,e,n){var r=ze(t);r&&r instanceof De&&(r.properties[e]=n),this.delegate.setProperty(t,e,n)},t.prototype.listen=function(t,e,n){if("string"!=typeof t){var r=ze(t);r&&r.listeners.push(new function(t,e){this.name=t,this.callback=e}(e,n))}return this.delegate.listen(t,e,n)},t.prototype.parentNode=function(t){return this.delegate.parentNode(t)},t.prototype.nextSibling=function(t){return this.delegate.nextSibling(t)},t.prototype.setValue=function(t,e){return this.delegate.setValue(t,e)},t}();function al(t,e,n){return new ul(t,e,n)}var ul=function(t){function e(e,n,r){var i=t.call(this)||this;return i.moduleType=e,i._bootstrapComponents=n,i._ngModuleDefFactory=r,i}return Object(r.b)(e,t),e.prototype.create=function(t){!function(){if(!xo){xo=!0;var t=fe()?{setCurrentNode:qo,createRootView:Co,createEmbeddedView:Ro,createComponentView:jo,createNgModuleRef:Oo,overrideProvider:Io,overrideComponentView:Ao,clearOverrides:Mo,checkAndUpdateView:Fo,checkNoChangesView:zo,destroyView:Vo,createDebugContext:function(t,e){return new el(t,e)},handleEvent:Qo,updateDirectives:Wo,updateRenderer:Yo}:{setCurrentNode:function(){},createRootView:So,createEmbeddedView:no,createComponentView:io,createNgModuleRef:fi,overrideProvider:Xn,overrideComponentView:Xn,clearOverrides:Xn,checkAndUpdateView:so,checkNoChangesView:uo,destroyView:mo,createDebugContext:function(t,e){return new el(t,e)},handleEvent:function(t,e,n,r){return t.def.handleEvent(t,e,n,r)},updateDirectives:function(t,e){return t.def.updateDirectives(0===e?No:Lo,t)},updateRenderer:function(t,e){return t.def.updateRenderer(0===e?No:Lo,t)}};Wn.setCurrentNode=t.setCurrentNode,Wn.createRootView=t.createRootView,Wn.createEmbeddedView=t.createEmbeddedView,Wn.createComponentView=t.createComponentView,Wn.createNgModuleRef=t.createNgModuleRef,Wn.overrideProvider=t.overrideProvider,Wn.overrideComponentView=t.overrideComponentView,Wn.clearOverrides=t.clearOverrides,Wn.checkAndUpdateView=t.checkAndUpdateView,Wn.checkNoChangesView=t.checkNoChangesView,Wn.destroyView=t.destroyView,Wn.resolveDep=Ai,Wn.createDebugContext=t.createDebugContext,Wn.handleEvent=t.handleEvent,Wn.updateDirectives=t.updateDirectives,Wn.updateRenderer=t.updateRenderer,Wn.dirtyParentQueries=Vi}}();var e=function(t){var e=Array.from(t.providers),n=Array.from(t.modules),r={};for(var i in t.providersByKey)r[i]=t.providersByKey[i];return{factory:t.factory,isRoot:t.isRoot,providers:e,modules:n,providersByKey:r}}(wr(this._ngModuleDefFactory));return Wn.createNgModuleRef(this.moduleType,t||M.NULL,this._bootstrapComponents,e)},e}(Ut);function sl(t,e,n){t!=e&&hl(n)}function cl(t,e){null==t&&hl(e)}function hl(t){throw new Error("ASSERTION ERROR: "+t)}var fl=16,dl=0,pl=1,ml=2,gl=3,bl=4,yl=5,vl=6,_l=7,wl=8,xl=9,Sl=10,Cl=11,kl=14;function Rl(t,e,n){t.afterContentInit&&(e.contentHooks||(e.contentHooks=[])).push(n,t.afterContentInit),t.afterContentChecked&&((e.contentHooks||(e.contentHooks=[])).push(n,t.afterContentChecked),(e.contentCheckHooks||(e.contentCheckHooks=[])).push(n,t.afterContentChecked))}function jl(t,e,n){t.afterViewInit&&(e.viewHooks||(e.viewHooks=[])).push(n,t.afterViewInit),t.afterViewChecked&&((e.viewHooks||(e.viewHooks=[])).push(n,t.afterViewChecked),(e.viewCheckHooks||(e.viewCheckHooks=[])).push(n,t.afterViewChecked))}function Ol(t,e,n){null!=t.onDestroy&&(e.destroyHooks||(e.destroyHooks=[])).push(n,t.onDestroy)}function El(t,e,n){16&t[bl]&&(Tl(t[_l],e.initHooks,e.checkHooks,n),t[bl]&=-17)}function Tl(t,e,n,r){var i=r?e:n;i&&Pl(t,i)}function Pl(t,e){for(var n=0;n<e.length;n+=2)e[n+1].call(t[e[n]])}"undefined"==typeof ngDevMode&&("undefined"!=typeof window&&window||"undefined"!=typeof self&&self||"undefined"!=typeof global&&global);var Il=0,Al=4,Ml="ngProjectAs";function Dl(t){return!!t.listen}var Nl={createRenderer:function(t,e){return document}};function Ll(t,e){cl(t,"should be called with a node"),sl(t.tNode.type,e,"should be a "+function(t){return 1==t?"Projection":0==t?"Container":2==t?"View":3==t?"Element":"<unknown>"}(e))}function Fl(t){return Array.isArray(t)?t[0]:t}function zl(t){if(2===t.tNode.type){var e=t.data;return e[ml]?e[ml][yl]:null}return t.tNode.next?t.view[t.tNode.next.index]:null}function Vl(t){return t.tNode.child?Fl((2===t.tNode.type?t.data:t.view)[t.tNode.child.index]):null}function Bl(t){if(-1===t.tNode.index&&2===t.tNode.type){var e=t.data[kl];return-1===e?null:t.view[e].dynamicLContainerNode}var n=t.tNode.parent;return Fl(n?t.view[n.index]:t.view[yl])}var Hl=[];function Gl(t){for(var e=t[yl];2===e.tNode.type;)ngDevMode&&cl(t[pl],"lViewData.parent"),e=(t=t[pl])[yl];return ngDevMode&&Ll(e,3),ngDevMode&&cl(e.data,"node.data"),e}function Ul(t,e,n,r,i){0===t?Dl(e)?e.insertBefore(n,r,i):n.insertBefore(r,i,!0):1===t?Dl(e)?e.removeChild(n,r):n.removeChild(r):2===t&&(ngDevMode&&ngDevMode.rendererDestroyNode++,e.destroyNode(r))}function ql(t){if(-1===t[dl].childIndex)return null;var e=t[t[dl].childIndex];return e.data?e.data:e.dynamicLContainerNode.data}function Ql(t,e){var n;return(n=t[yl])&&2===n.tNode.type?Bl(n).data:t[pl]===e?null:t[pl]}function Wl(t){if(t[dl]){var e=t;!function(t){var e=t[dl].cleanup;if(null!=e){for(var n=0;n<e.length-1;n+=2)"string"==typeof e[n]?(Fl(t[e[n+1]]).native.removeEventListener(e[n],t[wl][e[n+2]],e[n+3]),n+=2):"number"==typeof e[n]?(0,t[wl][e[n]])():e[n].call(t[wl][e[n+1]]);t[wl]=null}}(e),function(t){var e,n=t[dl];null!=n&&null!=(e=n.destroyHooks)&&Pl(t[_l],e)}(e),(r=(n=e)[dl]&&n[dl].pipeDestroyHooks)&&Pl(n,r),-1===e[dl].id&&Dl(e[Cl])&&(ngDevMode&&ngDevMode.rendererDestroy++,e[Cl].destroy())}var n,r}var Yl,Zl,Kl,Xl,$l,Jl,ta,ea,na,ra="__ngHostLNode__",ia=Promise.resolve(null),oa=[0,0],la=new Array(fl).fill(null),aa=!1,ua=!0;function sa(t,e){var n=ea;return na=t&&t[_l],$l=t&&t[dl],ta=t&&1==(1&t[bl]),ua=t&&$l.firstTemplatePass,Yl=t&&t[Cl],null!=e&&(Kl=e,Xl=!0),ea=t,Jl=t&&t[gl],n}function ca(t,e){e||(aa||Tl(na,$l.viewHooks,$l.viewCheckHooks,ta),ea[bl]&=-6),ea[bl]|=16,ea[vl]=-1,sa(t,null)}function ha(){aa||El(ea,$l,ta),function(t){for(var e=ql(ea);null!==e;e=e[ml])if(e.length<fl&&null===e[Il])for(var n=e,r=0;r<n[Al].length;r++){var i=n[Al][r],o=i.data;ngDevMode&&cl(o[dl],"TView must be allocated"),ma(i,o[dl],o[xl],2)}}(),aa||Tl(na,$l.contentHooks,$l.contentCheckHooks,ta),$l.firstTemplatePass=ua=!1,fa($l.hostBindings),function(t){if(null!=t.contentQueries)for(var e=0;e<t.contentQueries.length;e+=2){var n=t.contentQueries[e];t.directives[n].contentQueriesRefresh(n,t.contentQueries[e+1])}}($l),function(t){if(null!=t)for(var e=0;e<t.length;e+=2)Sa(t[e],t[e+1])}($l.components)}function fa(t){if(null!=t)for(var e=$l.directives,n=0;n<t.length;n+=2){var r=t[n],i=e[r];i.hostBindings&&i.hostBindings(r,t[n+1])}}function da(t,e,n,r,i){return[e,ea,null,null,25|r,null,-1,null,null,n,ea&&ea[Sl],t,i||null,null,-1,null]}function pa(t,e,n,r,i,o){var l=Xl?Kl:Kl&&Bl(Kl),a=l&&l.view===ea?l.tNode:null,u=(Xl?Jl:Kl&&Kl.queries)||l&&l.queries&&l.queries.child(),s=null!=o,c=function(t,e,n,r,i,o){return{native:r,view:ea,nodeInjector:n?n.nodeInjector:null,data:i,queries:o,tNode:null,dynamicLContainerNode:null}}(0,0,l,n,s?o:null,u);if(-1===t||2===e)c.tNode=(o?o[dl].node:null)||xa(e,t,null,null,a,null);else{var h=t+fl;ngDevMode&&Ta(h);var f=$l.data;if(ea[h]=c,h>=f.length){var d=f[h]=xa(e,h,r,i,a,null);if(!Xl&&Kl){var p=Kl.tNode;p.next=d,p.dynamicContainerNode&&(p.dynamicContainerNode.next=d)}}c.tNode=f[h],Xl&&(Jl=null,(null==Kl.tNode.child&&Kl.view===ea||2===Kl.tNode.type)&&(Kl.tNode.child=c.tNode))}if(2==(2&e)&&s){var m=o;ngDevMode&&null!=m[yl]&&hl("lViewData[HOST_NODE] should not have been initialized"),m[yl]=c,ua&&(m[dl].node=c.tNode)}return Kl=c,Xl=!0,c}function ma(t,e,n,r){var i,o=Xl,l=Kl;if(null==t.data[pl]&&t.data[xl]&&!e.template)ka(t.data[xl]);else try{Xl=!0,Kl=null,i=sa(t.data,t),va(),e.template(r,n),2&r?ha():t.data[dl].firstTemplatePass=ua=!1}finally{ca(i,1==(1&r)),Xl=o,Kl=l}return t}function ga(t,e,n,r){var i=sa(e,t);try{Zl.begin&&Zl.begin(),r?(va(),r(ba(e),n),ha()):(aa||(El(ea,$l,ta),Tl(na,$l.contentHooks,$l.contentCheckHooks,ta)),fa(oa),Sa(0,fl))}finally{Zl.end&&Zl.end(),ca(i)}}function ba(t){return 1&t[bl]?3:2}var ya=null;function va(){ya=null}function _a(t,e,n,r,i){return ngDevMode&&ngDevMode.tView++,{id:t,template:e,viewQuery:i,node:null,data:la.slice(),childIndex:-1,bindingStartIndex:-1,directives:null,firstTemplatePass:!0,initHooks:null,checkHooks:null,contentHooks:null,contentCheckHooks:null,viewHooks:null,viewCheckHooks:null,destroyHooks:null,pipeDestroyHooks:null,cleanup:null,hostBindings:null,contentQueries:null,components:null,directiveRegistry:"function"==typeof n?n():n,pipeRegistry:"function"==typeof r?r():r,currentMatches:null}}function wa(t,e){ngDevMode&&Ea(-1),Zl=t;var n,r=t.createRenderer(null,null),i="string"==typeof e?Dl(r)?r.selectRootElement(e):r.querySelector(e):e;if(ngDevMode&&!i)throw new Error("Renderer: "+("string"==typeof e?"Host node with selector not found:":"Host node is required:")+" ["+("function"==typeof(n=e)?n.name||n:"string"==typeof n?n:null==n?"":""+n)+"]");return i}function xa(t,e,n,r,i,o){return ngDevMode&&ngDevMode.tNode++,{type:t,index:e,flags:0,tagName:n,attrs:r,localNames:null,initialInputs:void 0,inputs:void 0,outputs:void 0,tViews:o,next:null,child:null,parent:i,dynamicContainerNode:null,detached:null,stylingTemplate:null,projection:null}}function Sa(t,e){ngDevMode&&Ea(e);var n=ea[e];ngDevMode&&Ll(n,3),ngDevMode&&cl(n.data,"Component's host node should have an LViewData attached.");var r=n.data;Ca(r)&&6&r[bl]&&(ngDevMode&&Ea(t,na),Oa(r,n,na[t]))}function Ca(t){return 8==(8&t[bl])}function ka(t){for(var e=0;e<t.components.length;e++){var n=t.components[e],r=Pa(n);ngDevMode&&cl(r.data,"Component host node should be attached to an LView"),ga(r,Ra(n),n)}}function Ra(t){ngDevMode&&cl(t,"component");for(var e=Pa(t).view;e[pl];)e=e[pl];return e}function ja(t){var e=Pa(t);ngDevMode&&cl(e.data,"Component host node should be attached to an LViewData instance."),Oa(e.data,e,t)}function Oa(t,e,n){var r=sa(t,e),i=t[dl],o=i.template,l=i.viewQuery;try{va(),function(e,n,r){e&&1&t[bl]&&e(1,r)}(l,0,n),o(ba(t),n),ha(),function(t,e){t&&t(2,e)}(l,n)}finally{ca(r)}}function Ea(t,e){null==e&&(e=ea),function(t,e){t>=(e?e.length:0)&&hl("index expected to be a valid data index")}(t,e||ea)}function Ta(t,e){null==e&&(e=ea),sl(e.length,t,"index "+t+" expected to be at the end of arr (length "+e.length+")")}function Pa(t){ngDevMode&&cl(t,"expecting component got null");var e=t[ra];return ngDevMode&&cl(t,"object is not a component"),e}var Ia=ia;function Aa(t){return{components:[],scheduler:t,clean:Ia}}var Ma=function(){function t(t,e){this._view=t,this._appRef=null,this._viewContainerRef=null,this._lViewNode=null,this.context=e}return t.prototype._setComponentContext=function(t,e){this._view=t,this.context=e},Object.defineProperty(t.prototype,"destroyed",{get:function(){return 32==(32&this._view[bl])},enumerable:!0,configurable:!0}),t.prototype.destroy=function(){var t,e;this._viewContainerRef&&Ca(this._view)&&(this._viewContainerRef.detach(this._viewContainerRef.indexOf(this)),this._viewContainerRef=null),Dl(e=(t=this._view)[Cl])&&e.destroyNode&&function(e,n,r,i,o,l){for(var a=t[yl],u=-1;a;){var s=null,c=a.tNode.type;if(3===c)Ul(2,i,null,a.native,l),a.dynamicLContainerNode&&Ul(2,i,null,a.dynamicLContainerNode.native,l);else if(0===c){Ul(2,i,null,a.native,l);var h=a,f=h.dynamicLContainerNode?h.dynamicLContainerNode.data:h.data;(s=f[Al].length?Vl(f[Al][0]):null)&&(l=h.dynamicLContainerNode?h.dynamicLContainerNode.native:h.native)}else if(1===c){var d=Gl(a.view),p=d.tNode.projection[a.tNode.projection];Hl[++u]=a,s=p?d.data[pl][p.index]:null}else s=Vl(a);if(null===s)for(null===(s=zl(a))&&8192&a.tNode.flags&&(s=zl(Hl[u--]));a&&!s;){if(null===(a=Bl(a))||a===n)return null;a.tNode.next||0!==c||(l=a.native),s=zl(a)}a=s}}(0,t[yl],0,e),function(t){if(-1===t[dl].childIndex)return Wl(t);for(var e=ql(t);e;){var n=null;if(e.length>=fl?e[dl].childIndex>-1&&(n=ql(e)):e[Al].length&&(n=e[Al][0].data),null==n){for(;e&&!e[ml]&&e!==t;)Wl(e),e=Ql(e,t);Wl(e||t),n=e&&e[ml]}e=n}}(t),t[bl]|=32},t.prototype.onDestroy=function(t){var e,n;n=t,function(t){return t[wl]||(t[wl]=[])}(e=this._view).push(n),e[dl].firstTemplatePass&&function(t){return t[dl].cleanup||(t[dl].cleanup=[])}(e).push(e[wl].length-1,null)},t.prototype.markForCheck=function(){!function(t){for(var e=t;null!=e[pl];)e[bl]|=4,e=e[pl];var n,r;e[bl]|=4,ngDevMode&&cl(e[xl],"rootContext"),(n=e[xl]).clean==ia&&(n.clean=new Promise(function(t){return r=t}),n.scheduler(function(){ka(n),r(null),n.clean=ia}))}(this._view)},t.prototype.detach=function(){this._view[bl]&=-9},t.prototype.reattach=function(){this._view[bl]|=8},t.prototype.detectChanges=function(){ja(this.context)},t.prototype.checkNoChanges=function(){!function(t){aa=!0;try{ja(t)}finally{aa=!1}}(this.context)},t.prototype.attachToViewContainerRef=function(t){this._viewContainerRef=t},t.prototype.detachFromAppRef=function(){this._appRef=null},t.prototype.attachToAppRef=function(t){this._appRef=t},t}(),Da=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Object(r.b)(e,t),e.prototype.resolveComponentFactory=function(t){return ngDevMode&&(void 0===e&&(e="Type passed in is not ComponentType, it does not have 'ngComponentDef' property."),t.ngComponentDef||hl(e)),new za(t.ngComponentDef);var e},e}(Vt);function Na(t){var e=[];for(var n in t)t.hasOwnProperty(n)&&e.push({propName:t[n],templateName:n});return e}var La=new c("ROOT_CONTEXT_TOKEN",{providedIn:"root",factory:function(){return Aa(K(Fa))}}),Fa=new c("SCHEDULER_TOKEN",{providedIn:"root",factory:function(){return requestAnimationFrame.bind(window)}}),za=function(t){function e(e){var n=t.call(this)||this;return n.componentDef=e,n.componentType=e.type,n.selector=e.selectors[0][0],n.ngContentSelectors=[],n}return Object(r.b)(e,t),Object.defineProperty(e.prototype,"inputs",{get:function(){return Na(this.componentDef.inputs)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"outputs",{get:function(){return Na(this.componentDef.outputs)},enumerable:!0,configurable:!0}),e.prototype.create=function(t,e,n,r){var i,o,l=void 0===n,a=r?r.injector.get(_e):Nl,u=l?(i=this.selector,Dl(o=a.createRenderer(null,this.componentDef.rendererType)||Yl)?o.createElement(i,ya):null===ya?o.createElement(i):o.createElementNS(ya,i)):wa(a,n),s=r&&!l?r.injector.get(La):Aa(requestAnimationFrame.bind(window)),c=da(a.createRenderer(u,this.componentDef.rendererType),_a(-1,null,null,null,null),s,this.componentDef.onPush?4:2);c[Sl]=r&&r.injector||null;var h,f,d=sa(c,null);try{if(a.begin&&a.begin(),f=function(t,e,n,r){Xl=!1,Kl=null;var i,o=pa(0,3,e,null,null,da(Yl,(i=n.template).ngPrivateData||(i.ngPrivateData=_a(-1,i,n.directiveDefs,n.pipeDefs,n.viewQuery)),null,n.onPush?4:2,r));return ua&&(o.tNode.flags=4096,n.diPublic&&n.diPublic(n),$l.directives=[n]),o}(0,u,this.componentDef),s.components.push(h=function(t,e,n){if(ngDevMode&&sl(ea[vl],-1,"directives should be created before any bindings"),ngDevMode&&sl(Xl,!0,"previousOrParentNode should be a parent"),Object.defineProperty(e,ra,{enumerable:!1,value:Kl}),null==na&&(ea[_l]=na=[]),ngDevMode&&Ta(t,na),na[t]=e,ua){var r=Kl.tNode.flags;0==(4095&r)?Kl.tNode.flags=t<<14|4096&r|1:(ngDevMode&&4095==(4095&r)&&hl("Reached the max number of directives"),Kl.tNode.flags++)}else{var i=n.diPublic;i&&i(n)}return null!=n.attributes&&3==Kl.tNode.type&&function(t,e){for(var n=Dl(Yl),r=0;r<e.length;){var i=e[r];if(1===i)break;if(i===Ml)r+=2;else if(ngDevMode&&ngDevMode.rendererSetAttribute++,0===i){var o=e[r+1],l=e[r+2],a=e[r+3];n?Yl.setAttribute(t,l,a,o):t.setAttributeNS(o,l,a),r+=4}else a=e[r+1],n?Yl.setAttribute(t,i,a):t.setAttribute(i,a),r+=2}}(Kl.native,n.attributes),e}(0,this.componentDef.factory(),this.componentDef)),function(t,e,n){t&&null!=t.changeDetectorRef&&t.changeDetectorRef._setComponentContext(f.data,h)}(f.nodeInjector),function(t,e){var n=Pa(t),r=n.view[dl];(function(t,e,n,r){ngDevMode&&sl(r.firstTemplatePass,!0,"Should only be called on first template pass"),e&&(r.initHooks||(r.initHooks=[])).push(0,e),n&&((r.initHooks||(r.initHooks=[])).push(0,n),(r.checkHooks||(r.checkHooks=[])).push(0,n))})(0,e.onInit,e.doCheck,r),function(t,e){if(e.firstTemplatePass)for(var n=t>>14,r=n+(4095&t),i=n;i<r;i++){var o=e.directives[i];Rl(o,e,i),jl(o,e,i),Ol(o,e,i)}}(n.tNode.flags,r)}(h,this.componentDef),e)for(var p=0,m=f.tNode.projection=[],g=0;g<e.length;g++){for(var b=e[g],y=null,v=null,_=0;_<b.length;_++){var w=pa(++p,3,b[_],null,null);v?v.next=w.tNode:y=w.tNode,v=w.tNode}m.push(y)}ma(f,f.data[dl],h,1),f.data[bl]&=-2}finally{sa(d,null),a.end&&a.end()}var x=new Va(this.componentType,h,c,t,u);return l&&(x.hostView._lViewNode.tNode.child=f.tNode),x},e}(Mt),Va=function(t){function e(e,n,r,i,o){var l=t.call(this)||this;return l.destroyCbs=[],l.instance=n,l.hostView=l.changeDetectorRef=new Ma(r,n),l.hostView._lViewNode=pa(-1,2,null,null,null,r),l.injector=i,l.location=new Se(o),l.componentType=e,l}return Object(r.b)(e,t),e.prototype.destroy=function(){ngDevMode&&cl(this.destroyCbs,"NgModule already destroyed"),this.destroyCbs.forEach(function(t){return t()}),this.destroyCbs=null},e.prototype.onDestroy=function(t){ngDevMode&&cl(this.destroyCbs,"NgModule already destroyed"),this.destroyCbs.push(t)},e}(At),Ba={provide:Vt,useFactory:function(){return new Da},deps:[]},Ha=function(t){function e(e,n){var r=t.call(this)||this;r._bootstrapComponents=[],r.destroyCbs=[];var i=e.ngModuleDef;return ngDevMode&&cl(i,"NgModule '"+x(e)+"' is not a subtype of 'NgModuleType'."),r._bootstrapComponents=i.bootstrap,r.injector=function(t,e,n){return void 0===e&&(e=null),void 0===n&&(n=null),e=e||dt(),new pt(t,n,e)}(e,n,[Ba,{provide:Gt,useValue:r}]),r.instance=r.injector.get(e),r.componentFactoryResolver=new Da,r}return Object(r.b)(e,t),e.prototype.destroy=function(){ngDevMode&&cl(this.destroyCbs,"NgModule already destroyed"),this.destroyCbs.forEach(function(t){return t()}),this.destroyCbs=null},e.prototype.onDestroy=function(t){ngDevMode&&cl(this.destroyCbs,"NgModule already destroyed"),this.destroyCbs.push(t)},e}(Gt);!function(t){function e(e){var n=t.call(this)||this;return n.moduleType=e,n}Object(r.b)(e,t),e.prototype.create=function(t){return new Ha(this.moduleType,t)}}(Ut)},DKTb:function(t,e,n){"use strict";function r(t){setTimeout(function(){throw t})}n.d(e,"a",function(){return r})},DtyJ:function(t,e,n){"use strict";n.r(e);var r=n("6blF"),i=n("KhEm"),o=n("IxPp"),l=n("xTla"),a=n("K9Ia"),u=n("26FU"),s=n("S5bw"),c=n("svcd"),h=n("KQya"),f=n("T1DM"),d=n("zo3G"),p=n("mrSG"),m=n("h9Dq"),g=function(t){function e(e,n){var r=t.call(this,e,n)||this;return r.scheduler=e,r.work=n,r}return p.b(e,t),e.prototype.requestAsyncId=function(e,n,r){return void 0===r&&(r=0),null!==r&&r>0?t.prototype.requestAsyncId.call(this,e,n,r):(e.actions.push(this),e.scheduled||(e.scheduled=requestAnimationFrame(function(){return e.flush(null)})))},e.prototype.recycleAsyncId=function(e,n,r){if(void 0===r&&(r=0),null!==r&&r>0||null===r&&this.delay>0)return t.prototype.recycleAsyncId.call(this,e,n,r);0===e.actions.length&&(cancelAnimationFrame(n),e.scheduled=void 0)},e}(m.a),b=n("CS9Q"),y=new(function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return p.b(e,t),e.prototype.flush=function(t){this.active=!0,this.scheduled=void 0;var e,n=this.actions,r=-1,i=n.length;t=t||n.shift();do{if(e=t.execute(t.state,t.delay))break}while(++r<i&&(t=n.shift()));if(this.active=!1,e){for(;++r<i&&(t=n.shift());)t.unsubscribe();throw e}},e}(b.a))(g),v=function(t){function e(e,n){void 0===e&&(e=_),void 0===n&&(n=Number.POSITIVE_INFINITY);var r=t.call(this,e,function(){return r.frame})||this;return r.maxFrames=n,r.frame=0,r.index=-1,r}return p.b(e,t),e.prototype.flush=function(){for(var t,e,n=this.actions,r=this.maxFrames;(e=n.shift())&&(this.frame=e.delay)<=r&&!(t=e.execute(e.state,e.delay)););if(t){for(;e=n.shift();)e.unsubscribe();throw t}},e.frameTimeFactor=10,e}(b.a),_=function(t){function e(e,n,r){void 0===r&&(r=e.index+=1);var i=t.call(this,e,n)||this;return i.scheduler=e,i.work=n,i.index=r,i.active=!0,i.index=e.index=r,i}return p.b(e,t),e.prototype.schedule=function(n,r){if(void 0===r&&(r=0),!this.id)return t.prototype.schedule.call(this,n,r);this.active=!1;var i=new e(this.scheduler,this.work);return this.add(i),i.schedule(n,r)},e.prototype.requestAsyncId=function(t,n,r){void 0===r&&(r=0),this.delay=t.frame+r;var i=t.actions;return i.push(this),i.sort(e.sortActions),!0},e.prototype.recycleAsyncId=function(t,e,n){void 0===n&&(n=0)},e.prototype._execute=function(e,n){if(!0===this.active)return t.prototype._execute.call(this,e,n)},e.sortActions=function(t,e){return t.delay===e.delay?t.index===e.index?0:t.index>e.index?1:-1:t.delay>e.delay?1:-1},e}(m.a),w=n("siIJ"),x=n("pugT"),S=n("FFOo"),C=n("60iU"),k=n("y3By"),R=n("+umK"),j=n("mChF");function O(t){return!!t&&(t instanceof r.a||"function"==typeof t.lift&&"function"==typeof t.subscribe)}var E=n("b7mW"),T=n("3fWJ"),P=n("8g8A"),I=n("awvh"),A=n("3U0i"),M=n("67Y/"),D=n("isby"),N=n("nkY7");function L(t,e,n){if(e){if(!Object(N.a)(e))return function(){for(var r=[],i=0;i<arguments.length;i++)r[i]=arguments[i];return L(t,n).apply(void 0,r).pipe(Object(M.a)(function(t){return Object(D.a)(t)?e.apply(void 0,t):e(t)}))};n=e}return function(){for(var e=[],i=0;i<arguments.length;i++)e[i]=arguments[i];var o,l=this,a={context:l,subject:o,callbackFunc:t,scheduler:n};return new r.a(function(r){if(n)return n.schedule(F,0,{args:e,subscriber:r,params:a});if(!o){o=new c.a;try{t.apply(l,e.concat([function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];o.next(t.length<=1?t[0]:t),o.complete()}]))}catch(t){o.error(t)}}return o.subscribe(r)})}}function F(t){var e=this,n=t.args,r=t.subscriber,i=t.params,o=i.callbackFunc,l=i.context,a=i.scheduler,u=i.subject;if(!u){u=i.subject=new c.a;try{o.apply(l,n.concat([function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];e.add(a.schedule(z,0,{value:t.length<=1?t[0]:t,subject:u}))}]))}catch(t){u.error(t)}}this.add(u.subscribe(r))}function z(t){var e=t.subject;e.next(t.value),e.complete()}function V(t,e,n){if(e){if(!Object(N.a)(e))return function(){for(var r=[],i=0;i<arguments.length;i++)r[i]=arguments[i];return V(t,n).apply(void 0,r).pipe(Object(M.a)(function(t){return Object(D.a)(t)?e.apply(void 0,t):e(t)}))};n=e}return function(){for(var e=[],i=0;i<arguments.length;i++)e[i]=arguments[i];var o={subject:void 0,args:e,callbackFunc:t,scheduler:n,context:this};return new r.a(function(r){var i=o.context,l=o.subject;if(n)return n.schedule(B,0,{params:o,subscriber:r,context:i});if(!l){l=o.subject=new c.a;try{t.apply(i,e.concat([function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var n=t.shift();n?l.error(n):(l.next(t.length<=1?t[0]:t),l.complete())}]))}catch(t){l.error(t)}}return l.subscribe(r)})}}function B(t){var e=this,n=t.params,r=t.subscriber,i=t.context,o=n.callbackFunc,l=n.args,a=n.scheduler,u=n.subject;if(!u){u=n.subject=new c.a;try{o.apply(i,l.concat([function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];var r=t.shift();e.add(r?a.schedule(G,0,{err:r,subject:u}):a.schedule(H,0,{value:t.length<=1?t[0]:t,subject:u}))}]))}catch(t){this.add(a.schedule(G,0,{err:t,subject:u}))}}this.add(u.subscribe(r))}function H(t){var e=t.subject;e.next(t.value),e.complete()}function G(t){t.subject.error(t.err)}var U=n("dzgT"),q=n("dEwP"),Q=n("lYZG"),W=n("G5J1"),Y=n("VNr4"),Z=n("0/uQ"),K=n("bne5"),X=n("kERW");function $(t,e,n,i,o){var l,a;return 1==arguments.length?(a=t.initialState,e=t.condition,n=t.iterate,l=t.resultSelector||j.a,o=t.scheduler):void 0===i||Object(N.a)(i)?(a=t,l=j.a,o=i):(a=t,l=i),new r.a(function(t){var r=a;if(o)return o.schedule(J,0,{subscriber:t,iterate:n,condition:e,resultSelector:l,state:r});for(;;){if(e){var i=void 0;try{i=e(r)}catch(e){return void t.error(e)}if(!i){t.complete();break}}var u=void 0;try{u=l(r)}catch(e){return void t.error(e)}if(t.next(u),t.closed)break;try{r=n(r)}catch(e){return void t.error(e)}}})}function J(t){var e=t.subscriber,n=t.condition;if(!e.closed){if(t.needIterate)try{t.state=t.iterate(t.state)}catch(t){return void e.error(t)}else t.needIterate=!0;if(n){var r=void 0;try{r=n(t.state)}catch(t){return void e.error(t)}if(!r)return void e.complete();if(e.closed)return}var i;try{i=t.resultSelector(t.state)}catch(t){return void e.error(t)}if(!e.closed&&(e.next(i),!e.closed))return this.schedule(t)}}function tt(t,e,n){return void 0===e&&(e=W.a),void 0===n&&(n=W.a),Object(Q.a)(function(){return t()?e:n})}var et=n("/21U");function nt(t,e){return void 0===t&&(t=0),void 0===e&&(e=f.a),(!Object(et.a)(t)||t<0)&&(t=0),e&&"function"==typeof e.schedule||(e=f.a),new r.a(function(n){return n.add(e.schedule(rt,t,{subscriber:n,counter:0,period:t})),n})}function rt(t){var e=t.subscriber,n=t.counter,r=t.period;e.next(n),this.schedule({subscriber:e,counter:n+1,period:r},r)}var it=n("p0ib"),ot=new r.a(R.a);function lt(){return ot}var at=n("F/XL");function ut(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];if(0===t.length)return W.a;var n=t[0],i=t.slice(1);return 1===t.length&&Object(D.a)(n)?ut.apply(void 0,n):new r.a(function(t){var e=function(){return t.add(ut.apply(void 0,i).subscribe(t))};return Object(Z.a)(n).subscribe({next:function(e){t.next(e)},error:e,complete:e})})}function st(t,e){return new r.a(e?function(n){var r=Object.keys(t),i=new x.a;return i.add(e.schedule(ct,0,{keys:r,index:0,subscriber:n,subscription:i,obj:t})),i}:function(e){for(var n=Object.keys(t),r=0;r<n.length&&!e.closed;r++){var i=n[r];t.hasOwnProperty(i)&&e.next([i,t[i]])}e.complete()})}function ct(t){var e=t.keys,n=t.index,r=t.subscriber,i=t.subscription,o=t.obj;if(!r.closed)if(n<e.length){var l=e[n];r.next([l,o[l]]),i.add(this.schedule({keys:e,index:n+1,subscriber:r,subscription:i,obj:o}))}else r.complete()}var ht=n("W0Ae");function ft(t,e,n){return void 0===t&&(t=0),void 0===e&&(e=0),new r.a(function(r){var i=0,o=t;if(n)return n.schedule(dt,0,{index:i,count:e,start:t,subscriber:r});for(;;){if(i++>=e){r.complete();break}if(r.next(o++),r.closed)break}})}function dt(t){var e=t.start,n=t.index,r=t.subscriber;n>=t.count?r.complete():(r.next(e),r.closed||(t.index=n+1,t.start=e+1,this.schedule(t)))}var pt=n("XlPw"),mt=n("gI3B");function gt(t,e){return new r.a(function(n){var r,i;try{r=t()}catch(t){return void n.error(t)}try{i=e(r)}catch(t){return void n.error(t)}var o=(i?Object(Z.a)(i):W.a).subscribe(n);return function(){o.unsubscribe(),r&&r.unsubscribe()}})}var bt=n("909l"),yt=n("iLxQ");n.d(e,"Observable",function(){return r.a}),n.d(e,"ConnectableObservable",function(){return i.a}),n.d(e,"GroupedObservable",function(){return o.a}),n.d(e,"observable",function(){return l.a}),n.d(e,"Subject",function(){return a.a}),n.d(e,"BehaviorSubject",function(){return u.a}),n.d(e,"ReplaySubject",function(){return s.a}),n.d(e,"AsyncSubject",function(){return c.a}),n.d(e,"asapScheduler",function(){return h.a}),n.d(e,"asyncScheduler",function(){return f.a}),n.d(e,"queueScheduler",function(){return d.a}),n.d(e,"animationFrameScheduler",function(){return y}),n.d(e,"VirtualTimeScheduler",function(){return v}),n.d(e,"VirtualAction",function(){return _}),n.d(e,"Scheduler",function(){return w.a}),n.d(e,"Subscription",function(){return x.a}),n.d(e,"Subscriber",function(){return S.a}),n.d(e,"Notification",function(){return C.a}),n.d(e,"pipe",function(){return k.a}),n.d(e,"noop",function(){return R.a}),n.d(e,"identity",function(){return j.a}),n.d(e,"isObservable",function(){return O}),n.d(e,"ArgumentOutOfRangeError",function(){return E.a}),n.d(e,"EmptyError",function(){return T.a}),n.d(e,"ObjectUnsubscribedError",function(){return P.a}),n.d(e,"UnsubscriptionError",function(){return I.a}),n.d(e,"TimeoutError",function(){return A.a}),n.d(e,"bindCallback",function(){return L}),n.d(e,"bindNodeCallback",function(){return V}),n.d(e,"combineLatest",function(){return U.b}),n.d(e,"concat",function(){return q.a}),n.d(e,"defer",function(){return Q.a}),n.d(e,"empty",function(){return W.b}),n.d(e,"forkJoin",function(){return Y.a}),n.d(e,"from",function(){return Z.a}),n.d(e,"fromEvent",function(){return K.a}),n.d(e,"fromEventPattern",function(){return X.a}),n.d(e,"generate",function(){return $}),n.d(e,"iif",function(){return tt}),n.d(e,"interval",function(){return nt}),n.d(e,"merge",function(){return it.a}),n.d(e,"never",function(){return lt}),n.d(e,"of",function(){return at.a}),n.d(e,"onErrorResumeNext",function(){return ut}),n.d(e,"pairs",function(){return st}),n.d(e,"race",function(){return ht.a}),n.d(e,"range",function(){return ft}),n.d(e,"throwError",function(){return pt.a}),n.d(e,"timer",function(){return mt.a}),n.d(e,"using",function(){return gt}),n.d(e,"zip",function(){return bt.b}),n.d(e,"EMPTY",function(){return W.a}),n.d(e,"NEVER",function(){return ot}),n.d(e,"config",function(){return yt.a})},Ehmk:function(t,e,n){"use strict";n.d(e,"a",function(){return l});var r,i=n("eihs");function o(){try{return r.apply(this,arguments)}catch(t){return i.a.e=t,i.a}}function l(t){return r=t,o}},"En8+":function(t,e,n){"use strict";n.d(e,"a",function(){return r});var r=function(){return"function"==typeof Symbol&&Symbol.iterator?Symbol.iterator:"@@iterator"}()},"F/XL":function(t,e,n){"use strict";n.d(e,"a",function(){return a});var r=n("nkY7"),i=n("IUTb"),o=n("G5J1"),l=n("PU8L");function a(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var n=t[t.length-1];switch(Object(r.a)(n)?t.pop():n=void 0,t.length){case 0:return Object(o.b)(n);case 1:return n?Object(i.a)(t,n):Object(l.a)(t[0]);default:return Object(i.a)(t,n)}}},FFOo:function(t,e,n){"use strict";n.d(e,"a",function(){return c});var r=n("mrSG"),i=n("2Bdj"),o=n("6ahw"),l=n("pugT"),a=n("L/V9"),u=n("iLxQ"),s=n("DKTb"),c=function(t){function e(e,n,r){var i=t.call(this)||this;switch(i.syncErrorValue=null,i.syncErrorThrown=!1,i.syncErrorThrowable=!1,i.isStopped=!1,arguments.length){case 0:i.destination=o.a;break;case 1:if(!e){i.destination=o.a;break}if("object"==typeof e){if(f(e)){var l=e[a.a]();i.syncErrorThrowable=l.syncErrorThrowable,i.destination=l,l.add(i)}else i.syncErrorThrowable=!0,i.destination=new h(i,e);break}default:i.syncErrorThrowable=!0,i.destination=new h(i,e,n,r)}return i}return r.b(e,t),e.prototype[a.a]=function(){return this},e.create=function(t,n,r){var i=new e(t,n,r);return i.syncErrorThrowable=!1,i},e.prototype.next=function(t){this.isStopped||this._next(t)},e.prototype.error=function(t){this.isStopped||(this.isStopped=!0,this._error(t))},e.prototype.complete=function(){this.isStopped||(this.isStopped=!0,this._complete())},e.prototype.unsubscribe=function(){this.closed||(this.isStopped=!0,t.prototype.unsubscribe.call(this))},e.prototype._next=function(t){this.destination.next(t)},e.prototype._error=function(t){this.destination.error(t),this.unsubscribe()},e.prototype._complete=function(){this.destination.complete(),this.unsubscribe()},e.prototype._unsubscribeAndRecycle=function(){var t=this._parent,e=this._parents;return this._parent=null,this._parents=null,this.unsubscribe(),this.closed=!1,this.isStopped=!1,this._parent=t,this._parents=e,this},e}(l.a),h=function(t){function e(e,n,r,l){var a,u=t.call(this)||this;u._parentSubscriber=e;var s=u;return Object(i.a)(n)?a=n:n&&(a=n.next,r=n.error,l=n.complete,n!==o.a&&(s=Object.create(n),Object(i.a)(s.unsubscribe)&&u.add(s.unsubscribe.bind(s)),s.unsubscribe=u.unsubscribe.bind(u))),u._context=s,u._next=a,u._error=r,u._complete=l,u}return r.b(e,t),e.prototype.next=function(t){if(!this.isStopped&&this._next){var e=this._parentSubscriber;u.a.useDeprecatedSynchronousErrorHandling&&e.syncErrorThrowable?this.__tryOrSetError(e,this._next,t)&&this.unsubscribe():this.__tryOrUnsub(this._next,t)}},e.prototype.error=function(t){if(!this.isStopped){var e=this._parentSubscriber,n=u.a.useDeprecatedSynchronousErrorHandling;if(this._error)n&&e.syncErrorThrowable?(this.__tryOrSetError(e,this._error,t),this.unsubscribe()):(this.__tryOrUnsub(this._error,t),this.unsubscribe());else if(e.syncErrorThrowable)n?(e.syncErrorValue=t,e.syncErrorThrown=!0):Object(s.a)(t),this.unsubscribe();else{if(this.unsubscribe(),n)throw t;Object(s.a)(t)}}},e.prototype.complete=function(){var t=this;if(!this.isStopped){var e=this._parentSubscriber;if(this._complete){var n=function(){return t._complete.call(t._context)};u.a.useDeprecatedSynchronousErrorHandling&&e.syncErrorThrowable?(this.__tryOrSetError(e,n),this.unsubscribe()):(this.__tryOrUnsub(n),this.unsubscribe())}else this.unsubscribe()}},e.prototype.__tryOrUnsub=function(t,e){try{t.call(this._context,e)}catch(t){if(this.unsubscribe(),u.a.useDeprecatedSynchronousErrorHandling)throw t;Object(s.a)(t)}},e.prototype.__tryOrSetError=function(t,e,n){if(!u.a.useDeprecatedSynchronousErrorHandling)throw new Error("bad call");try{e.call(this._context,n)}catch(e){return u.a.useDeprecatedSynchronousErrorHandling?(t.syncErrorValue=e,t.syncErrorThrown=!0,!0):(Object(s.a)(e),!0)}return!1},e.prototype._unsubscribe=function(){var t=this._parentSubscriber;this._context=null,this._parentSubscriber=null,t.unsubscribe()},e}(c);function f(t){return t instanceof c||"syncErrorThrowable"in t&&t[a.a]}},FVSy:function(t,e,n){"use strict";n.d(e,"c",function(){return r}),n.d(e,"g",function(){return i}),n.d(e,"f",function(){return o}),n.d(e,"b",function(){return l}),n.d(e,"a",function(){return a}),n.d(e,"d",function(){return u}),n.d(e,"h",function(){return s}),n.d(e,"e",function(){return c});var r=function(){},i=function(){},o=function(){},l=function(){this.align="start"},a=function(){},u=function(){},s=function(){},c=function(){}},Fxb1:function(t,e,n){"use strict";n.d(e,"a",function(){return d});var r=n("6blF"),i=n("+tJ4"),o=n("S5XQ"),l=n("u67D"),a=n("JcRv"),u=n("2ePl"),s=n("/WYv"),c=n("McSo"),h=n("En8+"),f=n("xTla"),d=function(t){if(t instanceof r.a)return function(e){return t._isScalar?(e.next(t.value),void e.complete()):t.subscribe(e)};if(t&&"function"==typeof t[f.a])return Object(a.a)(t);if(Object(u.a)(t))return Object(i.a)(t);if(Object(s.a)(t))return Object(o.a)(t);if(t&&"function"==typeof t[h.a])return Object(l.a)(t);var e=Object(c.a)(t)?"an invalid object":"'"+t+"'";throw new TypeError("You provided "+e+" where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.")}},Fzqc:function(t,e,n){"use strict";n.d(e,"b",function(){return l}),n.d(e,"a",function(){return a});var r=n("Ip0R"),i=n("CcnG"),o=new i.q("cdk-dir-doc",{providedIn:"root",factory:function(){return Object(i.Y)(r.c)}}),l=function(){function t(t){if(this.value="ltr",this.change=new i.n,t){var e=(t.body?t.body.dir:null)||(t.documentElement?t.documentElement.dir:null);this.value="ltr"===e||"rtl"===e?e:"ltr"}}return t.prototype.ngOnDestroy=function(){this.change.complete()},t.ngInjectableDef=Object(i.U)({factory:function(){return new t(Object(i.Y)(o,8))},token:t,providedIn:"root"}),t}(),a=function(){}},G5J1:function(t,e,n){"use strict";n.d(e,"a",function(){return i}),n.d(e,"b",function(){return o});var r=n("6blF"),i=new r.a(function(t){return t.complete()});function o(t){return t?function(t){return new r.a(function(e){return t.schedule(function(){return e.complete()})})}(t):i}},Gi3i:function(t,e,n){"use strict";n.d(e,"a",function(){return l});var r=n("mrSG"),i=n("FFOo"),o=n("T1DM");function l(t,e){return void 0===e&&(e=o.a),function(n){return n.lift(new a(t,e))}}var a=function(){function t(t,e){this.dueTime=t,this.scheduler=e}return t.prototype.call=function(t,e){return e.subscribe(new u(t,this.dueTime,this.scheduler))},t}(),u=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.dueTime=n,i.scheduler=r,i.debouncedSubscription=null,i.lastValue=null,i.hasValue=!1,i}return r.b(e,t),e.prototype._next=function(t){this.clearDebounce(),this.lastValue=t,this.hasValue=!0,this.add(this.debouncedSubscription=this.scheduler.schedule(s,this.dueTime,this))},e.prototype._complete=function(){this.debouncedNext(),this.destination.complete()},e.prototype.debouncedNext=function(){if(this.clearDebounce(),this.hasValue){var t=this.lastValue;this.lastValue=null,this.hasValue=!1,this.destination.next(t)}},e.prototype.clearDebounce=function(){var t=this.debouncedSubscription;null!==t&&(this.remove(t),t.unsubscribe(),this.debouncedSubscription=null)},e}(i.a);function s(t){t.debouncedNext()}},HJBe:function(t,e,n){"use strict";n.d(e,"a",function(){return o});var r=n("mrSG"),i=n("FFOo");function o(t){return void 0===t&&(t=null),function(e){return e.lift(new l(t))}}var l=function(){function t(t){this.defaultValue=t}return t.prototype.call=function(t,e){return e.subscribe(new a(t,this.defaultValue))},t}(),a=function(t){function e(e,n){var r=t.call(this,e)||this;return r.defaultValue=n,r.isEmpty=!0,r}return r.b(e,t),e.prototype._next=function(t){this.isEmpty=!1,this.destination.next(t)},e.prototype._complete=function(){this.isEmpty&&this.destination.next(this.defaultValue),this.destination.complete()},e}(i.a)},IUTb:function(t,e,n){"use strict";n.d(e,"a",function(){return l});var r=n("6blF"),i=n("pugT"),o=n("+tJ4");function l(t,e){return new r.a(e?function(n){var r=new i.a,o=0;return r.add(e.schedule(function(){o!==t.length?(n.next(t[o++]),n.closed||r.add(this.schedule())):n.complete()})),r}:Object(o.a)(t))}},Ip0R:function(t,e,n){"use strict";n.d(e,"z",function(){return Q}),n.d(e,"l",function(){return Y}),n.d(e,"m",function(){return W}),n.d(e,"A",function(){return Z}),n.d(e,"b",function(){return ft}),n.d(e,"i",function(){return K}),n.d(e,"j",function(){return $}),n.d(e,"k",function(){return tt}),n.d(e,"n",function(){return at}),n.d(e,"o",function(){return it}),n.d(e,"p",function(){return ot}),n.d(e,"q",function(){return lt}),n.d(e,"r",function(){return ut}),n.d(e,"c",function(){return dt}),n.d(e,"d",function(){return ct}),n.d(e,"u",function(){return ht}),n.d(e,"y",function(){return pt}),n.d(e,"w",function(){return gt}),n.d(e,"x",function(){return bt}),n.d(e,"v",function(){return yt}),n.d(e,"t",function(){return o}),n.d(e,"f",function(){return l}),n.d(e,"h",function(){return a}),n.d(e,"a",function(){return u}),n.d(e,"e",function(){return h}),n.d(e,"s",function(){return f}),n.d(e,"g",function(){return s});var r=n("CcnG"),i=n("mrSG"),o=function(){},l=new r.q("Location Initialized"),a=function(){},u=new r.q("appBaseHref"),s=function(){function t(e){var n=this;this._subject=new r.n,this._platformStrategy=e;var i=this._platformStrategy.getBaseHref();this._baseHref=t.stripTrailingSlash(c(i)),this._platformStrategy.onPopState(function(t){n._subject.emit({url:n.path(!0),pop:!0,state:t.state,type:t.type})})}return t.prototype.path=function(t){return void 0===t&&(t=!1),this.normalize(this._platformStrategy.path(t))},t.prototype.isCurrentPathEqualTo=function(e,n){return void 0===n&&(n=""),this.path()==this.normalize(e+t.normalizeQueryParams(n))},t.prototype.normalize=function(e){return t.stripTrailingSlash(function(t,e){return t&&e.startsWith(t)?e.substring(t.length):e}(this._baseHref,c(e)))},t.prototype.prepareExternalUrl=function(t){return t&&"/"!==t[0]&&(t="/"+t),this._platformStrategy.prepareExternalUrl(t)},t.prototype.go=function(t,e,n){void 0===e&&(e=""),void 0===n&&(n=null),this._platformStrategy.pushState(n,"",t,e)},t.prototype.replaceState=function(t,e,n){void 0===e&&(e=""),void 0===n&&(n=null),this._platformStrategy.replaceState(n,"",t,e)},t.prototype.forward=function(){this._platformStrategy.forward()},t.prototype.back=function(){this._platformStrategy.back()},t.prototype.subscribe=function(t,e,n){return this._subject.subscribe({next:t,error:e,complete:n})},t.normalizeQueryParams=function(t){return t&&"?"!==t[0]?"?"+t:t},t.joinWithSlash=function(t,e){if(0==t.length)return e;if(0==e.length)return t;var n=0;return t.endsWith("/")&&n++,e.startsWith("/")&&n++,2==n?t+e.substring(1):1==n?t+e:t+"/"+e},t.stripTrailingSlash=function(t){var e=t.match(/#|\?|$/),n=e&&e.index||t.length;return t.slice(0,n-("/"===t[n-1]?1:0))+t.slice(n)},t}();function c(t){return t.replace(/\/index.html$/,"")}var h=function(t){function e(e,n){var r=t.call(this)||this;return r._platformLocation=e,r._baseHref="",null!=n&&(r._baseHref=n),r}return Object(i.b)(e,t),e.prototype.onPopState=function(t){this._platformLocation.onPopState(t),this._platformLocation.onHashChange(t)},e.prototype.getBaseHref=function(){return this._baseHref},e.prototype.path=function(t){void 0===t&&(t=!1);var e=this._platformLocation.hash;return null==e&&(e="#"),e.length>0?e.substring(1):e},e.prototype.prepareExternalUrl=function(t){var e=s.joinWithSlash(this._baseHref,t);return e.length>0?"#"+e:e},e.prototype.pushState=function(t,e,n,r){var i=this.prepareExternalUrl(n+s.normalizeQueryParams(r));0==i.length&&(i=this._platformLocation.pathname),this._platformLocation.pushState(t,e,i)},e.prototype.replaceState=function(t,e,n,r){var i=this.prepareExternalUrl(n+s.normalizeQueryParams(r));0==i.length&&(i=this._platformLocation.pathname),this._platformLocation.replaceState(t,e,i)},e.prototype.forward=function(){this._platformLocation.forward()},e.prototype.back=function(){this._platformLocation.back()},e}(a),f=function(t){function e(e,n){var r=t.call(this)||this;if(r._platformLocation=e,null==n&&(n=r._platformLocation.getBaseHrefFromDOM()),null==n)throw new Error("No base href set. Please provide a value for the APP_BASE_HREF token or add a base element to the document.");return r._baseHref=n,r}return Object(i.b)(e,t),e.prototype.onPopState=function(t){this._platformLocation.onPopState(t),this._platformLocation.onHashChange(t)},e.prototype.getBaseHref=function(){return this._baseHref},e.prototype.prepareExternalUrl=function(t){return s.joinWithSlash(this._baseHref,t)},e.prototype.path=function(t){void 0===t&&(t=!1);var e=this._platformLocation.pathname+s.normalizeQueryParams(this._platformLocation.search),n=this._platformLocation.hash;return n&&t?""+e+n:e},e.prototype.pushState=function(t,e,n,r){var i=this.prepareExternalUrl(n+s.normalizeQueryParams(r));this._platformLocation.pushState(t,e,i)},e.prototype.replaceState=function(t,e,n,r){var i=this.prepareExternalUrl(n+s.normalizeQueryParams(r));this._platformLocation.replaceState(t,e,i)},e.prototype.forward=function(){this._platformLocation.forward()},e.prototype.back=function(){this._platformLocation.back()},e}(a),d=void 0,p=["en",[["a","p"],["AM","PM"],d],[["AM","PM"],d,d],[["S","M","T","W","T","F","S"],["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],["Su","Mo","Tu","We","Th","Fr","Sa"]],d,[["J","F","M","A","M","J","J","A","S","O","N","D"],["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],["January","February","March","April","May","June","July","August","September","October","November","December"]],d,[["B","A"],["BC","AD"],["Before Christ","Anno Domini"]],0,[6,0],["M/d/yy","MMM d, y","MMMM d, y","EEEE, MMMM d, y"],["h:mm a","h:mm:ss a","h:mm:ss a z","h:mm:ss a zzzz"],["{1}, {0}",d,"{1} 'at' {0}",d],[".",",",";","%","+","-","E","\xd7","\u2030","\u221e","NaN",":"],["#,##0.###","#,##0%","\xa4#,##0.00","#E0"],"$","US Dollar",{},function(t){var e=Math.floor(Math.abs(t)),n=t.toString().replace(/^[^.]*\.?/,"").length;return 1===e&&0===n?1:5}],m={},g=function(t){return t[t.Zero=0]="Zero",t[t.One=1]="One",t[t.Two=2]="Two",t[t.Few=3]="Few",t[t.Many=4]="Many",t[t.Other=5]="Other",t}({}),b=function(t){return t[t.Format=0]="Format",t[t.Standalone=1]="Standalone",t}({}),y=function(t){return t[t.Narrow=0]="Narrow",t[t.Abbreviated=1]="Abbreviated",t[t.Wide=2]="Wide",t[t.Short=3]="Short",t}({}),v=function(t){return t[t.Short=0]="Short",t[t.Medium=1]="Medium",t[t.Long=2]="Long",t[t.Full=3]="Full",t}({}),_=function(t){return t[t.Decimal=0]="Decimal",t[t.Group=1]="Group",t[t.List=2]="List",t[t.PercentSign=3]="PercentSign",t[t.PlusSign=4]="PlusSign",t[t.MinusSign=5]="MinusSign",t[t.Exponential=6]="Exponential",t[t.SuperscriptingExponent=7]="SuperscriptingExponent",t[t.PerMille=8]="PerMille",t[t[1/0]=9]="Infinity",t[t.NaN=10]="NaN",t[t.TimeSeparator=11]="TimeSeparator",t[t.CurrencyDecimal=12]="CurrencyDecimal",t[t.CurrencyGroup=13]="CurrencyGroup",t}({});function w(t,e){return R(O(t)[10],e)}function x(t,e){return R(O(t)[11],e)}function S(t,e){return R(O(t)[12],e)}function C(t,e){var n=O(t),r=n[13][e];if(void 0===r){if(e===_.CurrencyDecimal)return n[13][_.Decimal];if(e===_.CurrencyGroup)return n[13][_.Group]}return r}function k(t){if(!t[19])throw new Error('Missing extra locale data for the locale "'+t[0]+'". Use "registerLocaleData" to load new data. See the "I18n guide" on angular.io to know more.')}function R(t,e){for(var n=e;n>-1;n--)if(void 0!==t[n])return t[n];throw new Error("Locale data API: locale data undefined")}function j(t){var e=Object(i.c)(t.split(":"),2);return{hours:+e[0],minutes:+e[1]}}function O(t){var e=t.toLowerCase().replace(/_/g,"-"),n=m[e];if(n)return n;var r=e.split("-")[0];if(n=m[r])return n;if("en"===r)return p;throw new Error('Missing locale data for the locale "'+t+'".')}var E=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/,T={},P=/((?:[^GyMLwWdEabBhHmsSzZO']+)|(?:'(?:[^']|'')*')|(?:G{1,5}|y{1,4}|M{1,5}|L{1,5}|w{1,2}|W{1}|d{1,2}|E{1,6}|a{1,5}|b{1,5}|B{1,5}|h{1,2}|H{1,2}|m{1,2}|s{1,2}|S{1,3}|z{1,4}|Z{1,5}|O{1,4}))([\s\S]*)/,I=function(t){return t[t.Short=0]="Short",t[t.ShortGMT=1]="ShortGMT",t[t.Long=2]="Long",t[t.Extended=3]="Extended",t}({}),A=function(t){return t[t.FullYear=0]="FullYear",t[t.Month=1]="Month",t[t.Date=2]="Date",t[t.Hours=3]="Hours",t[t.Minutes=4]="Minutes",t[t.Seconds=5]="Seconds",t[t.FractionalSeconds=6]="FractionalSeconds",t[t.Day=7]="Day",t}({}),M=function(t){return t[t.DayPeriods=0]="DayPeriods",t[t.Days=1]="Days",t[t.Months=2]="Months",t[t.Eras=3]="Eras",t}({});function D(t,e){return e&&(t=t.replace(/\{([^}]+)}/g,function(t,n){return null!=e&&n in e?e[n]:t})),t}function N(t,e,n,r,i){void 0===n&&(n="-");var o="";(t<0||i&&t<=0)&&(i?t=1-t:(t=-t,o=n));for(var l=String(t);l.length<e;)l="0"+l;return r&&(l=l.substr(l.length-e)),o+l}function L(t,e,n,r,i){return void 0===n&&(n=0),void 0===r&&(r=!1),void 0===i&&(i=!1),function(o,l){var a,u=function(t,e){switch(t){case A.FullYear:return e.getFullYear();case A.Month:return e.getMonth();case A.Date:return e.getDate();case A.Hours:return e.getHours();case A.Minutes:return e.getMinutes();case A.Seconds:return e.getSeconds();case A.FractionalSeconds:return e.getMilliseconds();case A.Day:return e.getDay();default:throw new Error('Unknown DateType value "'+t+'".')}}(t,o);if((n>0||u>-n)&&(u+=n),t===A.Hours)0===u&&-12===n&&(u=12);else if(t===A.FractionalSeconds)return a=e,N(u,3).substr(0,a);var s=C(l,_.MinusSign);return N(u,e,s,r,i)}}function F(t,e,n,r){return void 0===n&&(n=b.Format),void 0===r&&(r=!1),function(i,o){return function(t,e,n,r,i,o){switch(n){case M.Months:return function(t,e,n){var r=O(t);return R(R([r[5],r[6]],e),n)}(e,i,r)[t.getMonth()];case M.Days:return function(t,e,n){var r=O(t);return R(R([r[3],r[4]],e),n)}(e,i,r)[t.getDay()];case M.DayPeriods:var l=t.getHours(),a=t.getMinutes();if(o){var u,s=function(t){var e=O(t);return k(e),(e[19][2]||[]).map(function(t){return"string"==typeof t?j(t):[j(t[0]),j(t[1])]})}(e),c=function(t,e,n){var r=O(t);return k(r),R(R([r[19][0],r[19][1]],e)||[],n)||[]}(e,i,r);if(s.forEach(function(t,e){if(Array.isArray(t)){var n=t[0],r=t[1],i=r.hours;l>=n.hours&&a>=n.minutes&&(l<i||l===i&&a<r.minutes)&&(u=c[e])}else t.hours===l&&t.minutes===a&&(u=c[e])}),u)return u}return function(t,e,n){var r=O(t);return R(R([r[1],r[2]],e),n)}(e,i,r)[l<12?0:1];case M.Eras:return function(t,e){return R(O(t)[7],e)}(e,r)[t.getFullYear()<=0?0:1];default:throw new Error("unexpected translation type "+n)}}(i,o,t,e,n,r)}}function z(t){return function(e,n,r){var i=-1*r,o=C(n,_.MinusSign),l=i>0?Math.floor(i/60):Math.ceil(i/60);switch(t){case I.Short:return(i>=0?"+":"")+N(l,2,o)+N(Math.abs(i%60),2,o);case I.ShortGMT:return"GMT"+(i>=0?"+":"")+N(l,1,o);case I.Long:return"GMT"+(i>=0?"+":"")+N(l,2,o)+":"+N(Math.abs(i%60),2,o);case I.Extended:return 0===r?"Z":(i>=0?"+":"")+N(l,2,o)+":"+N(Math.abs(i%60),2,o);default:throw new Error('Unknown zone width "'+t+'"')}}}var V=0,B=4;function H(t,e){return void 0===e&&(e=!1),function(n,r){var i,o,l,a;if(e){var u=new Date(n.getFullYear(),n.getMonth(),1).getDay()-1,s=n.getDate();i=1+Math.floor((s+u)/7)}else{var c=(l=n.getFullYear(),a=new Date(l,V,1).getDay(),new Date(l,0,1+(a<=B?B:B+7)-a)),h=(o=n,new Date(o.getFullYear(),o.getMonth(),o.getDate()+(B-o.getDay()))).getTime()-c.getTime();i=1+Math.round(h/6048e5)}return N(i,t,C(r,_.MinusSign))}}var G={};function U(t,e){t=t.replace(/:/g,"");var n=Date.parse("Jan 01, 1970 00:00:00 "+t)/6e4;return isNaN(n)?e:n}function q(t){return t instanceof Date&&!isNaN(t.valueOf())}var Q=new r.q("UseV4Plurals"),W=function(){},Y=function(t){function e(e,n){var r=t.call(this)||this;return r.locale=e,r.deprecatedPluralFn=n,r}return Object(i.b)(e,t),e.prototype.getPluralCategory=function(t,e){switch(this.deprecatedPluralFn?this.deprecatedPluralFn(e||this.locale,t):function(t){return O(t)[18]}(e||this.locale)(t)){case g.Zero:return"zero";case g.One:return"one";case g.Two:return"two";case g.Few:return"few";case g.Many:return"many";default:return"other"}},e}(W);function Z(t,e){var n,r;e=encodeURIComponent(e);try{for(var o=Object(i.e)(t.split(";")),l=o.next();!l.done;l=o.next()){var a=l.value,u=a.indexOf("="),s=Object(i.c)(-1==u?[a,""]:[a.slice(0,u),a.slice(u+1)],2),c=s[1];if(s[0].trim()===e)return decodeURIComponent(c)}}catch(t){n={error:t}}finally{try{l&&!l.done&&(r=o.return)&&r.call(o)}finally{if(n)throw n.error}}return null}var K=function(){function t(t,e,n,r){this._iterableDiffers=t,this._keyValueDiffers=e,this._ngEl=n,this._renderer=r,this._initialClasses=[]}return Object.defineProperty(t.prototype,"klass",{set:function(t){this._removeClasses(this._initialClasses),this._initialClasses="string"==typeof t?t.split(/\s+/):[],this._applyClasses(this._initialClasses),this._applyClasses(this._rawClass)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"ngClass",{set:function(t){this._removeClasses(this._rawClass),this._applyClasses(this._initialClasses),this._iterableDiffer=null,this._keyValueDiffer=null,this._rawClass="string"==typeof t?t.split(/\s+/):t,this._rawClass&&(Object(r.Ua)(this._rawClass)?this._iterableDiffer=this._iterableDiffers.find(this._rawClass).create():this._keyValueDiffer=this._keyValueDiffers.find(this._rawClass).create())},enumerable:!0,configurable:!0}),t.prototype.ngDoCheck=function(){if(this._iterableDiffer){var t=this._iterableDiffer.diff(this._rawClass);t&&this._applyIterableChanges(t)}else if(this._keyValueDiffer){var e=this._keyValueDiffer.diff(this._rawClass);e&&this._applyKeyValueChanges(e)}},t.prototype._applyKeyValueChanges=function(t){var e=this;t.forEachAddedItem(function(t){return e._toggleClass(t.key,t.currentValue)}),t.forEachChangedItem(function(t){return e._toggleClass(t.key,t.currentValue)}),t.forEachRemovedItem(function(t){t.previousValue&&e._toggleClass(t.key,!1)})},t.prototype._applyIterableChanges=function(t){var e=this;t.forEachAddedItem(function(t){if("string"!=typeof t.item)throw new Error("NgClass can only toggle CSS classes expressed as strings, got "+Object(r.ib)(t.item));e._toggleClass(t.item,!0)}),t.forEachRemovedItem(function(t){return e._toggleClass(t.item,!1)})},t.prototype._applyClasses=function(t){var e=this;t&&(Array.isArray(t)||t instanceof Set?t.forEach(function(t){return e._toggleClass(t,!0)}):Object.keys(t).forEach(function(n){return e._toggleClass(n,!!t[n])}))},t.prototype._removeClasses=function(t){var e=this;t&&(Array.isArray(t)||t instanceof Set?t.forEach(function(t){return e._toggleClass(t,!1)}):Object.keys(t).forEach(function(t){return e._toggleClass(t,!1)}))},t.prototype._toggleClass=function(t,e){var n=this;(t=t.trim())&&t.split(/\s+/g).forEach(function(t){e?n._renderer.addClass(n._ngEl.nativeElement,t):n._renderer.removeClass(n._ngEl.nativeElement,t)})},t}(),X=function(){function t(t,e,n,r){this.$implicit=t,this.ngForOf=e,this.index=n,this.count=r}return Object.defineProperty(t.prototype,"first",{get:function(){return 0===this.index},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"last",{get:function(){return this.index===this.count-1},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"even",{get:function(){return this.index%2==0},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"odd",{get:function(){return!this.even},enumerable:!0,configurable:!0}),t}(),$=function(){function t(t,e,n){this._viewContainer=t,this._template=e,this._differs=n,this._ngForOfDirty=!0,this._differ=null}return Object.defineProperty(t.prototype,"ngForOf",{set:function(t){this._ngForOf=t,this._ngForOfDirty=!0},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"ngForTrackBy",{get:function(){return this._trackByFn},set:function(t){Object(r.Z)()&&null!=t&&"function"!=typeof t&&console&&console.warn&&console.warn("trackBy must be a function, but received "+JSON.stringify(t)+". See https://angular.io/docs/ts/latest/api/common/index/NgFor-directive.html#!#change-propagation for more information."),this._trackByFn=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"ngForTemplate",{set:function(t){t&&(this._template=t)},enumerable:!0,configurable:!0}),t.prototype.ngDoCheck=function(){if(this._ngForOfDirty){this._ngForOfDirty=!1;var t=this._ngForOf;if(!this._differ&&t)try{this._differ=this._differs.find(t).create(this.ngForTrackBy)}catch(n){throw new Error("Cannot find a differ supporting object '"+t+"' of type '"+((e=t).name||typeof e)+"'. NgFor only supports binding to Iterables such as Arrays.")}}var e;if(this._differ){var n=this._differ.diff(this._ngForOf);n&&this._applyChanges(n)}},t.prototype._applyChanges=function(t){var e=this,n=[];t.forEachOperation(function(t,r,i){if(null==t.previousIndex){var o=e._viewContainer.createEmbeddedView(e._template,new X(null,e._ngForOf,-1,-1),i),l=new J(t,o);n.push(l)}else null==i?e._viewContainer.remove(r):(o=e._viewContainer.get(r),e._viewContainer.move(o,i),l=new J(t,o),n.push(l))});for(var r=0;r<n.length;r++)this._perViewChange(n[r].view,n[r].record);r=0;for(var i=this._viewContainer.length;r<i;r++){var o=this._viewContainer.get(r);o.context.index=r,o.context.count=i,o.context.ngForOf=this._ngForOf}t.forEachIdentityChange(function(t){e._viewContainer.get(t.currentIndex).context.$implicit=t.item})},t.prototype._perViewChange=function(t,e){t.context.$implicit=e.item},t}(),J=function(t,e){this.record=t,this.view=e},tt=function(){function t(t,e){this._viewContainer=t,this._context=new et,this._thenTemplateRef=null,this._elseTemplateRef=null,this._thenViewRef=null,this._elseViewRef=null,this._thenTemplateRef=e}return Object.defineProperty(t.prototype,"ngIf",{set:function(t){this._context.$implicit=this._context.ngIf=t,this._updateView()},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"ngIfThen",{set:function(t){nt("ngIfThen",t),this._thenTemplateRef=t,this._thenViewRef=null,this._updateView()},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"ngIfElse",{set:function(t){nt("ngIfElse",t),this._elseTemplateRef=t,this._elseViewRef=null,this._updateView()},enumerable:!0,configurable:!0}),t.prototype._updateView=function(){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)))},t}(),et=function(){this.$implicit=null,this.ngIf=null};function nt(t,e){if(e&&!e.createEmbeddedView)throw new Error(t+" must be a TemplateRef, but received '"+Object(r.ib)(e)+"'.")}var rt=function(){function t(t,e){this._viewContainerRef=t,this._templateRef=e,this._created=!1}return t.prototype.create=function(){this._created=!0,this._viewContainerRef.createEmbeddedView(this._templateRef)},t.prototype.destroy=function(){this._created=!1,this._viewContainerRef.clear()},t.prototype.enforceState=function(t){t&&!this._created?this.create():!t&&this._created&&this.destroy()},t}(),it=function(){function t(){this._defaultUsed=!1,this._caseCount=0,this._lastCaseCheckIndex=0,this._lastCasesMatched=!1}return Object.defineProperty(t.prototype,"ngSwitch",{set:function(t){this._ngSwitch=t,0===this._caseCount&&this._updateDefaultCases(!0)},enumerable:!0,configurable:!0}),t.prototype._addCase=function(){return this._caseCount++},t.prototype._addDefault=function(t){this._defaultViews||(this._defaultViews=[]),this._defaultViews.push(t)},t.prototype._matchCase=function(t){var e=t==this._ngSwitch;return this._lastCasesMatched=this._lastCasesMatched||e,this._lastCaseCheckIndex++,this._lastCaseCheckIndex===this._caseCount&&(this._updateDefaultCases(!this._lastCasesMatched),this._lastCaseCheckIndex=0,this._lastCasesMatched=!1),e},t.prototype._updateDefaultCases=function(t){if(this._defaultViews&&t!==this._defaultUsed){this._defaultUsed=t;for(var e=0;e<this._defaultViews.length;e++)this._defaultViews[e].enforceState(t)}},t}(),ot=function(){function t(t,e,n){this.ngSwitch=n,n._addCase(),this._view=new rt(t,e)}return t.prototype.ngDoCheck=function(){this._view.enforceState(this.ngSwitch._matchCase(this.ngSwitchCase))},t}(),lt=function(){return function(t,e,n){n._addDefault(new rt(t,e))}}(),at=function(){function t(t,e,n){this._differs=t,this._ngEl=e,this._renderer=n}return Object.defineProperty(t.prototype,"ngStyle",{set:function(t){this._ngStyle=t,!this._differ&&t&&(this._differ=this._differs.find(t).create())},enumerable:!0,configurable:!0}),t.prototype.ngDoCheck=function(){if(this._differ){var t=this._differ.diff(this._ngStyle);t&&this._applyChanges(t)}},t.prototype._applyChanges=function(t){var e=this;t.forEachRemovedItem(function(t){return e._setStyle(t.key,null)}),t.forEachAddedItem(function(t){return e._setStyle(t.key,t.currentValue)}),t.forEachChangedItem(function(t){return e._setStyle(t.key,t.currentValue)})},t.prototype._setStyle=function(t,e){var n=Object(i.c)(t.split("."),2),r=n[0],o=n[1];null!=(e=null!=e&&o?""+e+o:e)?this._renderer.setStyle(this._ngEl.nativeElement,r,e):this._renderer.removeStyle(this._ngEl.nativeElement,r)},t}(),ut=function(){function t(t){this._viewContainerRef=t}return t.prototype.ngOnChanges=function(t){this._shouldRecreateView(t)?(this._viewRef&&this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._viewRef)),this.ngTemplateOutlet&&(this._viewRef=this._viewContainerRef.createEmbeddedView(this.ngTemplateOutlet,this.ngTemplateOutletContext))):this._viewRef&&this.ngTemplateOutletContext&&this._updateExistingContext(this.ngTemplateOutletContext)},t.prototype._shouldRecreateView=function(t){var e=t.ngTemplateOutletContext;return!!t.ngTemplateOutlet||e&&this._hasContextShapeChanged(e)},t.prototype._hasContextShapeChanged=function(t){var e,n,r=Object.keys(t.previousValue||{}),o=Object.keys(t.currentValue||{});if(r.length===o.length){try{for(var l=Object(i.e)(o),a=l.next();!a.done;a=l.next())if(-1===r.indexOf(a.value))return!0}catch(t){e={error:t}}finally{try{a&&!a.done&&(n=l.return)&&n.call(l)}finally{if(e)throw e.error}}return!1}return!0},t.prototype._updateExistingContext=function(t){var e,n;try{for(var r=Object(i.e)(Object.keys(t)),o=r.next();!o.done;o=r.next()){var l=o.value;this._viewRef.context[l]=this.ngTemplateOutletContext[l]}}catch(t){e={error:t}}finally{try{o&&!o.done&&(n=r.return)&&n.call(r)}finally{if(e)throw e.error}}},t}();function st(t,e){return Error("InvalidPipeArgument: '"+e+"' for pipe '"+Object(r.ib)(t)+"'")}var ct=function(){function t(t){this.locale=t}return t.prototype.transform=function(e,n,r,o){if(void 0===n&&(n="mediumDate"),null==e||""===e||e!=e)return null;try{return function(t,e,n,r){var o=function(t){if(q(t))return t;if("number"==typeof t&&!isNaN(t))return new Date(t);if("string"==typeof t){t=t.trim();var e,n=parseFloat(t);if(!isNaN(t-n))return new Date(n);if(/^(\d{4}-\d{1,2}-\d{1,2})$/.test(t)){var r=Object(i.c)(t.split("-").map(function(t){return+t}),3);return new Date(r[0],r[1]-1,r[2])}if(e=t.match(E))return function(t){var e=new Date(0),n=0,r=0,i=t[8]?e.setUTCFullYear:e.setFullYear,o=t[8]?e.setUTCHours:e.setHours;t[9]&&(n=Number(t[9]+t[10]),r=Number(t[9]+t[11])),i.call(e,Number(t[1]),Number(t[2])-1,Number(t[3]));var l=Number(t[4]||0)-n,a=Number(t[5]||0)-r,u=Number(t[6]||0),s=Math.round(1e3*parseFloat("0."+(t[7]||0)));return o.call(e,l,a,u,s),e}(e)}var o=new Date(t);if(!q(o))throw new Error('Unable to convert "'+t+'" into a date');return o}(t);e=function t(e,n){var r=function(t){return O(t)[0]}(e);if(T[r]=T[r]||{},T[r][n])return T[r][n];var i="";switch(n){case"shortDate":i=w(e,v.Short);break;case"mediumDate":i=w(e,v.Medium);break;case"longDate":i=w(e,v.Long);break;case"fullDate":i=w(e,v.Full);break;case"shortTime":i=x(e,v.Short);break;case"mediumTime":i=x(e,v.Medium);break;case"longTime":i=x(e,v.Long);break;case"fullTime":i=x(e,v.Full);break;case"short":var o=t(e,"shortTime"),l=t(e,"shortDate");i=D(S(e,v.Short),[o,l]);break;case"medium":var a=t(e,"mediumTime"),u=t(e,"mediumDate");i=D(S(e,v.Medium),[a,u]);break;case"long":var s=t(e,"longTime"),c=t(e,"longDate");i=D(S(e,v.Long),[s,c]);break;case"full":var h=t(e,"fullTime"),f=t(e,"fullDate");i=D(S(e,v.Full),[h,f])}return i&&(T[r][n]=i),i}(n,e)||e;for(var l,a=[];e;){if(!(l=P.exec(e))){a.push(e);break}var u=(a=a.concat(l.slice(1))).pop();if(!u)break;e=u}var s=o.getTimezoneOffset();r&&(s=U(r,s),o=function(t,e,n){var r=t.getTimezoneOffset();return function(t,e){return(t=new Date(t.getTime())).setMinutes(t.getMinutes()+e),t}(t,-1*(U(e,r)-r))}(o,r));var c="";return a.forEach(function(t){var e=function(t){if(G[t])return G[t];var e;switch(t){case"G":case"GG":case"GGG":e=F(M.Eras,y.Abbreviated);break;case"GGGG":e=F(M.Eras,y.Wide);break;case"GGGGG":e=F(M.Eras,y.Narrow);break;case"y":e=L(A.FullYear,1,0,!1,!0);break;case"yy":e=L(A.FullYear,2,0,!0,!0);break;case"yyy":e=L(A.FullYear,3,0,!1,!0);break;case"yyyy":e=L(A.FullYear,4,0,!1,!0);break;case"M":case"L":e=L(A.Month,1,1);break;case"MM":case"LL":e=L(A.Month,2,1);break;case"MMM":e=F(M.Months,y.Abbreviated);break;case"MMMM":e=F(M.Months,y.Wide);break;case"MMMMM":e=F(M.Months,y.Narrow);break;case"LLL":e=F(M.Months,y.Abbreviated,b.Standalone);break;case"LLLL":e=F(M.Months,y.Wide,b.Standalone);break;case"LLLLL":e=F(M.Months,y.Narrow,b.Standalone);break;case"w":e=H(1);break;case"ww":e=H(2);break;case"W":e=H(1,!0);break;case"d":e=L(A.Date,1);break;case"dd":e=L(A.Date,2);break;case"E":case"EE":case"EEE":e=F(M.Days,y.Abbreviated);break;case"EEEE":e=F(M.Days,y.Wide);break;case"EEEEE":e=F(M.Days,y.Narrow);break;case"EEEEEE":e=F(M.Days,y.Short);break;case"a":case"aa":case"aaa":e=F(M.DayPeriods,y.Abbreviated);break;case"aaaa":e=F(M.DayPeriods,y.Wide);break;case"aaaaa":e=F(M.DayPeriods,y.Narrow);break;case"b":case"bb":case"bbb":e=F(M.DayPeriods,y.Abbreviated,b.Standalone,!0);break;case"bbbb":e=F(M.DayPeriods,y.Wide,b.Standalone,!0);break;case"bbbbb":e=F(M.DayPeriods,y.Narrow,b.Standalone,!0);break;case"B":case"BB":case"BBB":e=F(M.DayPeriods,y.Abbreviated,b.Format,!0);break;case"BBBB":e=F(M.DayPeriods,y.Wide,b.Format,!0);break;case"BBBBB":e=F(M.DayPeriods,y.Narrow,b.Format,!0);break;case"h":e=L(A.Hours,1,-12);break;case"hh":e=L(A.Hours,2,-12);break;case"H":e=L(A.Hours,1);break;case"HH":e=L(A.Hours,2);break;case"m":e=L(A.Minutes,1);break;case"mm":e=L(A.Minutes,2);break;case"s":e=L(A.Seconds,1);break;case"ss":e=L(A.Seconds,2);break;case"S":e=L(A.FractionalSeconds,1);break;case"SS":e=L(A.FractionalSeconds,2);break;case"SSS":e=L(A.FractionalSeconds,3);break;case"Z":case"ZZ":case"ZZZ":e=z(I.Short);break;case"ZZZZZ":e=z(I.Extended);break;case"O":case"OO":case"OOO":case"z":case"zz":case"zzz":e=z(I.ShortGMT);break;case"OOOO":case"ZZZZ":case"zzzz":e=z(I.Long);break;default:return null}return G[t]=e,e}(t);c+=e?e(o,n,s):"''"===t?"'":t.replace(/(^'|'$)/g,"").replace(/''/g,"'")}),c}(e,n,o||this.locale,r)}catch(e){throw st(t,e.message)}},t}(),ht=function(){function t(){}return t.prototype.transform=function(e,n,r){if(null==e)return e;if(!this.supports(e))throw st(t,e);return e.slice(n,r)},t.prototype.supports=function(t){return"string"==typeof t||Array.isArray(t)},t}(),ft=function(){},dt=new r.q("DocumentToken"),pt="browser",mt="server";function gt(t){return t===pt}function bt(t){return t===mt}var yt=function(){function t(){}return t.ngInjectableDef=Object(r.U)({providedIn:"root",factory:function(){return new vt(Object(r.Y)(dt),window)}}),t}(),vt=function(){function t(t,e){this.document=t,this.window=e,this.offset=function(){return[0,0]}}return t.prototype.setOffset=function(t){this.offset=Array.isArray(t)?function(){return t}:t},t.prototype.getScrollPosition=function(){return this.supportScrollRestoration()?[this.window.scrollX,this.window.scrollY]:[0,0]},t.prototype.scrollToPosition=function(t){this.supportScrollRestoration()&&this.window.scrollTo(t[0],t[1])},t.prototype.scrollToAnchor=function(t){if(this.supportScrollRestoration()){var e=this.document.querySelector("#"+t);if(e)return void this.scrollToElement(e);var n=this.document.querySelector("[name='"+t+"']");if(n)return void this.scrollToElement(n)}},t.prototype.setHistoryScrollRestoration=function(t){if(this.supportScrollRestoration()){var e=this.window.history;e&&e.scrollRestoration&&(e.scrollRestoration=t)}},t.prototype.scrollToElement=function(t){var e=t.getBoundingClientRect(),n=e.left+this.window.pageXOffset,r=e.top+this.window.pageYOffset,i=this.offset();this.window.scrollTo(n-i[0],r-i[1])},t.prototype.supportScrollRestoration=function(){try{return!!this.window&&!!this.window.scrollTo}catch(t){return!1}},t}()},IxPp:function(t,e,n){"use strict";n.d(e,"b",function(){return u}),n.d(e,"a",function(){return f});var r=n("mrSG"),i=n("FFOo"),o=n("pugT"),l=n("6blF"),a=n("K9Ia");function u(t,e,n,r){return function(i){return i.lift(new s(t,e,n,r))}}var s=function(){function t(t,e,n,r){this.keySelector=t,this.elementSelector=e,this.durationSelector=n,this.subjectSelector=r}return t.prototype.call=function(t,e){return e.subscribe(new c(t,this.keySelector,this.elementSelector,this.durationSelector,this.subjectSelector))},t}(),c=function(t){function e(e,n,r,i,o){var l=t.call(this,e)||this;return l.keySelector=n,l.elementSelector=r,l.durationSelector=i,l.subjectSelector=o,l.groups=null,l.attemptedToUnsubscribe=!1,l.count=0,l}return r.b(e,t),e.prototype._next=function(t){var e;try{e=this.keySelector(t)}catch(t){return void this.error(t)}this._group(t,e)},e.prototype._group=function(t,e){var n=this.groups;n||(n=this.groups=new Map);var r,i=n.get(e);if(this.elementSelector)try{r=this.elementSelector(t)}catch(t){this.error(t)}else r=t;if(!i){i=this.subjectSelector?this.subjectSelector():new a.a,n.set(e,i);var o=new f(e,i,this);if(this.destination.next(o),this.durationSelector){var l=void 0;try{l=this.durationSelector(new f(e,i))}catch(t){return void this.error(t)}this.add(l.subscribe(new h(e,i,this)))}}i.closed||i.next(r)},e.prototype._error=function(t){var e=this.groups;e&&(e.forEach(function(e,n){e.error(t)}),e.clear()),this.destination.error(t)},e.prototype._complete=function(){var t=this.groups;t&&(t.forEach(function(t,e){t.complete()}),t.clear()),this.destination.complete()},e.prototype.removeGroup=function(t){this.groups.delete(t)},e.prototype.unsubscribe=function(){this.closed||(this.attemptedToUnsubscribe=!0,0===this.count&&t.prototype.unsubscribe.call(this))},e}(i.a),h=function(t){function e(e,n,r){var i=t.call(this,n)||this;return i.key=e,i.group=n,i.parent=r,i}return r.b(e,t),e.prototype._next=function(t){this.complete()},e.prototype._unsubscribe=function(){var t=this.parent,e=this.key;this.key=this.parent=null,t&&t.removeGroup(e)},e}(i.a),f=function(t){function e(e,n,r){var i=t.call(this)||this;return i.key=e,i.groupSubject=n,i.refCountSubscription=r,i}return r.b(e,t),e.prototype._subscribe=function(t){var e=new o.a,n=this.refCountSubscription,r=this.groupSubject;return n&&!n.closed&&e.add(new d(n)),e.add(r.subscribe(t)),e},e}(l.a),d=function(t){function e(e){var n=t.call(this)||this;return n.parent=e,e.count++,n}return r.b(e,t),e.prototype.unsubscribe=function(){var e=this.parent;e.closed||this.closed||(t.prototype.unsubscribe.call(this),e.count-=1,0===e.count&&e.attemptedToUnsubscribe&&e.unsubscribe())},e}(o.a)},JcRv:function(t,e,n){"use strict";n.d(e,"a",function(){return i});var r=n("xTla"),i=function(t){return function(e){var n=t[r.a]();if("function"!=typeof n.subscribe)throw new TypeError("Provided object does not correctly implement Symbol.observable");return n.subscribe(e)}}},K9Ia:function(t,e,n){"use strict";n.d(e,"b",function(){return c}),n.d(e,"a",function(){return h});var r=n("mrSG"),i=n("6blF"),o=n("FFOo"),l=n("pugT"),a=n("8g8A"),u=n("uMaO"),s=n("L/V9"),c=function(t){function e(e){var n=t.call(this,e)||this;return n.destination=e,n}return r.b(e,t),e}(o.a),h=function(t){function e(){var e=t.call(this)||this;return e.observers=[],e.closed=!1,e.isStopped=!1,e.hasError=!1,e.thrownError=null,e}return r.b(e,t),e.prototype[s.a]=function(){return new c(this)},e.prototype.lift=function(t){var e=new f(this,this);return e.operator=t,e},e.prototype.next=function(t){if(this.closed)throw new a.a;if(!this.isStopped)for(var e=this.observers,n=e.length,r=e.slice(),i=0;i<n;i++)r[i].next(t)},e.prototype.error=function(t){if(this.closed)throw new a.a;this.hasError=!0,this.thrownError=t,this.isStopped=!0;for(var e=this.observers,n=e.length,r=e.slice(),i=0;i<n;i++)r[i].error(t);this.observers.length=0},e.prototype.complete=function(){if(this.closed)throw new a.a;this.isStopped=!0;for(var t=this.observers,e=t.length,n=t.slice(),r=0;r<e;r++)n[r].complete();this.observers.length=0},e.prototype.unsubscribe=function(){this.isStopped=!0,this.closed=!0,this.observers=null},e.prototype._trySubscribe=function(e){if(this.closed)throw new a.a;return t.prototype._trySubscribe.call(this,e)},e.prototype._subscribe=function(t){if(this.closed)throw new a.a;return this.hasError?(t.error(this.thrownError),l.a.EMPTY):this.isStopped?(t.complete(),l.a.EMPTY):(this.observers.push(t),new u.a(this,t))},e.prototype.asObservable=function(){var t=new i.a;return t.source=this,t},e.create=function(t,e){return new f(t,e)},e}(i.a),f=function(t){function e(e,n){var r=t.call(this)||this;return r.destination=e,r.source=n,r}return r.b(e,t),e.prototype.next=function(t){var e=this.destination;e&&e.next&&e.next(t)},e.prototype.error=function(t){var e=this.destination;e&&e.error&&this.destination.error(t)},e.prototype.complete=function(){var t=this.destination;t&&t.complete&&this.destination.complete()},e.prototype._subscribe=function(t){return this.source?this.source.subscribe(t):l.a.EMPTY},e}(h)},KQya:function(t,e,n){"use strict";var r=n("mrSG"),i=1,o={},l=function(t){function e(e,n){var r=t.call(this,e,n)||this;return r.scheduler=e,r.work=n,r}return r.b(e,t),e.prototype.requestAsyncId=function(e,n,r){return void 0===r&&(r=0),null!==r&&r>0?t.prototype.requestAsyncId.call(this,e,n,r):(e.actions.push(this),e.scheduled||(e.scheduled=(l=e.flush.bind(e,null),a=i++,o[a]=l,Promise.resolve().then(function(){return function(t){var e=o[t];e&&e()}(a)}),a)));var l,a},e.prototype.recycleAsyncId=function(e,n,r){if(void 0===r&&(r=0),null!==r&&r>0||null===r&&this.delay>0)return t.prototype.recycleAsyncId.call(this,e,n,r);0===e.actions.length&&(delete o[n],e.scheduled=void 0)},e}(n("h9Dq").a),a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r.b(e,t),e.prototype.flush=function(t){this.active=!0,this.scheduled=void 0;var e,n=this.actions,r=-1,i=n.length;t=t||n.shift();do{if(e=t.execute(t.state,t.delay))break}while(++r<i&&(t=n.shift()));if(this.active=!1,e){for(;++r<i&&(t=n.shift());)t.unsubscribe();throw e}},e}(n("CS9Q").a);n.d(e,"a",function(){return u});var u=new a(l)},KhEm:function(t,e,n){"use strict";n.d(e,"a",function(){return u}),n.d(e,"b",function(){return c});var r=n("mrSG"),i=n("K9Ia"),o=n("6blF"),l=(n("FFOo"),n("pugT")),a=n("yGWI"),u=function(t){function e(e,n){var r=t.call(this)||this;return r.source=e,r.subjectFactory=n,r._refCount=0,r._isComplete=!1,r}return r.b(e,t),e.prototype._subscribe=function(t){return this.getSubject().subscribe(t)},e.prototype.getSubject=function(){var t=this._subject;return t&&!t.isStopped||(this._subject=this.subjectFactory()),this._subject},e.prototype.connect=function(){var t=this._connection;return t||(this._isComplete=!1,(t=this._connection=new l.a).add(this.source.subscribe(new h(this.getSubject(),this))),t.closed?(this._connection=null,t=l.a.EMPTY):this._connection=t),t},e.prototype.refCount=function(){return Object(a.a)()(this)},e}(o.a),s=u.prototype,c={operator:{value:null},_refCount:{value:0,writable:!0},_subject:{value:null,writable:!0},_connection:{value:null,writable:!0},_subscribe:{value:s._subscribe},_isComplete:{value:s._isComplete,writable:!0},getSubject:{value:s.getSubject},connect:{value:s.connect},refCount:{value:s.refCount}},h=function(t){function e(e,n){var r=t.call(this,e)||this;return r.connectable=n,r}return r.b(e,t),e.prototype._error=function(e){this._unsubscribe(),t.prototype._error.call(this,e)},e.prototype._complete=function(){this.connectable._isComplete=!0,this._unsubscribe(),t.prototype._complete.call(this)},e.prototype._unsubscribe=function(){var t=this.connectable;if(t){this.connectable=null;var e=t._connection;t._refCount=0,t._subject=null,t._connection=null,e&&e.unsubscribe()}},e}(i.b)},"L/V9":function(t,e,n){"use strict";n.d(e,"a",function(){return r});var r="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("rxSubscriber"):"@@rxSubscriber"},LC5p:function(t,e,n){"use strict";n.d(e,"a",function(){return r}),n("n6gG");var r=function(){}},"LOr+":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n("DtyJ"),i=n("ahDk");e.debounceTime=function(t,e){return void 0===e&&(e=r.asyncScheduler),i.debounceTime(t,e)(this)}},M2Lx:function(t,e,n){"use strict";n.d(e,"c",function(){return u}),n.d(e,"b",function(){return s}),n.d(e,"a",function(){return c}),n.d(e,"d",function(){return h});var r=n("n6gG"),i=n("CcnG"),o=n("6blF"),l=n("K9Ia"),a=n("Gi3i"),u=function(){function t(){}return t.prototype.create=function(t){return"undefined"==typeof MutationObserver?null:new MutationObserver(t)},t.ngInjectableDef=Object(i.U)({factory:function(){return new t},token:t,providedIn:"root"}),t}(),s=function(){function t(t){this._mutationObserverFactory=t,this._observedElements=new Map}return t.prototype.ngOnDestroy=function(){var t=this;this._observedElements.forEach(function(e,n){return t._cleanupObserver(n)})},t.prototype.observe=function(t){var e=this;return o.a.create(function(n){var r=e._observeElement(t).subscribe(n);return function(){r.unsubscribe(),e._unobserveElement(t)}})},t.prototype._observeElement=function(t){if(this._observedElements.has(t))this._observedElements.get(t).count++;else{var e=new l.a,n=this._mutationObserverFactory.create(function(t){return e.next(t)});n&&n.observe(t,{characterData:!0,childList:!0,subtree:!0}),this._observedElements.set(t,{observer:n,stream:e,count:1})}return this._observedElements.get(t).stream},t.prototype._unobserveElement=function(t){this._observedElements.has(t)&&(this._observedElements.get(t).count--,this._observedElements.get(t).count||this._cleanupObserver(t))},t.prototype._cleanupObserver=function(t){if(this._observedElements.has(t)){var e=this._observedElements.get(t),n=e.observer,r=e.stream;n&&n.disconnect(),r.complete(),this._observedElements.delete(t)}},t.ngInjectableDef=Object(i.U)({factory:function(){return new t(Object(i.Y)(u))},token:t,providedIn:"root"}),t}(),c=function(){function t(t,e,n){this._contentObserver=t,this._elementRef=e,this._ngZone=n,this.event=new i.n,this._disabled=!1,this._currentSubscription=null}return Object.defineProperty(t.prototype,"disabled",{get:function(){return this._disabled},set:function(t){this._disabled=Object(r.c)(t),this._disabled?this._unsubscribe():this._subscribe()},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"debounce",{get:function(){return this._debounce},set:function(t){this._debounce=Object(r.e)(t),this._subscribe()},enumerable:!0,configurable:!0}),t.prototype.ngAfterContentInit=function(){this._currentSubscription||this.disabled||this._subscribe()},t.prototype.ngOnDestroy=function(){this._unsubscribe()},t.prototype._subscribe=function(){var t=this;this._unsubscribe();var e=this._contentObserver.observe(this._elementRef.nativeElement);this._ngZone.runOutsideAngular(function(){t._currentSubscription=(t.debounce?e.pipe(Object(a.a)(t.debounce)):e).subscribe(t.event)})},t.prototype._unsubscribe=function(){this._currentSubscription&&this._currentSubscription.unsubscribe()},t}(),h=function(){}},MGBS:function(t,e,n){"use strict";n.d(e,"a",function(){return i});var r=n("mrSG"),i=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r.b(e,t),e.prototype.notifyNext=function(t,e,n,r,i){this.destination.next(e)},e.prototype.notifyError=function(t,e){this.destination.error(t)},e.prototype.notifyComplete=function(t){this.destination.complete()},e}(n("FFOo").a)},McSo:function(t,e,n){"use strict";function r(t){return null!=t&&"object"==typeof t}n.d(e,"a",function(){return r})},"Mhm+":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",function(){return ChunkLoaderService});var rxjs__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("0/uQ"),_page_chunk_record__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("rf30"),_environments_environment__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("AytR"),_angular_core__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("CcnG"),_angular_common_http__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__("t/Na"),ChunkLoaderService=function(){function ChunkLoaderService(t){var e=this;return this.http=t,this.records=_page_chunk_record__WEBPACK_IMPORTED_MODULE_1__.b,this.preload_records=_page_chunk_record__WEBPACK_IMPORTED_MODULE_1__.a,ChunkLoaderService.singletonInstance?ChunkLoaderService.singletonInstance:(ChunkLoaderService.singletonInstance=this,this.preloadImages(),0==_environments_environment__WEBPACK_IMPORTED_MODULE_2__.a.production?ChunkLoaderService.singletonInstance:void this.records.forEach(function(t){setTimeout(function(){e.loadPageChunk(t.pageName,function(){})})}))}return ChunkLoaderService.prototype.preloadImages=function(){this.preload_records.forEach(function(t){setTimeout(function(){var e=document.createElement("link");e.rel="preload",e.href=t.url,e.as="image",e.type=t.mime,document.head.appendChild(e)})})},ChunkLoaderService.prototype.asyncLoadPageChunk=function(t){var e=this,n=new Promise(function(n,r){var i=e.records.find(function(e){return-1!=t.indexOf(e.pageName)});void 0!=i?(console.log("Loading : "+i.pageName+" ("+i.chunkURL+", "+i.chunkLoaded+") [Async]"),0==i.chunkLoaded?e.http.get(i.chunkURL,{responseType:"text"}).subscribe(function(t){return e.asyncLoadDataChunk(t,i,n)},function(t){return console.log(t)}):n(!0)):n(!0)});return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__.a)(n)},ChunkLoaderService.prototype.loadPageChunk=function(t,e){var n=this;if(0!=_environments_environment__WEBPACK_IMPORTED_MODULE_2__.a.production&&"/"!=t){var r=this.records.find(function(e){return-1!=t.indexOf(e.pageName)});void 0!=r?(console.log("Loading : "+r.pageName+" ("+r.chunkURL+")"),0==r.chunkLoaded?this.http.get(r.chunkURL,{responseType:"text"}).subscribe(function(t){return n.loadDataChunk(t,e,r)},function(t){return console.log(t)}):e()):e()}},ChunkLoaderService.prototype.loadDataChunk=function(base64data,callback,record){var decodedData=atob(base64data);eval(decodedData),record.chunkLoaded=!0,console.log("Loaded : "+record.pageName+" ("+record.chunkURL+")"),callback()},ChunkLoaderService.prototype.asyncLoadDataChunk=function(base64data,record,resolve){var decodedData=atob(base64data);eval(decodedData),record.chunkLoaded=!0,console.log("Loaded : "+record.pageName+" ("+record.chunkURL+") [Async]"),resolve(!0)},ChunkLoaderService.ngInjectableDef=_angular_core__WEBPACK_IMPORTED_MODULE_3__.U({factory:function(){return new ChunkLoaderService(_angular_core__WEBPACK_IMPORTED_MODULE_3__.Y(_angular_common_http__WEBPACK_IMPORTED_MODULE_4__.c))},token:ChunkLoaderService,providedIn:"root"}),ChunkLoaderService}()},MlvX:function(t,e,n){"use strict";n.d(e,"b",function(){return u}),n.d(e,"e",function(){return c}),n.d(e,"a",function(){return h}),n.d(e,"d",function(){return f}),n.d(e,"c",function(){return d}),n.d(e,"f",function(){return p});var r=n("CcnG"),i=n("Wf4p"),o=(n("Fzqc"),n("dWZg")),l=n("Ip0R"),a=n("wFw1"),u=r.Pa({encapsulation:2,styles:[".mat-option{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;line-height:48px;height:48px;padding:0 16px;text-align:left;text-decoration:none;max-width:100%;position:relative;cursor:pointer;outline:0;display:flex;flex-direction:row;max-width:100%;box-sizing:border-box;align-items:center;-webkit-tap-highlight-color:transparent}.mat-option[disabled]{cursor:default}[dir=rtl] .mat-option{text-align:right}.mat-option .mat-icon{margin-right:16px;vertical-align:middle}.mat-option .mat-icon svg{vertical-align:top}[dir=rtl] .mat-option .mat-icon{margin-left:16px;margin-right:0}.mat-option[aria-disabled=true]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.mat-optgroup .mat-option:not(.mat-option-multiple){padding-left:32px}[dir=rtl] .mat-optgroup .mat-option:not(.mat-option-multiple){padding-left:16px;padding-right:32px}@media screen and (-ms-high-contrast:active){.mat-option{margin:0 1px}.mat-option.mat-active{border:solid 1px currentColor;margin:0}}.mat-option-text{display:inline-block;flex-grow:1;overflow:hidden;text-overflow:ellipsis}.mat-option-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}@media screen and (-ms-high-contrast:active){.mat-option-ripple{opacity:.5}}.mat-option-pseudo-checkbox{margin-right:8px}[dir=rtl] .mat-option-pseudo-checkbox{margin-left:8px;margin-right:0}"],data:{}});function s(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,1,"mat-pseudo-checkbox",[["class","mat-option-pseudo-checkbox mat-pseudo-checkbox"]],[[2,"mat-pseudo-checkbox-indeterminate",null],[2,"mat-pseudo-checkbox-checked",null],[2,"mat-pseudo-checkbox-disabled",null],[2,"_mat-animation-noopable",null]],null,null,p,d)),r.Qa(1,49152,null,0,i.t,[[2,a.a]],{state:[0,"state"],disabled:[1,"disabled"]},null)],function(t,e){var n=e.component;t(e,1,0,n.selected?"checked":"",n.disabled)},function(t,e){t(e,0,0,"indeterminate"===r.bb(e,1).state,"checked"===r.bb(e,1).state,r.bb(e,1).disabled,"NoopAnimations"===r.bb(e,1)._animationMode)})}function c(t){return r.lb(2,[(t()(),r.Ia(16777216,null,null,1,null,s)),r.Qa(1,16384,null,0,l.k,[r.Q,r.N],{ngIf:[0,"ngIf"]},null),(t()(),r.Ra(2,0,null,null,1,"span",[["class","mat-option-text"]],null,null,null,null,null)),r.ab(null,0),(t()(),r.Ra(4,0,null,null,1,"div",[["class","mat-option-ripple mat-ripple"],["mat-ripple",""]],[[2,"mat-ripple-unbounded",null]],null,null,null,null)),r.Qa(5,212992,null,0,i.v,[r.k,r.z,o.a,[2,i.k],[2,a.a]],{disabled:[0,"disabled"],trigger:[1,"trigger"]},null)],function(t,e){var n=e.component;t(e,1,0,n.multiple),t(e,5,0,n.disabled||n.disableRipple,n._getHostElement())},function(t,e){t(e,4,0,r.bb(e,5).unbounded)})}var h=r.Pa({encapsulation:2,styles:[".mat-optgroup-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;line-height:48px;height:48px;padding:0 16px;text-align:left;text-decoration:none;max-width:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.mat-optgroup-label[disabled]{cursor:default}[dir=rtl] .mat-optgroup-label{text-align:right}.mat-optgroup-label .mat-icon{margin-right:16px;vertical-align:middle}.mat-optgroup-label .mat-icon svg{vertical-align:top}[dir=rtl] .mat-optgroup-label .mat-icon{margin-left:16px;margin-right:0}"],data:{}});function f(t){return r.lb(2,[(t()(),r.Ra(0,0,null,null,1,"label",[["class","mat-optgroup-label"]],[[8,"id",0]],null,null,null,null)),(t()(),r.jb(1,null,["",""])),r.ab(null,0)],null,function(t,e){var n=e.component;t(e,0,0,n._labelId),t(e,1,0,n.label)})}var d=r.Pa({encapsulation:2,styles:[".mat-pseudo-checkbox{width:20px;height:20px;border:2px solid;border-radius:2px;cursor:pointer;display:inline-block;vertical-align:middle;box-sizing:border-box;position:relative;flex-shrink:0;transition:border-color 90ms cubic-bezier(0,0,.2,.1),background-color 90ms cubic-bezier(0,0,.2,.1)}.mat-pseudo-checkbox::after{position:absolute;opacity:0;content:'';border-bottom:2px solid currentColor;transition:opacity 90ms cubic-bezier(0,0,.2,.1)}.mat-pseudo-checkbox.mat-pseudo-checkbox-checked,.mat-pseudo-checkbox.mat-pseudo-checkbox-indeterminate{border-color:transparent}._mat-animation-noopable.mat-pseudo-checkbox{transition:none;animation:none}._mat-animation-noopable.mat-pseudo-checkbox::after{transition:none}.mat-pseudo-checkbox-disabled{cursor:default}.mat-pseudo-checkbox-indeterminate::after{top:7px;left:0;width:16px;opacity:1}.mat-pseudo-checkbox-checked::after{top:3px;left:1px;width:12px;height:5px;border-left:2px solid currentColor;transform:rotate(-45deg);opacity:1}"],data:{}});function p(t){return r.lb(2,[],null,null)}},MpAI:function(t,e,n){"use strict";n.d(e,"a",function(){return u});var r=n("mrSG"),i=n("Ehmk"),o=n("eihs"),l=n("MGBS"),a=n("zotm");function u(t){return function(e){return e.lift(new s(t))}}var s=function(){function t(t){this.durationSelector=t}return t.prototype.call=function(t,e){return e.subscribe(new c(t,this.durationSelector))},t}(),c=function(t){function e(e,n){var r=t.call(this,e)||this;return r.durationSelector=n,r.hasValue=!1,r}return r.b(e,t),e.prototype._next=function(t){if(this.value=t,this.hasValue=!0,!this.throttled){var e=Object(i.a)(this.durationSelector)(t);if(e===o.a)this.destination.error(o.a.e);else{var n=Object(a.a)(this,e);!n||n.closed?this.clearThrottle():this.add(this.throttled=n)}}},e.prototype.clearThrottle=function(){var t=this.value,e=this.hasValue,n=this.throttled;n&&(this.remove(n),this.throttled=null,n.unsubscribe()),e&&(this.value=null,this.hasValue=!1,this.destination.next(t))},e.prototype.notifyNext=function(t,e,n,r){this.clearThrottle()},e.prototype.notifyComplete=function(){this.clearThrottle()},e}(l.a)},"Mr+X":function(t,e,n){"use strict";n.d(e,"a",function(){return i}),n.d(e,"b",function(){return o});var r=n("CcnG"),i=(n("SMsm"),n("Fzqc"),n("Wf4p"),r.Pa({encapsulation:2,styles:[".mat-icon{background-repeat:no-repeat;display:inline-block;fill:currentColor;height:24px;width:24px}.mat-icon.mat-icon-inline{font-size:inherit;height:inherit;line-height:inherit;width:inherit}[dir=rtl] .mat-icon-rtl-mirror{transform:scale(-1,1)}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon{display:block}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon-button .mat-icon{margin:auto}"],data:{}}));function o(t){return r.lb(2,[r.ab(null,0)],null,null)}},NSYL:function(t,e,n){"use strict";n.d(e,"a",function(){return j}),n.d(e,"c",function(){return bt}),n.d(e,"g",function(){return yt}),n.d(e,"e",function(){return R}),n.d(e,"b",function(){return Qt}),n.d(e,"d",function(){return oe}),n.d(e,"f",function(){return ae}),n.d(e,"h",function(){return ue});var r=n("mrSG"),i=n("ihYY");function o(){return"undefined"!=typeof process}function l(t){switch(t.length){case 0:return new i.d;case 1:return t[0];default:return new i.n(t)}}function a(t,e,n,r,o,l){void 0===o&&(o={}),void 0===l&&(l={});var a=[],u=[],s=-1,c=null;if(r.forEach(function(t){var n=t.offset,r=n==s,h=r&&c||{};Object.keys(t).forEach(function(n){var r=n,u=t[n];if("offset"!==n)switch(r=e.normalizePropertyName(r,a),u){case i.o:u=o[n];break;case i.a:u=l[n];break;default:u=e.normalizeStyleValue(n,r,u,a)}h[r]=u}),r||u.push(h),c=h,s=n}),a.length)throw new Error("Unable to animate due to the following errors:\n - "+a.join("\n - "));return u}function u(t,e,n,r){switch(e){case"start":t.onStart(function(){return r(n&&s(n,"start",t))});break;case"done":t.onDone(function(){return r(n&&s(n,"done",t))});break;case"destroy":t.onDestroy(function(){return r(n&&s(n,"destroy",t))})}}function s(t,e,n){var r=n.totalTime,i=c(t.element,t.triggerName,t.fromState,t.toState,e||t.phaseName,void 0==r?t.totalTime:r,!!n.disabled),o=t._data;return null!=o&&(i._data=o),i}function c(t,e,n,r,i,o,l){return void 0===i&&(i=""),void 0===o&&(o=0),{element:t,triggerName:e,fromState:n,toState:r,phaseName:i,totalTime:o,disabled:!!l}}function h(t,e,n){var r;return t instanceof Map?(r=t.get(e))||t.set(e,r=n):(r=t[e])||(r=t[e]=n),r}function f(t){var e=t.indexOf(":");return[t.substring(1,e),t.substr(e+1)]}var d=function(t,e){return!1},p=function(t,e){return!1},m=function(t,e,n){return[]},g=o();if(g||"undefined"!=typeof Element){if(d=function(t,e){return t.contains(e)},g||Element.prototype.matches)p=function(t,e){return t.matches(e)};else{var b=Element.prototype,y=b.matchesSelector||b.mozMatchesSelector||b.msMatchesSelector||b.oMatchesSelector||b.webkitMatchesSelector;y&&(p=function(t,e){return y.apply(t,[e])})}m=function(t,e,n){var i=[];if(n)i.push.apply(i,Object(r.d)(t.querySelectorAll(e)));else{var o=t.querySelector(e);o&&i.push(o)}return i}}var v=null,_=!1;function w(t){v||(v=("undefined"!=typeof document?document.body:null)||{},_=!!v.style&&"WebkitAppearance"in v.style);var e=!0;return v.style&&!function(t){return"ebkit"==t.substring(1,6)}(t)&&!(e=t in v.style)&&_&&(e="Webkit"+t.charAt(0).toUpperCase()+t.substr(1)in v.style),e}var x=p,S=d,C=m;function k(t){var e={};return Object.keys(t).forEach(function(n){var r=n.replace(/([a-z])([A-Z])/g,"$1-$2");e[r]=t[n]}),e}var R=function(){function t(){}return t.prototype.validateStyleProperty=function(t){return w(t)},t.prototype.matchesElement=function(t,e){return x(t,e)},t.prototype.containsElement=function(t,e){return S(t,e)},t.prototype.query=function(t,e,n){return C(t,e,n)},t.prototype.computeStyle=function(t,e,n){return n||""},t.prototype.animate=function(t,e,n,r,o,l,a){return void 0===l&&(l=[]),new i.d(n,r)},t}(),j=function(){function t(){}return t.NOOP=new R,t}(),O=1e3;function E(t){if("number"==typeof t)return t;var e=t.match(/^(-?[\.\d]+)(m?s)/);return!e||e.length<2?0:T(parseFloat(e[1]),e[2])}function T(t,e){switch(e){case"s":return t*O;default:return t}}function P(t,e,n){return t.hasOwnProperty("duration")?t:function(t,e,n){var r,i=0,o="";if("string"==typeof t){var l=t.match(/^(-?[\.\d]+)(m?s)(?:\s+(-?[\.\d]+)(m?s))?(?:\s+([-a-z]+(?:\(.+?\))?))?$/i);if(null===l)return e.push('The provided timing value "'+t+'" is invalid.'),{duration:0,delay:0,easing:""};r=T(parseFloat(l[1]),l[2]);var a=l[3];null!=a&&(i=T(Math.floor(parseFloat(a)),l[4]));var u=l[5];u&&(o=u)}else r=t;if(!n){var s=!1,c=e.length;r<0&&(e.push("Duration values below 0 are not allowed for this animation step."),s=!0),i<0&&(e.push("Delay values below 0 are not allowed for this animation step."),s=!0),s&&e.splice(c,0,'The provided timing value "'+t+'" is invalid.')}return{duration:r,delay:i,easing:o}}(t,e,n)}function I(t,e){return void 0===e&&(e={}),Object.keys(t).forEach(function(n){e[n]=t[n]}),e}function A(t,e,n){if(void 0===n&&(n={}),e)for(var r in t)n[r]=t[r];else I(t,n);return n}function M(t,e,n){return n?e+":"+n+";":""}function D(t){for(var e="",n=0;n<t.style.length;n++)e+=M(0,r=t.style.item(n),t.style.getPropertyValue(r));for(var r in t.style)t.style.hasOwnProperty(r)&&!r.startsWith("_")&&(e+=M(0,r.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase(),t.style[r]));t.setAttribute("style",e)}function N(t,e){t.style&&(Object.keys(e).forEach(function(n){var r=U(n);t.style[r]=e[n]}),o()&&D(t))}function L(t,e){t.style&&(Object.keys(e).forEach(function(e){var n=U(e);t.style[n]=""}),o()&&D(t))}function F(t){return Array.isArray(t)?1==t.length?t[0]:Object(i.i)(t):t}var z=new RegExp("{{\\s*(.+?)\\s*}}","g");function V(t){var e=[];if("string"==typeof t){for(var n=t.toString(),r=void 0;r=z.exec(n);)e.push(r[1]);z.lastIndex=0}return e}function B(t,e,n){var r=t.toString(),i=r.replace(z,function(t,r){var i=e[r];return e.hasOwnProperty(r)||(n.push("Please provide a value for the animation param "+r),i=""),i.toString()});return i==r?t:i}function H(t){for(var e=[],n=t.next();!n.done;)e.push(n.value),n=t.next();return e}var G=/-+([a-z0-9])/g;function U(t){return t.replace(G,function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return t[1].toUpperCase()})}function q(t,e){return 0===t||0===e}function Q(t,e,n){var r=Object.keys(n);if(r.length&&e.length){var i=e[0],o=[];if(r.forEach(function(t){i.hasOwnProperty(t)||o.push(t),i[t]=n[t]}),o.length)for(var l=function(){var n=e[a];o.forEach(function(e){n[e]=Y(t,e)})},a=1;a<e.length;a++)l()}return e}function W(t,e,n){switch(e.type){case 7:return t.visitTrigger(e,n);case 0:return t.visitState(e,n);case 1:return t.visitTransition(e,n);case 2:return t.visitSequence(e,n);case 3:return t.visitGroup(e,n);case 4:return t.visitAnimate(e,n);case 5:return t.visitKeyframes(e,n);case 6:return t.visitStyle(e,n);case 8:return t.visitReference(e,n);case 9:return t.visitAnimateChild(e,n);case 10:return t.visitAnimateRef(e,n);case 11:return t.visitQuery(e,n);case 12:return t.visitStagger(e,n);default:throw new Error("Unable to resolve animation metadata node #"+e.type)}}function Y(t,e){return window.getComputedStyle(t)[e]}var Z="*",K=new Set(["true","1"]),X=new Set(["false","0"]);function $(t,e){var n=K.has(t)||X.has(t),r=K.has(e)||X.has(e);return function(i,o){var l=t==Z||t==i,a=e==Z||e==o;return!l&&n&&"boolean"==typeof i&&(l=i?K.has(t):X.has(t)),!a&&r&&"boolean"==typeof o&&(a=o?K.has(e):X.has(e)),l&&a}}var J=new RegExp("s*:selfs*,?","g");function tt(t,e,n){return new et(t).build(e,n)}var et=function(){function t(t){this._driver=t}return t.prototype.build=function(t,e){var n=new nt(e);return this._resetContextStyleTimingState(n),W(this,F(t),n)},t.prototype._resetContextStyleTimingState=function(t){t.currentQuerySelector="",t.collectedStyles={},t.collectedStyles[""]={},t.currentTime=0},t.prototype.visitTrigger=function(t,e){var n=this,r=e.queryCount=0,i=e.depCount=0,o=[],l=[];return"@"==t.name.charAt(0)&&e.errors.push("animation triggers cannot be prefixed with an `@` sign (e.g. trigger('@foo', [...]))"),t.definitions.forEach(function(t){if(n._resetContextStyleTimingState(e),0==t.type){var a=t,u=a.name;u.toString().split(/\s*,\s*/).forEach(function(t){a.name=t,o.push(n.visitState(a,e))}),a.name=u}else if(1==t.type){var s=n.visitTransition(t,e);r+=s.queryCount,i+=s.depCount,l.push(s)}else e.errors.push("only state() and transition() definitions can sit inside of a trigger()")}),{type:7,name:t.name,states:o,transitions:l,queryCount:r,depCount:i,options:null}},t.prototype.visitState=function(t,e){var n=this.visitStyle(t.styles,e),r=t.options&&t.options.params||null;if(n.containsDynamicStyles){var i=new Set,o=r||{};if(n.styles.forEach(function(t){if(rt(t)){var e=t;Object.keys(e).forEach(function(t){V(e[t]).forEach(function(t){o.hasOwnProperty(t)||i.add(t)})})}}),i.size){var l=H(i.values());e.errors.push('state("'+t.name+'", ...) must define default values for all the following style substitutions: '+l.join(", "))}}return{type:0,name:t.name,style:n,options:r?{params:r}:null}},t.prototype.visitTransition=function(t,e){e.queryCount=0,e.depCount=0;var n,r,i,o=W(this,F(t.animation),e);return{type:1,matchers:(n=t.expr,r=e.errors,i=[],"string"==typeof n?n.split(/\s*,\s*/).forEach(function(t){return function(t,e,n){if(":"==t[0]){var r=function(t,e){switch(t){case":enter":return"void => *";case":leave":return"* => void";case":increment":return function(t,e){return parseFloat(e)>parseFloat(t)};case":decrement":return function(t,e){return parseFloat(e)<parseFloat(t)};default:return e.push('The transition alias value "'+t+'" is not supported'),"* => *"}}(t,n);if("function"==typeof r)return void e.push(r);t=r}var i=t.match(/^(\*|[-\w]+)\s*(<?[=-]>)\s*(\*|[-\w]+)$/);if(null==i||i.length<4)return n.push('The provided transition expression "'+t+'" is not supported'),e;var o=i[1],l=i[2],a=i[3];e.push($(o,a)),"<"!=l[0]||o==Z&&a==Z||e.push($(a,o))}(t,i,r)}):i.push(n),i),animation:o,queryCount:e.queryCount,depCount:e.depCount,options:it(t.options)}},t.prototype.visitSequence=function(t,e){var n=this;return{type:2,steps:t.steps.map(function(t){return W(n,t,e)}),options:it(t.options)}},t.prototype.visitGroup=function(t,e){var n=this,r=e.currentTime,i=0,o=t.steps.map(function(t){e.currentTime=r;var o=W(n,t,e);return i=Math.max(i,e.currentTime),o});return e.currentTime=i,{type:3,steps:o,options:it(t.options)}},t.prototype.visitAnimate=function(t,e){var n,r=function(t,e){var n=null;if(t.hasOwnProperty("duration"))n=t;else if("number"==typeof t)return ot(P(t,e).duration,0,"");var r=t;if(r.split(/\s+/).some(function(t){return"{"==t.charAt(0)&&"{"==t.charAt(1)})){var i=ot(0,0,"");return i.dynamic=!0,i.strValue=r,i}return ot((n=n||P(r,e)).duration,n.delay,n.easing)}(t.timings,e.errors);e.currentAnimateTimings=r;var o=t.styles?t.styles:Object(i.k)({});if(5==o.type)n=this.visitKeyframes(o,e);else{var l=t.styles,a=!1;if(!l){a=!0;var u={};r.easing&&(u.easing=r.easing),l=Object(i.k)(u)}e.currentTime+=r.duration+r.delay;var s=this.visitStyle(l,e);s.isEmptyStep=a,n=s}return e.currentAnimateTimings=null,{type:4,timings:r,style:n,options:null}},t.prototype.visitStyle=function(t,e){var n=this._makeStyleAst(t,e);return this._validateStyleAst(n,e),n},t.prototype._makeStyleAst=function(t,e){var n=[];Array.isArray(t.styles)?t.styles.forEach(function(t){"string"==typeof t?t==i.a?n.push(t):e.errors.push("The provided style string value "+t+" is not allowed."):n.push(t)}):n.push(t.styles);var r=!1,o=null;return n.forEach(function(t){if(rt(t)){var e=t,n=e.easing;if(n&&(o=n,delete e.easing),!r)for(var i in e)if(e[i].toString().indexOf("{{")>=0){r=!0;break}}}),{type:6,styles:n,easing:o,offset:t.offset,containsDynamicStyles:r,options:null}},t.prototype._validateStyleAst=function(t,e){var n=this,r=e.currentAnimateTimings,i=e.currentTime,o=e.currentTime;r&&o>0&&(o-=r.duration+r.delay),t.styles.forEach(function(t){"string"!=typeof t&&Object.keys(t).forEach(function(r){if(n._driver.validateStyleProperty(r)){var l,a,u,s=e.collectedStyles[e.currentQuerySelector],c=s[r],h=!0;c&&(o!=i&&o>=c.startTime&&i<=c.endTime&&(e.errors.push('The CSS property "'+r+'" that exists between the times of "'+c.startTime+'ms" and "'+c.endTime+'ms" is also being animated in a parallel animation between the times of "'+o+'ms" and "'+i+'ms"'),h=!1),o=c.startTime),h&&(s[r]={startTime:o,endTime:i}),e.options&&(l=e.errors,a=e.options.params||{},(u=V(t[r])).length&&u.forEach(function(t){a.hasOwnProperty(t)||l.push("Unable to resolve the local animation param "+t+" in the given list of values")}))}else e.errors.push('The provided animation property "'+r+'" is not a supported CSS property for animations')})})},t.prototype.visitKeyframes=function(t,e){var n=this,r={type:5,styles:[],options:null};if(!e.currentAnimateTimings)return e.errors.push("keyframes() must be placed inside of a call to animate()"),r;var i=0,o=[],l=!1,a=!1,u=0,s=t.steps.map(function(t){var r=n._makeStyleAst(t,e),s=null!=r.offset?r.offset:function(t){if("string"==typeof t)return null;var e=null;if(Array.isArray(t))t.forEach(function(t){if(rt(t)&&t.hasOwnProperty("offset")){var n=t;e=parseFloat(n.offset),delete n.offset}});else if(rt(t)&&t.hasOwnProperty("offset")){var n=t;e=parseFloat(n.offset),delete n.offset}return e}(r.styles),c=0;return null!=s&&(i++,c=r.offset=s),a=a||c<0||c>1,l=l||c<u,u=c,o.push(c),r});a&&e.errors.push("Please ensure that all keyframe offsets are between 0 and 1"),l&&e.errors.push("Please ensure that all keyframe offsets are in order");var c=t.steps.length,h=0;i>0&&i<c?e.errors.push("Not all style() steps within the declared keyframes() contain offsets"):0==i&&(h=1/(c-1));var f=c-1,d=e.currentTime,p=e.currentAnimateTimings,m=p.duration;return s.forEach(function(t,i){var l=h>0?i==f?1:h*i:o[i],a=l*m;e.currentTime=d+p.delay+a,p.duration=a,n._validateStyleAst(t,e),t.offset=l,r.styles.push(t)}),r},t.prototype.visitReference=function(t,e){return{type:8,animation:W(this,F(t.animation),e),options:it(t.options)}},t.prototype.visitAnimateChild=function(t,e){return e.depCount++,{type:9,options:it(t.options)}},t.prototype.visitAnimateRef=function(t,e){return{type:10,animation:this.visitReference(t.animation,e),options:it(t.options)}},t.prototype.visitQuery=function(t,e){var n=e.currentQuerySelector,i=t.options||{};e.queryCount++,e.currentQuery=t;var o=Object(r.c)(function(t){var e=!!t.split(/\s*,\s*/).find(function(t){return":self"==t});return e&&(t=t.replace(J,"")),[t=t.replace(/@\*/g,".ng-trigger").replace(/@\w+/g,function(t){return".ng-trigger-"+t.substr(1)}).replace(/:animating/g,".ng-animating"),e]}(t.selector),2),l=o[0],a=o[1];e.currentQuerySelector=n.length?n+" "+l:l,h(e.collectedStyles,e.currentQuerySelector,{});var u=W(this,F(t.animation),e);return e.currentQuery=null,e.currentQuerySelector=n,{type:11,selector:l,limit:i.limit||0,optional:!!i.optional,includeSelf:a,animation:u,originalSelector:t.selector,options:it(t.options)}},t.prototype.visitStagger=function(t,e){e.currentQuery||e.errors.push("stagger() can only be used inside of query()");var n="full"===t.timings?{duration:0,delay:0,easing:"full"}:P(t.timings,e.errors,!0);return{type:12,animation:W(this,F(t.animation),e),timings:n,options:null}},t}(),nt=function(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={},this.options=null};function rt(t){return!Array.isArray(t)&&"object"==typeof t}function it(t){var e;return t?(t=I(t)).params&&(t.params=(e=t.params)?I(e):null):t={},t}function ot(t,e,n){return{duration:t,delay:e,easing:n}}function lt(t,e,n,r,i,o,l,a){return void 0===l&&(l=null),void 0===a&&(a=!1),{type:1,element:t,keyframes:e,preStyleProps:n,postStyleProps:r,duration:i,delay:o,totalTime:i+o,easing:l,subTimeline:a}}var at=function(){function t(){this._map=new Map}return t.prototype.consume=function(t){var e=this._map.get(t);return e?this._map.delete(t):e=[],e},t.prototype.append=function(t,e){var n=this._map.get(t);n||this._map.set(t,n=[]),n.push.apply(n,Object(r.d)(e))},t.prototype.has=function(t){return this._map.has(t)},t.prototype.clear=function(){this._map.clear()},t}(),ut=new RegExp(":enter","g"),st=new RegExp(":leave","g");function ct(t,e,n,r,i,o,l,a,u,s){return void 0===o&&(o={}),void 0===l&&(l={}),void 0===s&&(s=[]),(new ht).buildKeyframes(t,e,n,r,i,o,l,a,u,s)}var ht=function(){function t(){}return t.prototype.buildKeyframes=function(t,e,n,r,i,o,l,a,u,s){void 0===s&&(s=[]),u=u||new at;var c=new dt(t,e,u,r,i,s,[]);c.options=a,c.currentTimeline.setStyles([o],null,c.errors,a),W(this,n,c);var h=c.timelines.filter(function(t){return t.containsAnimation()});if(h.length&&Object.keys(l).length){var f=h[h.length-1];f.allowOnlyTimelineStyles()||f.setStyles([l],null,c.errors,a)}return h.length?h.map(function(t){return t.buildKeyframes()}):[lt(e,[],[],[],0,0,"",!1)]},t.prototype.visitTrigger=function(t,e){},t.prototype.visitState=function(t,e){},t.prototype.visitTransition=function(t,e){},t.prototype.visitAnimateChild=function(t,e){var n=e.subInstructions.consume(e.element);if(n){var r=e.createSubContext(t.options),i=e.currentTimeline.currentTime,o=this._visitSubInstructions(n,r,r.options);i!=o&&e.transformIntoNewTimeline(o)}e.previousNode=t},t.prototype.visitAnimateRef=function(t,e){var n=e.createSubContext(t.options);n.transformIntoNewTimeline(),this.visitReference(t.animation,n),e.transformIntoNewTimeline(n.currentTimeline.currentTime),e.previousNode=t},t.prototype._visitSubInstructions=function(t,e,n){var r=e.currentTimeline.currentTime,i=null!=n.duration?E(n.duration):null,o=null!=n.delay?E(n.delay):null;return 0!==i&&t.forEach(function(t){var n=e.appendInstructionToTimeline(t,i,o);r=Math.max(r,n.duration+n.delay)}),r},t.prototype.visitReference=function(t,e){e.updateOptions(t.options,!0),W(this,t.animation,e),e.previousNode=t},t.prototype.visitSequence=function(t,e){var n=this,r=e.subContextCount,i=e,o=t.options;if(o&&(o.params||o.delay)&&((i=e.createSubContext(o)).transformIntoNewTimeline(),null!=o.delay)){6==i.previousNode.type&&(i.currentTimeline.snapshotCurrentStyles(),i.previousNode=ft);var l=E(o.delay);i.delayNextStep(l)}t.steps.length&&(t.steps.forEach(function(t){return W(n,t,i)}),i.currentTimeline.applyStylesToKeyframe(),i.subContextCount>r&&i.transformIntoNewTimeline()),e.previousNode=t},t.prototype.visitGroup=function(t,e){var n=this,r=[],i=e.currentTimeline.currentTime,o=t.options&&t.options.delay?E(t.options.delay):0;t.steps.forEach(function(l){var a=e.createSubContext(t.options);o&&a.delayNextStep(o),W(n,l,a),i=Math.max(i,a.currentTimeline.currentTime),r.push(a.currentTimeline)}),r.forEach(function(t){return e.currentTimeline.mergeTimelineCollectedStyles(t)}),e.transformIntoNewTimeline(i),e.previousNode=t},t.prototype._visitTiming=function(t,e){if(t.dynamic){var n=t.strValue;return P(e.params?B(n,e.params,e.errors):n,e.errors)}return{duration:t.duration,delay:t.delay,easing:t.easing}},t.prototype.visitAnimate=function(t,e){var n=e.currentAnimateTimings=this._visitTiming(t.timings,e),r=e.currentTimeline;n.delay&&(e.incrementTime(n.delay),r.snapshotCurrentStyles());var i=t.style;5==i.type?this.visitKeyframes(i,e):(e.incrementTime(n.duration),this.visitStyle(i,e),r.applyStylesToKeyframe()),e.currentAnimateTimings=null,e.previousNode=t},t.prototype.visitStyle=function(t,e){var n=e.currentTimeline,r=e.currentAnimateTimings;!r&&n.getCurrentStyleProperties().length&&n.forwardFrame();var i=r&&r.easing||t.easing;t.isEmptyStep?n.applyEmptyStep(i):n.setStyles(t.styles,i,e.errors,e.options),e.previousNode=t},t.prototype.visitKeyframes=function(t,e){var n=e.currentAnimateTimings,r=e.currentTimeline.duration,i=n.duration,o=e.createSubContext().currentTimeline;o.easing=n.easing,t.styles.forEach(function(t){o.forwardTime((t.offset||0)*i),o.setStyles(t.styles,t.easing,e.errors,e.options),o.applyStylesToKeyframe()}),e.currentTimeline.mergeTimelineCollectedStyles(o),e.transformIntoNewTimeline(r+i),e.previousNode=t},t.prototype.visitQuery=function(t,e){var n=this,r=e.currentTimeline.currentTime,i=t.options||{},o=i.delay?E(i.delay):0;o&&(6===e.previousNode.type||0==r&&e.currentTimeline.getCurrentStyleProperties().length)&&(e.currentTimeline.snapshotCurrentStyles(),e.previousNode=ft);var l=r,a=e.invokeQuery(t.selector,t.originalSelector,t.limit,t.includeSelf,!!i.optional,e.errors);e.currentQueryTotal=a.length;var u=null;a.forEach(function(r,i){e.currentQueryIndex=i;var a=e.createSubContext(t.options,r);o&&a.delayNextStep(o),r===e.element&&(u=a.currentTimeline),W(n,t.animation,a),a.currentTimeline.applyStylesToKeyframe(),l=Math.max(l,a.currentTimeline.currentTime)}),e.currentQueryIndex=0,e.currentQueryTotal=0,e.transformIntoNewTimeline(l),u&&(e.currentTimeline.mergeTimelineCollectedStyles(u),e.currentTimeline.snapshotCurrentStyles()),e.previousNode=t},t.prototype.visitStagger=function(t,e){var n=e.parentContext,r=e.currentTimeline,i=t.timings,o=Math.abs(i.duration),l=o*(e.currentQueryTotal-1),a=o*e.currentQueryIndex;switch(i.duration<0?"reverse":i.easing){case"reverse":a=l-a;break;case"full":a=n.currentStaggerTime}var u=e.currentTimeline;a&&u.delayNextStep(a);var s=u.currentTime;W(this,t.animation,e),e.previousNode=t,n.currentStaggerTime=r.currentTime-s+(r.startTime-n.currentTimeline.startTime)},t}(),ft={},dt=function(){function t(t,e,n,r,i,o,l,a){this._driver=t,this.element=e,this.subInstructions=n,this._enterClassName=r,this._leaveClassName=i,this.errors=o,this.timelines=l,this.parentContext=null,this.currentAnimateTimings=null,this.previousNode=ft,this.subContextCount=0,this.options={},this.currentQueryIndex=0,this.currentQueryTotal=0,this.currentStaggerTime=0,this.currentTimeline=a||new pt(this._driver,e,0),l.push(this.currentTimeline)}return Object.defineProperty(t.prototype,"params",{get:function(){return this.options.params},enumerable:!0,configurable:!0}),t.prototype.updateOptions=function(t,e){var n=this;if(t){var r=t,i=this.options;null!=r.duration&&(i.duration=E(r.duration)),null!=r.delay&&(i.delay=E(r.delay));var o=r.params;if(o){var l=i.params;l||(l=this.options.params={}),Object.keys(o).forEach(function(t){e&&l.hasOwnProperty(t)||(l[t]=B(o[t],l,n.errors))})}}},t.prototype._copyOptions=function(){var t={};if(this.options){var e=this.options.params;if(e){var n=t.params={};Object.keys(e).forEach(function(t){n[t]=e[t]})}}return t},t.prototype.createSubContext=function(e,n,r){void 0===e&&(e=null);var i=n||this.element,o=new t(this._driver,i,this.subInstructions,this._enterClassName,this._leaveClassName,this.errors,this.timelines,this.currentTimeline.fork(i,r||0));return o.previousNode=this.previousNode,o.currentAnimateTimings=this.currentAnimateTimings,o.options=this._copyOptions(),o.updateOptions(e),o.currentQueryIndex=this.currentQueryIndex,o.currentQueryTotal=this.currentQueryTotal,o.parentContext=this,this.subContextCount++,o},t.prototype.transformIntoNewTimeline=function(t){return this.previousNode=ft,this.currentTimeline=this.currentTimeline.fork(this.element,t),this.timelines.push(this.currentTimeline),this.currentTimeline},t.prototype.appendInstructionToTimeline=function(t,e,n){var r={duration:null!=e?e:t.duration,delay:this.currentTimeline.currentTime+(null!=n?n:0)+t.delay,easing:""},i=new mt(this._driver,t.element,t.keyframes,t.preStyleProps,t.postStyleProps,r,t.stretchStartingKeyframe);return this.timelines.push(i),r},t.prototype.incrementTime=function(t){this.currentTimeline.forwardTime(this.currentTimeline.duration+t)},t.prototype.delayNextStep=function(t){t>0&&this.currentTimeline.delayNextStep(t)},t.prototype.invokeQuery=function(t,e,n,i,o,l){var a=[];if(i&&a.push(this.element),t.length>0){t=(t=t.replace(ut,"."+this._enterClassName)).replace(st,"."+this._leaveClassName);var u=this._driver.query(this.element,t,1!=n);0!==n&&(u=n<0?u.slice(u.length+n,u.length):u.slice(0,n)),a.push.apply(a,Object(r.d)(u))}return o||0!=a.length||l.push('`query("'+e+'")` returned zero elements. (Use `query("'+e+'", { optional: true })` if you wish to allow this.)'),a},t}(),pt=function(){function t(t,e,n,r){this._driver=t,this.element=e,this.startTime=n,this._elementTimelineStylesLookup=r,this.duration=0,this._previousKeyframe={},this._currentKeyframe={},this._keyframes=new Map,this._styleSummary={},this._pendingStyles={},this._backFill={},this._currentEmptyStepKeyframe=null,this._elementTimelineStylesLookup||(this._elementTimelineStylesLookup=new Map),this._localTimelineStyles=Object.create(this._backFill,{}),this._globalTimelineStyles=this._elementTimelineStylesLookup.get(e),this._globalTimelineStyles||(this._globalTimelineStyles=this._localTimelineStyles,this._elementTimelineStylesLookup.set(e,this._localTimelineStyles)),this._loadKeyframe()}return t.prototype.containsAnimation=function(){switch(this._keyframes.size){case 0:return!1;case 1:return this.getCurrentStyleProperties().length>0;default:return!0}},t.prototype.getCurrentStyleProperties=function(){return Object.keys(this._currentKeyframe)},Object.defineProperty(t.prototype,"currentTime",{get:function(){return this.startTime+this.duration},enumerable:!0,configurable:!0}),t.prototype.delayNextStep=function(t){var e=1==this._keyframes.size&&Object.keys(this._pendingStyles).length;this.duration||e?(this.forwardTime(this.currentTime+t),e&&this.snapshotCurrentStyles()):this.startTime+=t},t.prototype.fork=function(e,n){return this.applyStylesToKeyframe(),new t(this._driver,e,n||this.currentTime,this._elementTimelineStylesLookup)},t.prototype._loadKeyframe=function(){this._currentKeyframe&&(this._previousKeyframe=this._currentKeyframe),this._currentKeyframe=this._keyframes.get(this.duration),this._currentKeyframe||(this._currentKeyframe=Object.create(this._backFill,{}),this._keyframes.set(this.duration,this._currentKeyframe))},t.prototype.forwardFrame=function(){this.duration+=1,this._loadKeyframe()},t.prototype.forwardTime=function(t){this.applyStylesToKeyframe(),this.duration=t,this._loadKeyframe()},t.prototype._updateStyle=function(t,e){this._localTimelineStyles[t]=e,this._globalTimelineStyles[t]=e,this._styleSummary[t]={time:this.currentTime,value:e}},t.prototype.allowOnlyTimelineStyles=function(){return this._currentEmptyStepKeyframe!==this._currentKeyframe},t.prototype.applyEmptyStep=function(t){var e=this;t&&(this._previousKeyframe.easing=t),Object.keys(this._globalTimelineStyles).forEach(function(t){e._backFill[t]=e._globalTimelineStyles[t]||i.a,e._currentKeyframe[t]=i.a}),this._currentEmptyStepKeyframe=this._currentKeyframe},t.prototype.setStyles=function(t,e,n,r){var o=this;e&&(this._previousKeyframe.easing=e);var l=r&&r.params||{},a=function(t,e){var n,r={};return t.forEach(function(t){"*"===t?(n=n||Object.keys(e)).forEach(function(t){r[t]=i.a}):A(t,!1,r)}),r}(t,this._globalTimelineStyles);Object.keys(a).forEach(function(t){var e=B(a[t],l,n);o._pendingStyles[t]=e,o._localTimelineStyles.hasOwnProperty(t)||(o._backFill[t]=o._globalTimelineStyles.hasOwnProperty(t)?o._globalTimelineStyles[t]:i.a),o._updateStyle(t,e)})},t.prototype.applyStylesToKeyframe=function(){var t=this,e=this._pendingStyles,n=Object.keys(e);0!=n.length&&(this._pendingStyles={},n.forEach(function(n){t._currentKeyframe[n]=e[n]}),Object.keys(this._localTimelineStyles).forEach(function(e){t._currentKeyframe.hasOwnProperty(e)||(t._currentKeyframe[e]=t._localTimelineStyles[e])}))},t.prototype.snapshotCurrentStyles=function(){var t=this;Object.keys(this._localTimelineStyles).forEach(function(e){var n=t._localTimelineStyles[e];t._pendingStyles[e]=n,t._updateStyle(e,n)})},t.prototype.getFinalKeyframe=function(){return this._keyframes.get(this.duration)},Object.defineProperty(t.prototype,"properties",{get:function(){var t=[];for(var e in this._currentKeyframe)t.push(e);return t},enumerable:!0,configurable:!0}),t.prototype.mergeTimelineCollectedStyles=function(t){var e=this;Object.keys(t._styleSummary).forEach(function(n){var r=e._styleSummary[n],i=t._styleSummary[n];(!r||i.time>r.time)&&e._updateStyle(n,i.value)})},t.prototype.buildKeyframes=function(){var t=this;this.applyStylesToKeyframe();var e=new Set,n=new Set,r=1===this._keyframes.size&&0===this.duration,o=[];this._keyframes.forEach(function(l,a){var u=A(l,!0);Object.keys(u).forEach(function(t){var r=u[t];r==i.o?e.add(t):r==i.a&&n.add(t)}),r||(u.offset=a/t.duration),o.push(u)});var l=e.size?H(e.values()):[],a=n.size?H(n.values()):[];if(r){var u=o[0],s=I(u);u.offset=0,s.offset=1,o=[u,s]}return lt(this.element,o,l,a,this.duration,this.startTime,this.easing,!1)},t}(),mt=function(t){function e(e,n,r,i,o,l,a){void 0===a&&(a=!1);var u=t.call(this,e,n,l.delay)||this;return u.element=n,u.keyframes=r,u.preStyleProps=i,u.postStyleProps=o,u._stretchStartingKeyframe=a,u.timings={duration:l.duration,delay:l.delay,easing:l.easing},u}return Object(r.b)(e,t),e.prototype.containsAnimation=function(){return this.keyframes.length>1},e.prototype.buildKeyframes=function(){var t=this.keyframes,e=this.timings,n=e.delay,r=e.duration,i=e.easing;if(this._stretchStartingKeyframe&&n){var o=[],l=r+n,a=n/l,u=A(t[0],!1);u.offset=0,o.push(u);var s=A(t[0],!1);s.offset=gt(a),o.push(s);for(var c=t.length-1,h=1;h<=c;h++){var f=A(t[h],!1);f.offset=gt((n+f.offset*r)/l),o.push(f)}r=l,n=0,i="",t=o}return lt(this.element,t,this.preStyleProps,this.postStyleProps,r,n,i,!0)},e}(pt);function gt(t,e){void 0===e&&(e=3);var n=Math.pow(10,e-1);return Math.round(t*n)/n}var bt=function(){},yt=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Object(r.b)(e,t),e.prototype.normalizePropertyName=function(t,e){return U(t)},e.prototype.normalizeStyleValue=function(t,e,n,r){var i="",o=n.toString().trim();if(vt[e]&&0!==n&&"0"!==n)if("number"==typeof n)i="px";else{var l=n.match(/^[+-]?[\d\.]+([a-z]*)$/);l&&0==l[1].length&&r.push("Please provide a CSS unit value for "+t+":"+n)}return o+i},e}(bt),vt=function(t){var e={};return"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".split(",").forEach(function(t){return e[t]=!0}),e}();function _t(t,e,n,r,i,o,l,a,u,s,c,h,f){return{type:0,element:t,triggerName:e,isRemovalTransition:i,fromState:n,fromStyles:o,toState:r,toStyles:l,timelines:a,queriedElements:u,preStyleProps:s,postStyleProps:c,totalTime:h,errors:f}}var wt={},xt=function(){function t(t,e,n){this._triggerName=t,this.ast=e,this._stateStyles=n}return t.prototype.match=function(t,e,n,r){return function(t,e,n,r,i){return t.some(function(t){return t(e,n,r,i)})}(this.ast.matchers,t,e,n,r)},t.prototype.buildStyles=function(t,e,n){var r=this._stateStyles["*"],i=this._stateStyles[t],o=r?r.buildStyles(e,n):{};return i?i.buildStyles(e,n):o},t.prototype.build=function(t,e,n,i,o,l,a,u,s,c){var f=[],d=this.ast.options&&this.ast.options.params||wt,p=this.buildStyles(n,a&&a.params||wt,f),m=u&&u.params||wt,g=this.buildStyles(i,m,f),b=new Set,y=new Map,v=new Map,_="void"===i,w={params:Object(r.a)({},d,m)},x=c?[]:ct(t,e,this.ast.animation,o,l,p,g,w,s,f),S=0;if(x.forEach(function(t){S=Math.max(t.duration+t.delay,S)}),f.length)return _t(e,this._triggerName,n,i,_,p,g,[],[],y,v,S,f);x.forEach(function(t){var n=t.element,r=h(y,n,{});t.preStyleProps.forEach(function(t){return r[t]=!0});var i=h(v,n,{});t.postStyleProps.forEach(function(t){return i[t]=!0}),n!==e&&b.add(n)});var C=H(b.values());return _t(e,this._triggerName,n,i,_,p,g,x,C,y,v,S)},t}(),St=function(){function t(t,e){this.styles=t,this.defaultParams=e}return t.prototype.buildStyles=function(t,e){var n={},r=I(this.defaultParams);return Object.keys(t).forEach(function(e){var n=t[e];null!=n&&(r[e]=n)}),this.styles.styles.forEach(function(t){if("string"!=typeof t){var i=t;Object.keys(i).forEach(function(t){var o=i[t];o.length>1&&(o=B(o,r,e)),n[t]=o})}}),n},t}(),Ct=function(){function t(t,e){var n=this;this.name=t,this.ast=e,this.transitionFactories=[],this.states={},e.states.forEach(function(t){n.states[t.name]=new St(t.style,t.options&&t.options.params||{})}),kt(this.states,"true","1"),kt(this.states,"false","0"),e.transitions.forEach(function(e){n.transitionFactories.push(new xt(t,e,n.states))}),this.fallbackTransition=new xt(t,{type:1,animation:{type:2,steps:[],options:null},matchers:[function(t,e){return!0}],options:null,queryCount:0,depCount:0},this.states)}return Object.defineProperty(t.prototype,"containsQueries",{get:function(){return this.ast.queryCount>0},enumerable:!0,configurable:!0}),t.prototype.matchTransition=function(t,e,n,r){return this.transitionFactories.find(function(i){return i.match(t,e,n,r)})||null},t.prototype.matchStyles=function(t,e,n){return this.fallbackTransition.buildStyles(t,e,n)},t}();function kt(t,e,n){t.hasOwnProperty(e)?t.hasOwnProperty(n)||(t[n]=t[e]):t.hasOwnProperty(n)&&(t[e]=t[n])}var Rt=new at,jt=function(){function t(t,e,n){this.bodyNode=t,this._driver=e,this._normalizer=n,this._animations={},this._playersById={},this.players=[]}return t.prototype.register=function(t,e){var n=[],r=tt(this._driver,e,n);if(n.length)throw new Error("Unable to build the animation due to the following errors: "+n.join("\n"));this._animations[t]=r},t.prototype._buildPlayer=function(t,e,n){var r=t.element,i=a(0,this._normalizer,0,t.keyframes,e,n);return this._driver.animate(r,i,t.duration,t.delay,t.easing,[],!0)},t.prototype.create=function(t,e,n){var r=this;void 0===n&&(n={});var o,a=[],u=this._animations[t],s=new Map;if(u?(o=ct(this._driver,e,u,"ng-enter","ng-leave",{},{},n,Rt,a)).forEach(function(t){var e=h(s,t.element,{});t.postStyleProps.forEach(function(t){return e[t]=null})}):(a.push("The requested animation doesn't exist or has already been destroyed"),o=[]),a.length)throw new Error("Unable to create the animation due to the following errors: "+a.join("\n"));s.forEach(function(t,e){Object.keys(t).forEach(function(n){t[n]=r._driver.computeStyle(e,n,i.a)})});var c=l(o.map(function(t){var e=s.get(t.element);return r._buildPlayer(t,{},e)}));return this._playersById[t]=c,c.onDestroy(function(){return r.destroy(t)}),this.players.push(c),c},t.prototype.destroy=function(t){var e=this._getPlayer(t);e.destroy(),delete this._playersById[t];var n=this.players.indexOf(e);n>=0&&this.players.splice(n,1)},t.prototype._getPlayer=function(t){var e=this._playersById[t];if(!e)throw new Error("Unable to find the timeline player referenced by "+t);return e},t.prototype.listen=function(t,e,n,r){var i=c(e,"","","");return u(this._getPlayer(t),n,i,r),function(){}},t.prototype.command=function(t,e,n,r){if("register"!=n)if("create"!=n){var i=this._getPlayer(t);switch(n){case"play":i.play();break;case"pause":i.pause();break;case"reset":i.reset();break;case"restart":i.restart();break;case"finish":i.finish();break;case"init":i.init();break;case"setPosition":i.setPosition(parseFloat(r[0]));break;case"destroy":this.destroy(t)}}else this.create(t,e,r[0]||{});else this.register(t,r[0])},t}(),Ot=[],Et={namespaceId:"",setForRemoval:!1,setForMove:!1,hasAnimation:!1,removedBeforeQueried:!1},Tt={namespaceId:"",setForMove:!1,setForRemoval:!1,hasAnimation:!1,removedBeforeQueried:!0},Pt="__ng_removed",It=function(){function t(t,e){void 0===e&&(e=""),this.namespaceId=e;var n=t&&t.hasOwnProperty("value");if(this.value=function(t){return null!=t?t:null}(n?t.value:t),n){var r=I(t);delete r.value,this.options=r}else this.options={};this.options.params||(this.options.params={})}return Object.defineProperty(t.prototype,"params",{get:function(){return this.options.params},enumerable:!0,configurable:!0}),t.prototype.absorbOptions=function(t){var e=t.params;if(e){var n=this.options.params;Object.keys(e).forEach(function(t){null==n[t]&&(n[t]=e[t])})}},t}(),At=new It("void"),Mt=function(){function t(t,e,n){this.id=t,this.hostElement=e,this._engine=n,this.players=[],this._triggers={},this._queue=[],this._elementListeners=new Map,this._hostClassName="ng-tns-"+t,Ht(e,this._hostClassName)}return t.prototype.listen=function(t,e,n,r){var i,o=this;if(!this._triggers.hasOwnProperty(e))throw new Error('Unable to listen on the animation trigger event "'+n+'" because the animation trigger "'+e+"\" doesn't exist!");if(null==n||0==n.length)throw new Error('Unable to listen on the animation trigger "'+e+'" because the provided event is undefined!');if("start"!=(i=n)&&"done"!=i)throw new Error('The provided animation trigger event "'+n+'" for the animation trigger "'+e+'" is not supported!');var l=h(this._elementListeners,t,[]),a={name:e,phase:n,callback:r};l.push(a);var u=h(this._engine.statesByElement,t,{});return u.hasOwnProperty(e)||(Ht(t,"ng-trigger"),Ht(t,"ng-trigger-"+e),u[e]=At),function(){o._engine.afterFlush(function(){var t=l.indexOf(a);t>=0&&l.splice(t,1),o._triggers[e]||delete u[e]})}},t.prototype.register=function(t,e){return!this._triggers[t]&&(this._triggers[t]=e,!0)},t.prototype._getTrigger=function(t){var e=this._triggers[t];if(!e)throw new Error('The provided animation trigger "'+t+'" has not been registered!');return e},t.prototype.trigger=function(t,e,n,r){var i=this;void 0===r&&(r=!0);var o=this._getTrigger(e),l=new Nt(this.id,e,t),a=this._engine.statesByElement.get(t);a||(Ht(t,"ng-trigger"),Ht(t,"ng-trigger-"+e),this._engine.statesByElement.set(t,a={}));var u=a[e],s=new It(n,this.id);if(!(n&&n.hasOwnProperty("value"))&&u&&s.absorbOptions(u.options),a[e]=s,u||(u=At),"void"===s.value||u.value!==s.value){var c=h(this._engine.playersByElement,t,[]);c.forEach(function(t){t.namespaceId==i.id&&t.triggerName==e&&t.queued&&t.destroy()});var f=o.matchTransition(u.value,s.value,t,s.params),d=!1;if(!f){if(!r)return;f=o.fallbackTransition,d=!0}return this._engine.totalQueuedPlayers++,this._queue.push({element:t,triggerName:e,transition:f,fromState:u,toState:s,player:l,isFallbackTransition:d}),d||(Ht(t,"ng-animate-queued"),l.onStart(function(){Gt(t,"ng-animate-queued")})),l.onDone(function(){var e=i.players.indexOf(l);e>=0&&i.players.splice(e,1);var n=i._engine.playersByElement.get(t);if(n){var r=n.indexOf(l);r>=0&&n.splice(r,1)}}),this.players.push(l),c.push(l),l}if(!function(t,e){var n=Object.keys(t),r=Object.keys(e);if(n.length!=r.length)return!1;for(var i=0;i<n.length;i++){var o=n[i];if(!e.hasOwnProperty(o)||t[o]!==e[o])return!1}return!0}(u.params,s.params)){var p=[],m=o.matchStyles(u.value,u.params,p),g=o.matchStyles(s.value,s.params,p);p.length?this._engine.reportError(p):this._engine.afterFlush(function(){L(t,m),N(t,g)})}},t.prototype.deregister=function(t){var e=this;delete this._triggers[t],this._engine.statesByElement.forEach(function(e,n){delete e[t]}),this._elementListeners.forEach(function(n,r){e._elementListeners.set(r,n.filter(function(e){return e.name!=t}))})},t.prototype.clearElementCache=function(t){this._engine.statesByElement.delete(t),this._elementListeners.delete(t);var e=this._engine.playersByElement.get(t);e&&(e.forEach(function(t){return t.destroy()}),this._engine.playersByElement.delete(t))},t.prototype._signalRemovalForInnerTriggers=function(t,e,n){var r=this;void 0===n&&(n=!1),this._engine.driver.query(t,".ng-trigger",!0).forEach(function(t){if(!t[Pt]){var n=r._engine.fetchNamespacesByElement(t);n.size?n.forEach(function(n){return n.triggerLeaveAnimation(t,e,!1,!0)}):r.clearElementCache(t)}})},t.prototype.triggerLeaveAnimation=function(t,e,n,r){var i=this,o=this._engine.statesByElement.get(t);if(o){var a=[];if(Object.keys(o).forEach(function(e){if(i._triggers[e]){var n=i.trigger(t,e,"void",r);n&&a.push(n)}}),a.length)return this._engine.markElementAsRemoved(this.id,t,!0,e),n&&l(a).onDone(function(){return i._engine.processLeaveNode(t)}),!0}return!1},t.prototype.prepareLeaveAnimationListeners=function(t){var e=this,n=this._elementListeners.get(t);if(n){var r=new Set;n.forEach(function(n){var i=n.name;if(!r.has(i)){r.add(i);var o=e._triggers[i].fallbackTransition,l=e._engine.statesByElement.get(t)[i]||At,a=new It("void"),u=new Nt(e.id,i,t);e._engine.totalQueuedPlayers++,e._queue.push({element:t,triggerName:i,transition:o,fromState:l,toState:a,player:u,isFallbackTransition:!0})}})}},t.prototype.removeNode=function(t,e){var n=this,r=this._engine;if(t.childElementCount&&this._signalRemovalForInnerTriggers(t,e,!0),!this.triggerLeaveAnimation(t,e,!0)){var i=!1;if(r.totalAnimations){var o=r.players.length?r.playersByQueriedElement.get(t):[];if(o&&o.length)i=!0;else for(var l=t;l=l.parentNode;)if(r.statesByElement.get(l)){i=!0;break}}this.prepareLeaveAnimationListeners(t),i?r.markElementAsRemoved(this.id,t,!1,e):(r.afterFlush(function(){return n.clearElementCache(t)}),r.destroyInnerAnimations(t),r._onRemovalComplete(t,e))}},t.prototype.insertNode=function(t,e){Ht(t,this._hostClassName)},t.prototype.drainQueuedTransitions=function(t){var e=this,n=[];return this._queue.forEach(function(r){var i=r.player;if(!i.destroyed){var o=r.element,l=e._elementListeners.get(o);l&&l.forEach(function(e){if(e.name==r.triggerName){var n=c(o,r.triggerName,r.fromState.value,r.toState.value);n._data=t,u(r.player,e.phase,n,e.callback)}}),i.markedForDestroy?e._engine.afterFlush(function(){i.destroy()}):n.push(r)}}),this._queue=[],n.sort(function(t,n){var r=t.transition.ast.depCount,i=n.transition.ast.depCount;return 0==r||0==i?r-i:e._engine.driver.containsElement(t.element,n.element)?1:-1})},t.prototype.destroy=function(t){this.players.forEach(function(t){return t.destroy()}),this._signalRemovalForInnerTriggers(this.hostElement,t)},t.prototype.elementContainsData=function(t){var e=!1;return this._elementListeners.has(t)&&(e=!0),!!this._queue.find(function(e){return e.element===t})||e},t}(),Dt=function(){function t(t,e,n){this.bodyNode=t,this.driver=e,this._normalizer=n,this.players=[],this.newHostElements=new Map,this.playersByElement=new Map,this.playersByQueriedElement=new Map,this.statesByElement=new Map,this.disabledNodes=new Set,this.totalAnimations=0,this.totalQueuedPlayers=0,this._namespaceLookup={},this._namespaceList=[],this._flushFns=[],this._whenQuietFns=[],this.namespacesByHostElement=new Map,this.collectedEnterElements=[],this.collectedLeaveElements=[],this.onRemovalComplete=function(t,e){}}return t.prototype._onRemovalComplete=function(t,e){this.onRemovalComplete(t,e)},Object.defineProperty(t.prototype,"queuedPlayers",{get:function(){var t=[];return this._namespaceList.forEach(function(e){e.players.forEach(function(e){e.queued&&t.push(e)})}),t},enumerable:!0,configurable:!0}),t.prototype.createNamespace=function(t,e){var n=new Mt(t,e,this);return e.parentNode?this._balanceNamespaceList(n,e):(this.newHostElements.set(e,n),this.collectEnterElement(e)),this._namespaceLookup[t]=n},t.prototype._balanceNamespaceList=function(t,e){var n=this._namespaceList.length-1;if(n>=0){for(var r=!1,i=n;i>=0;i--)if(this.driver.containsElement(this._namespaceList[i].hostElement,e)){this._namespaceList.splice(i+1,0,t),r=!0;break}r||this._namespaceList.splice(0,0,t)}else this._namespaceList.push(t);return this.namespacesByHostElement.set(e,t),t},t.prototype.register=function(t,e){var n=this._namespaceLookup[t];return n||(n=this.createNamespace(t,e)),n},t.prototype.registerTrigger=function(t,e,n){var r=this._namespaceLookup[t];r&&r.register(e,n)&&this.totalAnimations++},t.prototype.destroy=function(t,e){var n=this;if(t){var r=this._fetchNamespace(t);this.afterFlush(function(){n.namespacesByHostElement.delete(r.hostElement),delete n._namespaceLookup[t];var e=n._namespaceList.indexOf(r);e>=0&&n._namespaceList.splice(e,1)}),this.afterFlushAnimationsDone(function(){return r.destroy(e)})}},t.prototype._fetchNamespace=function(t){return this._namespaceLookup[t]},t.prototype.fetchNamespacesByElement=function(t){var e=new Set,n=this.statesByElement.get(t);if(n)for(var r=Object.keys(n),i=0;i<r.length;i++){var o=n[r[i]].namespaceId;if(o){var l=this._fetchNamespace(o);l&&e.add(l)}}return e},t.prototype.trigger=function(t,e,n,r){if(Lt(e)){var i=this._fetchNamespace(t);if(i)return i.trigger(e,n,r),!0}return!1},t.prototype.insertNode=function(t,e,n,r){if(Lt(e)){var i=e[Pt];if(i&&i.setForRemoval){i.setForRemoval=!1,i.setForMove=!0;var o=this.collectedLeaveElements.indexOf(e);o>=0&&this.collectedLeaveElements.splice(o,1)}if(t){var l=this._fetchNamespace(t);l&&l.insertNode(e,n)}r&&this.collectEnterElement(e)}},t.prototype.collectEnterElement=function(t){this.collectedEnterElements.push(t)},t.prototype.markElementAsDisabled=function(t,e){e?this.disabledNodes.has(t)||(this.disabledNodes.add(t),Ht(t,"ng-animate-disabled")):this.disabledNodes.has(t)&&(this.disabledNodes.delete(t),Gt(t,"ng-animate-disabled"))},t.prototype.removeNode=function(t,e,n){if(Lt(e)){var r=t?this._fetchNamespace(t):null;r?r.removeNode(e,n):this.markElementAsRemoved(t,e,!1,n)}else this._onRemovalComplete(e,n)},t.prototype.markElementAsRemoved=function(t,e,n,r){this.collectedLeaveElements.push(e),e[Pt]={namespaceId:t,setForRemoval:r,hasAnimation:n,removedBeforeQueried:!1}},t.prototype.listen=function(t,e,n,r,i){return Lt(e)?this._fetchNamespace(t).listen(e,n,r,i):function(){}},t.prototype._buildInstruction=function(t,e,n,r,i){return t.transition.build(this.driver,t.element,t.fromState.value,t.toState.value,n,r,t.fromState.options,t.toState.options,e,i)},t.prototype.destroyInnerAnimations=function(t){var e=this,n=this.driver.query(t,".ng-trigger",!0);n.forEach(function(t){return e.destroyActiveAnimationsForElement(t)}),0!=this.playersByQueriedElement.size&&(n=this.driver.query(t,".ng-animating",!0)).forEach(function(t){return e.finishActiveQueriedAnimationOnElement(t)})},t.prototype.destroyActiveAnimationsForElement=function(t){var e=this.playersByElement.get(t);e&&e.forEach(function(t){t.queued?t.markedForDestroy=!0:t.destroy()})},t.prototype.finishActiveQueriedAnimationOnElement=function(t){var e=this.playersByQueriedElement.get(t);e&&e.forEach(function(t){return t.finish()})},t.prototype.whenRenderingDone=function(){var t=this;return new Promise(function(e){if(t.players.length)return l(t.players).onDone(function(){return e()});e()})},t.prototype.processLeaveNode=function(t){var e=this,n=t[Pt];if(n&&n.setForRemoval){if(t[Pt]=Et,n.namespaceId){this.destroyInnerAnimations(t);var r=this._fetchNamespace(n.namespaceId);r&&r.clearElementCache(t)}this._onRemovalComplete(t,n.setForRemoval)}this.driver.matchesElement(t,".ng-animate-disabled")&&this.markElementAsDisabled(t,!1),this.driver.query(t,".ng-animate-disabled",!0).forEach(function(n){e.markElementAsDisabled(t,!1)})},t.prototype.flush=function(t){var e=this;void 0===t&&(t=-1);var n=[];if(this.newHostElements.size&&(this.newHostElements.forEach(function(t,n){return e._balanceNamespaceList(t,n)}),this.newHostElements.clear()),this.totalAnimations&&this.collectedEnterElements.length)for(var r=0;r<this.collectedEnterElements.length;r++)Ht(this.collectedEnterElements[r],"ng-star-inserted");if(this._namespaceList.length&&(this.totalQueuedPlayers||this.collectedLeaveElements.length)){var i=[];try{n=this._flushAnimations(i,t)}finally{for(r=0;r<i.length;r++)i[r]()}}else for(r=0;r<this.collectedLeaveElements.length;r++)this.processLeaveNode(this.collectedLeaveElements[r]);if(this.totalQueuedPlayers=0,this.collectedEnterElements.length=0,this.collectedLeaveElements.length=0,this._flushFns.forEach(function(t){return t()}),this._flushFns=[],this._whenQuietFns.length){var o=this._whenQuietFns;this._whenQuietFns=[],n.length?l(n).onDone(function(){o.forEach(function(t){return t()})}):o.forEach(function(t){return t()})}},t.prototype.reportError=function(t){throw new Error("Unable to process animations due to the following failed trigger transitions\n "+t.join("\n"))},t.prototype._flushAnimations=function(t,e){var n=this,o=new at,a=[],u=new Map,s=[],c=new Map,f=new Map,d=new Map,p=new Set;this.disabledNodes.forEach(function(t){p.add(t);for(var e=n.driver.query(t,".ng-animate-queued",!0),r=0;r<e.length;r++)p.add(e[r])});var m=this.bodyNode,g=Array.from(this.statesByElement.keys()),b=Vt(g,this.collectedEnterElements),y=new Map,v=0;b.forEach(function(t,e){var n="ng-enter"+v++;y.set(e,n),t.forEach(function(t){return Ht(t,n)})});for(var _=[],w=new Set,x=new Set,S=0;S<this.collectedLeaveElements.length;S++)(H=(B=this.collectedLeaveElements[S])[Pt])&&H.setForRemoval&&(_.push(B),w.add(B),H.hasAnimation?this.driver.query(B,".ng-star-inserted",!0).forEach(function(t){return w.add(t)}):x.add(B));var C=new Map,k=Vt(g,Array.from(w));k.forEach(function(t,e){var n="ng-leave"+v++;C.set(e,n),t.forEach(function(t){return Ht(t,n)})}),t.push(function(){b.forEach(function(t,e){var n=y.get(e);t.forEach(function(t){return Gt(t,n)})}),k.forEach(function(t,e){var n=C.get(e);t.forEach(function(t){return Gt(t,n)})}),_.forEach(function(t){n.processLeaveNode(t)})});for(var R=[],j=[],O=this._namespaceList.length-1;O>=0;O--)this._namespaceList[O].drainQueuedTransitions(e).forEach(function(t){var e=t.player,r=t.element;if(R.push(e),n.collectedEnterElements.length){var i=r[Pt];if(i&&i.setForMove)return void e.destroy()}var l=!m||!n.driver.containsElement(m,r),u=C.get(r),p=y.get(r),g=n._buildInstruction(t,o,p,u,l);if(g.errors&&g.errors.length)j.push(g);else{if(l)return e.onStart(function(){return L(r,g.fromStyles)}),e.onDestroy(function(){return N(r,g.toStyles)}),void a.push(e);if(t.isFallbackTransition)return e.onStart(function(){return L(r,g.fromStyles)}),e.onDestroy(function(){return N(r,g.toStyles)}),void a.push(e);g.timelines.forEach(function(t){return t.stretchStartingKeyframe=!0}),o.append(r,g.timelines),s.push({instruction:g,player:e,element:r}),g.queriedElements.forEach(function(t){return h(c,t,[]).push(e)}),g.preStyleProps.forEach(function(t,e){var n=Object.keys(t);if(n.length){var r=f.get(e);r||f.set(e,r=new Set),n.forEach(function(t){return r.add(t)})}}),g.postStyleProps.forEach(function(t,e){var n=Object.keys(t),r=d.get(e);r||d.set(e,r=new Set),n.forEach(function(t){return r.add(t)})})}});if(j.length){var E=[];j.forEach(function(t){E.push("@"+t.triggerName+" has failed due to:\n"),t.errors.forEach(function(t){return E.push("- "+t+"\n")})}),R.forEach(function(t){return t.destroy()}),this.reportError(E)}var T=new Map,P=new Map;s.forEach(function(t){var e=t.element;o.has(e)&&(P.set(e,e),n._beforeAnimationBuild(t.player.namespaceId,t.instruction,T))}),a.forEach(function(t){var e=t.element;n._getPreviousPlayers(e,!1,t.namespaceId,t.triggerName,null).forEach(function(t){h(T,e,[]).push(t),t.destroy()})});var I=_.filter(function(t){return qt(t,f,d)}),A=new Map;zt(A,this.driver,x,d,i.a).forEach(function(t){qt(t,f,d)&&I.push(t)});var M=new Map;b.forEach(function(t,e){zt(M,n.driver,new Set(t),f,i.o)}),I.forEach(function(t){var e=A.get(t),n=M.get(t);A.set(t,Object(r.a)({},e,n))});var D=[],F=[],z={};s.forEach(function(t){var e=t.element,r=t.player,i=t.instruction;if(o.has(e)){if(p.has(e))return r.onDestroy(function(){return N(e,i.toStyles)}),r.disabled=!0,r.overrideTotalTime(i.totalTime),void a.push(r);var s=z;if(P.size>1){for(var c=e,h=[];c=c.parentNode;){var f=P.get(c);if(f){s=f;break}h.push(c)}h.forEach(function(t){return P.set(t,s)})}var d=n._buildAnimation(r.namespaceId,i,T,u,M,A);if(r.setRealPlayer(d),s===z)D.push(r);else{var m=n.playersByElement.get(s);m&&m.length&&(r.parentPlayer=l(m)),a.push(r)}}else L(e,i.fromStyles),r.onDestroy(function(){return N(e,i.toStyles)}),F.push(r),p.has(e)&&a.push(r)}),F.forEach(function(t){var e=u.get(t.element);if(e&&e.length){var n=l(e);t.setRealPlayer(n)}}),a.forEach(function(t){t.parentPlayer?t.syncPlayerEvents(t.parentPlayer):t.destroy()});for(var V=0;V<_.length;V++){var B,H=(B=_[V])[Pt];if(Gt(B,"ng-leave"),!H||!H.hasAnimation){var G=[];if(c.size){var U=c.get(B);U&&U.length&&G.push.apply(G,Object(r.d)(U));for(var q=this.driver.query(B,".ng-animating",!0),Q=0;Q<q.length;Q++){var W=c.get(q[Q]);W&&W.length&&G.push.apply(G,Object(r.d)(W))}}var Y=G.filter(function(t){return!t.destroyed});Y.length?Ut(this,B,Y):this.processLeaveNode(B)}}return _.length=0,D.forEach(function(t){n.players.push(t),t.onDone(function(){t.destroy();var e=n.players.indexOf(t);n.players.splice(e,1)}),t.play()}),D},t.prototype.elementContainsData=function(t,e){var n=!1,r=e[Pt];return r&&r.setForRemoval&&(n=!0),this.playersByElement.has(e)&&(n=!0),this.playersByQueriedElement.has(e)&&(n=!0),this.statesByElement.has(e)&&(n=!0),this._fetchNamespace(t).elementContainsData(e)||n},t.prototype.afterFlush=function(t){this._flushFns.push(t)},t.prototype.afterFlushAnimationsDone=function(t){this._whenQuietFns.push(t)},t.prototype._getPreviousPlayers=function(t,e,n,r,i){var o=[];if(e){var l=this.playersByQueriedElement.get(t);l&&(o=l)}else{var a=this.playersByElement.get(t);if(a){var u=!i||"void"==i;a.forEach(function(t){t.queued||(u||t.triggerName==r)&&o.push(t)})}}return(n||r)&&(o=o.filter(function(t){return!(n&&n!=t.namespaceId||r&&r!=t.triggerName)})),o},t.prototype._beforeAnimationBuild=function(t,e,n){var i,o,l=e.element,a=e.isRemovalTransition?void 0:t,u=e.isRemovalTransition?void 0:e.triggerName,s=function(t){var r=t.element,i=r!==l,o=h(n,r,[]);c._getPreviousPlayers(r,i,a,u,e.toState).forEach(function(t){var e=t.getRealPlayer();e.beforeDestroy&&e.beforeDestroy(),t.destroy(),o.push(t)})},c=this;try{for(var f=Object(r.e)(e.timelines),d=f.next();!d.done;d=f.next())s(d.value)}catch(t){i={error:t}}finally{try{d&&!d.done&&(o=f.return)&&o.call(f)}finally{if(i)throw i.error}}L(l,e.fromStyles)},t.prototype._buildAnimation=function(t,e,n,r,o,u){var s=this,c=e.triggerName,f=e.element,d=[],p=new Set,m=new Set,g=e.timelines.map(function(e){var l=e.element;p.add(l);var h=l[Pt];if(h&&h.removedBeforeQueried)return new i.d(e.duration,e.delay);var g,b,y=l!==f,v=(g=(n.get(l)||Ot).map(function(t){return t.getRealPlayer()}),b=[],function t(e,n){for(var r=0;r<e.length;r++){var o=e[r];o instanceof i.n?t(o.players,n):n.push(o)}}(g,b),b).filter(function(t){return!!t.element&&t.element===l}),_=o.get(l),w=u.get(l),x=a(0,s._normalizer,0,e.keyframes,_,w),S=s._buildPlayer(e,x,v);if(e.subTimeline&&r&&m.add(l),y){var C=new Nt(t,c,l);C.setRealPlayer(S),d.push(C)}return S});d.forEach(function(t){h(s.playersByQueriedElement,t.element,[]).push(t),t.onDone(function(){return function(t,e,n){var r;if(t instanceof Map){if(r=t.get(e)){if(r.length){var i=r.indexOf(n);r.splice(i,1)}0==r.length&&t.delete(e)}}else(r=t[e])&&(r.length&&(i=r.indexOf(n),r.splice(i,1)),0==r.length&&delete t[e]);return r}(s.playersByQueriedElement,t.element,t)})}),p.forEach(function(t){return Ht(t,"ng-animating")});var b=l(g);return b.onDestroy(function(){p.forEach(function(t){return Gt(t,"ng-animating")}),N(f,e.toStyles)}),m.forEach(function(t){h(r,t,[]).push(b)}),b},t.prototype._buildPlayer=function(t,e,n){return e.length>0?this.driver.animate(t.element,e,t.duration,t.delay,t.easing,n):new i.d(t.duration,t.delay)},t}(),Nt=function(){function t(t,e,n){this.namespaceId=t,this.triggerName=e,this.element=n,this._player=new i.d,this._containsRealPlayer=!1,this._queuedCallbacks={},this.destroyed=!1,this.markedForDestroy=!1,this.disabled=!1,this.queued=!0,this.totalTime=0}return t.prototype.setRealPlayer=function(t){var e=this;this._containsRealPlayer||(this._player=t,Object.keys(this._queuedCallbacks).forEach(function(n){e._queuedCallbacks[n].forEach(function(e){return u(t,n,void 0,e)})}),this._queuedCallbacks={},this._containsRealPlayer=!0,this.overrideTotalTime(t.totalTime),this.queued=!1)},t.prototype.getRealPlayer=function(){return this._player},t.prototype.overrideTotalTime=function(t){this.totalTime=t},t.prototype.syncPlayerEvents=function(t){var e=this,n=this._player;n.triggerCallback&&t.onStart(function(){return n.triggerCallback("start")}),t.onDone(function(){return e.finish()}),t.onDestroy(function(){return e.destroy()})},t.prototype._queueEvent=function(t,e){h(this._queuedCallbacks,t,[]).push(e)},t.prototype.onDone=function(t){this.queued&&this._queueEvent("done",t),this._player.onDone(t)},t.prototype.onStart=function(t){this.queued&&this._queueEvent("start",t),this._player.onStart(t)},t.prototype.onDestroy=function(t){this.queued&&this._queueEvent("destroy",t),this._player.onDestroy(t)},t.prototype.init=function(){this._player.init()},t.prototype.hasStarted=function(){return!this.queued&&this._player.hasStarted()},t.prototype.play=function(){!this.queued&&this._player.play()},t.prototype.pause=function(){!this.queued&&this._player.pause()},t.prototype.restart=function(){!this.queued&&this._player.restart()},t.prototype.finish=function(){this._player.finish()},t.prototype.destroy=function(){this.destroyed=!0,this._player.destroy()},t.prototype.reset=function(){!this.queued&&this._player.reset()},t.prototype.setPosition=function(t){this.queued||this._player.setPosition(t)},t.prototype.getPosition=function(){return this.queued?0:this._player.getPosition()},t.prototype.triggerCallback=function(t){var e=this._player;e.triggerCallback&&e.triggerCallback(t)},t}();function Lt(t){return t&&1===t.nodeType}function Ft(t,e){var n=t.style.display;return t.style.display=null!=e?e:"none",n}function zt(t,e,n,r,i){var o=[];n.forEach(function(t){return o.push(Ft(t))});var l=[];r.forEach(function(n,r){var o={};n.forEach(function(t){var n=o[t]=e.computeStyle(r,t,i);n&&0!=n.length||(r[Pt]=Tt,l.push(r))}),t.set(r,o)});var a=0;return n.forEach(function(t){return Ft(t,o[a++])}),l}function Vt(t,e){var n=new Map;if(t.forEach(function(t){return n.set(t,[])}),0==e.length)return n;var r=new Set(e),i=new Map;return e.forEach(function(t){var e=function t(e){if(!e)return 1;var o=i.get(e);if(o)return o;var l=e.parentNode;return o=n.has(l)?l:r.has(l)?1:t(l),i.set(e,o),o}(t);1!==e&&n.get(e).push(t)}),n}var Bt="$$classes";function Ht(t,e){if(t.classList)t.classList.add(e);else{var n=t[Bt];n||(n=t[Bt]={}),n[e]=!0}}function Gt(t,e){if(t.classList)t.classList.remove(e);else{var n=t[Bt];n&&delete n[e]}}function Ut(t,e,n){l(n).onDone(function(){return t.processLeaveNode(e)})}function qt(t,e,n){var r=n.get(t);if(!r)return!1;var i=e.get(t);return i?r.forEach(function(t){return i.add(t)}):e.set(t,r),n.delete(t),!0}var Qt=function(){function t(t,e,n){var r=this;this.bodyNode=t,this._driver=e,this._triggerCache={},this.onRemovalComplete=function(t,e){},this._transitionEngine=new Dt(t,e,n),this._timelineEngine=new jt(t,e,n),this._transitionEngine.onRemovalComplete=function(t,e){return r.onRemovalComplete(t,e)}}return t.prototype.registerTrigger=function(t,e,n,r,i){var o=t+"-"+r,l=this._triggerCache[o];if(!l){var a=[],u=tt(this._driver,i,a);if(a.length)throw new Error('The animation trigger "'+r+'" has failed to build due to the following errors:\n - '+a.join("\n - "));l=function(t,e){return new Ct(t,e)}(r,u),this._triggerCache[o]=l}this._transitionEngine.registerTrigger(e,r,l)},t.prototype.register=function(t,e){this._transitionEngine.register(t,e)},t.prototype.destroy=function(t,e){this._transitionEngine.destroy(t,e)},t.prototype.onInsert=function(t,e,n,r){this._transitionEngine.insertNode(t,e,n,r)},t.prototype.onRemove=function(t,e,n){this._transitionEngine.removeNode(t,e,n)},t.prototype.disableAnimations=function(t,e){this._transitionEngine.markElementAsDisabled(t,e)},t.prototype.process=function(t,e,n,i){if("@"==n.charAt(0)){var o=Object(r.c)(f(n),2);this._timelineEngine.command(o[0],e,o[1],i)}else this._transitionEngine.trigger(t,e,n,i)},t.prototype.listen=function(t,e,n,i,o){if("@"==n.charAt(0)){var l=Object(r.c)(f(n),2);return this._timelineEngine.listen(l[0],e,l[1],o)}return this._transitionEngine.listen(t,e,n,i,o)},t.prototype.flush=function(t){void 0===t&&(t=-1),this._transitionEngine.flush(t)},Object.defineProperty(t.prototype,"players",{get:function(){return this._transitionEngine.players.concat(this._timelineEngine.players)},enumerable:!0,configurable:!0}),t.prototype.whenRenderingDone=function(){return this._transitionEngine.whenRenderingDone()},t}(),Wt="animation",Yt="animationend",Zt=function(){function t(t,e,n,r,i,o,l){var a=this;this._element=t,this._name=e,this._duration=n,this._delay=r,this._easing=i,this._fillMode=o,this._onDoneFn=l,this._finished=!1,this._destroyed=!1,this._startTime=0,this._position=0,this._eventFn=function(t){return a._handleCallback(t)}}return t.prototype.apply=function(){var t,e,n;e=this._duration+"ms "+this._easing+" "+this._delay+"ms 1 normal "+this._fillMode+" "+this._name,(n=ee(t=this._element,"").trim()).length&&(function(t,e){for(var n=0;n<t.length;n++)","===t.charAt(n)&&0}(n),e=n+", "+e),te(t,"",e),Jt(this._element,this._eventFn,!1),this._startTime=Date.now()},t.prototype.pause=function(){Kt(this._element,this._name,"paused")},t.prototype.resume=function(){Kt(this._element,this._name,"running")},t.prototype.setPosition=function(t){var e=Xt(this._element,this._name);this._position=t*this._duration,te(this._element,"Delay","-"+this._position+"ms",e)},t.prototype.getPosition=function(){return this._position},t.prototype._handleCallback=function(t){var e=t._ngTestManualTimestamp||Date.now(),n=1e3*parseFloat(t.elapsedTime.toFixed(3));t.animationName==this._name&&Math.max(e-this._startTime,0)>=this._delay&&n>=this._duration&&this.finish()},t.prototype.finish=function(){this._finished||(this._finished=!0,this._onDoneFn(),Jt(this._element,this._eventFn,!0))},t.prototype.destroy=function(){var t,e,n,r;this._destroyed||(this._destroyed=!0,this.finish(),e=this._name,(r=$t(n=ee(t=this._element,"").split(","),e))>=0&&(n.splice(r,1),te(t,"",n.join(","))))},t}();function Kt(t,e,n){te(t,"PlayState",n,Xt(t,e))}function Xt(t,e){var n=ee(t,"");return n.indexOf(",")>0?$t(n.split(","),e):$t([n],e)}function $t(t,e){for(var n=0;n<t.length;n++)if(t[n].indexOf(e)>=0)return n;return-1}function Jt(t,e,n){n?t.removeEventListener(Yt,e):t.addEventListener(Yt,e)}function te(t,e,n,r){var i=Wt+e;if(null!=r){var o=t.style[i];if(o.length){var l=o.split(",");l[r]=n,n=l.join(",")}}t.style[i]=n}function ee(t,e){return t.style[Wt+e]}var ne="linear",re=function(){function t(t,e,n,r,i,o,l){this.element=t,this.keyframes=e,this.animationName=n,this._duration=r,this._delay=i,this._finalStyles=l,this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._started=!1,this.currentSnapshot={},this._state=0,this.easing=o||ne,this.totalTime=r+i,this._buildStyler()}return t.prototype.onStart=function(t){this._onStartFns.push(t)},t.prototype.onDone=function(t){this._onDoneFns.push(t)},t.prototype.onDestroy=function(t){this._onDestroyFns.push(t)},t.prototype.destroy=function(){this.init(),this._state>=4||(this._state=4,this._styler.destroy(),this._flushStartFns(),this._flushDoneFns(),this._onDestroyFns.forEach(function(t){return t()}),this._onDestroyFns=[])},t.prototype._flushDoneFns=function(){this._onDoneFns.forEach(function(t){return t()}),this._onDoneFns=[]},t.prototype._flushStartFns=function(){this._onStartFns.forEach(function(t){return t()}),this._onStartFns=[]},t.prototype.finish=function(){this.init(),this._state>=3||(this._state=3,this._styler.finish(),this._flushStartFns(),this._flushDoneFns())},t.prototype.setPosition=function(t){this._styler.setPosition(t)},t.prototype.getPosition=function(){return this._styler.getPosition()},t.prototype.hasStarted=function(){return this._state>=2},t.prototype.init=function(){this._state>=1||(this._state=1,this._styler.apply(),this._delay&&this._styler.pause())},t.prototype.play=function(){this.init(),this.hasStarted()||(this._flushStartFns(),this._state=2),this._styler.resume()},t.prototype.pause=function(){this.init(),this._styler.pause()},t.prototype.restart=function(){this.reset(),this.play()},t.prototype.reset=function(){this._styler.destroy(),this._buildStyler(),this._styler.apply()},t.prototype._buildStyler=function(){var t=this;this._styler=new Zt(this.element,this.animationName,this._duration,this._delay,this.easing,"forwards",function(){return t.finish()})},t.prototype.triggerCallback=function(t){var e="start"==t?this._onStartFns:this._onDoneFns;e.forEach(function(t){return t()}),e.length=0},t.prototype.beforeDestroy=function(){var t=this;this.init();var e={};if(this.hasStarted()){var n=this._state>=3;Object.keys(this._finalStyles).forEach(function(r){"offset"!=r&&(e[r]=n?t._finalStyles[r]:Y(t.element,r))})}this.currentSnapshot=e},t}(),ie=function(t){function e(e,n){var r=t.call(this)||this;return r.element=e,r._startingStyles={},r.__initialized=!1,r._styles=k(n),r}return Object(r.b)(e,t),e.prototype.init=function(){var e=this;!this.__initialized&&this._startingStyles&&(this.__initialized=!0,Object.keys(this._styles).forEach(function(t){e._startingStyles[t]=e.element.style[t]}),t.prototype.init.call(this))},e.prototype.play=function(){var e=this;this._startingStyles&&(this.init(),Object.keys(this._styles).forEach(function(t){return e.element.style.setProperty(t,e._styles[t])}),t.prototype.play.call(this))},e.prototype.destroy=function(){var e=this;this._startingStyles&&(Object.keys(this._startingStyles).forEach(function(t){var n=e._startingStyles[t];n?e.element.style.setProperty(t,n):e.element.style.removeProperty(t)}),this._startingStyles=null,t.prototype.destroy.call(this))},e}(i.d),oe=function(){function t(){this._count=0,this._head=document.querySelector("head"),this._warningIssued=!1}return t.prototype.validateStyleProperty=function(t){return w(t)},t.prototype.matchesElement=function(t,e){return x(t,e)},t.prototype.containsElement=function(t,e){return S(t,e)},t.prototype.query=function(t,e,n){return C(t,e,n)},t.prototype.computeStyle=function(t,e,n){return window.getComputedStyle(t)[e]},t.prototype.buildKeyframeElement=function(t,e,n){var r="@keyframes "+e+" {\n",i="";(n=n.map(function(t){return k(t)})).forEach(function(t){i=" ";var e=parseFloat(t.offset);r+=""+i+100*e+"% {\n",i+=" ",Object.keys(t).forEach(function(e){var n=t[e];switch(e){case"offset":return;case"easing":return void(n&&(r+=i+"animation-timing-function: "+n+";\n"));default:return void(r+=""+i+e+": "+n+";\n")}}),r+=i+"}\n"}),r+="}\n";var o=document.createElement("style");return o.innerHTML=r,o},t.prototype.animate=function(t,e,n,r,i,o,l){void 0===o&&(o=[]),l&&this._notifyFaultyScrubber();var a=o.filter(function(t){return t instanceof re}),u={};q(n,r)&&a.forEach(function(t){var e=t.currentSnapshot;Object.keys(e).forEach(function(t){return u[t]=e[t]})});var s=function(t){var e={};return t&&(Array.isArray(t)?t:[t]).forEach(function(t){Object.keys(t).forEach(function(n){"offset"!=n&&"easing"!=n&&(e[n]=t[n])})}),e}(e=Q(t,e,u));if(0==n)return new ie(t,s);var c="gen_css_kf_"+this._count++,h=this.buildKeyframeElement(t,c,e);document.querySelector("head").appendChild(h);var f=new re(t,e,c,n,r,i,s);return f.onDestroy(function(){var t;(t=h).parentNode.removeChild(t)}),f},t.prototype._notifyFaultyScrubber=function(){this._warningIssued||(console.warn("@angular/animations: please load the web-animations.js polyfill to allow programmatic access...\n","  visit http://bit.ly/IWukam to learn more about using the web-animation-js polyfill."),this._warningIssued=!0)},t}(),le=function(){function t(t,e,n){this.element=t,this.keyframes=e,this.options=n,this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._initialized=!1,this._finished=!1,this._started=!1,this._destroyed=!1,this.time=0,this.parentPlayer=null,this.currentSnapshot={},this._duration=n.duration,this._delay=n.delay||0,this.time=this._duration+this._delay}return t.prototype._onFinish=function(){this._finished||(this._finished=!0,this._onDoneFns.forEach(function(t){return t()}),this._onDoneFns=[])},t.prototype.init=function(){this._buildPlayer(),this._preparePlayerBeforeStart()},t.prototype._buildPlayer=function(){var t=this;if(!this._initialized){this._initialized=!0;var e=this.keyframes;this.domPlayer=this._triggerWebAnimation(this.element,e,this.options),this._finalKeyframe=e.length?e[e.length-1]:{},this.domPlayer.addEventListener("finish",function(){return t._onFinish()})}},t.prototype._preparePlayerBeforeStart=function(){this._delay?this._resetDomPlayerState():this.domPlayer.pause()},t.prototype._triggerWebAnimation=function(t,e,n){return t.animate(e,n)},t.prototype.onStart=function(t){this._onStartFns.push(t)},t.prototype.onDone=function(t){this._onDoneFns.push(t)},t.prototype.onDestroy=function(t){this._onDestroyFns.push(t)},t.prototype.play=function(){this._buildPlayer(),this.hasStarted()||(this._onStartFns.forEach(function(t){return t()}),this._onStartFns=[],this._started=!0),this.domPlayer.play()},t.prototype.pause=function(){this.init(),this.domPlayer.pause()},t.prototype.finish=function(){this.init(),this._onFinish(),this.domPlayer.finish()},t.prototype.reset=function(){this._resetDomPlayerState(),this._destroyed=!1,this._finished=!1,this._started=!1},t.prototype._resetDomPlayerState=function(){this.domPlayer&&this.domPlayer.cancel()},t.prototype.restart=function(){this.reset(),this.play()},t.prototype.hasStarted=function(){return this._started},t.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this._resetDomPlayerState(),this._onFinish(),this._onDestroyFns.forEach(function(t){return t()}),this._onDestroyFns=[])},t.prototype.setPosition=function(t){this.domPlayer.currentTime=t*this.time},t.prototype.getPosition=function(){return this.domPlayer.currentTime/this.time},Object.defineProperty(t.prototype,"totalTime",{get:function(){return this._delay+this._duration},enumerable:!0,configurable:!0}),t.prototype.beforeDestroy=function(){var t=this,e={};this.hasStarted()&&Object.keys(this._finalKeyframe).forEach(function(n){"offset"!=n&&(e[n]=t._finished?t._finalKeyframe[n]:Y(t.element,n))}),this.currentSnapshot=e},t.prototype.triggerCallback=function(t){var e="start"==t?this._onStartFns:this._onDoneFns;e.forEach(function(t){return t()}),e.length=0},t}(),ae=function(){function t(){this._isNativeImpl=/\{\s*\[native\s+code\]\s*\}/.test(se().toString()),this._cssKeyframesDriver=new oe}return t.prototype.validateStyleProperty=function(t){return w(t)},t.prototype.matchesElement=function(t,e){return x(t,e)},t.prototype.containsElement=function(t,e){return S(t,e)},t.prototype.query=function(t,e,n){return C(t,e,n)},t.prototype.computeStyle=function(t,e,n){return window.getComputedStyle(t)[e]},t.prototype.overrideWebAnimationsSupport=function(t){this._isNativeImpl=t},t.prototype.animate=function(t,e,n,r,i,o,l){if(void 0===o&&(o=[]),!l&&!this._isNativeImpl)return this._cssKeyframesDriver.animate(t,e,n,r,i,o);var a={duration:n,delay:r,fill:0==r?"both":"forwards"};i&&(a.easing=i);var u={},s=o.filter(function(t){return t instanceof le});return q(n,r)&&s.forEach(function(t){var e=t.currentSnapshot;Object.keys(e).forEach(function(t){return u[t]=e[t]})}),e=Q(t,e=e.map(function(t){return A(t,!1)}),u),new le(t,e,a)},t}();function ue(){return"function"==typeof se()}function se(){return"undefined"!=typeof window&&void 0!==window.document&&Element.prototype.animate||{}}},OzfB:function(t,e,n){"use strict";n.d(e,"n",function(){return s}),n.d(e,"e",function(){return I}),n.d(e,"f",function(){return x}),n.d(e,"g",function(){return S}),n.d(e,"l",function(){return M}),n.d(e,"a",function(){return h}),n.d(e,"b",function(){return L}),n.d(e,"c",function(){return F}),n.d(e,"d",function(){return k}),n.d(e,"h",function(){return j}),n.d(e,"i",function(){return z}),n.d(e,"k",function(){return T}),n.d(e,"j",function(){return P}),n.d(e,"m",function(){return B}),n.d(e,"o",function(){return G});var r=n("CcnG"),i=n("Ip0R"),o=n("26FU"),l=n("VnD/"),a=n("67Y/"),u=n("mrSG");function s(t,e){return function(){if(Object(i.w)(e)){var n=/\bflex-layout-.+?\b/g;Array.from(t.querySelectorAll("[class*="+c+"]")).forEach(function(t){t.classList.contains(c+"ssr")&&t.parentNode?t.parentNode.removeChild(t):t.className.replace(n,"")})}}}var c="flex-layout-",h=new r.q("Flex Layout token, collect all breakpoints into one provider",{providedIn:"root",factory:function(){return null}}),f=[{alias:"xs",mediaQuery:"(min-width: 0px) and (max-width: 599px)"},{alias:"gt-xs",overlapping:!0,mediaQuery:"(min-width: 600px)"},{alias:"lt-sm",overlapping:!0,mediaQuery:"(max-width: 599px)"},{alias:"sm",mediaQuery:"(min-width: 600px) and (max-width: 959px)"},{alias:"gt-sm",overlapping:!0,mediaQuery:"(min-width: 960px)"},{alias:"lt-md",overlapping:!0,mediaQuery:"(max-width: 959px)"},{alias:"md",mediaQuery:"(min-width: 960px) and (max-width: 1279px)"},{alias:"gt-md",overlapping:!0,mediaQuery:"(min-width: 1280px)"},{alias:"lt-lg",overlapping:!0,mediaQuery:"(max-width: 1279px)"},{alias:"lg",mediaQuery:"(min-width: 1280px) and (max-width: 1919px)"},{alias:"gt-lg",overlapping:!0,mediaQuery:"(min-width: 1920px)"},{alias:"lt-xl",overlapping:!0,mediaQuery:"(max-width: 1920px)"},{alias:"xl",mediaQuery:"(min-width: 1920px) and (max-width: 5000px)"}],d="(orientation: landscape) and (min-width: 960px) and (max-width: 1279px)",p="(orientation: portrait) and (min-width: 600px) and (max-width: 839px)",m="(orientation: portrait) and (min-width: 840px)",g="(orientation: landscape) and (min-width: 1280px)",b={HANDSET:"(orientation: portrait) and (max-width: 599px), (orientation: landscape) and (max-width: 959px)",TABLET:p+" , "+d,WEB:m+", "+g+" ",HANDSET_PORTRAIT:"(orientation: portrait) and (max-width: 599px)",TABLET_PORTRAIT:p+" ",WEB_PORTRAIT:""+m,HANDSET_LANDSCAPE:"(orientation: landscape) and (max-width: 959px)]",TABLET_LANDSCAPE:""+d,WEB_LANDSCAPE:""+g},y=[{alias:"handset",mediaQuery:b.HANDSET},{alias:"handset.landscape",mediaQuery:b.HANDSET_LANDSCAPE},{alias:"handset.portrait",mediaQuery:b.HANDSET_PORTRAIT},{alias:"tablet",mediaQuery:b.TABLET},{alias:"tablet.landscape",mediaQuery:b.TABLET},{alias:"tablet.portrait",mediaQuery:b.TABLET_PORTRAIT},{alias:"web",mediaQuery:b.WEB,overlapping:!0},{alias:"web.landscape",mediaQuery:b.WEB_LANDSCAPE,overlapping:!0},{alias:"web.portrait",mediaQuery:b.WEB_PORTRAIT,overlapping:!0}];function v(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n];if(null==t)throw TypeError("Cannot convert undefined or null to object");for(var r=0,i=e;r<i.length;r++){var o=i[r];if(null!=o)for(var l in o)o.hasOwnProperty(l)&&(t[l]=o[l])}return t}var _=/(\.|-|_)/g;function w(t){var e=t.length>0?t.charAt(0):"",n=t.length>1?t.slice(1):"";return e.toUpperCase()+n}var x={addFlexToParent:!0,addOrientationBps:!1,disableDefaultBps:!1,disableVendorPrefixes:!1,serverLoaded:!1,useColumnBasisZero:!0},S=new r.q("Flex Layout token, config options for the library",{providedIn:"root",factory:function(){return x}}),C=new r.q("Token (@angular/flex-layout) Breakpoints",{providedIn:"root",factory:function(){var t=Object(r.Y)(h),e=Object(r.Y)(S),n=[].concat.apply([],(t||[]).map(function(t){return Array.isArray(t)?t:[t]}));return function(t,e){void 0===e&&(e=[]);var n,r={};return t.forEach(function(t){r[t.alias]=t}),e.forEach(function(t){r[t.alias]?v(r[t.alias],t):r[t.alias]=t}),(n=Object.keys(r).map(function(t){return r[t]})).forEach(function(t){t.suffix||(t.suffix=t.alias.replace(_,"|").split("|").map(w).join(""),t.overlapping=!!t.overlapping)}),n}((e.disableDefaultBps?[]:f).concat(e.addOrientationBps?y:[]),n)}}),k=function(){function t(t){this._registry=t}return Object.defineProperty(t.prototype,"items",{get:function(){return this._registry.slice()},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"sortedItems",{get:function(){var t=this._registry.filter(function(t){return!0===t.overlapping}),e=this._registry.filter(function(t){return!0!==t.overlapping});return t.concat(e)},enumerable:!0,configurable:!0}),t.prototype.findByAlias=function(t){return this._registry.find(function(e){return e.alias==t})||null},t.prototype.findByQuery=function(t){return this._registry.find(function(e){return e.mediaQuery==t})||null},Object.defineProperty(t.prototype,"overlappings",{get:function(){return this._registry.filter(function(t){return 1==t.overlapping})},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"aliases",{get:function(){return this._registry.map(function(t){return t.alias})},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"suffixes",{get:function(){return this._registry.map(function(t){return t.suffix?t.suffix:""})},enumerable:!0,configurable:!0}),t.ngInjectableDef=Object(r.U)({factory:function(){return new t(Object(r.Y)(C))},token:t,providedIn:"root"}),t}(),R=function(){function t(t,e,n,r){void 0===t&&(t=!1),void 0===e&&(e="all"),void 0===n&&(n=""),void 0===r&&(r=""),this.matches=t,this.mediaQuery=e,this.mqAlias=n,this.suffix=r}return t.prototype.clone=function(){return new t(this.matches,this.mediaQuery,this.mqAlias,this.suffix)},t}(),j=function(){function t(t,e,n){this._zone=t,this._platformId=e,this._document=n,this._registry=new Map,this._source=new o.a(new R(!0)),this._observable$=this._source.asObservable()}return t.prototype.isActive=function(t){var e=this._registry.get(t);return!!e&&e.matches},t.prototype.observe=function(t){return t&&this.registerQuery(t),this._observable$.pipe(Object(l.a)(function(e){return!t||e.mediaQuery===t}))},t.prototype.registerQuery=function(t){var e=this,n=function(t){return void 0===t?[]:"string"==typeof t?[t]:(e={},t.filter(function(t){return!e.hasOwnProperty(t)&&(e[t]=!0)}));var e}(t);n.length>0&&(this._prepareQueryCSS(n,this._document),n.forEach(function(t){var n=e._registry.get(t),r=function(n){e._zone.run(function(){var r=new R(n.matches,t);e._source.next(r)})};n||((n=e._buildMQL(t)).addListener(r),e._registry.set(t,n)),n.matches&&r(n)}))},t.prototype._buildMQL=function(t){return Object(i.w)(this._platformId)&&window.matchMedia("all").addListener?window.matchMedia(t):{matches:"all"===t||""===t,media:t,addListener:function(){},removeListener:function(){}}},t.prototype._prepareQueryCSS=function(t,e){var n=t.filter(function(t){return!O[t]});if(n.length>0){var r=n.join(", ");try{var i=e.createElement("style");i.setAttribute("type","text/css"),i.styleSheet||i.appendChild(e.createTextNode("\n/*\n  @angular/flex-layout - workaround for possible browser quirk with mediaQuery listeners\n  see http://bit.ly/2sd4HMP\n*/\n@media "+r+" {.fx-query-test{ }}\n")),e.head.appendChild(i),n.forEach(function(t){return O[t]=i})}catch(t){console.error(t)}}},t.ngInjectableDef=Object(r.U)({factory:function(){return new t(Object(r.Y)(r.z),Object(r.Y)(r.B),Object(r.Y)(i.c))},token:t,providedIn:"root"}),t}(),O={};function E(t,e){return v(t,e?{mqAlias:e.alias,suffix:e.suffix}:{})}var T=function(){},P=function(){function t(t,e){this.breakpoints=t,this.mediaWatcher=e,this.filterOverlaps=!0,this._registerBreakPoints(),this.observable$=this._buildObservable()}return t.prototype.isActive=function(t){var e=this._toMediaQuery(t);return this.mediaWatcher.isActive(e)},t.prototype.subscribe=function(t,e,n){return this.observable$.subscribe(t,e,n)},t.prototype.asObservable=function(){return this.observable$},t.prototype._registerBreakPoints=function(){var t=this.breakpoints.sortedItems.map(function(t){return t.mediaQuery});this.mediaWatcher.registerQuery(t)},t.prototype._buildObservable=function(){var t=this,e=this;return this.mediaWatcher.observe().pipe(Object(l.a)(function(t){return!0===t.matches}),Object(l.a)(function(n){var r=t.breakpoints.findByQuery(n.mediaQuery);return!r||!(e.filterOverlaps&&r.overlapping)}),Object(a.a)(function(e){return E(e,t._findByQuery(e.mediaQuery))}))},t.prototype._findByAlias=function(t){return this.breakpoints.findByAlias(t)},t.prototype._findByQuery=function(t){return this.breakpoints.findByQuery(t)},t.prototype._toMediaQuery=function(t){var e=this._findByAlias(t)||this._findByQuery(t);return e?e.mediaQuery:t},t.ngInjectableDef=Object(r.U)({factory:function(){return new t(Object(r.Y)(k),Object(r.Y)(j))},token:t,providedIn:"root"}),t}(),I=function(){},A=function(){function t(){this.stylesheet=new Map}return t.prototype.addStyleToElement=function(t,e,n){var r=this.stylesheet.get(t);r?r.set(e,n):this.stylesheet.set(t,new Map([[e,n]]))},t.prototype.clearStyles=function(){this.stylesheet.clear()},t.prototype.getStyleForElement=function(t,e){var n=this.stylesheet.get(t),r="";if(n){var i=n.get(e);"number"!=typeof i&&"string"!=typeof i||(r=i+"")}return r},t.ngInjectableDef=Object(r.U)({factory:function(){return new t},token:t,providedIn:"root"}),t}(),M=new r.q("FlexLayoutServerLoaded",{providedIn:"root",factory:function(){return!1}}),D=["row","column","row-reverse","column-reverse"],N=function(){function t(t,e,n){this._options=t,this._mediaMonitor=e,this._onMediaChanges=n,this._subscribers=[],this._registryMap=this._buildRegistryMap(),this._subscribers=this._configureChangeObservers()}return Object.defineProperty(t.prototype,"registryFromLargest",{get:function(){return this._registryMap.slice().reverse()},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mediaMonitor",{get:function(){return this._mediaMonitor},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"activatedInputKey",{get:function(){return this._activatedInputKey||this._options.baseKey},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"activatedInput",{get:function(){var t=this.activatedInputKey;return this.hasKeyValue(t)?this._lookupKeyValue(t):this._options.defaultValue},enumerable:!0,configurable:!0}),t.prototype.hasKeyValue=function(t){return void 0!==this._options.inputKeys[t]},t.prototype.destroy=function(){this._subscribers.forEach(function(t){t.unsubscribe()}),this._subscribers=[]},t.prototype._configureChangeObservers=function(){var t=this,e=[];return this._registryMap.forEach(function(n){t._keyInUse(n.key)&&e.push(t.mediaMonitor.observe(n.alias).pipe(Object(a.a)(function(e){return(e=e.clone()).property=t._options.baseKey,e})).subscribe(function(e){t._onMonitorEvents(e)}))}),e},t.prototype._buildRegistryMap=function(){var t=this;return this.mediaMonitor.breakpoints.map(function(e){return v({},e,{baseKey:t._options.baseKey,key:t._options.baseKey+e.suffix})}).filter(function(e){return t._keyInUse(e.key)})},t.prototype._onMonitorEvents=function(t){t.property==this._options.baseKey&&(t.value=this._calculateActivatedValue(t),this._onMediaChanges(t))},t.prototype._keyInUse=function(t){return void 0!==this._lookupKeyValue(t)},t.prototype._calculateActivatedValue=function(t){var e=this._options.baseKey+t.suffix,n=this._activatedInputKey;return this._activatedInputKey=this._validateInputKey(n=t.matches?e:n==e?"":n),this.activatedInput},t.prototype._validateInputKey=function(t){var e=this,n=function(t){return!e._keyInUse(t)};return n(t)&&this.mediaMonitor.activeOverlaps.some(function(r){var i=e._options.baseKey+r.suffix;return!n(i)&&(t=i,!0)}),t},t.prototype._lookupKeyValue=function(t){return this._options.inputKeys[t]},t}(),L=function(){function t(t,e,n){this._mediaMonitor=t,this._elementRef=e,this._styler=n,this._inputMap={},this._hasInitialized=!1}return Object.defineProperty(t.prototype,"hasMediaQueryListener",{get:function(){return!!this._mqActivation},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"activatedValue",{get:function(){return this._mqActivation?this._mqActivation.activatedInput:void 0},set:function(t){var e,n="baseKey";this._mqActivation&&(e=this._inputMap[n=this._mqActivation.activatedInputKey],this._inputMap[n]=t);var i,o=new r.J(e,t,!1);this.ngOnChanges(((i={})[n]=o,i))},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"parentElement",{get:function(){return this._elementRef.nativeElement.parentNode},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"nativeElement",{get:function(){return this._elementRef.nativeElement},enumerable:!0,configurable:!0}),t.prototype._queryInput=function(t){return this._inputMap[t]},t.prototype.ngOnInit=function(){this._display=this._getDisplayStyle(),this._hasInitialized=!0},t.prototype.ngOnChanges=function(t){throw new Error("BaseDirective::ngOnChanges should be overridden in subclass: "+t)},t.prototype.ngOnDestroy=function(){this._mqActivation&&this._mqActivation.destroy(),delete this._mediaMonitor},t.prototype._getDefaultVal=function(t,e){var n=this._queryInput(t);return void 0!==n&&null!==n&&""!==n?n:e},t.prototype._getDisplayStyle=function(t){return void 0===t&&(t=this.nativeElement),this._styler.lookupStyle(t,"display")},t.prototype._getAttributeValue=function(t,e){return void 0===e&&(e=this.nativeElement),this._styler.lookupAttributeValue(e,t)},t.prototype._getFlexFlowDirection=function(t,e){void 0===e&&(e=!1);var n,r="row";if(t&&(r=(n=this._styler.getFlowDirection(t))[0],!n[1]&&e)){var i=function(t){var e,n,r=function(t){var e=(t=t?t.toLowerCase():"").split(" "),n=e[0],r=e[1],i=e[2];return D.find(function(t){return t===n})||(n=D[0]),"inline"===r&&(r="inline"!==i?i:"",i="inline"),[n,function(t){if(t)switch(t.toLowerCase()){case"reverse":case"wrap-reverse":case"reverse-wrap":t="wrap-reverse";break;case"no":case"none":case"nowrap":t="nowrap";break;default:t="wrap"}return t}(r),!!i]}(t);return n=r[2],void 0===(e=r[1])&&(e=null),void 0===n&&(n=!1),{display:n?"inline-flex":"flex","box-sizing":"border-box","flex-direction":r[0],"flex-wrap":e||null}}(r);this._styler.applyStyleToElements(i,[t])}return r.trim()||"row"},t.prototype._applyStyleToElement=function(t,e,n){void 0===n&&(n=this.nativeElement),this._styler.applyStyleToElement(n,t,e)},t.prototype._applyStyleToElements=function(t,e){this._styler.applyStyleToElements(t,e)},t.prototype._cacheInput=function(t,e){if("object"==typeof e)for(var n in e)this._inputMap[n]=e[n];else t&&(this._inputMap[t]=e)},t.prototype._listenForMediaQueryChanges=function(t,e,n){if(!this._mqActivation){var r=new function(t,e,n){this.baseKey=t,this.defaultValue=e,this.inputKeys=n}(t,e,this._inputMap);this._mqActivation=new N(r,this._mediaMonitor,function(t){return n(t)})}return this._mqActivation},Object.defineProperty(t.prototype,"childrenNodes",{get:function(){for(var t=this.nativeElement.children,e=[],n=t.length;n--;)e[n]=t[n];return e},enumerable:!0,configurable:!0}),t.prototype.hasResponsiveAPI=function(t){return Object.keys(this._inputMap).length-(this._inputMap[t]?1:0)>0},t.prototype.hasKeyValue=function(t){return this._mqActivation.hasKeyValue(t)},Object.defineProperty(t.prototype,"hasInitialized",{get:function(){return this._hasInitialized},enumerable:!0,configurable:!0}),t}(),F=function(t){function e(e,n,r,i){var o=t.call(this,n,r,i)||this;return o._baseKey=e,o._mediaMonitor=n,o._elementRef=r,o._styler=i,o}return Object(u.b)(e,t),Object.defineProperty(e.prototype,"activeKey",{get:function(){var t=this._mqActivation,e=t?t.activatedInputKey:this._baseKey;return"class"===e?"klazz":e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"inputMap",{get:function(){return this._inputMap},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"mqActivation",{get:function(){return this._mqActivation},enumerable:!0,configurable:!0}),e.prototype.hasResponsiveAPI=function(){return t.prototype.hasResponsiveAPI.call(this,this._baseKey)},e.prototype.queryInput=function(t){return t?this._queryInput(t):void 0},e.prototype.cacheInput=function(t,e,n){if(void 0===n&&(n=!1),n)this._cacheInputRaw(t,e);else if(Array.isArray(e))this._cacheInputArray(t,e);else if("object"==typeof e)this._cacheInputObject(t,e);else{if("string"!=typeof e)throw new Error("Invalid class value '"+t+"' provided. Did you want to cache the raw value?");this._cacheInputString(t,e)}},e.prototype.listenForMediaQueryChanges=function(t,e,n){return this._listenForMediaQueryChanges(t,e,n)},e.prototype._cacheInputRaw=function(t,e){t&&(this._inputMap[t]=e)},e.prototype._cacheInputArray=function(t,e){void 0===t&&(t=""),this._inputMap[t]=e?e.join(" "):""},e.prototype._cacheInputObject=function(t,e){void 0===t&&(t="");var n=[];if(e)for(var r in e)e[r]&&n.push(r);this._inputMap[t]=n.join(" ")},e.prototype._cacheInputString=function(t,e){void 0===t&&(t=""),this._inputMap[t]=e},e}(L),z=function(){function t(t,e){this._breakpoints=t,this._matchMedia=e,this._registerBreakpoints()}return Object.defineProperty(t.prototype,"breakpoints",{get:function(){return this._breakpoints.items.slice()},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"activeOverlaps",{get:function(){var t=this;return this._breakpoints.overlappings.reverse().filter(function(e){return t._matchMedia.isActive(e.mediaQuery)})},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"active",{get:function(){var t=this,e=null;this.breakpoints.reverse().forEach(function(n){""!==n.alias&&!e&&t._matchMedia.isActive(n.mediaQuery)&&(e=n)});var n=this.breakpoints[0];return e||(this._matchMedia.isActive(n.mediaQuery)?n:null)},enumerable:!0,configurable:!0}),t.prototype.isActive=function(t){var e=this._breakpoints.findByAlias(t)||this._breakpoints.findByQuery(t);return this._matchMedia.isActive(e?e.mediaQuery:t)},t.prototype.observe=function(t){var e=this._breakpoints.findByAlias(t||"")||this._breakpoints.findByQuery(t||"");return this._matchMedia.observe(e?e.mediaQuery:t).pipe(Object(a.a)(function(t){return E(t,e)}),Object(l.a)(function(t){return!e||""!==t.mqAlias}))},t.prototype._registerBreakpoints=function(){var t=this._breakpoints.sortedItems.map(function(t){return t.mediaQuery});this._matchMedia.registerQuery(t)},t.ngInjectableDef=Object(r.U)({factory:function(){return new t(Object(r.Y)(k),Object(r.Y)(j))},token:t,providedIn:"root"}),t}();function V(t){for(var e in t){var n=t[e]||"";switch(e){case"display":t.display="flex"===n?["-webkit-flex","flex"]:"inline-flex"===n?["-webkit-inline-flex","inline-flex"]:n;break;case"align-items":case"align-self":case"align-content":case"flex":case"flex-basis":case"flex-flow":case"flex-grow":case"flex-shrink":case"flex-wrap":case"justify-content":t["-webkit-"+e]=n;break;case"flex-direction":t["-webkit-flex-direction"]=n=n||"row",t["flex-direction"]=n;break;case"order":t.order=t["-webkit-"+e]=isNaN(n)?"0":n}}return t}var B=function(){function t(t,e,n,r){this._serverStylesheet=t,this._serverModuleLoaded=e,this._platformId=n,this.layoutConfig=r}return t.prototype.applyStyleToElement=function(t,e,n){var r={};"string"==typeof e&&(r[e]=n,e=r),r=this.layoutConfig.disableVendorPrefixes?e:V(e),this._applyMultiValueStyleToElement(r,t)},t.prototype.applyStyleToElements=function(t,e){var n=this;void 0===e&&(e=[]);var r=this.layoutConfig.disableVendorPrefixes?t:V(t);e.forEach(function(t){n._applyMultiValueStyleToElement(r,t)})},t.prototype.getFlowDirection=function(t){var e=this.lookupStyle(t,"flex-direction");e===H&&(e="");var n=this.lookupInlineStyle(t,"flex-direction")||Object(i.x)(this._platformId)&&this._serverModuleLoaded?e:"";return[e||"row",n]},t.prototype.lookupAttributeValue=function(t,e){return t.getAttribute(e)||""},t.prototype.lookupInlineStyle=function(t,e){return Object(i.w)(this._platformId)?t.style[e]:this._getServerStyle(t,e)},t.prototype.lookupStyle=function(t,e,n){void 0===n&&(n=!1);var r="";return t&&((r=this.lookupInlineStyle(t,e))||(Object(i.w)(this._platformId)?n||(r=getComputedStyle(t).getPropertyValue(e)):this._serverModuleLoaded&&(r=this._serverStylesheet.getStyleForElement(t,e)))),r?r.trim():H},t.prototype._applyMultiValueStyleToElement=function(t,e){var n=this;Object.keys(t).sort().forEach(function(r){var o=Array.isArray(t[r])?t[r]:[t[r]];o.sort();for(var l=0,a=o;l<a.length;l++){var u=a[l];Object(i.w)(n._platformId)||!n._serverModuleLoaded?Object(i.w)(n._platformId)?e.style.setProperty(r,u):n._setServerStyle(e,r,u):n._serverStylesheet.addStyleToElement(e,r,u)}})},t.prototype._setServerStyle=function(t,e,n){e=e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase();var r=this._readStyleAttribute(t);r[e]=n||"",this._writeStyleAttribute(t,r)},t.prototype._getServerStyle=function(t,e){return this._readStyleAttribute(t)[e]||""},t.prototype._readStyleAttribute=function(t){var e={},n=t.getAttribute("style");if(n)for(var r=n.split(/;+/g),i=0;i<r.length;i++){var o=r[i].trim();if(o.length>0){var l=o.indexOf(":");if(-1===l)throw new Error("Invalid CSS style: "+o);e[o.substr(0,l).trim()]=o.substr(l+1).trim()}}return e},t.prototype._writeStyleAttribute=function(t,e){var n="";for(var r in e)e[r]&&(n+=r+":"+e[r]+";");t.setAttribute("style",n)},t.ngInjectableDef=Object(r.U)({factory:function(){return new t(Object(r.Y)(A,8),Object(r.Y)(M,8),Object(r.Y)(r.B),Object(r.Y)(S))},token:t,providedIn:"root"}),t}(),H="block";function G(t,e,n){void 0===e&&(e="1"),void 0===n&&(n="1");var r=[e,n,t],i=t.indexOf("calc");if(i>0)r[2]=U(t.substring(i).trim()),2==(o=t.substr(0,i).trim().split(" ")).length&&(r[0]=o[0],r[1]=o[1]);else if(0==i)r[2]=U(t.trim());else{var o;r=3===(o=t.split(" ")).length?o:[e,n,t]}return r}function U(t){return t.replace(/[\s]/g,"").replace(/[\/\*\+\-]/g," $& ")}},P6uZ:function(t,e,n){"use strict";n.d(e,"a",function(){return s});var r=n("3fWJ"),i=n("VnD/"),o=n("t9fZ"),l=n("HJBe"),a=n("tNVB"),u=n("mChF");function s(t,e){var n=arguments.length>=2;return function(s){return s.pipe(t?Object(i.a)(function(e,n){return t(e,n,s)}):u.a,Object(o.a)(1),n?Object(l.a)(e):Object(a.a)(function(){return new r.a}))}}},PHGO:function(t,e,n){"use strict";n.d(e,"a",function(){return i}),n.d(e,"b",function(){return o});var r=n("9Asj"),i=(n("QtPd"),function(){function t(t,e){this.refman=t,this.bottomSheet=e,this.testString="A",this.refmanservice=t,this.ref=r.b}return t.prototype.openRefBottomSheet=function(){this.refsheetref=this.bottomSheet.open(o),this.refsheetref.instance.ref=this.ref},t.prototype.ngOnInit=function(){var t=this;this.refmanservice.getRefFromShorthand(this.shorthand).subscribe(function(e){t.ref=e},function(t){return console.log(t)})},t}()),o=function(){function t(t){this.bottomSheetRef=t,this.ref=r.b}return t.prototype.openLink=function(t){this.bottomSheetRef.dismiss(),t.preventDefault()},t}()},PU8L:function(t,e,n){"use strict";n.d(e,"a",function(){return i});var r=n("6blF");function i(t){var e=new r.a(function(e){e.next(t),e.complete()});return e._isScalar=!0,e.value=t,e}},Phjn:function(t,e,n){"use strict";n.d(e,"a",function(){return i});var r=n("psW0");function i(t,e){return Object(r.a)(t,e,1)}},Qgas:function(t,e,n){"use strict";n.d(e,"a",function(){return a});var r=n("dC0D"),i=n("AxiF"),o=n("HJBe"),l=n("y3By");function a(t,e){return arguments.length>=2?function(n){return Object(l.a)(Object(r.a)(t,e),Object(i.a)(1),Object(o.a)(e))(n)}:function(e){return Object(l.a)(Object(r.a)(function(e,n,r){return t(e,n,r+1)}),Object(i.a)(1))(e)}}},QtPd:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n("DtyJ"),i=n("LOr+");r.Observable.prototype.debounceTime=i.debounceTime},Rney:function(t,e,n){"use strict";n.d(e,"a",function(){return l});var r=n("T1DM"),i=n("MpAI"),o=n("gI3B");function l(t,e){return void 0===e&&(e=r.a),Object(i.a)(function(){return Object(o.a)(t,e)})}},S1nX:function(t,e,n){"use strict";n.d(e,"a",function(){return a});var r=n("xlPZ"),i=n("yGWI"),o=n("K9Ia");function l(){return new o.a}function a(){return function(t){return Object(i.a)()(Object(r.a)(l)(t))}}},S5XQ:function(t,e,n){"use strict";n.d(e,"a",function(){return i});var r=n("DKTb"),i=function(t){return function(e){return t.then(function(t){e.closed||(e.next(t),e.complete())},function(t){return e.error(t)}).then(null,r.a),e}}},S5bw:function(t,e,n){"use strict";n.d(e,"a",function(){return c});var r=n("mrSG"),i=n("K9Ia"),o=n("zo3G"),l=n("pugT"),a=n("mZXl"),u=n("8g8A"),s=n("uMaO"),c=function(t){function e(e,n,r){void 0===e&&(e=Number.POSITIVE_INFINITY),void 0===n&&(n=Number.POSITIVE_INFINITY);var i=t.call(this)||this;return i.scheduler=r,i._events=[],i._infiniteTimeWindow=!1,i._bufferSize=e<1?1:e,i._windowTime=n<1?1:n,n===Number.POSITIVE_INFINITY?(i._infiniteTimeWindow=!0,i.next=i.nextInfiniteTimeWindow):i.next=i.nextTimeWindow,i}return r.b(e,t),e.prototype.nextInfiniteTimeWindow=function(e){var n=this._events;n.push(e),n.length>this._bufferSize&&n.shift(),t.prototype.next.call(this,e)},e.prototype.nextTimeWindow=function(e){this._events.push(new h(this._getNow(),e)),this._trimBufferThenGetEvents(),t.prototype.next.call(this,e)},e.prototype._subscribe=function(t){var e,n=this._infiniteTimeWindow,r=n?this._events:this._trimBufferThenGetEvents(),i=this.scheduler,o=r.length;if(this.closed)throw new u.a;if(this.isStopped||this.hasError?e=l.a.EMPTY:(this.observers.push(t),e=new s.a(this,t)),i&&t.add(t=new a.a(t,i)),n)for(var c=0;c<o&&!t.closed;c++)t.next(r[c]);else for(c=0;c<o&&!t.closed;c++)t.next(r[c].value);return this.hasError?t.error(this.thrownError):this.isStopped&&t.complete(),e},e.prototype._getNow=function(){return(this.scheduler||o.a).now()},e.prototype._trimBufferThenGetEvents=function(){for(var t=this._getNow(),e=this._bufferSize,n=this._windowTime,r=this._events,i=r.length,o=0;o<i&&!(t-r[o].time<n);)o++;return i>e&&(o=Math.max(o,i-e)),o>0&&r.splice(0,o),r},e}(i.a),h=function(t,e){this.time=t,this.value=e}},SMsm:function(t,e,n){"use strict";n.d(e,"b",function(){return j}),n.d(e,"a",function(){return R}),n.d(e,"c",function(){return S});var r=n("Ip0R"),i=n("t/Na"),o=n("CcnG"),l=n("ZYjt"),a=n("F/XL"),u=n("XlPw"),s=n("VNr4"),c=n("xMyE"),h=n("67Y/"),f=n("9Z1F"),d=n("2WpN"),p=n("S1nX"),m=n("t9fZ"),g=n("mrSG"),b=n("Wf4p"),y=n("n6gG");function v(t){return Error('Unable to find icon with the name "'+t+'"')}function _(t){return Error("The URL provided to MatIconRegistry was not trusted as a resource URL via Angular's DomSanitizer. Attempted URL was \""+t+'".')}function w(t){return Error("The literal provided to MatIconRegistry was not trusted as safe HTML by Angular's DomSanitizer. Attempted literal was \""+t+'".')}var x=function(t){t.nodeName?this.svgElement=t:this.url=t},S=function(){function t(t,e,n){this._httpClient=t,this._sanitizer=e,this._svgIconConfigs=new Map,this._iconSetConfigs=new Map,this._cachedIconsByUrl=new Map,this._inProgressUrlFetches=new Map,this._fontCssClassesByAlias=new Map,this._defaultFontSetClass="material-icons",this._document=n}return t.prototype.addSvgIcon=function(t,e){return this.addSvgIconInNamespace("",t,e)},t.prototype.addSvgIconLiteral=function(t,e){return this.addSvgIconLiteralInNamespace("",t,e)},t.prototype.addSvgIconInNamespace=function(t,e,n){return this._addSvgIconConfig(t,e,new x(n))},t.prototype.addSvgIconLiteralInNamespace=function(t,e,n){var r=this._sanitizer.sanitize(o.I.HTML,n);if(!r)throw w(n);var i=this._createSvgElementForSingleIcon(r);return this._addSvgIconConfig(t,e,new x(i))},t.prototype.addSvgIconSet=function(t){return this.addSvgIconSetInNamespace("",t)},t.prototype.addSvgIconSetLiteral=function(t){return this.addSvgIconSetLiteralInNamespace("",t)},t.prototype.addSvgIconSetInNamespace=function(t,e){return this._addSvgIconSetConfig(t,new x(e))},t.prototype.addSvgIconSetLiteralInNamespace=function(t,e){var n=this._sanitizer.sanitize(o.I.HTML,e);if(!n)throw w(e);var r=this._svgElementFromString(n);return this._addSvgIconSetConfig(t,new x(r))},t.prototype.registerFontClassAlias=function(t,e){return void 0===e&&(e=t),this._fontCssClassesByAlias.set(t,e),this},t.prototype.classNameForFontAlias=function(t){return this._fontCssClassesByAlias.get(t)||t},t.prototype.setDefaultFontSetClass=function(t){return this._defaultFontSetClass=t,this},t.prototype.getDefaultFontSetClass=function(){return this._defaultFontSetClass},t.prototype.getSvgIconFromUrl=function(t){var e=this,n=this._sanitizer.sanitize(o.I.RESOURCE_URL,t);if(!n)throw _(t);var r=this._cachedIconsByUrl.get(n);return r?Object(a.a)(C(r)):this._loadSvgIconFromConfig(new x(t)).pipe(Object(c.a)(function(t){return e._cachedIconsByUrl.set(n,t)}),Object(h.a)(function(t){return C(t)}))},t.prototype.getNamedSvgIcon=function(t,e){void 0===e&&(e="");var n=k(e,t),r=this._svgIconConfigs.get(n);if(r)return this._getSvgFromConfig(r);var i=this._iconSetConfigs.get(e);return i?this._getSvgFromIconSetConfigs(t,i):Object(u.a)(v(n))},t.prototype._getSvgFromConfig=function(t){return t.svgElement?Object(a.a)(C(t.svgElement)):this._loadSvgIconFromConfig(t).pipe(Object(c.a)(function(e){return t.svgElement=e}),Object(h.a)(function(t){return C(t)}))},t.prototype._getSvgFromIconSetConfigs=function(t,e){var n=this,r=this._extractIconWithNameFromAnySet(t,e);if(r)return Object(a.a)(r);var i=e.filter(function(t){return!t.svgElement}).map(function(t){return n._loadSvgIconSetFromConfig(t).pipe(Object(f.a)(function(e){var r=n._sanitizer.sanitize(o.I.RESOURCE_URL,t.url);return console.error("Loading icon set URL: "+r+" failed: "+e.message),Object(a.a)(null)}))});return Object(s.a)(i).pipe(Object(h.a)(function(){var r=n._extractIconWithNameFromAnySet(t,e);if(!r)throw v(t);return r}))},t.prototype._extractIconWithNameFromAnySet=function(t,e){for(var n=e.length-1;n>=0;n--){var r=e[n];if(r.svgElement){var i=this._extractSvgIconFromSet(r.svgElement,t);if(i)return i}}return null},t.prototype._loadSvgIconFromConfig=function(t){var e=this;return this._fetchUrl(t.url).pipe(Object(h.a)(function(t){return e._createSvgElementForSingleIcon(t)}))},t.prototype._loadSvgIconSetFromConfig=function(t){var e=this;return t.svgElement?Object(a.a)(t.svgElement):this._fetchUrl(t.url).pipe(Object(h.a)(function(n){return t.svgElement||(t.svgElement=e._svgElementFromString(n)),t.svgElement}))},t.prototype._createSvgElementForSingleIcon=function(t){var e=this._svgElementFromString(t);return this._setSvgAttributes(e),e},t.prototype._extractSvgIconFromSet=function(t,e){var n=t.querySelector("#"+e);if(!n)return null;var r=n.cloneNode(!0);if(r.removeAttribute("id"),"svg"===r.nodeName.toLowerCase())return this._setSvgAttributes(r);if("symbol"===r.nodeName.toLowerCase())return this._setSvgAttributes(this._toSvgElement(r));var i=this._svgElementFromString("<svg></svg>");return i.appendChild(r),this._setSvgAttributes(i)},t.prototype._svgElementFromString=function(t){var e=this._document.createElement("DIV");e.innerHTML=t;var n=e.querySelector("svg");if(!n)throw Error("<svg> tag not found");return n},t.prototype._toSvgElement=function(t){for(var e=this._svgElementFromString("<svg></svg>"),n=0;n<t.childNodes.length;n++)t.childNodes[n].nodeType===this._document.ELEMENT_NODE&&e.appendChild(t.childNodes[n].cloneNode(!0));return e},t.prototype._setSvgAttributes=function(t){return t.setAttribute("fit",""),t.setAttribute("height","100%"),t.setAttribute("width","100%"),t.setAttribute("preserveAspectRatio","xMidYMid meet"),t.setAttribute("focusable","false"),t},t.prototype._fetchUrl=function(t){var e=this;if(!this._httpClient)throw Error("Could not find HttpClient provider for use with Angular Material icons. Please include the HttpClientModule from @angular/common/http in your app imports.");if(null==t)throw Error('Cannot fetch icon from URL "'+t+'".');var n=this._sanitizer.sanitize(o.I.RESOURCE_URL,t);if(!n)throw _(t);var r=this._inProgressUrlFetches.get(n);if(r)return r;var i=this._httpClient.get(n,{responseType:"text"}).pipe(Object(d.a)(function(){return e._inProgressUrlFetches.delete(n)}),Object(p.a)());return this._inProgressUrlFetches.set(n,i),i},t.prototype._addSvgIconConfig=function(t,e,n){return this._svgIconConfigs.set(k(t,e),n),this},t.prototype._addSvgIconSetConfig=function(t,e){var n=this._iconSetConfigs.get(t);return n?n.push(e):this._iconSetConfigs.set(t,[e]),this},t.ngInjectableDef=Object(o.U)({factory:function(){return new t(Object(o.Y)(i.c,8),Object(o.Y)(l.c),Object(o.Y)(r.c,8))},token:t,providedIn:"root"}),t}();function C(t){return t.cloneNode(!0)}function k(t,e){return t+":"+e}var R=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i._iconRegistry=n,i._inline=!1,r||e.nativeElement.setAttribute("aria-hidden","true"),i}return Object(g.b)(e,t),Object.defineProperty(e.prototype,"inline",{get:function(){return this._inline},set:function(t){this._inline=Object(y.c)(t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"fontSet",{get:function(){return this._fontSet},set:function(t){this._fontSet=this._cleanupFontValue(t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"fontIcon",{get:function(){return this._fontIcon},set:function(t){this._fontIcon=this._cleanupFontValue(t)},enumerable:!0,configurable:!0}),e.prototype._splitIconName=function(t){if(!t)return["",""];var e=t.split(":");switch(e.length){case 1:return["",e[0]];case 2:return e;default:throw Error('Invalid icon name: "'+t+'"')}},e.prototype.ngOnChanges=function(t){var e=this;if(t.svgIcon)if(this.svgIcon){var n=this._splitIconName(this.svgIcon);this._iconRegistry.getNamedSvgIcon(n[1],n[0]).pipe(Object(m.a)(1)).subscribe(function(t){return e._setSvgElement(t)},function(t){return console.log("Error retrieving icon: "+t.message)})}else this._clearSvgElement();this._usingFontIcon()&&this._updateFontIconClasses()},e.prototype.ngOnInit=function(){this._usingFontIcon()&&this._updateFontIconClasses()},e.prototype._usingFontIcon=function(){return!this.svgIcon},e.prototype._setSvgElement=function(t){this._clearSvgElement();for(var e=t.querySelectorAll("style"),n=0;n<e.length;n++)e[n].textContent+=" ";this._elementRef.nativeElement.appendChild(t)},e.prototype._clearSvgElement=function(){for(var t=this._elementRef.nativeElement,e=t.childNodes.length;e--;){var n=t.childNodes[e];1===n.nodeType&&"svg"!==n.nodeName.toLowerCase()||t.removeChild(n)}},e.prototype._updateFontIconClasses=function(){if(this._usingFontIcon()){var t=this._elementRef.nativeElement,e=this.fontSet?this._iconRegistry.classNameForFontAlias(this.fontSet):this._iconRegistry.getDefaultFontSetClass();e!=this._previousFontSetClass&&(this._previousFontSetClass&&t.classList.remove(this._previousFontSetClass),e&&t.classList.add(e),this._previousFontSetClass=e),this.fontIcon!=this._previousFontIconClass&&(this._previousFontIconClass&&t.classList.remove(this._previousFontIconClass),this.fontIcon&&t.classList.add(this.fontIcon),this._previousFontIconClass=this.fontIcon)}},e.prototype._cleanupFontValue=function(t){return"string"==typeof t?t.trim().split(" ")[0]:t},e}(Object(b.C)(function(t){this._elementRef=t})),j=function(){}},T1DM:function(t,e,n){"use strict";n.d(e,"a",function(){return i});var r=n("h9Dq"),i=new(n("CS9Q").a)(r.a)},Txjg:function(t,e,n){"use strict";n.d(e,"a",function(){return i});var r=n("Zn8D");function i(){return Object(r.a)(1)}},UodH:function(t,e,n){"use strict";n.d(e,"c",function(){return c}),n.d(e,"b",function(){return u}),n.d(e,"a",function(){return s});var r=n("mrSG"),i=n("Wf4p"),o="accent",l="primary",a=["mat-button","mat-flat-button","mat-icon-button","mat-raised-button","mat-stroked-button","mat-mini-fab","mat-fab"],u=function(t){function e(e,n,r,i){var u=t.call(this,e)||this;u._platform=n,u._focusMonitor=r,u._animationMode=i,u.isRoundButton=u._hasHostAttributes("mat-fab","mat-mini-fab"),u.isIconButton=u._hasHostAttributes("mat-icon-button");for(var s=0,c=a;s<c.length;s++){var h=c[s];u._hasHostAttributes(h)&&e.nativeElement.classList.add(h)}return u._focusMonitor.monitor(u._elementRef.nativeElement,!0),u.isRoundButton?u.color=o:u._hasHostAttributes("mat-flat-button")&&(u.color=l),u}return Object(r.b)(e,t),e.prototype.ngOnDestroy=function(){this._focusMonitor.stopMonitoring(this._elementRef.nativeElement)},e.prototype.focus=function(){this._getHostElement().focus()},e.prototype._getHostElement=function(){return this._elementRef.nativeElement},e.prototype._isRippleDisabled=function(){return this.disableRipple||this.disabled},e.prototype._hasHostAttributes=function(){for(var t=this,e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return e.some(function(e){return t._getHostElement().hasAttribute(e)})},e}(Object(i.C)(Object(i.E)(Object(i.D)(function(t){this._elementRef=t})))),s=function(t){function e(e,n,r,i){return t.call(this,r,e,n,i)||this}return Object(r.b)(e,t),e.prototype._haltDisabledEvents=function(t){this.disabled&&(t.preventDefault(),t.stopImmediatePropagation())},e}(u),c=function(){}},"V9q+":function(t,e,n){"use strict";n.d(e,"a",function(){return o}),n("CcnG");var r=n("Ip0R"),i=n("OzfB"),o=function(){function t(t,e){Object(r.x)(e)&&!t&&console.warn("Warning: Flex Layout loaded on the server without FlexLayoutServerModule")}return t.withConfig=function(e,n){var r=Object.assign({},i.f),o=[];for(var l in e)e[l]===r[l]||!1!==e[l]&&!0!==e[l]||(r[l]=e[l]);return e.serverLoaded&&o.push({provide:i.l,useValue:!0}),Array.isArray(n)&&o.push({provide:i.a,useValue:n,multi:!0}),o.push({provide:i.g,useValue:r}),{ngModule:t,providers:o}},t}()},VGuC:function(t,e,n){"use strict";function r(t){return t instanceof Date&&!isNaN(+t)}n.d(e,"a",function(){return r})},VNr4:function(t,e,n){"use strict";n.d(e,"a",function(){return c});var r=n("mrSG"),i=n("6blF"),o=n("isby"),l=n("G5J1"),a=n("zotm"),u=n("MGBS"),s=n("67Y/");function c(){for(var t,e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return"function"==typeof e[e.length-1]&&(t=e.pop()),1===e.length&&Object(o.a)(e[0])&&(e=e[0]),0===e.length?l.a:t?c(e).pipe(Object(s.a)(function(e){return t.apply(void 0,e)})):new i.a(function(t){return new h(t,e)})}var h=function(t){function e(e,n){var r=t.call(this,e)||this;r.sources=n,r.completed=0,r.haveValues=0;var i=n.length;r.values=new Array(i);for(var o=0;o<i;o++){var l=n[o],u=Object(a.a)(r,l,null,o);u&&r.add(u)}return r}return r.b(e,t),e.prototype.notifyNext=function(t,e,n,r,i){this.values[n]=e,i._hasValue||(i._hasValue=!0,this.haveValues++)},e.prototype.notifyComplete=function(t){var e=this.destination,n=this.haveValues,r=this.values,i=r.length;t._hasValue?(this.completed++,this.completed===i&&(n===i&&e.next(r),e.complete())):e.complete()},e}(u.a)},"VnD/":function(t,e,n){"use strict";n.d(e,"a",function(){return o});var r=n("mrSG"),i=n("FFOo");function o(t,e){return function(n){return n.lift(new l(t,e))}}var l=function(){function t(t,e){this.predicate=t,this.thisArg=e}return t.prototype.call=function(t,e){return e.subscribe(new a(t,this.predicate,this.thisArg))},t}(),a=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.predicate=n,i.thisArg=r,i.count=0,i}return r.b(e,t),e.prototype._next=function(t){var e;try{e=this.predicate.call(this.thisArg,t,this.count++)}catch(t){return void this.destination.error(t)}e&&this.destination.next(t)},e}(i.a)},VphZ:function(t,e,n){"use strict";var r=function(t,e){return t<e?-1:t>e?1:t>=e?0:NaN},i=function(t){var e;return 1===t.length&&(e=t,t=function(t,n){return r(e(t),n)}),{left:function(e,n,r,i){for(null==r&&(r=0),null==i&&(i=e.length);r<i;){var o=r+i>>>1;t(e[o],n)<0?r=o+1:i=o}return r},right:function(e,n,r,i){for(null==r&&(r=0),null==i&&(i=e.length);r<i;){var o=r+i>>>1;t(e[o],n)>0?i=o:r=o+1}return r}}},o=i(r),l=o.right,a=o.left,u=l,s=function(t,e){null==e&&(e=c);for(var n=0,r=t.length-1,i=t[0],o=new Array(r<0?0:r);n<r;)o[n]=e(i,i=t[++n]);return o};function c(t,e){return[t,e]}var h=function(t,e,n){var r,i,o,l,a=t.length,u=e.length,s=new Array(a*u);for(null==n&&(n=c),r=o=0;r<a;++r)for(l=t[r],i=0;i<u;++i,++o)s[o]=n(l,e[i]);return s},f=function(t,e){return e<t?-1:e>t?1:e>=t?0:NaN},d=function(t){return null===t?NaN:+t},p=function(t,e){var n,r,i=t.length,o=0,l=-1,a=0,u=0;if(null==e)for(;++l<i;)isNaN(n=d(t[l]))||(u+=(r=n-a)*(n-(a+=r/++o)));else for(;++l<i;)isNaN(n=d(e(t[l],l,t)))||(u+=(r=n-a)*(n-(a+=r/++o)));if(o>1)return u/(o-1)},m=function(t,e){var n=p(t,e);return n?Math.sqrt(n):n},g=function(t,e){var n,r,i,o=t.length,l=-1;if(null==e){for(;++l<o;)if(null!=(n=t[l])&&n>=n)for(r=i=n;++l<o;)null!=(n=t[l])&&(r>n&&(r=n),i<n&&(i=n))}else for(;++l<o;)if(null!=(n=e(t[l],l,t))&&n>=n)for(r=i=n;++l<o;)null!=(n=e(t[l],l,t))&&(r>n&&(r=n),i<n&&(i=n));return[r,i]},b=Array.prototype,y=b.slice,v=b.map,_=function(t){return function(){return t}},w=function(t){return t},x=function(t,e,n){t=+t,e=+e,n=(i=arguments.length)<2?(e=t,t=0,1):i<3?1:+n;for(var r=-1,i=0|Math.max(0,Math.ceil((e-t)/n)),o=new Array(i);++r<i;)o[r]=t+r*n;return o},S=Math.sqrt(50),C=Math.sqrt(10),k=Math.sqrt(2),R=function(t,e,n){var r,i,o,l,a=-1;if(n=+n,(t=+t)==(e=+e)&&n>0)return[t];if((r=e<t)&&(i=t,t=e,e=i),0===(l=j(t,e,n))||!isFinite(l))return[];if(l>0)for(t=Math.ceil(t/l),e=Math.floor(e/l),o=new Array(i=Math.ceil(e-t+1));++a<i;)o[a]=(t+a)*l;else for(t=Math.floor(t*l),e=Math.ceil(e*l),o=new Array(i=Math.ceil(t-e+1));++a<i;)o[a]=(t-a)/l;return r&&o.reverse(),o};function j(t,e,n){var r=(e-t)/Math.max(0,n),i=Math.floor(Math.log(r)/Math.LN10),o=r/Math.pow(10,i);return i>=0?(o>=S?10:o>=C?5:o>=k?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(o>=S?10:o>=C?5:o>=k?2:1)}function O(t,e,n){var r=Math.abs(e-t)/Math.max(0,n),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),o=r/i;return o>=S?i*=10:o>=C?i*=5:o>=k&&(i*=2),e<t?-i:i}var E=function(t){return Math.ceil(Math.log(t.length)/Math.LN2)+1},T=function(){var t=w,e=g,n=E;function r(r){var i,o,l=r.length,a=new Array(l);for(i=0;i<l;++i)a[i]=t(r[i],i,r);var s=e(a),c=s[0],h=s[1],f=n(a,c,h);Array.isArray(f)||(f=O(c,h,f),f=x(Math.ceil(c/f)*f,Math.floor(h/f)*f,f));for(var d=f.length;f[0]<=c;)f.shift(),--d;for(;f[d-1]>h;)f.pop(),--d;var p,m=new Array(d+1);for(i=0;i<=d;++i)(p=m[i]=[]).x0=i>0?f[i-1]:c,p.x1=i<d?f[i]:h;for(i=0;i<l;++i)c<=(o=a[i])&&o<=h&&m[u(f,o,0,d)].push(r[i]);return m}return r.value=function(e){return arguments.length?(t="function"==typeof e?e:_(e),r):t},r.domain=function(t){return arguments.length?(e="function"==typeof t?t:_([t[0],t[1]]),r):e},r.thresholds=function(t){return arguments.length?(n="function"==typeof t?t:Array.isArray(t)?_(y.call(t)):_(t),r):n},r},P=function(t,e,n){if(null==n&&(n=d),r=t.length){if((e=+e)<=0||r<2)return+n(t[0],0,t);if(e>=1)return+n(t[r-1],r-1,t);var r,i=(r-1)*e,o=Math.floor(i),l=+n(t[o],o,t);return l+(+n(t[o+1],o+1,t)-l)*(i-o)}},I=function(t,e,n){return t=v.call(t,d).sort(r),Math.ceil((n-e)/(2*(P(t,.75)-P(t,.25))*Math.pow(t.length,-1/3)))},A=function(t,e,n){return Math.ceil((n-e)/(3.5*m(t)*Math.pow(t.length,-1/3)))},M=function(t,e){var n,r,i=t.length,o=-1;if(null==e){for(;++o<i;)if(null!=(n=t[o])&&n>=n)for(r=n;++o<i;)null!=(n=t[o])&&n>r&&(r=n)}else for(;++o<i;)if(null!=(n=e(t[o],o,t))&&n>=n)for(r=n;++o<i;)null!=(n=e(t[o],o,t))&&n>r&&(r=n);return r},D=function(t,e){var n,r=t.length,i=r,o=-1,l=0;if(null==e)for(;++o<r;)isNaN(n=d(t[o]))?--i:l+=n;else for(;++o<r;)isNaN(n=d(e(t[o],o,t)))?--i:l+=n;if(i)return l/i},N=function(t,e){var n,i=t.length,o=-1,l=[];if(null==e)for(;++o<i;)isNaN(n=d(t[o]))||l.push(n);else for(;++o<i;)isNaN(n=d(e(t[o],o,t)))||l.push(n);return P(l.sort(r),.5)},L=function(t){for(var e,n,r,i=t.length,o=-1,l=0;++o<i;)l+=t[o].length;for(n=new Array(l);--i>=0;)for(e=(r=t[i]).length;--e>=0;)n[--l]=r[e];return n},F=function(t,e){var n,r,i=t.length,o=-1;if(null==e){for(;++o<i;)if(null!=(n=t[o])&&n>=n)for(r=n;++o<i;)null!=(n=t[o])&&r>n&&(r=n)}else for(;++o<i;)if(null!=(n=e(t[o],o,t))&&n>=n)for(r=n;++o<i;)null!=(n=e(t[o],o,t))&&r>n&&(r=n);return r},z=function(t,e){for(var n=e.length,r=new Array(n);n--;)r[n]=t[e[n]];return r},V=function(t,e){if(n=t.length){var n,i,o=0,l=0,a=t[l];for(null==e&&(e=r);++o<n;)(e(i=t[o],a)<0||0!==e(a,a))&&(a=i,l=o);return 0===e(a,a)?l:void 0}},B=function(t,e,n){for(var r,i,o=(null==n?t.length:n)-(e=null==e?0:+e);o;)i=Math.random()*o--|0,r=t[o+e],t[o+e]=t[i+e],t[i+e]=r;return t},H=function(t,e){var n,r=t.length,i=-1,o=0;if(null==e)for(;++i<r;)(n=+t[i])&&(o+=n);else for(;++i<r;)(n=+e(t[i],i,t))&&(o+=n);return o},G=function(t){if(!(i=t.length))return[];for(var e=-1,n=F(t,U),r=new Array(n);++e<n;)for(var i,o=-1,l=r[e]=new Array(i);++o<i;)l[o]=t[o][e];return r};function U(t){return t.length}var q=function(){return G(arguments)},Q=Array.prototype.slice,W=function(t){return t},Y=1,Z=2,K=3,X=4,$=1e-6;function J(t){return"translate("+(t+.5)+",0)"}function tt(t){return"translate(0,"+(t+.5)+")"}function et(){return!this.__axis}function nt(t,e){var n=[],r=null,i=null,o=6,l=6,a=3,u=t===Y||t===X?-1:1,s=t===X||t===Z?"x":"y",c=t===Y||t===K?J:tt;function h(h){var f=null==r?e.ticks?e.ticks.apply(e,n):e.domain():r,d=null==i?e.tickFormat?e.tickFormat.apply(e,n):W:i,p=Math.max(o,0)+a,m=e.range(),g=+m[0]+.5,b=+m[m.length-1]+.5,y=(e.bandwidth?function(t){var e=Math.max(0,t.bandwidth()-1)/2;return t.round()&&(e=Math.round(e)),function(n){return+t(n)+e}}:function(t){return function(e){return+t(e)}})(e.copy()),v=h.selection?h.selection():h,_=v.selectAll(".domain").data([null]),w=v.selectAll(".tick").data(f,e).order(),x=w.exit(),S=w.enter().append("g").attr("class","tick"),C=w.select("line"),k=w.select("text");_=_.merge(_.enter().insert("path",".tick").attr("class","domain").attr("stroke","#000")),w=w.merge(S),C=C.merge(S.append("line").attr("stroke","#000").attr(s+"2",u*o)),k=k.merge(S.append("text").attr("fill","#000").attr(s,u*p).attr("dy",t===Y?"0em":t===K?"0.71em":"0.32em")),h!==v&&(_=_.transition(h),w=w.transition(h),C=C.transition(h),k=k.transition(h),x=x.transition(h).attr("opacity",$).attr("transform",function(t){return isFinite(t=y(t))?c(t):this.getAttribute("transform")}),S.attr("opacity",$).attr("transform",function(t){var e=this.parentNode.__axis;return c(e&&isFinite(e=e(t))?e:y(t))})),x.remove(),_.attr("d",t===X||t==Z?"M"+u*l+","+g+"H0.5V"+b+"H"+u*l:"M"+g+","+u*l+"V0.5H"+b+"V"+u*l),w.attr("opacity",1).attr("transform",function(t){return c(y(t))}),C.attr(s+"2",u*o),k.attr(s,u*p).text(d),v.filter(et).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===Z?"start":t===X?"end":"middle"),v.each(function(){this.__axis=y})}return h.scale=function(t){return arguments.length?(e=t,h):e},h.ticks=function(){return n=Q.call(arguments),h},h.tickArguments=function(t){return arguments.length?(n=null==t?[]:Q.call(t),h):n.slice()},h.tickValues=function(t){return arguments.length?(r=null==t?null:Q.call(t),h):r&&r.slice()},h.tickFormat=function(t){return arguments.length?(i=t,h):i},h.tickSize=function(t){return arguments.length?(o=l=+t,h):o},h.tickSizeInner=function(t){return arguments.length?(o=+t,h):o},h.tickSizeOuter=function(t){return arguments.length?(l=+t,h):l},h.tickPadding=function(t){return arguments.length?(a=+t,h):a},h}function rt(t){return nt(Y,t)}function it(t){return nt(Z,t)}function ot(t){return nt(K,t)}function lt(t){return nt(X,t)}var at={value:function(){}};function ut(){for(var t,e=0,n=arguments.length,r={};e<n;++e){if(!(t=arguments[e]+"")||t in r)throw new Error("illegal type: "+t);r[t]=[]}return new st(r)}function st(t){this._=t}function ct(t,e){for(var n,r=0,i=t.length;r<i;++r)if((n=t[r]).name===e)return n.value}function ht(t,e,n){for(var r=0,i=t.length;r<i;++r)if(t[r].name===e){t[r]=at,t=t.slice(0,r).concat(t.slice(r+1));break}return null!=n&&t.push({name:e,value:n}),t}st.prototype=ut.prototype={constructor:st,on:function(t,e){var n,r,i=this._,o=(r=i,(t+"").trim().split(/^|\s+/).map(function(t){var e="",n=t.indexOf(".");if(n>=0&&(e=t.slice(n+1),t=t.slice(0,n)),t&&!r.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:e}})),l=-1,a=o.length;if(!(arguments.length<2)){if(null!=e&&"function"!=typeof e)throw new Error("invalid callback: "+e);for(;++l<a;)if(n=(t=o[l]).type)i[n]=ht(i[n],t.name,e);else if(null==e)for(n in i)i[n]=ht(i[n],t.name,null);return this}for(;++l<a;)if((n=(t=o[l]).type)&&(n=ct(i[n],t.name)))return n},copy:function(){var t={},e=this._;for(var n in e)t[n]=e[n].slice();return new st(t)},call:function(t,e){if((n=arguments.length-2)>0)for(var n,r,i=new Array(n),o=0;o<n;++o)i[o]=arguments[o+2];if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(o=0,n=(r=this._[t]).length;o<n;++o)r[o].value.apply(e,i)},apply:function(t,e,n){if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(var r=this._[t],i=0,o=r.length;i<o;++i)r[i].value.apply(e,n)}};var ft=ut,dt="http://www.w3.org/1999/xhtml",pt={svg:"http://www.w3.org/2000/svg",xhtml:dt,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},mt=function(t){var e=t+="",n=e.indexOf(":");return n>=0&&"xmlns"!==(e=t.slice(0,n))&&(t=t.slice(n+1)),pt.hasOwnProperty(e)?{space:pt[e],local:t}:t},gt=function(t){var e=mt(t);return(e.local?function(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}:function(t){return function(){var e=this.ownerDocument,n=this.namespaceURI;return n===dt&&e.documentElement.namespaceURI===dt?e.createElement(t):e.createElementNS(n,t)}})(e)};function bt(){}var yt=function(t){return null==t?bt:function(){return this.querySelector(t)}};function vt(){return[]}var _t=function(t){return null==t?vt:function(){return this.querySelectorAll(t)}},wt=function(t){return function(){return this.matches(t)}};if("undefined"!=typeof document){var xt=document.documentElement;if(!xt.matches){var St=xt.webkitMatchesSelector||xt.msMatchesSelector||xt.mozMatchesSelector||xt.oMatchesSelector;wt=function(t){return function(){return St.call(this,t)}}}}var Ct=wt,kt=function(t){return new Array(t.length)};function Rt(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}Rt.prototype={constructor:Rt,appendChild:function(t){return this._parent.insertBefore(t,this._next)},insertBefore:function(t,e){return this._parent.insertBefore(t,e)},querySelector:function(t){return this._parent.querySelector(t)},querySelectorAll:function(t){return this._parent.querySelectorAll(t)}};var jt="$";function Ot(t,e,n,r,i,o){for(var l,a=0,u=e.length,s=o.length;a<s;++a)(l=e[a])?(l.__data__=o[a],r[a]=l):n[a]=new Rt(t,o[a]);for(;a<u;++a)(l=e[a])&&(i[a]=l)}function Et(t,e,n,r,i,o,l){var a,u,s,c={},h=e.length,f=o.length,d=new Array(h);for(a=0;a<h;++a)(u=e[a])&&(d[a]=s=jt+l.call(u,u.__data__,a,e),s in c?i[a]=u:c[s]=u);for(a=0;a<f;++a)(u=c[s=jt+l.call(t,o[a],a,o)])?(r[a]=u,u.__data__=o[a],c[s]=null):n[a]=new Rt(t,o[a]);for(a=0;a<h;++a)(u=e[a])&&c[d[a]]===u&&(i[a]=u)}function Tt(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}var Pt=function(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView};function It(t,e){return t.style.getPropertyValue(e)||Pt(t).getComputedStyle(t,null).getPropertyValue(e)}function At(t){return t.trim().split(/^|\s+/)}function Mt(t){return t.classList||new Dt(t)}function Dt(t){this._node=t,this._names=At(t.getAttribute("class")||"")}function Nt(t,e){for(var n=Mt(t),r=-1,i=e.length;++r<i;)n.add(e[r])}function Lt(t,e){for(var n=Mt(t),r=-1,i=e.length;++r<i;)n.remove(e[r])}function Ft(){this.textContent=""}function zt(){this.innerHTML=""}function Vt(){this.nextSibling&&this.parentNode.appendChild(this)}function Bt(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function Ht(){return null}function Gt(){var t=this.parentNode;t&&t.removeChild(this)}function Ut(){return this.parentNode.insertBefore(this.cloneNode(!1),this.nextSibling)}function qt(){return this.parentNode.insertBefore(this.cloneNode(!0),this.nextSibling)}Dt.prototype={add:function(t){this._names.indexOf(t)<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};var Qt={},Wt=null;function Yt(t,e,n){return t=Zt(t,e,n),function(e){var n=e.relatedTarget;n&&(n===this||8&n.compareDocumentPosition(this))||t.call(this,e)}}function Zt(t,e,n){return function(r){var i=Wt;Wt=r;try{t.call(this,this.__data__,e,n)}finally{Wt=i}}}function Kt(t){return function(){var e=this.__on;if(e){for(var n,r=0,i=-1,o=e.length;r<o;++r)n=e[r],t.type&&n.type!==t.type||n.name!==t.name?e[++i]=n:this.removeEventListener(n.type,n.listener,n.capture);++i?e.length=i:delete this.__on}}}function Xt(t,e,n){var r=Qt.hasOwnProperty(t.type)?Yt:Zt;return function(i,o,l){var a,u=this.__on,s=r(e,o,l);if(u)for(var c=0,h=u.length;c<h;++c)if((a=u[c]).type===t.type&&a.name===t.name)return this.removeEventListener(a.type,a.listener,a.capture),this.addEventListener(a.type,a.listener=s,a.capture=n),void(a.value=e);this.addEventListener(t.type,s,n),a={type:t.type,name:t.name,value:e,listener:s,capture:n},u?u.push(a):this.__on=[a]}}function $t(t,e,n,r){var i=Wt;t.sourceEvent=Wt,Wt=t;try{return e.apply(n,r)}finally{Wt=i}}function Jt(t,e,n){var r=Pt(t),i=r.CustomEvent;"function"==typeof i?i=new i(e,n):(i=r.document.createEvent("Event"),n?(i.initEvent(e,n.bubbles,n.cancelable),i.detail=n.detail):i.initEvent(e,!1,!1)),t.dispatchEvent(i)}"undefined"!=typeof document&&("onmouseenter"in document.documentElement||(Qt={mouseenter:"mouseover",mouseleave:"mouseout"}));var te=[null];function ee(t,e){this._groups=t,this._parents=e}function ne(){return new ee([[document.documentElement]],te)}ee.prototype=ne.prototype={constructor:ee,select:function(t){"function"!=typeof t&&(t=yt(t));for(var e=this._groups,n=e.length,r=new Array(n),i=0;i<n;++i)for(var o,l,a=e[i],u=a.length,s=r[i]=new Array(u),c=0;c<u;++c)(o=a[c])&&(l=t.call(o,o.__data__,c,a))&&("__data__"in o&&(l.__data__=o.__data__),s[c]=l);return new ee(r,this._parents)},selectAll:function(t){"function"!=typeof t&&(t=_t(t));for(var e=this._groups,n=e.length,r=[],i=[],o=0;o<n;++o)for(var l,a=e[o],u=a.length,s=0;s<u;++s)(l=a[s])&&(r.push(t.call(l,l.__data__,s,a)),i.push(l));return new ee(r,i)},filter:function(t){"function"!=typeof t&&(t=Ct(t));for(var e=this._groups,n=e.length,r=new Array(n),i=0;i<n;++i)for(var o,l=e[i],a=l.length,u=r[i]=[],s=0;s<a;++s)(o=l[s])&&t.call(o,o.__data__,s,l)&&u.push(o);return new ee(r,this._parents)},data:function(t,e){if(!t)return p=new Array(this.size()),c=-1,this.each(function(t){p[++c]=t}),p;var n,r=e?Et:Ot,i=this._parents,o=this._groups;"function"!=typeof t&&(n=t,t=function(){return n});for(var l=o.length,a=new Array(l),u=new Array(l),s=new Array(l),c=0;c<l;++c){var h=i[c],f=o[c],d=f.length,p=t.call(h,h&&h.__data__,c,i),m=p.length,g=u[c]=new Array(m),b=a[c]=new Array(m);r(h,f,g,b,s[c]=new Array(d),p,e);for(var y,v,_=0,w=0;_<m;++_)if(y=g[_]){for(_>=w&&(w=_+1);!(v=b[w])&&++w<m;);y._next=v||null}}return(a=new ee(a,i))._enter=u,a._exit=s,a},enter:function(){return new ee(this._enter||this._groups.map(kt),this._parents)},exit:function(){return new ee(this._exit||this._groups.map(kt),this._parents)},merge:function(t){for(var e=this._groups,n=t._groups,r=e.length,i=Math.min(r,n.length),o=new Array(r),l=0;l<i;++l)for(var a,u=e[l],s=n[l],c=u.length,h=o[l]=new Array(c),f=0;f<c;++f)(a=u[f]||s[f])&&(h[f]=a);for(;l<r;++l)o[l]=e[l];return new ee(o,this._parents)},order:function(){for(var t=this._groups,e=-1,n=t.length;++e<n;)for(var r,i=t[e],o=i.length-1,l=i[o];--o>=0;)(r=i[o])&&(l&&l!==r.nextSibling&&l.parentNode.insertBefore(r,l),l=r);return this},sort:function(t){function e(e,n){return e&&n?t(e.__data__,n.__data__):!e-!n}t||(t=Tt);for(var n=this._groups,r=n.length,i=new Array(r),o=0;o<r;++o){for(var l,a=n[o],u=a.length,s=i[o]=new Array(u),c=0;c<u;++c)(l=a[c])&&(s[c]=l);s.sort(e)}return new ee(i,this._parents).order()},call:function(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this},nodes:function(){var t=new Array(this.size()),e=-1;return this.each(function(){t[++e]=this}),t},node:function(){for(var t=this._groups,e=0,n=t.length;e<n;++e)for(var r=t[e],i=0,o=r.length;i<o;++i){var l=r[i];if(l)return l}return null},size:function(){var t=0;return this.each(function(){++t}),t},empty:function(){return!this.node()},each:function(t){for(var e=this._groups,n=0,r=e.length;n<r;++n)for(var i,o=e[n],l=0,a=o.length;l<a;++l)(i=o[l])&&t.call(i,i.__data__,l,o);return this},attr:function(t,e){var n=mt(t);if(arguments.length<2){var r=this.node();return n.local?r.getAttributeNS(n.space,n.local):r.getAttribute(n)}return this.each((null==e?n.local?function(t){return function(){this.removeAttributeNS(t.space,t.local)}}:function(t){return function(){this.removeAttribute(t)}}:"function"==typeof e?n.local?function(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,n)}}:function(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttribute(t):this.setAttribute(t,n)}}:n.local?function(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}:function(t,e){return function(){this.setAttribute(t,e)}})(n,e))},style:function(t,e,n){return arguments.length>1?this.each((null==e?function(t){return function(){this.style.removeProperty(t)}}:"function"==typeof e?function(t,e,n){return function(){var r=e.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,n)}}:function(t,e,n){return function(){this.style.setProperty(t,e,n)}})(t,e,null==n?"":n)):It(this.node(),t)},property:function(t,e){return arguments.length>1?this.each((null==e?function(t){return function(){delete this[t]}}:"function"==typeof e?function(t,e){return function(){var n=e.apply(this,arguments);null==n?delete this[t]:this[t]=n}}:function(t,e){return function(){this[t]=e}})(t,e)):this.node()[t]},classed:function(t,e){var n=At(t+"");if(arguments.length<2){for(var r=Mt(this.node()),i=-1,o=n.length;++i<o;)if(!r.contains(n[i]))return!1;return!0}return this.each(("function"==typeof e?function(t,e){return function(){(e.apply(this,arguments)?Nt:Lt)(this,t)}}:e?function(t){return function(){Nt(this,t)}}:function(t){return function(){Lt(this,t)}})(n,e))},text:function(t){return arguments.length?this.each(null==t?Ft:("function"==typeof t?function(t){return function(){var e=t.apply(this,arguments);this.textContent=null==e?"":e}}:function(t){return function(){this.textContent=t}})(t)):this.node().textContent},html:function(t){return arguments.length?this.each(null==t?zt:("function"==typeof t?function(t){return function(){var e=t.apply(this,arguments);this.innerHTML=null==e?"":e}}:function(t){return function(){this.innerHTML=t}})(t)):this.node().innerHTML},raise:function(){return this.each(Vt)},lower:function(){return this.each(Bt)},append:function(t){var e="function"==typeof t?t:gt(t);return this.select(function(){return this.appendChild(e.apply(this,arguments))})},insert:function(t,e){var n="function"==typeof t?t:gt(t),r=null==e?Ht:"function"==typeof e?e:yt(e);return this.select(function(){return this.insertBefore(n.apply(this,arguments),r.apply(this,arguments)||null)})},remove:function(){return this.each(Gt)},clone:function(t){return this.select(t?qt:Ut)},datum:function(t){return arguments.length?this.property("__data__",t):this.node().__data__},on:function(t,e,n){var r,i,o=(t+"").trim().split(/^|\s+/).map(function(t){var e="",n=t.indexOf(".");return n>=0&&(e=t.slice(n+1),t=t.slice(0,n)),{type:t,name:e}}),l=o.length;if(!(arguments.length<2)){for(a=e?Xt:Kt,null==n&&(n=!1),r=0;r<l;++r)this.each(a(o[r],e,n));return this}var a=this.node().__on;if(a)for(var u,s=0,c=a.length;s<c;++s)for(r=0,u=a[s];r<l;++r)if((i=o[r]).type===u.type&&i.name===u.name)return u.value},dispatch:function(t,e){return this.each(("function"==typeof e?function(t,e){return function(){return Jt(this,t,e.apply(this,arguments))}}:function(t,e){return function(){return Jt(this,t,e)}})(t,e))}};var re=ne,ie=function(t){return"string"==typeof t?new ee([[document.querySelector(t)]],[document.documentElement]):new ee([[t]],te)},oe=function(t){return ie(gt(t).call(document.documentElement))},le=0;function ae(){return new ue}function ue(){this._="@"+(++le).toString(36)}ue.prototype=ae.prototype={constructor:ue,get:function(t){for(var e=this._;!(e in t);)if(!(t=t.parentNode))return;return t[e]},set:function(t,e){return t[this._]=e},remove:function(t){return this._ in t&&delete t[this._]},toString:function(){return this._}};var se=function(){for(var t,e=Wt;t=e.sourceEvent;)e=t;return e},ce=function(t,e){var n=t.ownerSVGElement||t;if(n.createSVGPoint){var r=n.createSVGPoint();return r.x=e.clientX,r.y=e.clientY,[(r=r.matrixTransform(t.getScreenCTM().inverse())).x,r.y]}var i=t.getBoundingClientRect();return[e.clientX-i.left-t.clientLeft,e.clientY-i.top-t.clientTop]},he=function(t){var e=se();return e.changedTouches&&(e=e.changedTouches[0]),ce(t,e)},fe=function(t){return"string"==typeof t?new ee([document.querySelectorAll(t)],[document.documentElement]):new ee([null==t?[]:t],te)},de=function(t,e,n){arguments.length<3&&(n=e,e=se().changedTouches);for(var r,i=0,o=e?e.length:0;i<o;++i)if((r=e[i]).identifier===n)return ce(t,r);return null},pe=function(t,e){null==e&&(e=se().touches);for(var n=0,r=e?e.length:0,i=new Array(r);n<r;++n)i[n]=ce(t,e[n]);return i};function me(){Wt.stopImmediatePropagation()}var ge=function(){Wt.preventDefault(),Wt.stopImmediatePropagation()},be=function(t){var e=t.document.documentElement,n=ie(t).on("dragstart.drag",ge,!0);"onselectstart"in e?n.on("selectstart.drag",ge,!0):(e.__noselect=e.style.MozUserSelect,e.style.MozUserSelect="none")};function ye(t,e){var n=t.document.documentElement,r=ie(t).on("dragstart.drag",null);e&&(r.on("click.drag",ge,!0),setTimeout(function(){r.on("click.drag",null)},0)),"onselectstart"in n?r.on("selectstart.drag",null):(n.style.MozUserSelect=n.__noselect,delete n.__noselect)}var ve=function(t){return function(){return t}};function _e(t,e,n,r,i,o,l,a,u,s){this.target=t,this.type=e,this.subject=n,this.identifier=r,this.active=i,this.x=o,this.y=l,this.dx=a,this.dy=u,this._=s}function we(){return!Wt.button}function xe(){return this.parentNode}function Se(t){return null==t?{x:Wt.x,y:Wt.y}:t}function Ce(){return"ontouchstart"in this}_e.prototype.on=function(){var t=this._.on.apply(this._,arguments);return t===this._?this:t};var ke=function(){var t,e,n,r,i=we,o=xe,l=Se,a=Ce,u={},s=ft("start","drag","end"),c=0,h=0;function f(t){t.on("mousedown.drag",d).filter(a).on("touchstart.drag",g).on("touchmove.drag",b).on("touchend.drag touchcancel.drag",y).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function d(){if(!r&&i.apply(this,arguments)){var l=v("mouse",o.apply(this,arguments),he,this,arguments);l&&(ie(Wt.view).on("mousemove.drag",p,!0).on("mouseup.drag",m,!0),be(Wt.view),me(),n=!1,t=Wt.clientX,e=Wt.clientY,l("start"))}}function p(){if(ge(),!n){var r=Wt.clientX-t,i=Wt.clientY-e;n=r*r+i*i>h}u.mouse("drag")}function m(){ie(Wt.view).on("mousemove.drag mouseup.drag",null),ye(Wt.view,n),ge(),u.mouse("end")}function g(){if(i.apply(this,arguments)){var t,e,n=Wt.changedTouches,r=o.apply(this,arguments),l=n.length;for(t=0;t<l;++t)(e=v(n[t].identifier,r,de,this,arguments))&&(me(),e("start"))}}function b(){var t,e,n=Wt.changedTouches,r=n.length;for(t=0;t<r;++t)(e=u[n[t].identifier])&&(ge(),e("drag"))}function y(){var t,e,n=Wt.changedTouches,i=n.length;for(r&&clearTimeout(r),r=setTimeout(function(){r=null},500),t=0;t<i;++t)(e=u[n[t].identifier])&&(me(),e("end"))}function v(t,e,n,r,i){var o,a,h,d=n(e,t),p=s.copy();if($t(new _e(f,"beforestart",o,t,c,d[0],d[1],0,0,p),function(){return null!=(Wt.subject=o=l.apply(r,i))&&(a=o.x-d[0]||0,h=o.y-d[1]||0,!0)}))return function l(s){var m,g=d;switch(s){case"start":u[t]=l,m=c++;break;case"end":delete u[t],--c;case"drag":d=n(e,t),m=c}$t(new _e(f,s,o,t,m,d[0]+a,d[1]+h,d[0]-g[0],d[1]-g[1],p),p.apply,p,[s,r,i])}}return f.filter=function(t){return arguments.length?(i="function"==typeof t?t:ve(!!t),f):i},f.container=function(t){return arguments.length?(o="function"==typeof t?t:ve(t),f):o},f.subject=function(t){return arguments.length?(l="function"==typeof t?t:ve(t),f):l},f.touchable=function(t){return arguments.length?(a="function"==typeof t?t:ve(!!t),f):a},f.on=function(){var t=s.on.apply(s,arguments);return t===s?f:t},f.clickDistance=function(t){return arguments.length?(h=(t=+t)*t,f):Math.sqrt(h)},f},Re=function(t,e,n){t.prototype=e.prototype=n,n.constructor=t};function je(t,e){var n=Object.create(t.prototype);for(var r in e)n[r]=e[r];return n}function Oe(){}var Ee="\\s*([+-]?\\d+)\\s*",Te="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",Pe="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",Ie=/^#([0-9a-f]{3})$/,Ae=/^#([0-9a-f]{6})$/,Me=new RegExp("^rgb\\("+[Ee,Ee,Ee]+"\\)$"),De=new RegExp("^rgb\\("+[Pe,Pe,Pe]+"\\)$"),Ne=new RegExp("^rgba\\("+[Ee,Ee,Ee,Te]+"\\)$"),Le=new RegExp("^rgba\\("+[Pe,Pe,Pe,Te]+"\\)$"),Fe=new RegExp("^hsl\\("+[Te,Pe,Pe]+"\\)$"),ze=new RegExp("^hsla\\("+[Te,Pe,Pe,Te]+"\\)$"),Ve={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function Be(t){var e;return t=(t+"").trim().toLowerCase(),(e=Ie.exec(t))?new Qe((e=parseInt(e[1],16))>>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):(e=Ae.exec(t))?He(parseInt(e[1],16)):(e=Me.exec(t))?new Qe(e[1],e[2],e[3],1):(e=De.exec(t))?new Qe(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=Ne.exec(t))?Ge(e[1],e[2],e[3],e[4]):(e=Le.exec(t))?Ge(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=Fe.exec(t))?Ye(e[1],e[2]/100,e[3]/100,1):(e=ze.exec(t))?Ye(e[1],e[2]/100,e[3]/100,e[4]):Ve.hasOwnProperty(t)?He(Ve[t]):"transparent"===t?new Qe(NaN,NaN,NaN,0):null}function He(t){return new Qe(t>>16&255,t>>8&255,255&t,1)}function Ge(t,e,n,r){return r<=0&&(t=e=n=NaN),new Qe(t,e,n,r)}function Ue(t){return t instanceof Oe||(t=Be(t)),t?new Qe((t=t.rgb()).r,t.g,t.b,t.opacity):new Qe}function qe(t,e,n,r){return 1===arguments.length?Ue(t):new Qe(t,e,n,null==r?1:r)}function Qe(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}function We(t){return((t=Math.max(0,Math.min(255,Math.round(t)||0)))<16?"0":"")+t.toString(16)}function Ye(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new Ke(t,e,n,r)}function Ze(t,e,n,r){return 1===arguments.length?function(t){if(t instanceof Ke)return new Ke(t.h,t.s,t.l,t.opacity);if(t instanceof Oe||(t=Be(t)),!t)return new Ke;if(t instanceof Ke)return t;var e=(t=t.rgb()).r/255,n=t.g/255,r=t.b/255,i=Math.min(e,n,r),o=Math.max(e,n,r),l=NaN,a=o-i,u=(o+i)/2;return a?(l=e===o?(n-r)/a+6*(n<r):n===o?(r-e)/a+2:(e-n)/a+4,a/=u<.5?o+i:2-o-i,l*=60):a=u>0&&u<1?0:l,new Ke(l,a,u,t.opacity)}(t):new Ke(t,e,n,null==r?1:r)}function Ke(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function Xe(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}Re(Oe,Be,{displayable:function(){return this.rgb().displayable()},hex:function(){return this.rgb().hex()},toString:function(){return this.rgb()+""}}),Re(Qe,qe,je(Oe,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new Qe(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new Qe(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return 0<=this.r&&this.r<=255&&0<=this.g&&this.g<=255&&0<=this.b&&this.b<=255&&0<=this.opacity&&this.opacity<=1},hex:function(){return"#"+We(this.r)+We(this.g)+We(this.b)},toString:function(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===t?")":", "+t+")")}})),Re(Ke,Ze,je(Oe,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new Ke(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new Ke(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new Qe(Xe(t>=240?t-240:t+120,i,r),Xe(t,i,r),Xe(t<120?t+240:t-120,i,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1}}));var $e=Math.PI/180,Je=180/Math.PI,tn=.96422,en=1,nn=.82521,rn=4/29,on=6/29,ln=3*on*on,an=on*on*on;function un(t){if(t instanceof hn)return new hn(t.l,t.a,t.b,t.opacity);if(t instanceof vn){if(isNaN(t.h))return new hn(t.l,0,0,t.opacity);var e=t.h*$e;return new hn(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}t instanceof Qe||(t=Ue(t));var n,r,i=mn(t.r),o=mn(t.g),l=mn(t.b),a=fn((.2225045*i+.7168786*o+.0606169*l)/en);return i===o&&o===l?n=r=a:(n=fn((.4360747*i+.3850649*o+.1430804*l)/tn),r=fn((.0139322*i+.0971045*o+.7141733*l)/nn)),new hn(116*a-16,500*(n-a),200*(a-r),t.opacity)}function sn(t,e){return new hn(t,0,0,null==e?1:e)}function cn(t,e,n,r){return 1===arguments.length?un(t):new hn(t,e,n,null==r?1:r)}function hn(t,e,n,r){this.l=+t,this.a=+e,this.b=+n,this.opacity=+r}function fn(t){return t>an?Math.pow(t,1/3):t/ln+rn}function dn(t){return t>on?t*t*t:ln*(t-rn)}function pn(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function mn(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function gn(t){if(t instanceof vn)return new vn(t.h,t.c,t.l,t.opacity);if(t instanceof hn||(t=un(t)),0===t.a&&0===t.b)return new vn(NaN,0,t.l,t.opacity);var e=Math.atan2(t.b,t.a)*Je;return new vn(e<0?e+360:e,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function bn(t,e,n,r){return 1===arguments.length?gn(t):new vn(n,e,t,null==r?1:r)}function yn(t,e,n,r){return 1===arguments.length?gn(t):new vn(t,e,n,null==r?1:r)}function vn(t,e,n,r){this.h=+t,this.c=+e,this.l=+n,this.opacity=+r}Re(hn,cn,je(Oe,{brighter:function(t){return new hn(this.l+18*(null==t?1:t),this.a,this.b,this.opacity)},darker:function(t){return new hn(this.l-18*(null==t?1:t),this.a,this.b,this.opacity)},rgb:function(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,n=isNaN(this.b)?t:t-this.b/200;return new Qe(pn(3.1338561*(e=tn*dn(e))-1.6168667*(t=en*dn(t))-.4906146*(n=nn*dn(n))),pn(-.9787684*e+1.9161415*t+.033454*n),pn(.0719453*e-.2289914*t+1.4052427*n),this.opacity)}})),Re(vn,yn,je(Oe,{brighter:function(t){return new vn(this.h,this.c,this.l+18*(null==t?1:t),this.opacity)},darker:function(t){return new vn(this.h,this.c,this.l-18*(null==t?1:t),this.opacity)},rgb:function(){return un(this).rgb()}}));var _n=-.29227,wn=-.90649,xn=1.97294,Sn=xn*wn,Cn=1.78277*xn,kn=1.78277*_n- -.14861*wn;function Rn(t,e,n,r){return 1===arguments.length?function(t){if(t instanceof jn)return new jn(t.h,t.s,t.l,t.opacity);t instanceof Qe||(t=Ue(t));var e=t.g/255,n=t.b/255,r=(kn*n+Sn*(t.r/255)-Cn*e)/(kn+Sn-Cn),i=n-r,o=(xn*(e-r)-_n*i)/wn,l=Math.sqrt(o*o+i*i)/(xn*r*(1-r)),a=l?Math.atan2(o,i)*Je-120:NaN;return new jn(a<0?a+360:a,l,r,t.opacity)}(t):new jn(t,e,n,null==r?1:r)}function jn(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function On(t,e,n,r,i){var o=t*t,l=o*t;return((1-3*t+3*o-l)*e+(4-6*o+3*l)*n+(1+3*t+3*o-3*l)*r+l*i)/6}Re(jn,Rn,je(Oe,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new jn(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new jn(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=isNaN(this.h)?0:(this.h+120)*$e,e=+this.l,n=isNaN(this.s)?0:this.s*e*(1-e),r=Math.cos(t),i=Math.sin(t);return new Qe(255*(e+n*(-.14861*r+1.78277*i)),255*(e+n*(_n*r+wn*i)),255*(e+n*(xn*r)),this.opacity)}}));var En=function(t){var e=t.length-1;return function(n){var r=n<=0?n=0:n>=1?(n=1,e-1):Math.floor(n*e),i=t[r],o=t[r+1];return On((n-r/e)*e,r>0?t[r-1]:2*i-o,i,o,r<e-1?t[r+2]:2*o-i)}},Tn=function(t){var e=t.length;return function(n){var r=Math.floor(((n%=1)<0?++n:n)*e);return On((n-r/e)*e,t[(r+e-1)%e],t[r%e],t[(r+1)%e],t[(r+2)%e])}},Pn=function(t){return function(){return t}};function In(t,e){return function(n){return t+n*e}}function An(t,e){var n=e-t;return n?In(t,n>180||n<-180?n-360*Math.round(n/360):n):Pn(isNaN(t)?e:t)}function Mn(t,e){var n=e-t;return n?In(t,n):Pn(isNaN(t)?e:t)}var Dn=function t(e){var n=function(t){return 1==(t=+t)?Mn:function(e,n){return n-e?function(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}(e,n,t):Pn(isNaN(e)?n:e)}}(e);function r(t,e){var r=n((t=qe(t)).r,(e=qe(e)).r),i=n(t.g,e.g),o=n(t.b,e.b),l=Mn(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=i(e),t.b=o(e),t.opacity=l(e),t+""}}return r.gamma=t,r}(1);function Nn(t){return function(e){var n,r,i=e.length,o=new Array(i),l=new Array(i),a=new Array(i);for(n=0;n<i;++n)r=qe(e[n]),o[n]=r.r||0,l[n]=r.g||0,a[n]=r.b||0;return o=t(o),l=t(l),a=t(a),r.opacity=1,function(t){return r.r=o(t),r.g=l(t),r.b=a(t),r+""}}}var Ln,Fn,zn,Vn,Bn=Nn(En),Hn=Nn(Tn),Gn=function(t,e){var n,r=e?e.length:0,i=t?Math.min(r,t.length):0,o=new Array(i),l=new Array(r);for(n=0;n<i;++n)o[n]=Kn(t[n],e[n]);for(;n<r;++n)l[n]=e[n];return function(t){for(n=0;n<i;++n)l[n]=o[n](t);return l}},Un=function(t,e){var n=new Date;return e-=t=+t,function(r){return n.setTime(t+e*r),n}},qn=function(t,e){return e-=t=+t,function(n){return t+e*n}},Qn=function(t,e){var n,r={},i={};for(n in null!==t&&"object"==typeof t||(t={}),null!==e&&"object"==typeof e||(e={}),e)n in t?r[n]=Kn(t[n],e[n]):i[n]=e[n];return function(t){for(n in r)i[n]=r[n](t);return i}},Wn=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,Yn=new RegExp(Wn.source,"g"),Zn=function(t,e){var n,r,i,o=Wn.lastIndex=Yn.lastIndex=0,l=-1,a=[],u=[];for(t+="",e+="";(n=Wn.exec(t))&&(r=Yn.exec(e));)(i=r.index)>o&&(i=e.slice(o,i),a[l]?a[l]+=i:a[++l]=i),(n=n[0])===(r=r[0])?a[l]?a[l]+=r:a[++l]=r:(a[++l]=null,u.push({i:l,x:qn(n,r)})),o=Yn.lastIndex;return o<e.length&&(i=e.slice(o),a[l]?a[l]+=i:a[++l]=i),a.length<2?u[0]?function(t){return function(e){return t(e)+""}}(u[0].x):function(t){return function(){return t}}(e):(e=u.length,function(t){for(var n,r=0;r<e;++r)a[(n=u[r]).i]=n.x(t);return a.join("")})},Kn=function(t,e){var n,r=typeof e;return null==e||"boolean"===r?Pn(e):("number"===r?qn:"string"===r?(n=Be(e))?(e=n,Dn):Zn:e instanceof Be?Dn:e instanceof Date?Un:Array.isArray(e)?Gn:"function"!=typeof e.valueOf&&"function"!=typeof e.toString||isNaN(e)?Qn:qn)(t,e)},Xn=function(t,e){return e-=t=+t,function(n){return Math.round(t+e*n)}},$n=180/Math.PI,Jn={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1},tr=function(t,e,n,r,i,o){var l,a,u;return(l=Math.sqrt(t*t+e*e))&&(t/=l,e/=l),(u=t*n+e*r)&&(n-=t*u,r-=e*u),(a=Math.sqrt(n*n+r*r))&&(n/=a,r/=a,u/=a),t*r<e*n&&(t=-t,e=-e,u=-u,l=-l),{translateX:i,translateY:o,rotate:Math.atan2(e,t)*$n,skewX:Math.atan(u)*$n,scaleX:l,scaleY:a}};function er(t,e,n,r){function i(t){return t.length?t.pop()+" ":""}return function(o,l){var a=[],u=[];return o=t(o),l=t(l),function(t,r,i,o,l,a){if(t!==i||r!==o){var u=l.push("translate(",null,e,null,n);a.push({i:u-4,x:qn(t,i)},{i:u-2,x:qn(r,o)})}else(i||o)&&l.push("translate("+i+e+o+n)}(o.translateX,o.translateY,l.translateX,l.translateY,a,u),function(t,e,n,o){t!==e?(t-e>180?e+=360:e-t>180&&(t+=360),o.push({i:n.push(i(n)+"rotate(",null,r)-2,x:qn(t,e)})):e&&n.push(i(n)+"rotate("+e+r)}(o.rotate,l.rotate,a,u),function(t,e,n,o){t!==e?o.push({i:n.push(i(n)+"skewX(",null,r)-2,x:qn(t,e)}):e&&n.push(i(n)+"skewX("+e+r)}(o.skewX,l.skewX,a,u),function(t,e,n,r,o,l){if(t!==n||e!==r){var a=o.push(i(o)+"scale(",null,",",null,")");l.push({i:a-4,x:qn(t,n)},{i:a-2,x:qn(e,r)})}else 1===n&&1===r||o.push(i(o)+"scale("+n+","+r+")")}(o.scaleX,o.scaleY,l.scaleX,l.scaleY,a,u),o=l=null,function(t){for(var e,n=-1,r=u.length;++n<r;)a[(e=u[n]).i]=e.x(t);return a.join("")}}}var nr=er(function(t){return"none"===t?Jn:(Ln||(Ln=document.createElement("DIV"),Fn=document.documentElement,zn=document.defaultView),Ln.style.transform=t,t=zn.getComputedStyle(Fn.appendChild(Ln),null).getPropertyValue("transform"),Fn.removeChild(Ln),t=t.slice(7,-1).split(","),tr(+t[0],+t[1],+t[2],+t[3],+t[4],+t[5]))},"px, ","px)","deg)"),rr=er(function(t){return null==t?Jn:(Vn||(Vn=document.createElementNS("http://www.w3.org/2000/svg","g")),Vn.setAttribute("transform",t),(t=Vn.transform.baseVal.consolidate())?tr((t=t.matrix).a,t.b,t.c,t.d,t.e,t.f):Jn)},", ",")",")"),ir=Math.SQRT2;function or(t){return((t=Math.exp(t))+1/t)/2}var lr=function(t,e){var n,r,i=t[0],o=t[1],l=t[2],a=e[2],u=e[0]-i,s=e[1]-o,c=u*u+s*s;if(c<1e-12)r=Math.log(a/l)/ir,n=function(t){return[i+t*u,o+t*s,l*Math.exp(ir*t*r)]};else{var h=Math.sqrt(c),f=(a*a-l*l+4*c)/(2*l*2*h),d=(a*a-l*l-4*c)/(2*a*2*h),p=Math.log(Math.sqrt(f*f+1)-f),m=Math.log(Math.sqrt(d*d+1)-d);r=(m-p)/ir,n=function(t){var e,n=t*r,a=or(p),c=l/(2*h)*(a*(e=ir*n+p,((e=Math.exp(2*e))-1)/(e+1))-function(t){return((t=Math.exp(t))-1/t)/2}(p));return[i+c*u,o+c*s,l*a/or(ir*n+p)]}}return n.duration=1e3*r,n};function ar(t){return function(e,n){var r=t((e=Ze(e)).h,(n=Ze(n)).h),i=Mn(e.s,n.s),o=Mn(e.l,n.l),l=Mn(e.opacity,n.opacity);return function(t){return e.h=r(t),e.s=i(t),e.l=o(t),e.opacity=l(t),e+""}}}var ur=ar(An),sr=ar(Mn);function cr(t,e){var n=Mn((t=cn(t)).l,(e=cn(e)).l),r=Mn(t.a,e.a),i=Mn(t.b,e.b),o=Mn(t.opacity,e.opacity);return function(e){return t.l=n(e),t.a=r(e),t.b=i(e),t.opacity=o(e),t+""}}function hr(t){return function(e,n){var r=t((e=yn(e)).h,(n=yn(n)).h),i=Mn(e.c,n.c),o=Mn(e.l,n.l),l=Mn(e.opacity,n.opacity);return function(t){return e.h=r(t),e.c=i(t),e.l=o(t),e.opacity=l(t),e+""}}}var fr=hr(An),dr=hr(Mn);function pr(t){return function e(n){function r(e,r){var i=t((e=Rn(e)).h,(r=Rn(r)).h),o=Mn(e.s,r.s),l=Mn(e.l,r.l),a=Mn(e.opacity,r.opacity);return function(t){return e.h=i(t),e.s=o(t),e.l=l(Math.pow(t,n)),e.opacity=a(t),e+""}}return n=+n,r.gamma=e,r}(1)}var mr=pr(An),gr=pr(Mn);function br(t,e){for(var n=0,r=e.length-1,i=e[0],o=new Array(r<0?0:r);n<r;)o[n]=t(i,i=e[++n]);return function(t){var e=Math.max(0,Math.min(r-1,Math.floor(t*=r)));return o[e](t-e)}}var yr,vr,_r=function(t,e){for(var n=new Array(e),r=0;r<e;++r)n[r]=t(r/(e-1));return n},wr=0,xr=0,Sr=0,Cr=1e3,kr=0,Rr=0,jr=0,Or="object"==typeof performance&&performance.now?performance:Date,Er="object"==typeof window&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};function Tr(){return Rr||(Er(Pr),Rr=Or.now()+jr)}function Pr(){Rr=0}function Ir(){this._call=this._time=this._next=null}function Ar(t,e,n){var r=new Ir;return r.restart(t,e,n),r}function Mr(){Tr(),++wr;for(var t,e=yr;e;)(t=Rr-e._time)>=0&&e._call.call(null,t),e=e._next;--wr}function Dr(){Rr=(kr=Or.now())+jr,wr=xr=0;try{Mr()}finally{wr=0,function(){for(var t,e,n=yr,r=1/0;n;)n._call?(r>n._time&&(r=n._time),t=n,n=n._next):(e=n._next,n._next=null,n=t?t._next=e:yr=e);vr=t,Lr(r)}(),Rr=0}}function Nr(){var t=Or.now(),e=t-kr;e>Cr&&(jr-=e,kr=t)}function Lr(t){wr||(xr&&(xr=clearTimeout(xr)),t-Rr>24?(t<1/0&&(xr=setTimeout(Dr,t-Or.now()-jr)),Sr&&(Sr=clearInterval(Sr))):(Sr||(kr=Or.now(),Sr=setInterval(Nr,Cr)),wr=1,Er(Dr)))}Ir.prototype=Ar.prototype={constructor:Ir,restart:function(t,e,n){if("function"!=typeof t)throw new TypeError("callback is not a function");n=(null==n?Tr():+n)+(null==e?0:+e),this._next||vr===this||(vr?vr._next=this:yr=this,vr=this),this._call=t,this._time=n,Lr()},stop:function(){this._call&&(this._call=null,this._time=1/0,Lr())}};var Fr=function(t,e,n){var r=new Ir;return r.restart(function(n){r.stop(),t(n+e)},e=null==e?0:+e,n),r},zr=function(t,e,n){var r=new Ir,i=e;return null==e?(r.restart(t,e,n),r):(e=+e,n=null==n?Tr():+n,r.restart(function o(l){l+=i,r.restart(o,i+=e,n),t(l)},e,n),r)},Vr=ft("start","end","interrupt"),Br=[],Hr=0,Gr=1,Ur=2,qr=3,Qr=4,Wr=5,Yr=6,Zr=function(t,e,n,r,i,o){var l=t.__transition;if(l){if(n in l)return}else t.__transition={};!function(t,e,n){var r,i=t.__transition;function o(u){var s,c,h,f;if(n.state!==Gr)return a();for(s in i)if((f=i[s]).name===n.name){if(f.state===qr)return Fr(o);f.state===Qr?(f.state=Yr,f.timer.stop(),f.on.call("interrupt",t,t.__data__,f.index,f.group),delete i[s]):+s<e&&(f.state=Yr,f.timer.stop(),delete i[s])}if(Fr(function(){n.state===qr&&(n.state=Qr,n.timer.restart(l,n.delay,n.time),l(u))}),n.state=Ur,n.on.call("start",t,t.__data__,n.index,n.group),n.state===Ur){for(n.state=qr,r=new Array(h=n.tween.length),s=0,c=-1;s<h;++s)(f=n.tween[s].value.call(t,t.__data__,n.index,n.group))&&(r[++c]=f);r.length=c+1}}function l(e){for(var i=e<n.duration?n.ease.call(null,e/n.duration):(n.timer.restart(a),n.state=Wr,1),o=-1,l=r.length;++o<l;)r[o].call(null,i);n.state===Wr&&(n.on.call("end",t,t.__data__,n.index,n.group),a())}function a(){for(var r in n.state=Yr,n.timer.stop(),delete i[e],i)return;delete t.__transition}i[e]=n,n.timer=Ar(function(t){n.state=Gr,n.timer.restart(o,n.delay,n.time),n.delay<=t&&o(t-n.delay)},0,n.time)}(t,n,{name:e,index:r,group:i,on:Vr,tween:Br,time:o.time,delay:o.delay,duration:o.duration,ease:o.ease,timer:null,state:Hr})};function Kr(t,e){var n=$r(t,e);if(n.state>Hr)throw new Error("too late; already scheduled");return n}function Xr(t,e){var n=$r(t,e);if(n.state>Ur)throw new Error("too late; already started");return n}function $r(t,e){var n=t.__transition;if(!n||!(n=n[e]))throw new Error("transition not found");return n}var Jr=function(t,e){var n,r,i,o=t.__transition,l=!0;if(o){for(i in e=null==e?null:e+"",o)(n=o[i]).name===e?(r=n.state>Ur&&n.state<Wr,n.state=Yr,n.timer.stop(),r&&n.on.call("interrupt",t,t.__data__,n.index,n.group),delete o[i]):l=!1;l&&delete t.__transition}};function ti(t,e,n){var r=t._id;return t.each(function(){var t=Xr(this,r);(t.value||(t.value={}))[e]=n.apply(this,arguments)}),function(t){return $r(t,r).value[e]}}var ei=function(t,e){var n;return("number"==typeof e?qn:e instanceof Be?Dn:(n=Be(e))?(e=n,Dn):Zn)(t,e)},ni=re.prototype.constructor,ri=0;function ii(t,e,n,r){this._groups=t,this._parents=e,this._name=n,this._id=r}function oi(t){return re().transition(t)}function li(){return++ri}var ai=re.prototype;function ui(t){return+t}function si(t){return t*t}function ci(t){return t*(2-t)}function hi(t){return((t*=2)<=1?t*t:--t*(2-t)+1)/2}function fi(t){return t*t*t}function di(t){return--t*t*t+1}function pi(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}ii.prototype=oi.prototype={constructor:ii,select:function(t){var e=this._name,n=this._id;"function"!=typeof t&&(t=yt(t));for(var r=this._groups,i=r.length,o=new Array(i),l=0;l<i;++l)for(var a,u,s=r[l],c=s.length,h=o[l]=new Array(c),f=0;f<c;++f)(a=s[f])&&(u=t.call(a,a.__data__,f,s))&&("__data__"in a&&(u.__data__=a.__data__),h[f]=u,Zr(h[f],e,n,f,h,$r(a,n)));return new ii(o,this._parents,e,n)},selectAll:function(t){var e=this._name,n=this._id;"function"!=typeof t&&(t=_t(t));for(var r=this._groups,i=r.length,o=[],l=[],a=0;a<i;++a)for(var u,s=r[a],c=s.length,h=0;h<c;++h)if(u=s[h]){for(var f,d=t.call(u,u.__data__,h,s),p=$r(u,n),m=0,g=d.length;m<g;++m)(f=d[m])&&Zr(f,e,n,m,d,p);o.push(d),l.push(u)}return new ii(o,l,e,n)},filter:function(t){"function"!=typeof t&&(t=Ct(t));for(var e=this._groups,n=e.length,r=new Array(n),i=0;i<n;++i)for(var o,l=e[i],a=l.length,u=r[i]=[],s=0;s<a;++s)(o=l[s])&&t.call(o,o.__data__,s,l)&&u.push(o);return new ii(r,this._parents,this._name,this._id)},merge:function(t){if(t._id!==this._id)throw new Error;for(var e=this._groups,n=t._groups,r=e.length,i=Math.min(r,n.length),o=new Array(r),l=0;l<i;++l)for(var a,u=e[l],s=n[l],c=u.length,h=o[l]=new Array(c),f=0;f<c;++f)(a=u[f]||s[f])&&(h[f]=a);for(;l<r;++l)o[l]=e[l];return new ii(o,this._parents,this._name,this._id)},selection:function(){return new ni(this._groups,this._parents)},transition:function(){for(var t=this._name,e=this._id,n=li(),r=this._groups,i=r.length,o=0;o<i;++o)for(var l,a=r[o],u=a.length,s=0;s<u;++s)if(l=a[s]){var c=$r(l,e);Zr(l,t,n,s,a,{time:c.time+c.delay+c.duration,delay:0,duration:c.duration,ease:c.ease})}return new ii(r,this._parents,t,n)},call:ai.call,nodes:ai.nodes,node:ai.node,size:ai.size,empty:ai.empty,each:ai.each,on:function(t,e){var n=this._id;return arguments.length<2?$r(this.node(),n).on.on(t):this.each(function(t,e,n){var r,i,o=function(t){return(t+"").trim().split(/^|\s+/).every(function(t){var e=t.indexOf(".");return e>=0&&(t=t.slice(0,e)),!t||"start"===t})}(e)?Kr:Xr;return function(){var l=o(this,t),a=l.on;a!==r&&(i=(r=a).copy()).on(e,n),l.on=i}}(n,t,e))},attr:function(t,e){var n=mt(t),r="transform"===n?rr:ei;return this.attrTween(t,"function"==typeof e?(n.local?function(t,e,n){var r,i,o;return function(){var l,a=n(this);if(null!=a)return(l=this.getAttributeNS(t.space,t.local))===a?null:l===r&&a===i?o:o=e(r=l,i=a);this.removeAttributeNS(t.space,t.local)}}:function(t,e,n){var r,i,o;return function(){var l,a=n(this);if(null!=a)return(l=this.getAttribute(t))===a?null:l===r&&a===i?o:o=e(r=l,i=a);this.removeAttribute(t)}})(n,r,ti(this,"attr."+t,e)):null==e?(n.local?function(t){return function(){this.removeAttributeNS(t.space,t.local)}}:function(t){return function(){this.removeAttribute(t)}})(n):(n.local?function(t,e,n){var r,i;return function(){var o=this.getAttributeNS(t.space,t.local);return o===n?null:o===r?i:i=e(r=o,n)}}:function(t,e,n){var r,i;return function(){var o=this.getAttribute(t);return o===n?null:o===r?i:i=e(r=o,n)}})(n,r,e+""))},attrTween:function(t,e){var n="attr."+t;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(null==e)return this.tween(n,null);if("function"!=typeof e)throw new Error;var r=mt(t);return this.tween(n,(r.local?function(t,e){function n(){var n=this,r=e.apply(n,arguments);return r&&function(e){n.setAttributeNS(t.space,t.local,r(e))}}return n._value=e,n}:function(t,e){function n(){var n=this,r=e.apply(n,arguments);return r&&function(e){n.setAttribute(t,r(e))}}return n._value=e,n})(r,e))},style:function(t,e,n){var r="transform"==(t+="")?nr:ei;return null==e?this.styleTween(t,function(t,e){var n,r,i;return function(){var o=It(this,t),l=(this.style.removeProperty(t),It(this,t));return o===l?null:o===n&&l===r?i:i=e(n=o,r=l)}}(t,r)).on("end.style."+t,function(t){return function(){this.style.removeProperty(t)}}(t)):this.styleTween(t,"function"==typeof e?function(t,e,n){var r,i,o;return function(){var l=It(this,t),a=n(this);return null==a&&(this.style.removeProperty(t),a=It(this,t)),l===a?null:l===r&&a===i?o:o=e(r=l,i=a)}}(t,r,ti(this,"style."+t,e)):function(t,e,n){var r,i;return function(){var o=It(this,t);return o===n?null:o===r?i:i=e(r=o,n)}}(t,r,e+""),n)},styleTween:function(t,e,n){var r="style."+(t+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(null==e)return this.tween(r,null);if("function"!=typeof e)throw new Error;return this.tween(r,function(t,e,n){function r(){var r=this,i=e.apply(r,arguments);return i&&function(e){r.style.setProperty(t,i(e),n)}}return r._value=e,r}(t,e,null==n?"":n))},text:function(t){return this.tween("text","function"==typeof t?function(t){return function(){var e=t(this);this.textContent=null==e?"":e}}(ti(this,"text",t)):function(t){return function(){this.textContent=t}}(null==t?"":t+""))},remove:function(){return this.on("end.remove",(t=this._id,function(){var e=this.parentNode;for(var n in this.__transition)if(+n!==t)return;e&&e.removeChild(this)}));var t},tween:function(t,e){var n=this._id;if(t+="",arguments.length<2){for(var r,i=$r(this.node(),n).tween,o=0,l=i.length;o<l;++o)if((r=i[o]).name===t)return r.value;return null}return this.each((null==e?function(t,e){var n,r;return function(){var i=Xr(this,t),o=i.tween;if(o!==n)for(var l=0,a=(r=n=o).length;l<a;++l)if(r[l].name===e){(r=r.slice()).splice(l,1);break}i.tween=r}}:function(t,e,n){var r,i;if("function"!=typeof n)throw new Error;return function(){var o=Xr(this,t),l=o.tween;if(l!==r){i=(r=l).slice();for(var a={name:e,value:n},u=0,s=i.length;u<s;++u)if(i[u].name===e){i[u]=a;break}u===s&&i.push(a)}o.tween=i}})(n,t,e))},delay:function(t){var e=this._id;return arguments.length?this.each(("function"==typeof t?function(t,e){return function(){Kr(this,t).delay=+e.apply(this,arguments)}}:function(t,e){return e=+e,function(){Kr(this,t).delay=e}})(e,t)):$r(this.node(),e).delay},duration:function(t){var e=this._id;return arguments.length?this.each(("function"==typeof t?function(t,e){return function(){Xr(this,t).duration=+e.apply(this,arguments)}}:function(t,e){return e=+e,function(){Xr(this,t).duration=e}})(e,t)):$r(this.node(),e).duration},ease:function(t){var e=this._id;return arguments.length?this.each(function(t,e){if("function"!=typeof e)throw new Error;return function(){Xr(this,t).ease=e}}(e,t)):$r(this.node(),e).ease}};var mi=function t(e){function n(t){return Math.pow(t,e)}return e=+e,n.exponent=t,n}(3),gi=function t(e){function n(t){return 1-Math.pow(1-t,e)}return e=+e,n.exponent=t,n}(3),bi=function t(e){function n(t){return((t*=2)<=1?Math.pow(t,e):2-Math.pow(2-t,e))/2}return e=+e,n.exponent=t,n}(3),yi=Math.PI,vi=yi/2;function _i(t){return 1-Math.cos(t*vi)}function wi(t){return Math.sin(t*vi)}function xi(t){return(1-Math.cos(yi*t))/2}function Si(t){return Math.pow(2,10*t-10)}function Ci(t){return 1-Math.pow(2,-10*t)}function ki(t){return((t*=2)<=1?Math.pow(2,10*t-10):2-Math.pow(2,10-10*t))/2}function Ri(t){return 1-Math.sqrt(1-t*t)}function ji(t){return Math.sqrt(1- --t*t)}function Oi(t){return((t*=2)<=1?1-Math.sqrt(1-t*t):Math.sqrt(1-(t-=2)*t)+1)/2}var Ei=4/11,Ti=6/11,Pi=8/11,Ii=.75,Ai=9/11,Mi=10/11,Di=.9375,Ni=21/22,Li=63/64,Fi=1/Ei/Ei;function zi(t){return 1-Vi(1-t)}function Vi(t){return(t=+t)<Ei?Fi*t*t:t<Pi?Fi*(t-=Ti)*t+Ii:t<Mi?Fi*(t-=Ai)*t+Di:Fi*(t-=Ni)*t+Li}function Bi(t){return((t*=2)<=1?1-Vi(1-t):Vi(t-1)+1)/2}var Hi=function t(e){function n(t){return t*t*((e+1)*t-e)}return e=+e,n.overshoot=t,n}(1.70158),Gi=function t(e){function n(t){return--t*t*((e+1)*t+e)+1}return e=+e,n.overshoot=t,n}(1.70158),Ui=function t(e){function n(t){return((t*=2)<1?t*t*((e+1)*t-e):(t-=2)*t*((e+1)*t+e)+2)/2}return e=+e,n.overshoot=t,n}(1.70158),qi=2*Math.PI,Qi=function t(e,n){var r=Math.asin(1/(e=Math.max(1,e)))*(n/=qi);function i(t){return e*Math.pow(2,10*--t)*Math.sin((r-t)/n)}return i.amplitude=function(e){return t(e,n*qi)},i.period=function(n){return t(e,n)},i}(1,.3),Wi=function t(e,n){var r=Math.asin(1/(e=Math.max(1,e)))*(n/=qi);function i(t){return 1-e*Math.pow(2,-10*(t=+t))*Math.sin((t+r)/n)}return i.amplitude=function(e){return t(e,n*qi)},i.period=function(n){return t(e,n)},i}(1,.3),Yi=function t(e,n){var r=Math.asin(1/(e=Math.max(1,e)))*(n/=qi);function i(t){return((t=2*t-1)<0?e*Math.pow(2,10*t)*Math.sin((r-t)/n):2-e*Math.pow(2,-10*t)*Math.sin((r+t)/n))/2}return i.amplitude=function(e){return t(e,n*qi)},i.period=function(n){return t(e,n)},i}(1,.3),Zi={time:null,delay:0,duration:250,ease:pi};function Ki(t,e){for(var n;!(n=t.__transition)||!(n=n[e]);)if(!(t=t.parentNode))return Zi.time=Tr(),Zi;return n}re.prototype.interrupt=function(t){return this.each(function(){Jr(this,t)})},re.prototype.transition=function(t){var e,n;t instanceof ii?(e=t._id,t=t._name):(e=li(),(n=Zi).time=Tr(),t=null==t?null:t+"");for(var r=this._groups,i=r.length,o=0;o<i;++o)for(var l,a=r[o],u=a.length,s=0;s<u;++s)(l=a[s])&&Zr(l,t,e,s,a,n||Ki(l,e));return new ii(r,this._parents,t,e)};var Xi=[null],$i=function(t,e){var n,r,i=t.__transition;if(i)for(r in e=null==e?null:e+"",i)if((n=i[r]).state>Gr&&n.name===e)return new ii([[t]],Xi,e,+r);return null},Ji=function(t){return function(){return t}},to=function(t,e,n){this.target=t,this.type=e,this.selection=n};function eo(){Wt.stopImmediatePropagation()}var no=function(){Wt.preventDefault(),Wt.stopImmediatePropagation()},ro={name:"drag"},io={name:"space"},oo={name:"handle"},lo={name:"center"},ao={name:"x",handles:["e","w"].map(go),input:function(t,e){return t&&[[t[0],e[0][1]],[t[1],e[1][1]]]},output:function(t){return t&&[t[0][0],t[1][0]]}},uo={name:"y",handles:["n","s"].map(go),input:function(t,e){return t&&[[e[0][0],t[0]],[e[1][0],t[1]]]},output:function(t){return t&&[t[0][1],t[1][1]]}},so={name:"xy",handles:["n","e","s","w","nw","ne","se","sw"].map(go),input:function(t){return t},output:function(t){return t}},co={overlay:"crosshair",selection:"move",n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},ho={e:"w",w:"e",nw:"ne",ne:"nw",se:"sw",sw:"se"},fo={n:"s",s:"n",nw:"sw",ne:"se",se:"ne",sw:"nw"},po={overlay:1,selection:1,n:null,e:1,s:null,w:-1,nw:-1,ne:1,se:1,sw:-1},mo={overlay:1,selection:1,n:-1,e:null,s:1,w:null,nw:-1,ne:-1,se:1,sw:1};function go(t){return{type:t}}function bo(){return!Wt.button}function yo(){var t=this.ownerSVGElement||this;return[[0,0],[t.width.baseVal.value,t.height.baseVal.value]]}function vo(t){for(;!t.__brush;)if(!(t=t.parentNode))return;return t.__brush}function _o(t){return t[0][0]===t[1][0]||t[0][1]===t[1][1]}function wo(t){var e=t.__brush;return e?e.dim.output(e.selection):null}function xo(){return ko(ao)}function So(){return ko(uo)}var Co=function(){return ko(so)};function ko(t){var e,n=yo,r=bo,i=ft(l,"start","brush","end"),o=6;function l(e){var n=e.property("__brush",h).selectAll(".overlay").data([go("overlay")]);n.enter().append("rect").attr("class","overlay").attr("pointer-events","all").attr("cursor",co.overlay).merge(n).each(function(){var t=vo(this).extent;ie(this).attr("x",t[0][0]).attr("y",t[0][1]).attr("width",t[1][0]-t[0][0]).attr("height",t[1][1]-t[0][1])}),e.selectAll(".selection").data([go("selection")]).enter().append("rect").attr("class","selection").attr("cursor",co.selection).attr("fill","#777").attr("fill-opacity",.3).attr("stroke","#fff").attr("shape-rendering","crispEdges");var r=e.selectAll(".handle").data(t.handles,function(t){return t.type});r.exit().remove(),r.enter().append("rect").attr("class",function(t){return"handle handle--"+t.type}).attr("cursor",function(t){return co[t.type]}),e.each(a).attr("fill","none").attr("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush touchstart.brush",c)}function a(){var t=ie(this),e=vo(this).selection;e?(t.selectAll(".selection").style("display",null).attr("x",e[0][0]).attr("y",e[0][1]).attr("width",e[1][0]-e[0][0]).attr("height",e[1][1]-e[0][1]),t.selectAll(".handle").style("display",null).attr("x",function(t){return"e"===t.type[t.type.length-1]?e[1][0]-o/2:e[0][0]-o/2}).attr("y",function(t){return"s"===t.type[0]?e[1][1]-o/2:e[0][1]-o/2}).attr("width",function(t){return"n"===t.type||"s"===t.type?e[1][0]-e[0][0]+o:o}).attr("height",function(t){return"e"===t.type||"w"===t.type?e[1][1]-e[0][1]+o:o})):t.selectAll(".selection,.handle").style("display","none").attr("x",null).attr("y",null).attr("width",null).attr("height",null)}function u(t,e){return t.__brush.emitter||new s(t,e)}function s(t,e){this.that=t,this.args=e,this.state=t.__brush,this.active=0}function c(){if(Wt.touches){if(Wt.changedTouches.length<Wt.touches.length)return no()}else if(e)return;if(r.apply(this,arguments)){var n,i,o,l,s,c,h,f,d,p,m,g,b,y=this,v=Wt.target.__data__.type,_="selection"===(Wt.metaKey?v="overlay":v)?ro:Wt.altKey?lo:oo,w=t===uo?null:po[v],x=t===ao?null:mo[v],S=vo(y),C=S.extent,k=S.selection,R=C[0][0],j=C[0][1],O=C[1][0],E=C[1][1],T=w&&x&&Wt.shiftKey,P=he(y),I=P,A=u(y,arguments).beforestart();"overlay"===v?S.selection=k=[[n=t===uo?R:P[0],o=t===ao?j:P[1]],[s=t===uo?O:n,h=t===ao?E:o]]:(n=k[0][0],o=k[0][1],s=k[1][0],h=k[1][1]),i=n,l=o,c=s,f=h;var M=ie(y).attr("pointer-events","none"),D=M.selectAll(".overlay").attr("cursor",co[v]);if(Wt.touches)M.on("touchmove.brush",L,!0).on("touchend.brush touchcancel.brush",z,!0);else{var N=ie(Wt.view).on("keydown.brush",function(){switch(Wt.keyCode){case 16:T=w&&x;break;case 18:_===oo&&(w&&(s=c-d*w,n=i+d*w),x&&(h=f-p*x,o=l+p*x),_=lo,F());break;case 32:_!==oo&&_!==lo||(w<0?s=c-d:w>0&&(n=i-d),x<0?h=f-p:x>0&&(o=l-p),_=io,D.attr("cursor",co.selection),F());break;default:return}no()},!0).on("keyup.brush",function(){switch(Wt.keyCode){case 16:T&&(g=b=T=!1,F());break;case 18:_===lo&&(w<0?s=c:w>0&&(n=i),x<0?h=f:x>0&&(o=l),_=oo,F());break;case 32:_===io&&(Wt.altKey?(w&&(s=c-d*w,n=i+d*w),x&&(h=f-p*x,o=l+p*x),_=lo):(w<0?s=c:w>0&&(n=i),x<0?h=f:x>0&&(o=l),_=oo),D.attr("cursor",co[v]),F());break;default:return}no()},!0).on("mousemove.brush",L,!0).on("mouseup.brush",z,!0);be(Wt.view)}eo(),Jr(y),a.call(y),A.start()}function L(){var t=he(y);!T||g||b||(Math.abs(t[0]-I[0])>Math.abs(t[1]-I[1])?b=!0:g=!0),I=t,m=!0,no(),F()}function F(){var t;switch(d=I[0]-P[0],p=I[1]-P[1],_){case io:case ro:w&&(d=Math.max(R-n,Math.min(O-s,d)),i=n+d,c=s+d),x&&(p=Math.max(j-o,Math.min(E-h,p)),l=o+p,f=h+p);break;case oo:w<0?(d=Math.max(R-n,Math.min(O-n,d)),i=n+d,c=s):w>0&&(d=Math.max(R-s,Math.min(O-s,d)),i=n,c=s+d),x<0?(p=Math.max(j-o,Math.min(E-o,p)),l=o+p,f=h):x>0&&(p=Math.max(j-h,Math.min(E-h,p)),l=o,f=h+p);break;case lo:w&&(i=Math.max(R,Math.min(O,n-d*w)),c=Math.max(R,Math.min(O,s+d*w))),x&&(l=Math.max(j,Math.min(E,o-p*x)),f=Math.max(j,Math.min(E,h+p*x)))}c<i&&(w*=-1,t=n,n=s,s=t,t=i,i=c,c=t,v in ho&&D.attr("cursor",co[v=ho[v]])),f<l&&(x*=-1,t=o,o=h,h=t,t=l,l=f,f=t,v in fo&&D.attr("cursor",co[v=fo[v]])),S.selection&&(k=S.selection),g&&(i=k[0][0],c=k[1][0]),b&&(l=k[0][1],f=k[1][1]),k[0][0]===i&&k[0][1]===l&&k[1][0]===c&&k[1][1]===f||(S.selection=[[i,l],[c,f]],a.call(y),A.brush())}function z(){if(eo(),Wt.touches){if(Wt.touches.length)return;e&&clearTimeout(e),e=setTimeout(function(){e=null},500),M.on("touchmove.brush touchend.brush touchcancel.brush",null)}else ye(Wt.view,m),N.on("keydown.brush keyup.brush mousemove.brush mouseup.brush",null);M.attr("pointer-events","all"),D.attr("cursor",co.overlay),S.selection&&(k=S.selection),_o(k)&&(S.selection=null,a.call(y)),A.end()}}function h(){var e=this.__brush||{selection:null};return e.extent=n.apply(this,arguments),e.dim=t,e}return l.move=function(e,n){e.selection?e.on("start.brush",function(){u(this,arguments).beforestart().start()}).on("interrupt.brush end.brush",function(){u(this,arguments).end()}).tween("brush",function(){var e=this,r=e.__brush,i=u(e,arguments),o=r.selection,l=t.input("function"==typeof n?n.apply(this,arguments):n,r.extent),s=Kn(o,l);function c(t){r.selection=1===t&&_o(l)?null:s(t),a.call(e),i.brush()}return o&&l?c:c(1)}):e.each(function(){var e=arguments,r=this.__brush,i=t.input("function"==typeof n?n.apply(this,e):n,r.extent),o=u(this,e).beforestart();Jr(this),r.selection=null==i||_o(i)?null:i,a.call(this),o.start().brush().end()})},s.prototype={beforestart:function(){return 1==++this.active&&(this.state.emitter=this,this.starting=!0),this},start:function(){return this.starting&&(this.starting=!1,this.emit("start")),this},brush:function(){return this.emit("brush"),this},end:function(){return 0==--this.active&&(delete this.state.emitter,this.emit("end")),this},emit:function(e){$t(new to(l,e,t.output(this.state.selection)),i.apply,i,[e,this.that,this.args])}},l.extent=function(t){return arguments.length?(n="function"==typeof t?t:Ji([[+t[0][0],+t[0][1]],[+t[1][0],+t[1][1]]]),l):n},l.filter=function(t){return arguments.length?(r="function"==typeof t?t:Ji(!!t),l):r},l.handleSize=function(t){return arguments.length?(o=+t,l):o},l.on=function(){var t=i.on.apply(i,arguments);return t===i?l:t},l}var Ro=Math.cos,jo=Math.sin,Oo=Math.PI,Eo=Oo/2,To=2*Oo,Po=Math.max,Io=function(){var t=0,e=null,n=null,r=null;function i(i){var o,l,a,u,s,c,h=i.length,f=[],d=x(h),p=[],m=[],g=m.groups=new Array(h),b=new Array(h*h);for(o=0,s=-1;++s<h;){for(l=0,c=-1;++c<h;)l+=i[s][c];f.push(l),p.push(x(h)),o+=l}for(e&&d.sort(function(t,n){return e(f[t],f[n])}),n&&p.forEach(function(t,e){t.sort(function(t,r){return n(i[e][t],i[e][r])})}),u=(o=Po(0,To-t*h)/o)?t:To/h,l=0,s=-1;++s<h;){for(a=l,c=-1;++c<h;){var y=d[s],v=p[y][c],_=i[y][v],w=l,S=l+=_*o;b[v*h+y]={index:y,subindex:v,startAngle:w,endAngle:S,value:_}}g[y]={index:y,startAngle:a,endAngle:l,value:f[y]},l+=u}for(s=-1;++s<h;)for(c=s-1;++c<h;){var C=b[c*h+s],k=b[s*h+c];(C.value||k.value)&&m.push(C.value<k.value?{source:k,target:C}:{source:C,target:k})}return r?m.sort(r):m}return i.padAngle=function(e){return arguments.length?(t=Po(0,e),i):t},i.sortGroups=function(t){return arguments.length?(e=t,i):e},i.sortSubgroups=function(t){return arguments.length?(n=t,i):n},i.sortChords=function(t){return arguments.length?(null==t?r=null:(e=t,r=function(t,n){return e(t.source.value+t.target.value,n.source.value+n.target.value)})._=t,i):r&&r._;var e},i},Ao=Array.prototype.slice,Mo=function(t){return function(){return t}},Do=Math.PI,No=2*Do,Lo=No-1e-6;function Fo(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function zo(){return new Fo}Fo.prototype=zo.prototype={constructor:Fo,moveTo:function(t,e){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)},closePath:function(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(t,e){this._+="L"+(this._x1=+t)+","+(this._y1=+e)},quadraticCurveTo:function(t,e,n,r){this._+="Q"+ +t+","+ +e+","+(this._x1=+n)+","+(this._y1=+r)},bezierCurveTo:function(t,e,n,r,i,o){this._+="C"+ +t+","+ +e+","+ +n+","+ +r+","+(this._x1=+i)+","+(this._y1=+o)},arcTo:function(t,e,n,r,i){var o=this._x1,l=this._y1,a=(n=+n)-(t=+t),u=(r=+r)-(e=+e),s=o-t,c=l-e,h=s*s+c*c;if((i=+i)<0)throw new Error("negative radius: "+i);if(null===this._x1)this._+="M"+(this._x1=t)+","+(this._y1=e);else if(h>1e-6)if(Math.abs(c*a-u*s)>1e-6&&i){var f=n-o,d=r-l,p=a*a+u*u,m=f*f+d*d,g=Math.sqrt(p),b=Math.sqrt(h),y=i*Math.tan((Do-Math.acos((p+h-m)/(2*g*b)))/2),v=y/b,_=y/g;Math.abs(v-1)>1e-6&&(this._+="L"+(t+v*s)+","+(e+v*c)),this._+="A"+i+","+i+",0,0,"+ +(c*f>s*d)+","+(this._x1=t+_*a)+","+(this._y1=e+_*u)}else this._+="L"+(this._x1=t)+","+(this._y1=e)},arc:function(t,e,n,r,i,o){t=+t,e=+e;var l=(n=+n)*Math.cos(r),a=n*Math.sin(r),u=t+l,s=e+a,c=1^o,h=o?r-i:i-r;if(n<0)throw new Error("negative radius: "+n);null===this._x1?this._+="M"+u+","+s:(Math.abs(this._x1-u)>1e-6||Math.abs(this._y1-s)>1e-6)&&(this._+="L"+u+","+s),n&&(h<0&&(h=h%No+No),h>Lo?this._+="A"+n+","+n+",0,1,"+c+","+(t-l)+","+(e-a)+"A"+n+","+n+",0,1,"+c+","+(this._x1=u)+","+(this._y1=s):h>1e-6&&(this._+="A"+n+","+n+",0,"+ +(h>=Do)+","+c+","+(this._x1=t+n*Math.cos(i))+","+(this._y1=e+n*Math.sin(i))))},rect:function(t,e,n,r){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +n+"v"+ +r+"h"+-n+"Z"},toString:function(){return this._}};var Vo=zo;function Bo(t){return t.source}function Ho(t){return t.target}function Go(t){return t.radius}function Uo(t){return t.startAngle}function qo(t){return t.endAngle}var Qo=function(){var t=Bo,e=Ho,n=Go,r=Uo,i=qo,o=null;function l(){var l,a=Ao.call(arguments),u=t.apply(this,a),s=e.apply(this,a),c=+n.apply(this,(a[0]=u,a)),h=r.apply(this,a)-Eo,f=i.apply(this,a)-Eo,d=c*Ro(h),p=c*jo(h),m=+n.apply(this,(a[0]=s,a)),g=r.apply(this,a)-Eo,b=i.apply(this,a)-Eo;if(o||(o=l=Vo()),o.moveTo(d,p),o.arc(0,0,c,h,f),h===g&&f===b||(o.quadraticCurveTo(0,0,m*Ro(g),m*jo(g)),o.arc(0,0,m,g,b)),o.quadraticCurveTo(0,0,d,p),o.closePath(),l)return o=null,l+""||null}return l.radius=function(t){return arguments.length?(n="function"==typeof t?t:Mo(+t),l):n},l.startAngle=function(t){return arguments.length?(r="function"==typeof t?t:Mo(+t),l):r},l.endAngle=function(t){return arguments.length?(i="function"==typeof t?t:Mo(+t),l):i},l.source=function(e){return arguments.length?(t=e,l):t},l.target=function(t){return arguments.length?(e=t,l):e},l.context=function(t){return arguments.length?(o=null==t?null:t,l):o},l};function Wo(){}function Yo(t,e){var n=new Wo;if(t instanceof Wo)t.each(function(t,e){n.set(e,t)});else if(Array.isArray(t)){var r,i=-1,o=t.length;if(null==e)for(;++i<o;)n.set(i,t[i]);else for(;++i<o;)n.set(e(r=t[i],i,t),r)}else if(t)for(var l in t)n.set(l,t[l]);return n}Wo.prototype=Yo.prototype={constructor:Wo,has:function(t){return"$"+t in this},get:function(t){return this["$"+t]},set:function(t,e){return this["$"+t]=e,this},remove:function(t){var e="$"+t;return e in this&&delete this[e]},clear:function(){for(var t in this)"$"===t[0]&&delete this[t]},keys:function(){var t=[];for(var e in this)"$"===e[0]&&t.push(e.slice(1));return t},values:function(){var t=[];for(var e in this)"$"===e[0]&&t.push(this[e]);return t},entries:function(){var t=[];for(var e in this)"$"===e[0]&&t.push({key:e.slice(1),value:this[e]});return t},size:function(){var t=0;for(var e in this)"$"===e[0]&&++t;return t},empty:function(){for(var t in this)if("$"===t[0])return!1;return!0},each:function(t){for(var e in this)"$"===e[0]&&t(this[e],e.slice(1),this)}};var Zo=Yo,Ko=function(){var t,e,n,r=[],i=[];function o(n,i,l,a){if(i>=r.length)return null!=t&&n.sort(t),null!=e?e(n):n;for(var u,s,c,h=-1,f=n.length,d=r[i++],p=Zo(),m=l();++h<f;)(c=p.get(u=d(s=n[h])+""))?c.push(s):p.set(u,[s]);return p.each(function(t,e){a(m,e,o(t,i,l,a))}),m}return n={object:function(t){return o(t,0,Xo,$o)},map:function(t){return o(t,0,Jo,tl)},entries:function(t){return function t(n,o){if(++o>r.length)return n;var l,a=i[o-1];return null!=e&&o>=r.length?l=n.entries():(l=[],n.each(function(e,n){l.push({key:n,values:t(e,o)})})),null!=a?l.sort(function(t,e){return a(t.key,e.key)}):l}(o(t,0,Jo,tl),0)},key:function(t){return r.push(t),n},sortKeys:function(t){return i[r.length-1]=t,n},sortValues:function(e){return t=e,n},rollup:function(t){return e=t,n}}};function Xo(){return{}}function $o(t,e,n){t[e]=n}function Jo(){return Zo()}function tl(t,e,n){t.set(e,n)}function el(){}var nl=Zo.prototype;function rl(t,e){var n=new el;if(t instanceof el)t.each(function(t){n.add(t)});else if(t){var r=-1,i=t.length;if(null==e)for(;++r<i;)n.add(t[r]);else for(;++r<i;)n.add(e(t[r],r,t))}return n}el.prototype=rl.prototype={constructor:el,has:nl.has,add:function(t){return this["$"+(t+="")]=t,this},remove:nl.remove,clear:nl.clear,values:nl.keys,size:nl.size,empty:nl.empty,each:nl.each};var il=rl,ol=function(t){var e=[];for(var n in t)e.push(n);return e},ll=function(t){var e=[];for(var n in t)e.push(t[n]);return e},al=function(t){var e=[];for(var n in t)e.push({key:n,value:t[n]});return e},ul=Array.prototype.slice,sl=function(t,e){return t-e},cl=function(t){for(var e=0,n=t.length,r=t[n-1][1]*t[0][0]-t[n-1][0]*t[0][1];++e<n;)r+=t[e-1][1]*t[e][0]-t[e-1][0]*t[e][1];return r},hl=function(t){return function(){return t}},fl=function(t,e){for(var n,r=-1,i=e.length;++r<i;)if(n=dl(t,e[r]))return n;return 0};function dl(t,e){for(var n=e[0],r=e[1],i=-1,o=0,l=t.length,a=l-1;o<l;a=o++){var u=t[o],s=u[0],c=u[1],h=t[a],f=h[0],d=h[1];if(pl(u,h,e))return 0;c>r!=d>r&&n<(f-s)*(r-c)/(d-c)+s&&(i=-i)}return i}function pl(t,e,n){var r,i,o,l;return function(t,e,n){return(e[0]-t[0])*(n[1]-t[1])==(n[0]-t[0])*(e[1]-t[1])}(t,e,n)&&(i=t[r=+(t[0]===e[0])],l=e[r],i<=(o=n[r])&&o<=l||l<=o&&o<=i)}var ml=function(){},gl=[[],[[[1,1.5],[.5,1]]],[[[1.5,1],[1,1.5]]],[[[1.5,1],[.5,1]]],[[[1,.5],[1.5,1]]],[[[1,1.5],[.5,1]],[[1,.5],[1.5,1]]],[[[1,.5],[1,1.5]]],[[[1,.5],[.5,1]]],[[[.5,1],[1,.5]]],[[[1,1.5],[1,.5]]],[[[.5,1],[1,.5]],[[1.5,1],[1,1.5]]],[[[1.5,1],[1,.5]]],[[[.5,1],[1.5,1]]],[[[1,1.5],[1.5,1]]],[[[.5,1],[1,1.5]]],[]],bl=function(){var t=1,e=1,n=E,r=a;function i(t){var e=n(t);if(Array.isArray(e))e=e.slice().sort(sl);else{var r=g(t),i=r[0],l=r[1];e=O(i,l,e),e=x(Math.floor(i/e)*e,Math.floor(l/e)*e,e)}return e.map(function(e){return o(t,e)})}function o(n,i){var o=[],a=[];return function(n,r,i){var o,a,u,s,c,h=new Array,f=new Array;for(o=a=-1,gl[(u=n[0]>=r)<<1].forEach(d);++o<t-1;)gl[u|(u=n[o+1]>=r)<<1].forEach(d);for(gl[u<<0].forEach(d);++a<e-1;){for(o=-1,gl[(u=n[a*t+t]>=r)<<1|(s=n[a*t]>=r)<<2].forEach(d);++o<t-1;)c=s,gl[u|(u=n[a*t+t+o+1]>=r)<<1|(s=n[a*t+o+1]>=r)<<2|c<<3].forEach(d);gl[u|s<<3].forEach(d)}for(o=-1,gl[(s=n[a*t]>=r)<<2].forEach(d);++o<t-1;)c=s,gl[(s=n[a*t+o+1]>=r)<<2|c<<3].forEach(d);function d(t){var e,n,r=[t[0][0]+o,t[0][1]+a],u=[t[1][0]+o,t[1][1]+a],s=l(r),c=l(u);(e=f[s])?(n=h[c])?(delete f[e.end],delete h[n.start],e===n?(e.ring.push(u),i(e.ring)):h[e.start]=f[n.end]={start:e.start,end:n.end,ring:e.ring.concat(n.ring)}):(delete f[e.end],e.ring.push(u),f[e.end=c]=e):(e=h[c])?(n=f[s])?(delete h[e.start],delete f[n.end],e===n?(e.ring.push(u),i(e.ring)):h[n.start]=f[e.end]={start:n.start,end:e.end,ring:n.ring.concat(e.ring)}):(delete h[e.start],e.ring.unshift(r),h[e.start=s]=e):h[s]=f[c]={start:s,end:c,ring:[r,u]}}gl[s<<3].forEach(d)}(n,i,function(t){r(t,n,i),cl(t)>0?o.push([t]):a.push(t)}),a.forEach(function(t){for(var e,n=0,r=o.length;n<r;++n)if(-1!==fl((e=o[n])[0],t))return void e.push(t)}),{type:"MultiPolygon",value:i,coordinates:o}}function l(e){return 2*e[0]+e[1]*(t+1)*4}function a(n,r,i){n.forEach(function(n){var o,l=n[0],a=n[1],u=0|l,s=0|a,c=r[s*t+u];l>0&&l<t&&u===l&&(n[0]=l+(i-(o=r[s*t+u-1]))/(c-o)-.5),a>0&&a<e&&s===a&&(n[1]=a+(i-(o=r[(s-1)*t+u]))/(c-o)-.5)})}return i.contour=o,i.size=function(n){if(!arguments.length)return[t,e];var r=Math.ceil(n[0]),o=Math.ceil(n[1]);if(!(r>0&&o>0))throw new Error("invalid size");return t=r,e=o,i},i.thresholds=function(t){return arguments.length?(n="function"==typeof t?t:Array.isArray(t)?hl(ul.call(t)):hl(t),i):n},i.smooth=function(t){return arguments.length?(r=t?a:ml,i):r===a},i};function yl(t,e,n){for(var r=t.width,i=t.height,o=1+(n<<1),l=0;l<i;++l)for(var a=0,u=0;a<r+n;++a)a<r&&(u+=t.data[a+l*r]),a>=n&&(a>=o&&(u-=t.data[a-o+l*r]),e.data[a-n+l*r]=u/Math.min(a+1,r-1+o-a,o))}function vl(t,e,n){for(var r=t.width,i=t.height,o=1+(n<<1),l=0;l<r;++l)for(var a=0,u=0;a<i+n;++a)a<i&&(u+=t.data[l+a*r]),a>=n&&(a>=o&&(u-=t.data[l+(a-o)*r]),e.data[l+(a-n)*r]=u/Math.min(a+1,i-1+o-a,o))}function _l(t){return t[0]}function wl(t){return t[1]}var xl=function(){var t=_l,e=wl,n=960,r=500,i=20,o=2,l=3*i,a=n+2*l>>o,u=r+2*l>>o,s=hl(20);function c(n){var r=new Float32Array(a*u),c=new Float32Array(a*u);n.forEach(function(n,i,s){var c=t(n,i,s)+l>>o,h=e(n,i,s)+l>>o;c>=0&&c<a&&h>=0&&h<u&&++r[c+h*a]}),yl({width:a,height:u,data:r},{width:a,height:u,data:c},i>>o),vl({width:a,height:u,data:c},{width:a,height:u,data:r},i>>o),yl({width:a,height:u,data:r},{width:a,height:u,data:c},i>>o),vl({width:a,height:u,data:c},{width:a,height:u,data:r},i>>o),yl({width:a,height:u,data:r},{width:a,height:u,data:c},i>>o),vl({width:a,height:u,data:c},{width:a,height:u,data:r},i>>o);var f=s(r);if(!Array.isArray(f)){var d=M(r);f=O(0,d,f),(f=x(0,Math.floor(d/f)*f,f)).shift()}return bl().thresholds(f).size([a,u])(r).map(h)}function h(t){return t.value*=Math.pow(2,-2*o),t.coordinates.forEach(f),t}function f(t){t.forEach(d)}function d(t){t.forEach(p)}function p(t){t[0]=t[0]*Math.pow(2,o)-l,t[1]=t[1]*Math.pow(2,o)-l}function m(){return a=n+2*(l=3*i)>>o,u=r+2*l>>o,c}return c.x=function(e){return arguments.length?(t="function"==typeof e?e:hl(+e),c):t},c.y=function(t){return arguments.length?(e="function"==typeof t?t:hl(+t),c):e},c.size=function(t){if(!arguments.length)return[n,r];var e=Math.ceil(t[0]),i=Math.ceil(t[1]);if(!(e>=0||e>=0))throw new Error("invalid size");return n=e,r=i,m()},c.cellSize=function(t){if(!arguments.length)return 1<<o;if(!((t=+t)>=1))throw new Error("invalid cell size");return o=Math.floor(Math.log(t)/Math.LN2),m()},c.thresholds=function(t){return arguments.length?(s="function"==typeof t?t:Array.isArray(t)?hl(ul.call(t)):hl(t),c):s},c.bandwidth=function(t){if(!arguments.length)return Math.sqrt(i*(i+1));if(!((t=+t)>=0))throw new Error("invalid bandwidth");return i=Math.round((Math.sqrt(4*t*t+1)-1)/2),m()},c},Sl={},Cl={},kl=34,Rl=10,jl=13;function Ol(t){return new Function("d","return {"+t.map(function(t,e){return JSON.stringify(t)+": d["+e+"]"}).join(",")+"}")}var El=function(t){var e=new RegExp('["'+t+"\n\r]"),n=t.charCodeAt(0);function r(t,e){var r,i=[],o=t.length,l=0,a=0,u=o<=0,s=!1;function c(){if(u)return Cl;if(s)return s=!1,Sl;var e,r,i=l;if(t.charCodeAt(i)===kl){for(;l++<o&&t.charCodeAt(l)!==kl||t.charCodeAt(++l)===kl;);return(e=l)>=o?u=!0:(r=t.charCodeAt(l++))===Rl?s=!0:r===jl&&(s=!0,t.charCodeAt(l)===Rl&&++l),t.slice(i+1,e-1).replace(/""/g,'"')}for(;l<o;){if((r=t.charCodeAt(e=l++))===Rl)s=!0;else if(r===jl)s=!0,t.charCodeAt(l)===Rl&&++l;else if(r!==n)continue;return t.slice(i,e)}return u=!0,t.slice(i,o)}for(t.charCodeAt(o-1)===Rl&&--o,t.charCodeAt(o-1)===jl&&--o;(r=c())!==Cl;){for(var h=[];r!==Sl&&r!==Cl;)h.push(r),r=c();e&&null==(h=e(h,a++))||i.push(h)}return i}function i(e){return e.map(o).join(t)}function o(t){return null==t?"":e.test(t+="")?'"'+t.replace(/"/g,'""')+'"':t}return{parse:function(t,e){var n,i,o=r(t,function(t,r){if(n)return n(t,r-1);i=t,n=e?function(t,e){var n=Ol(t);return function(r,i){return e(n(r),i,t)}}(t,e):Ol(t)});return o.columns=i||[],o},parseRows:r,format:function(e,n){return null==n&&(n=function(t){var e=Object.create(null),n=[];return t.forEach(function(t){for(var r in t)r in e||n.push(e[r]=r)}),n}(e)),[n.map(o).join(t)].concat(e.map(function(e){return n.map(function(t){return o(e[t])}).join(t)})).join("\n")},formatRows:function(t){return t.map(i).join("\n")}}},Tl=El(","),Pl=Tl.parse,Il=Tl.parseRows,Al=Tl.format,Ml=Tl.formatRows,Dl=El("\t"),Nl=Dl.parse,Ll=Dl.parseRows,Fl=Dl.format,zl=Dl.formatRows;function Vl(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);return t.blob()}var Bl=function(t,e){return fetch(t,e).then(Vl)};function Hl(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);return t.arrayBuffer()}var Gl=function(t,e){return fetch(t,e).then(Hl)};function Ul(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);return t.text()}var ql=function(t,e){return fetch(t,e).then(Ul)};function Ql(t){return function(e,n,r){return 2===arguments.length&&"function"==typeof n&&(r=n,n=void 0),ql(e,n).then(function(e){return t(e,r)})}}function Wl(t,e,n,r){3===arguments.length&&"function"==typeof n&&(r=n,n=void 0);var i=El(t);return ql(e,n).then(function(t){return i.parse(t,r)})}var Yl=Ql(Pl),Zl=Ql(Nl),Kl=function(t,e){return new Promise(function(n,r){var i=new Image;for(var o in e)i[o]=e[o];i.onerror=r,i.onload=function(){n(i)},i.src=t})};function Xl(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);return t.json()}var $l=function(t,e){return fetch(t,e).then(Xl)};function Jl(t){return function(e,n){return ql(e,n).then(function(e){return(new DOMParser).parseFromString(e,t)})}}var ta=Jl("application/xml"),ea=Jl("text/html"),na=Jl("image/svg+xml"),ra=function(t,e){var n;function r(){var r,i,o=n.length,l=0,a=0;for(r=0;r<o;++r)l+=(i=n[r]).x,a+=i.y;for(l=l/o-t,a=a/o-e,r=0;r<o;++r)(i=n[r]).x-=l,i.y-=a}return null==t&&(t=0),null==e&&(e=0),r.initialize=function(t){n=t},r.x=function(e){return arguments.length?(t=+e,r):t},r.y=function(t){return arguments.length?(e=+t,r):e},r},ia=function(t){return function(){return t}},oa=function(){return 1e-6*(Math.random()-.5)};function la(t,e,n,r){if(isNaN(e)||isNaN(n))return t;var i,o,l,a,u,s,c,h,f,d=t._root,p={data:r},m=t._x0,g=t._y0,b=t._x1,y=t._y1;if(!d)return t._root=p,t;for(;d.length;)if((s=e>=(o=(m+b)/2))?m=o:b=o,(c=n>=(l=(g+y)/2))?g=l:y=l,i=d,!(d=d[h=c<<1|s]))return i[h]=p,t;if(a=+t._x.call(null,d.data),u=+t._y.call(null,d.data),e===a&&n===u)return p.next=d,i?i[h]=p:t._root=p,t;do{i=i?i[h]=new Array(4):t._root=new Array(4),(s=e>=(o=(m+b)/2))?m=o:b=o,(c=n>=(l=(g+y)/2))?g=l:y=l}while((h=c<<1|s)==(f=(u>=l)<<1|a>=o));return i[f]=d,i[h]=p,t}var aa=function(t,e,n,r,i){this.node=t,this.x0=e,this.y0=n,this.x1=r,this.y1=i};function ua(t){return t[0]}function sa(t){return t[1]}function ca(t,e,n){var r=new ha(null==e?ua:e,null==n?sa:n,NaN,NaN,NaN,NaN);return null==t?r:r.addAll(t)}function ha(t,e,n,r,i,o){this._x=t,this._y=e,this._x0=n,this._y0=r,this._x1=i,this._y1=o,this._root=void 0}function fa(t){for(var e={data:t.data},n=e;t=t.next;)n=n.next={data:t.data};return e}var da=ca.prototype=ha.prototype;function pa(t){return t.x+t.vx}function ma(t){return t.y+t.vy}da.copy=function(){var t,e,n=new ha(this._x,this._y,this._x0,this._y0,this._x1,this._y1),r=this._root;if(!r)return n;if(!r.length)return n._root=fa(r),n;for(t=[{source:r,target:n._root=new Array(4)}];r=t.pop();)for(var i=0;i<4;++i)(e=r.source[i])&&(e.length?t.push({source:e,target:r.target[i]=new Array(4)}):r.target[i]=fa(e));return n},da.add=function(t){var e=+this._x.call(null,t),n=+this._y.call(null,t);return la(this.cover(e,n),e,n,t)},da.addAll=function(t){var e,n,r,i,o=t.length,l=new Array(o),a=new Array(o),u=1/0,s=1/0,c=-1/0,h=-1/0;for(n=0;n<o;++n)isNaN(r=+this._x.call(null,e=t[n]))||isNaN(i=+this._y.call(null,e))||(l[n]=r,a[n]=i,r<u&&(u=r),r>c&&(c=r),i<s&&(s=i),i>h&&(h=i));for(c<u&&(u=this._x0,c=this._x1),h<s&&(s=this._y0,h=this._y1),this.cover(u,s).cover(c,h),n=0;n<o;++n)la(this,l[n],a[n],t[n]);return this},da.cover=function(t,e){if(isNaN(t=+t)||isNaN(e=+e))return this;var n=this._x0,r=this._y0,i=this._x1,o=this._y1;if(isNaN(n))i=(n=Math.floor(t))+1,o=(r=Math.floor(e))+1;else{if(!(n>t||t>i||r>e||e>o))return this;var l,a,u=i-n,s=this._root;switch(a=(e<(r+o)/2)<<1|t<(n+i)/2){case 0:do{(l=new Array(4))[a]=s,s=l}while(o=r+(u*=2),t>(i=n+u)||e>o);break;case 1:do{(l=new Array(4))[a]=s,s=l}while(o=r+(u*=2),(n=i-u)>t||e>o);break;case 2:do{(l=new Array(4))[a]=s,s=l}while(r=o-(u*=2),t>(i=n+u)||r>e);break;case 3:do{(l=new Array(4))[a]=s,s=l}while(r=o-(u*=2),(n=i-u)>t||r>e)}this._root&&this._root.length&&(this._root=s)}return this._x0=n,this._y0=r,this._x1=i,this._y1=o,this},da.data=function(){var t=[];return this.visit(function(e){if(!e.length)do{t.push(e.data)}while(e=e.next)}),t},da.extent=function(t){return arguments.length?this.cover(+t[0][0],+t[0][1]).cover(+t[1][0],+t[1][1]):isNaN(this._x0)?void 0:[[this._x0,this._y0],[this._x1,this._y1]]},da.find=function(t,e,n){var r,i,o,l,a,u,s,c=this._x0,h=this._y0,f=this._x1,d=this._y1,p=[],m=this._root;for(m&&p.push(new aa(m,c,h,f,d)),null==n?n=1/0:(c=t-n,h=e-n,f=t+n,d=e+n,n*=n);u=p.pop();)if(!(!(m=u.node)||(i=u.x0)>f||(o=u.y0)>d||(l=u.x1)<c||(a=u.y1)<h))if(m.length){var g=(i+l)/2,b=(o+a)/2;p.push(new aa(m[3],g,b,l,a),new aa(m[2],i,b,g,a),new aa(m[1],g,o,l,b),new aa(m[0],i,o,g,b)),(s=(e>=b)<<1|t>=g)&&(u=p[p.length-1],p[p.length-1]=p[p.length-1-s],p[p.length-1-s]=u)}else{var y=t-+this._x.call(null,m.data),v=e-+this._y.call(null,m.data),_=y*y+v*v;if(_<n){var w=Math.sqrt(n=_);c=t-w,h=e-w,f=t+w,d=e+w,r=m.data}}return r},da.remove=function(t){if(isNaN(o=+this._x.call(null,t))||isNaN(l=+this._y.call(null,t)))return this;var e,n,r,i,o,l,a,u,s,c,h,f,d=this._root,p=this._x0,m=this._y0,g=this._x1,b=this._y1;if(!d)return this;if(d.length)for(;;){if((s=o>=(a=(p+g)/2))?p=a:g=a,(c=l>=(u=(m+b)/2))?m=u:b=u,e=d,!(d=d[h=c<<1|s]))return this;if(!d.length)break;(e[h+1&3]||e[h+2&3]||e[h+3&3])&&(n=e,f=h)}for(;d.data!==t;)if(r=d,!(d=d.next))return this;return(i=d.next)&&delete d.next,r?(i?r.next=i:delete r.next,this):e?(i?e[h]=i:delete e[h],(d=e[0]||e[1]||e[2]||e[3])&&d===(e[3]||e[2]||e[1]||e[0])&&!d.length&&(n?n[f]=d:this._root=d),this):(this._root=i,this)},da.removeAll=function(t){for(var e=0,n=t.length;e<n;++e)this.remove(t[e]);return this},da.root=function(){return this._root},da.size=function(){var t=0;return this.visit(function(e){if(!e.length)do{++t}while(e=e.next)}),t},da.visit=function(t){var e,n,r,i,o,l,a=[],u=this._root;for(u&&a.push(new aa(u,this._x0,this._y0,this._x1,this._y1));e=a.pop();)if(!t(u=e.node,r=e.x0,i=e.y0,o=e.x1,l=e.y1)&&u.length){var s=(r+o)/2,c=(i+l)/2;(n=u[3])&&a.push(new aa(n,s,c,o,l)),(n=u[2])&&a.push(new aa(n,r,c,s,l)),(n=u[1])&&a.push(new aa(n,s,i,o,c)),(n=u[0])&&a.push(new aa(n,r,i,s,c))}return this},da.visitAfter=function(t){var e,n=[],r=[];for(this._root&&n.push(new aa(this._root,this._x0,this._y0,this._x1,this._y1));e=n.pop();){var i=e.node;if(i.length){var o,l=e.x0,a=e.y0,u=e.x1,s=e.y1,c=(l+u)/2,h=(a+s)/2;(o=i[0])&&n.push(new aa(o,l,a,c,h)),(o=i[1])&&n.push(new aa(o,c,a,u,h)),(o=i[2])&&n.push(new aa(o,l,h,c,s)),(o=i[3])&&n.push(new aa(o,c,h,u,s))}r.push(e)}for(;e=r.pop();)t(e.node,e.x0,e.y0,e.x1,e.y1);return this},da.x=function(t){return arguments.length?(this._x=t,this):this._x},da.y=function(t){return arguments.length?(this._y=t,this):this._y};var ga=function(t){var e,n,r=1,i=1;function o(){for(var t,o,a,u,s,c,h,f=e.length,d=0;d<i;++d)for(o=ca(e,pa,ma).visitAfter(l),t=0;t<f;++t)h=(c=n[(a=e[t]).index])*c,u=a.x+a.vx,s=a.y+a.vy,o.visit(p);function p(t,e,n,i,o){var l=t.data,f=t.r,d=c+f;if(!l)return e>u+d||i<u-d||n>s+d||o<s-d;if(l.index>a.index){var p=u-l.x-l.vx,m=s-l.y-l.vy,g=p*p+m*m;g<d*d&&(0===p&&(g+=(p=oa())*p),0===m&&(g+=(m=oa())*m),g=(d-(g=Math.sqrt(g)))/g*r,a.vx+=(p*=g)*(d=(f*=f)/(h+f)),a.vy+=(m*=g)*d,l.vx-=p*(d=1-d),l.vy-=m*d)}}}function l(t){if(t.data)return t.r=n[t.data.index];for(var e=t.r=0;e<4;++e)t[e]&&t[e].r>t.r&&(t.r=t[e].r)}function a(){if(e){var r,i,o=e.length;for(n=new Array(o),r=0;r<o;++r)n[(i=e[r]).index]=+t(i,r,e)}}return"function"!=typeof t&&(t=ia(null==t?1:+t)),o.initialize=function(t){e=t,a()},o.iterations=function(t){return arguments.length?(i=+t,o):i},o.strength=function(t){return arguments.length?(r=+t,o):r},o.radius=function(e){return arguments.length?(t="function"==typeof e?e:ia(+e),a(),o):t},o};function ba(t){return t.index}function ya(t,e){var n=t.get(e);if(!n)throw new Error("missing: "+e);return n}var va=function(t){var e,n,r,i,o,l=ba,a=function(t){return 1/Math.min(i[t.source.index],i[t.target.index])},u=ia(30),s=1;function c(r){for(var i=0,l=t.length;i<s;++i)for(var a,u,c,h,f,d,p,m=0;m<l;++m)h=(c=(a=t[m]).target).x+c.vx-(u=a.source).x-u.vx||oa(),f=c.y+c.vy-u.y-u.vy||oa(),f*=d=((d=Math.sqrt(h*h+f*f))-n[m])/d*r*e[m],c.vx-=(h*=d)*(p=o[m]),c.vy-=f*p,u.vx+=h*(p=1-p),u.vy+=f*p}function h(){if(r){var a,u,s=r.length,c=t.length,h=Zo(r,l);for(a=0,i=new Array(s);a<c;++a)(u=t[a]).index=a,"object"!=typeof u.source&&(u.source=ya(h,u.source)),"object"!=typeof u.target&&(u.target=ya(h,u.target)),i[u.source.index]=(i[u.source.index]||0)+1,i[u.target.index]=(i[u.target.index]||0)+1;for(a=0,o=new Array(c);a<c;++a)o[a]=i[(u=t[a]).source.index]/(i[u.source.index]+i[u.target.index]);e=new Array(c),f(),n=new Array(c),d()}}function f(){if(r)for(var n=0,i=t.length;n<i;++n)e[n]=+a(t[n],n,t)}function d(){if(r)for(var e=0,i=t.length;e<i;++e)n[e]=+u(t[e],e,t)}return null==t&&(t=[]),c.initialize=function(t){r=t,h()},c.links=function(e){return arguments.length?(t=e,h(),c):t},c.id=function(t){return arguments.length?(l=t,c):l},c.iterations=function(t){return arguments.length?(s=+t,c):s},c.strength=function(t){return arguments.length?(a="function"==typeof t?t:ia(+t),f(),c):a},c.distance=function(t){return arguments.length?(u="function"==typeof t?t:ia(+t),d(),c):u},c};function _a(t){return t.x}function wa(t){return t.y}var xa=10,Sa=Math.PI*(3-Math.sqrt(5)),Ca=function(t){var e,n=1,r=.001,i=1-Math.pow(r,1/300),o=0,l=.6,a=Zo(),u=Ar(c),s=ft("tick","end");function c(){h(),s.call("tick",e),n<r&&(u.stop(),s.call("end",e))}function h(){var e,r,u=t.length;for(n+=(o-n)*i,a.each(function(t){t(n)}),e=0;e<u;++e)null==(r=t[e]).fx?r.x+=r.vx*=l:(r.x=r.fx,r.vx=0),null==r.fy?r.y+=r.vy*=l:(r.y=r.fy,r.vy=0)}function f(){for(var e,n=0,r=t.length;n<r;++n){if((e=t[n]).index=n,isNaN(e.x)||isNaN(e.y)){var i=xa*Math.sqrt(n),o=n*Sa;e.x=i*Math.cos(o),e.y=i*Math.sin(o)}(isNaN(e.vx)||isNaN(e.vy))&&(e.vx=e.vy=0)}}function d(e){return e.initialize&&e.initialize(t),e}return null==t&&(t=[]),f(),e={tick:h,restart:function(){return u.restart(c),e},stop:function(){return u.stop(),e},nodes:function(n){return arguments.length?(t=n,f(),a.each(d),e):t},alpha:function(t){return arguments.length?(n=+t,e):n},alphaMin:function(t){return arguments.length?(r=+t,e):r},alphaDecay:function(t){return arguments.length?(i=+t,e):+i},alphaTarget:function(t){return arguments.length?(o=+t,e):o},velocityDecay:function(t){return arguments.length?(l=1-t,e):1-l},force:function(t,n){return arguments.length>1?(null==n?a.remove(t):a.set(t,d(n)),e):a.get(t)},find:function(e,n,r){var i,o,l,a,u,s=0,c=t.length;for(null==r?r=1/0:r*=r,s=0;s<c;++s)(l=(i=e-(a=t[s]).x)*i+(o=n-a.y)*o)<r&&(u=a,r=l);return u},on:function(t,n){return arguments.length>1?(s.on(t,n),e):s.on(t)}}},ka=function(){var t,e,n,r,i=ia(-30),o=1,l=1/0,a=.81;function u(r){var i,o=t.length,l=ca(t,_a,wa).visitAfter(c);for(n=r,i=0;i<o;++i)e=t[i],l.visit(h)}function s(){if(t){var e,n,o=t.length;for(r=new Array(o),e=0;e<o;++e)r[(n=t[e]).index]=+i(n,e,t)}}function c(t){var e,n,i,o,l,a=0,u=0;if(t.length){for(i=o=l=0;l<4;++l)(e=t[l])&&(n=Math.abs(e.value))&&(a+=e.value,u+=n,i+=n*e.x,o+=n*e.y);t.x=i/u,t.y=o/u}else{(e=t).x=e.data.x,e.y=e.data.y;do{a+=r[e.data.index]}while(e=e.next)}t.value=a}function h(t,i,u,s){if(!t.value)return!0;var c=t.x-e.x,h=t.y-e.y,f=s-i,d=c*c+h*h;if(f*f/a<d)return d<l&&(0===c&&(d+=(c=oa())*c),0===h&&(d+=(h=oa())*h),d<o&&(d=Math.sqrt(o*d)),e.vx+=c*t.value*n/d,e.vy+=h*t.value*n/d),!0;if(!(t.length||d>=l)){(t.data!==e||t.next)&&(0===c&&(d+=(c=oa())*c),0===h&&(d+=(h=oa())*h),d<o&&(d=Math.sqrt(o*d)));do{t.data!==e&&(e.vx+=c*(f=r[t.data.index]*n/d),e.vy+=h*f)}while(t=t.next)}}return u.initialize=function(e){t=e,s()},u.strength=function(t){return arguments.length?(i="function"==typeof t?t:ia(+t),s(),u):i},u.distanceMin=function(t){return arguments.length?(o=t*t,u):Math.sqrt(o)},u.distanceMax=function(t){return arguments.length?(l=t*t,u):Math.sqrt(l)},u.theta=function(t){return arguments.length?(a=t*t,u):Math.sqrt(a)},u},Ra=function(t,e,n){var r,i,o,l=ia(.1);function a(t){for(var l=0,a=r.length;l<a;++l){var u=r[l],s=u.x-e||1e-6,c=u.y-n||1e-6,h=Math.sqrt(s*s+c*c),f=(o[l]-h)*i[l]*t/h;u.vx+=s*f,u.vy+=c*f}}function u(){if(r){var e,n=r.length;for(i=new Array(n),o=new Array(n),e=0;e<n;++e)o[e]=+t(r[e],e,r),i[e]=isNaN(o[e])?0:+l(r[e],e,r)}}return"function"!=typeof t&&(t=ia(+t)),null==e&&(e=0),null==n&&(n=0),a.initialize=function(t){r=t,u()},a.strength=function(t){return arguments.length?(l="function"==typeof t?t:ia(+t),u(),a):l},a.radius=function(e){return arguments.length?(t="function"==typeof e?e:ia(+e),u(),a):t},a.x=function(t){return arguments.length?(e=+t,a):e},a.y=function(t){return arguments.length?(n=+t,a):n},a},ja=function(t){var e,n,r,i=ia(.1);function o(t){for(var i,o=0,l=e.length;o<l;++o)(i=e[o]).vx+=(r[o]-i.x)*n[o]*t}function l(){if(e){var o,l=e.length;for(n=new Array(l),r=new Array(l),o=0;o<l;++o)n[o]=isNaN(r[o]=+t(e[o],o,e))?0:+i(e[o],o,e)}}return"function"!=typeof t&&(t=ia(null==t?0:+t)),o.initialize=function(t){e=t,l()},o.strength=function(t){return arguments.length?(i="function"==typeof t?t:ia(+t),l(),o):i},o.x=function(e){return arguments.length?(t="function"==typeof e?e:ia(+e),l(),o):t},o},Oa=function(t){var e,n,r,i=ia(.1);function o(t){for(var i,o=0,l=e.length;o<l;++o)(i=e[o]).vy+=(r[o]-i.y)*n[o]*t}function l(){if(e){var o,l=e.length;for(n=new Array(l),r=new Array(l),o=0;o<l;++o)n[o]=isNaN(r[o]=+t(e[o],o,e))?0:+i(e[o],o,e)}}return"function"!=typeof t&&(t=ia(null==t?0:+t)),o.initialize=function(t){e=t,l()},o.strength=function(t){return arguments.length?(i="function"==typeof t?t:ia(+t),l(),o):i},o.y=function(e){return arguments.length?(t="function"==typeof e?e:ia(+e),l(),o):t},o},Ea=function(t,e){if((n=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var n,r=t.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+t.slice(n+1)]},Ta=function(t){return(t=Ea(Math.abs(t)))?t[1]:NaN},Pa=/^(?:(.)?([<>=^]))?([+\-\( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Ia(t){return new Aa(t)}function Aa(t){if(!(e=Pa.exec(t)))throw new Error("invalid format: "+t);var e;this.fill=e[1]||" ",this.align=e[2]||">",this.sign=e[3]||"-",this.symbol=e[4]||"",this.zero=!!e[5],this.width=e[6]&&+e[6],this.comma=!!e[7],this.precision=e[8]&&+e[8].slice(1),this.trim=!!e[9],this.type=e[10]||""}Ia.prototype=Aa.prototype,Aa.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(null==this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(null==this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var Ma,Da,Na,La,Fa=function(t){t:for(var e,n=t.length,r=1,i=-1;r<n;++r)switch(t[r]){case".":i=e=r;break;case"0":0===i&&(i=r),e=r;break;default:if(i>0){if(!+t[r])break t;i=0}}return i>0?t.slice(0,i)+t.slice(e+1):t},za=function(t,e){var n=Ea(t,e);if(!n)return t+"";var r=n[0],i=n[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")},Va={"%":function(t,e){return(100*t).toFixed(e)},b:function(t){return Math.round(t).toString(2)},c:function(t){return t+""},d:function(t){return Math.round(t).toString(10)},e:function(t,e){return t.toExponential(e)},f:function(t,e){return t.toFixed(e)},g:function(t,e){return t.toPrecision(e)},o:function(t){return Math.round(t).toString(8)},p:function(t,e){return za(100*t,e)},r:za,s:function(t,e){var n=Ea(t,e);if(!n)return t+"";var r=n[0],i=n[1],o=i-(Ma=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,l=r.length;return o===l?r:o>l?r+new Array(o-l+1).join("0"):o>0?r.slice(0,o)+"."+r.slice(o):"0."+new Array(1-o).join("0")+Ea(t,Math.max(0,e+o-1))[0]},X:function(t){return Math.round(t).toString(16).toUpperCase()},x:function(t){return Math.round(t).toString(16)}},Ba=function(t){return t},Ha=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"],Ga=function(t){var e,n,r=t.grouping&&t.thousands?(e=t.grouping,n=t.thousands,function(t,r){for(var i=t.length,o=[],l=0,a=e[0],u=0;i>0&&a>0&&(u+a+1>r&&(a=Math.max(1,r-u)),o.push(t.substring(i-=a,i+a)),!((u+=a+1)>r));)a=e[l=(l+1)%e.length];return o.reverse().join(n)}):Ba,i=t.currency,o=t.decimal,l=t.numerals?function(t){return function(e){return e.replace(/[0-9]/g,function(e){return t[+e]})}}(t.numerals):Ba,a=t.percent||"%";function u(t){var e=(t=Ia(t)).fill,n=t.align,u=t.sign,s=t.symbol,c=t.zero,h=t.width,f=t.comma,d=t.precision,p=t.trim,m=t.type;"n"===m?(f=!0,m="g"):Va[m]||(null==d&&(d=12),p=!0,m="g"),(c||"0"===e&&"="===n)&&(c=!0,e="0",n="=");var g="$"===s?i[0]:"#"===s&&/[boxX]/.test(m)?"0"+m.toLowerCase():"",b="$"===s?i[1]:/[%p]/.test(m)?a:"",y=Va[m],v=/[defgprs%]/.test(m);function _(t){var i,a,s,_=g,w=b;if("c"===m)w=y(t)+w,t="";else{var x=(t=+t)<0;if(t=y(Math.abs(t),d),p&&(t=Fa(t)),x&&0==+t&&(x=!1),_=(x?"("===u?u:"-":"-"===u||"("===u?"":u)+_,w=("s"===m?Ha[8+Ma/3]:"")+w+(x&&"("===u?")":""),v)for(i=-1,a=t.length;++i<a;)if(48>(s=t.charCodeAt(i))||s>57){w=(46===s?o+t.slice(i+1):t.slice(i))+w,t=t.slice(0,i);break}}f&&!c&&(t=r(t,1/0));var S=_.length+t.length+w.length,C=S<h?new Array(h-S+1).join(e):"";switch(f&&c&&(t=r(C+t,C.length?h-w.length:1/0),C=""),n){case"<":t=_+t+w+C;break;case"=":t=_+C+t+w;break;case"^":t=C.slice(0,S=C.length>>1)+_+t+w+C.slice(S);break;default:t=C+_+t+w}return l(t)}return d=null==d?6:/[gprs]/.test(m)?Math.max(1,Math.min(21,d)):Math.max(0,Math.min(20,d)),_.toString=function(){return t+""},_}return{format:u,formatPrefix:function(t,e){var n=u(((t=Ia(t)).type="f",t)),r=3*Math.max(-8,Math.min(8,Math.floor(Ta(e)/3))),i=Math.pow(10,-r),o=Ha[8+r/3];return function(t){return n(i*t)+o}}}};function Ua(t){return Da=Ga(t),Na=Da.format,La=Da.formatPrefix,Da}Ua({decimal:".",thousands:",",grouping:[3],currency:["$",""]});var qa=function(t){return Math.max(0,-Ta(Math.abs(t)))},Qa=function(t,e){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Ta(e)/3)))-Ta(Math.abs(t)))},Wa=function(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,Ta(e)-Ta(t))+1},Ya=function(){return new Za};function Za(){this.reset()}Za.prototype={constructor:Za,reset:function(){this.s=this.t=0},add:function(t){Xa(Ka,t,this.t),Xa(this,Ka.s,this.s),this.s?this.t+=Ka.t:this.s=Ka.t},valueOf:function(){return this.s}};var Ka=new Za;function Xa(t,e,n){var r=t.s=e+n,i=r-e;t.t=e-(r-i)+(n-i)}var $a=1e-6,Ja=Math.PI,tu=Ja/2,eu=Ja/4,nu=2*Ja,ru=180/Ja,iu=Ja/180,ou=Math.abs,lu=Math.atan,au=Math.atan2,uu=Math.cos,su=Math.ceil,cu=Math.exp,hu=(Math,Math.log),fu=Math.pow,du=Math.sin,pu=Math.sign||function(t){return t>0?1:t<0?-1:0},mu=Math.sqrt,gu=Math.tan;function bu(t){return t>1?0:t<-1?Ja:Math.acos(t)}function yu(t){return t>1?tu:t<-1?-tu:Math.asin(t)}function vu(t){return(t=du(t/2))*t}function _u(){}function wu(t,e){t&&Su.hasOwnProperty(t.type)&&Su[t.type](t,e)}var xu={Feature:function(t,e){wu(t.geometry,e)},FeatureCollection:function(t,e){for(var n=t.features,r=-1,i=n.length;++r<i;)wu(n[r].geometry,e)}},Su={Sphere:function(t,e){e.sphere()},Point:function(t,e){e.point((t=t.coordinates)[0],t[1],t[2])},MultiPoint:function(t,e){for(var n=t.coordinates,r=-1,i=n.length;++r<i;)e.point((t=n[r])[0],t[1],t[2])},LineString:function(t,e){Cu(t.coordinates,e,0)},MultiLineString:function(t,e){for(var n=t.coordinates,r=-1,i=n.length;++r<i;)Cu(n[r],e,0)},Polygon:function(t,e){ku(t.coordinates,e)},MultiPolygon:function(t,e){for(var n=t.coordinates,r=-1,i=n.length;++r<i;)ku(n[r],e)},GeometryCollection:function(t,e){for(var n=t.geometries,r=-1,i=n.length;++r<i;)wu(n[r],e)}};function Cu(t,e,n){var r,i=-1,o=t.length-n;for(e.lineStart();++i<o;)e.point((r=t[i])[0],r[1],r[2]);e.lineEnd()}function ku(t,e){var n=-1,r=t.length;for(e.polygonStart();++n<r;)Cu(t[n],e,1);e.polygonEnd()}var Ru,ju,Ou,Eu,Tu,Pu=function(t,e){t&&xu.hasOwnProperty(t.type)?xu[t.type](t,e):wu(t,e)},Iu=Ya(),Au=Ya(),Mu={point:_u,lineStart:_u,lineEnd:_u,polygonStart:function(){Iu.reset(),Mu.lineStart=Du,Mu.lineEnd=Nu},polygonEnd:function(){var t=+Iu;Au.add(t<0?nu+t:t),this.lineStart=this.lineEnd=this.point=_u},sphere:function(){Au.add(nu)}};function Du(){Mu.point=Lu}function Nu(){Fu(Ru,ju)}function Lu(t,e){Mu.point=Fu,Ru=t,ju=e,Ou=t*=iu,Eu=uu(e=(e*=iu)/2+eu),Tu=du(e)}function Fu(t,e){e=(e*=iu)/2+eu;var n=(t*=iu)-Ou,r=n>=0?1:-1,i=r*n,o=uu(e),l=du(e),a=Tu*l,u=Eu*o+a*uu(i),s=a*r*du(i);Iu.add(au(s,u)),Ou=t,Eu=o,Tu=l}var zu=function(t){return Au.reset(),Pu(t,Mu),2*Au};function Vu(t){return[au(t[1],t[0]),yu(t[2])]}function Bu(t){var e=t[0],n=t[1],r=uu(n);return[r*uu(e),r*du(e),du(n)]}function Hu(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function Gu(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function Uu(t,e){t[0]+=e[0],t[1]+=e[1],t[2]+=e[2]}function qu(t,e){return[t[0]*e,t[1]*e,t[2]*e]}function Qu(t){var e=mu(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=e,t[1]/=e,t[2]/=e}var Wu,Yu,Zu,Ku,Xu,$u,Ju,ts,es,ns,rs=Ya(),is={point:os,lineStart:as,lineEnd:us,polygonStart:function(){is.point=ss,is.lineStart=cs,is.lineEnd=hs,rs.reset(),Mu.polygonStart()},polygonEnd:function(){Mu.polygonEnd(),is.point=os,is.lineStart=as,is.lineEnd=us,Iu<0?(Wu=-(Zu=180),Yu=-(Ku=90)):rs>$a?Ku=90:rs<-$a&&(Yu=-90),ns[0]=Wu,ns[1]=Zu}};function os(t,e){es.push(ns=[Wu=t,Zu=t]),e<Yu&&(Yu=e),e>Ku&&(Ku=e)}function ls(t,e){var n=Bu([t*iu,e*iu]);if(ts){var r=Gu(ts,n),i=Gu([r[1],-r[0],0],r);Qu(i),i=Vu(i);var o,l=t-Xu,a=l>0?1:-1,u=i[0]*ru*a,s=ou(l)>180;s^(a*Xu<u&&u<a*t)?(o=i[1]*ru)>Ku&&(Ku=o):s^(a*Xu<(u=(u+360)%360-180)&&u<a*t)?(o=-i[1]*ru)<Yu&&(Yu=o):(e<Yu&&(Yu=e),e>Ku&&(Ku=e)),s?t<Xu?fs(Wu,t)>fs(Wu,Zu)&&(Zu=t):fs(t,Zu)>fs(Wu,Zu)&&(Wu=t):Zu>=Wu?(t<Wu&&(Wu=t),t>Zu&&(Zu=t)):t>Xu?fs(Wu,t)>fs(Wu,Zu)&&(Zu=t):fs(t,Zu)>fs(Wu,Zu)&&(Wu=t)}else es.push(ns=[Wu=t,Zu=t]);e<Yu&&(Yu=e),e>Ku&&(Ku=e),ts=n,Xu=t}function as(){is.point=ls}function us(){ns[0]=Wu,ns[1]=Zu,is.point=os,ts=null}function ss(t,e){if(ts){var n=t-Xu;rs.add(ou(n)>180?n+(n>0?360:-360):n)}else $u=t,Ju=e;Mu.point(t,e),ls(t,e)}function cs(){Mu.lineStart()}function hs(){ss($u,Ju),Mu.lineEnd(),ou(rs)>$a&&(Wu=-(Zu=180)),ns[0]=Wu,ns[1]=Zu,ts=null}function fs(t,e){return(e-=t)<0?e+360:e}function ds(t,e){return t[0]-e[0]}function ps(t,e){return t[0]<=t[1]?t[0]<=e&&e<=t[1]:e<t[0]||t[1]<e}var ms,gs,bs,ys,vs,_s,ws,xs,Ss,Cs,ks,Rs,js,Os,Es,Ts,Ps=function(t){var e,n,r,i,o,l,a;if(Ku=Zu=-(Wu=Yu=1/0),es=[],Pu(t,is),n=es.length){for(es.sort(ds),e=1,o=[r=es[0]];e<n;++e)ps(r,(i=es[e])[0])||ps(r,i[1])?(fs(r[0],i[1])>fs(r[0],r[1])&&(r[1]=i[1]),fs(i[0],r[1])>fs(r[0],r[1])&&(r[0]=i[0])):o.push(r=i);for(l=-1/0,e=0,r=o[n=o.length-1];e<=n;r=i,++e)(a=fs(r[1],(i=o[e])[0]))>l&&(l=a,Wu=i[0],Zu=r[1])}return es=ns=null,Wu===1/0||Yu===1/0?[[NaN,NaN],[NaN,NaN]]:[[Wu,Yu],[Zu,Ku]]},Is={sphere:_u,point:As,lineStart:Ds,lineEnd:Fs,polygonStart:function(){Is.lineStart=zs,Is.lineEnd=Vs},polygonEnd:function(){Is.lineStart=Ds,Is.lineEnd=Fs}};function As(t,e){t*=iu;var n=uu(e*=iu);Ms(n*uu(t),n*du(t),du(e))}function Ms(t,e,n){bs+=(t-bs)/++ms,ys+=(e-ys)/ms,vs+=(n-vs)/ms}function Ds(){Is.point=Ns}function Ns(t,e){t*=iu;var n=uu(e*=iu);Os=n*uu(t),Es=n*du(t),Ts=du(e),Is.point=Ls,Ms(Os,Es,Ts)}function Ls(t,e){t*=iu;var n=uu(e*=iu),r=n*uu(t),i=n*du(t),o=du(e),l=au(mu((l=Es*o-Ts*i)*l+(l=Ts*r-Os*o)*l+(l=Os*i-Es*r)*l),Os*r+Es*i+Ts*o);gs+=l,_s+=l*(Os+(Os=r)),ws+=l*(Es+(Es=i)),xs+=l*(Ts+(Ts=o)),Ms(Os,Es,Ts)}function Fs(){Is.point=As}function zs(){Is.point=Bs}function Vs(){Hs(Rs,js),Is.point=As}function Bs(t,e){Rs=t,js=e,t*=iu,e*=iu,Is.point=Hs;var n=uu(e);Os=n*uu(t),Es=n*du(t),Ts=du(e),Ms(Os,Es,Ts)}function Hs(t,e){t*=iu;var n=uu(e*=iu),r=n*uu(t),i=n*du(t),o=du(e),l=Es*o-Ts*i,a=Ts*r-Os*o,u=Os*i-Es*r,s=mu(l*l+a*a+u*u),c=yu(s),h=s&&-c/s;Ss+=h*l,Cs+=h*a,ks+=h*u,gs+=c,_s+=c*(Os+(Os=r)),ws+=c*(Es+(Es=i)),xs+=c*(Ts+(Ts=o)),Ms(Os,Es,Ts)}var Gs=function(t){ms=gs=bs=ys=vs=_s=ws=xs=Ss=Cs=ks=0,Pu(t,Is);var e=Ss,n=Cs,r=ks,i=e*e+n*n+r*r;return i<1e-12&&(e=_s,n=ws,r=xs,gs<$a&&(e=bs,n=ys,r=vs),(i=e*e+n*n+r*r)<1e-12)?[NaN,NaN]:[au(n,e)*ru,yu(r/mu(i))*ru]},Us=function(t){return function(){return t}},qs=function(t,e){function n(n,r){return n=t(n,r),e(n[0],n[1])}return t.invert&&e.invert&&(n.invert=function(n,r){return(n=e.invert(n,r))&&t.invert(n[0],n[1])}),n};function Qs(t,e){return[t>Ja?t-nu:t<-Ja?t+nu:t,e]}function Ws(t,e,n){return(t%=nu)?e||n?qs(Zs(t),Ks(e,n)):Zs(t):e||n?Ks(e,n):Qs}function Ys(t){return function(e,n){return[(e+=t)>Ja?e-nu:e<-Ja?e+nu:e,n]}}function Zs(t){var e=Ys(t);return e.invert=Ys(-t),e}function Ks(t,e){var n=uu(t),r=du(t),i=uu(e),o=du(e);function l(t,e){var l=uu(e),a=uu(t)*l,u=du(t)*l,s=du(e),c=s*n+a*r;return[au(u*i-c*o,a*n-s*r),yu(c*i+u*o)]}return l.invert=function(t,e){var l=uu(e),a=uu(t)*l,u=du(t)*l,s=du(e),c=s*i-u*o;return[au(u*i+s*o,a*n+c*r),yu(c*n-a*r)]},l}Qs.invert=Qs;var Xs=function(t){function e(e){return(e=t(e[0]*iu,e[1]*iu))[0]*=ru,e[1]*=ru,e}return t=Ws(t[0]*iu,t[1]*iu,t.length>2?t[2]*iu:0),e.invert=function(e){return(e=t.invert(e[0]*iu,e[1]*iu))[0]*=ru,e[1]*=ru,e},e};function $s(t,e,n,r,i,o){if(n){var l=uu(e),a=du(e),u=r*n;null==i?(i=e+r*nu,o=e-u/2):(i=Js(l,i),o=Js(l,o),(r>0?i<o:i>o)&&(i+=r*nu));for(var s,c=i;r>0?c>o:c<o;c-=u)s=Vu([l,-a*uu(c),-a*du(c)]),t.point(s[0],s[1])}}function Js(t,e){(e=Bu(e))[0]-=t,Qu(e);var n=bu(-e[1]);return((-e[2]<0?-n:n)+nu-$a)%nu}var tc=function(){var t,e,n=Us([0,0]),r=Us(90),i=Us(6),o={point:function(n,r){t.push(n=e(n,r)),n[0]*=ru,n[1]*=ru}};function l(){var l=n.apply(this,arguments),a=r.apply(this,arguments)*iu,u=i.apply(this,arguments)*iu;return t=[],e=Ws(-l[0]*iu,-l[1]*iu,0).invert,$s(o,a,u,1),l={type:"Polygon",coordinates:[t]},t=e=null,l}return l.center=function(t){return arguments.length?(n="function"==typeof t?t:Us([+t[0],+t[1]]),l):n},l.radius=function(t){return arguments.length?(r="function"==typeof t?t:Us(+t),l):r},l.precision=function(t){return arguments.length?(i="function"==typeof t?t:Us(+t),l):i},l},ec=function(){var t,e=[];return{point:function(e,n){t.push([e,n])},lineStart:function(){e.push(t=[])},lineEnd:_u,rejoin:function(){e.length>1&&e.push(e.pop().concat(e.shift()))},result:function(){var n=e;return e=[],t=null,n}}},nc=function(t,e){return ou(t[0]-e[0])<$a&&ou(t[1]-e[1])<$a};function rc(t,e,n,r){this.x=t,this.z=e,this.o=n,this.e=r,this.v=!1,this.n=this.p=null}var ic=function(t,e,n,r,i){var o,l,a=[],u=[];if(t.forEach(function(t){if(!((e=t.length-1)<=0)){var e,n,r=t[0],l=t[e];if(nc(r,l)){for(i.lineStart(),o=0;o<e;++o)i.point((r=t[o])[0],r[1]);i.lineEnd()}else a.push(n=new rc(r,t,null,!0)),u.push(n.o=new rc(r,null,n,!1)),a.push(n=new rc(l,t,null,!1)),u.push(n.o=new rc(l,null,n,!0))}}),a.length){for(u.sort(e),oc(a),oc(u),o=0,l=u.length;o<l;++o)u[o].e=n=!n;for(var s,c,h=a[0];;){for(var f=h,d=!0;f.v;)if((f=f.n)===h)return;s=f.z,i.lineStart();do{if(f.v=f.o.v=!0,f.e){if(d)for(o=0,l=s.length;o<l;++o)i.point((c=s[o])[0],c[1]);else r(f.x,f.n.x,1,i);f=f.n}else{if(d)for(o=(s=f.p.z).length-1;o>=0;--o)i.point((c=s[o])[0],c[1]);else r(f.x,f.p.x,-1,i);f=f.p}s=(f=f.o).z,d=!d}while(!f.v);i.lineEnd()}}};function oc(t){if(e=t.length){for(var e,n,r=0,i=t[0];++r<e;)i.n=n=t[r],n.p=i,i=n;i.n=n=t[0],n.p=i}}var lc=Ya(),ac=function(t,e){var n=e[0],r=e[1],i=du(r),o=[du(n),-uu(n),0],l=0,a=0;lc.reset(),1===i?r=tu+$a:-1===i&&(r=-tu-$a);for(var u=0,s=t.length;u<s;++u)if(h=(c=t[u]).length)for(var c,h,f=c[h-1],d=f[0],p=f[1]/2+eu,m=du(p),g=uu(p),b=0;b<h;++b,d=v,m=w,g=x,f=y){var y=c[b],v=y[0],_=y[1]/2+eu,w=du(_),x=uu(_),S=v-d,C=S>=0?1:-1,k=C*S,R=k>Ja,j=m*w;if(lc.add(au(j*C*du(k),g*x+j*uu(k))),l+=R?S+C*nu:S,R^d>=n^v>=n){var O=Gu(Bu(f),Bu(y));Qu(O);var E=Gu(o,O);Qu(E);var T=(R^S>=0?-1:1)*yu(E[2]);(r>T||r===T&&(O[0]||O[1]))&&(a+=R^S>=0?1:-1)}}return(l<-$a||l<$a&&lc<-$a)^1&a},uc=function(t,e,n,r){return function(i){var o,l,a,u=e(i),s=ec(),c=e(s),h=!1,f={point:d,lineStart:m,lineEnd:g,polygonStart:function(){f.point=b,f.lineStart=y,f.lineEnd=v,l=[],o=[]},polygonEnd:function(){f.point=d,f.lineStart=m,f.lineEnd=g,l=L(l);var t=ac(o,r);l.length?(h||(i.polygonStart(),h=!0),ic(l,cc,t,n,i)):t&&(h||(i.polygonStart(),h=!0),i.lineStart(),n(null,null,1,i),i.lineEnd()),h&&(i.polygonEnd(),h=!1),l=o=null},sphere:function(){i.polygonStart(),i.lineStart(),n(null,null,1,i),i.lineEnd(),i.polygonEnd()}};function d(e,n){t(e,n)&&i.point(e,n)}function p(t,e){u.point(t,e)}function m(){f.point=p,u.lineStart()}function g(){f.point=d,u.lineEnd()}function b(t,e){a.push([t,e]),c.point(t,e)}function y(){c.lineStart(),a=[]}function v(){b(a[0][0],a[0][1]),c.lineEnd();var t,e,n,r,u=c.clean(),f=s.result(),d=f.length;if(a.pop(),o.push(a),a=null,d)if(1&u){if((e=(n=f[0]).length-1)>0){for(h||(i.polygonStart(),h=!0),i.lineStart(),t=0;t<e;++t)i.point((r=n[t])[0],r[1]);i.lineEnd()}}else d>1&&2&u&&f.push(f.pop().concat(f.shift())),l.push(f.filter(sc))}return f}};function sc(t){return t.length>1}function cc(t,e){return((t=t.x)[0]<0?t[1]-tu-$a:tu-t[1])-((e=e.x)[0]<0?e[1]-tu-$a:tu-e[1])}var hc=uc(function(){return!0},function(t){var e,n=NaN,r=NaN,i=NaN;return{lineStart:function(){t.lineStart(),e=1},point:function(o,l){var a=o>0?Ja:-Ja,u=ou(o-n);ou(u-Ja)<$a?(t.point(n,r=(r+l)/2>0?tu:-tu),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(a,r),t.point(o,r),e=0):i!==a&&u>=Ja&&(ou(n-i)<$a&&(n-=i*$a),ou(o-a)<$a&&(o-=a*$a),r=function(t,e,n,r){var i,o,l=du(t-n);return ou(l)>$a?lu((du(e)*(o=uu(r))*du(n)-du(r)*(i=uu(e))*du(t))/(i*o*l)):(e+r)/2}(n,r,o,l),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(a,r),e=0),t.point(n=o,r=l),i=a},lineEnd:function(){t.lineEnd(),n=r=NaN},clean:function(){return 2-e}}},function(t,e,n,r){var i;if(null==t)r.point(-Ja,i=n*tu),r.point(0,i),r.point(Ja,i),r.point(Ja,0),r.point(Ja,-i),r.point(0,-i),r.point(-Ja,-i),r.point(-Ja,0),r.point(-Ja,i);else if(ou(t[0]-e[0])>$a){var o=t[0]<e[0]?Ja:-Ja;r.point(-o,i=n*o/2),r.point(0,i),r.point(o,i)}else r.point(e[0],e[1])},[-Ja,-tu]),fc=function(t){var e=uu(t),n=6*iu,r=e>0,i=ou(e)>$a;function o(t,n){return uu(t)*uu(n)>e}function l(t,n,r){var i=[1,0,0],o=Gu(Bu(t),Bu(n)),l=Hu(o,o),a=o[0],u=l-a*a;if(!u)return!r&&t;var s=e*l/u,c=-e*a/u,h=Gu(i,o),f=qu(i,s);Uu(f,qu(o,c));var d=h,p=Hu(f,d),m=Hu(d,d),g=p*p-m*(Hu(f,f)-1);if(!(g<0)){var b=mu(g),y=qu(d,(-p-b)/m);if(Uu(y,f),y=Vu(y),!r)return y;var v,_=t[0],w=n[0],x=t[1],S=n[1];w<_&&(v=_,_=w,w=v);var C=w-_,k=ou(C-Ja)<$a;if(!k&&S<x&&(v=x,x=S,S=v),k||C<$a?k?x+S>0^y[1]<(ou(y[0]-_)<$a?x:S):x<=y[1]&&y[1]<=S:C>Ja^(_<=y[0]&&y[0]<=w)){var R=qu(d,(-p+b)/m);return Uu(R,f),[y,Vu(R)]}}}function a(e,n){var i=r?t:Ja-t,o=0;return e<-i?o|=1:e>i&&(o|=2),n<-i?o|=4:n>i&&(o|=8),o}return uc(o,function(t){var e,n,u,s,c;return{lineStart:function(){s=u=!1,c=1},point:function(h,f){var d,p=[h,f],m=o(h,f),g=r?m?0:a(h,f):m?a(h+(h<0?Ja:-Ja),f):0;if(!e&&(s=u=m)&&t.lineStart(),m!==u&&(!(d=l(e,p))||nc(e,d)||nc(p,d))&&(p[0]+=$a,p[1]+=$a,m=o(p[0],p[1])),m!==u)c=0,m?(t.lineStart(),d=l(p,e),t.point(d[0],d[1])):(d=l(e,p),t.point(d[0],d[1]),t.lineEnd()),e=d;else if(i&&e&&r^m){var b;g&n||!(b=l(p,e,!0))||(c=0,r?(t.lineStart(),t.point(b[0][0],b[0][1]),t.point(b[1][0],b[1][1]),t.lineEnd()):(t.point(b[1][0],b[1][1]),t.lineEnd(),t.lineStart(),t.point(b[0][0],b[0][1])))}!m||e&&nc(e,p)||t.point(p[0],p[1]),e=p,u=m,n=g},lineEnd:function(){u&&t.lineEnd(),e=null},clean:function(){return c|(s&&u)<<1}}},function(e,r,i,o){$s(o,t,n,i,e,r)},r?[0,-t]:[-Ja,t-Ja])},dc=function(t,e,n,r,i,o){var l,a=t[0],u=t[1],s=0,c=1,h=e[0]-a,f=e[1]-u;if(l=n-a,h||!(l>0)){if(l/=h,h<0){if(l<s)return;l<c&&(c=l)}else if(h>0){if(l>c)return;l>s&&(s=l)}if(l=i-a,h||!(l<0)){if(l/=h,h<0){if(l>c)return;l>s&&(s=l)}else if(h>0){if(l<s)return;l<c&&(c=l)}if(l=r-u,f||!(l>0)){if(l/=f,f<0){if(l<s)return;l<c&&(c=l)}else if(f>0){if(l>c)return;l>s&&(s=l)}if(l=o-u,f||!(l<0)){if(l/=f,f<0){if(l>c)return;l>s&&(s=l)}else if(f>0){if(l<s)return;l<c&&(c=l)}return s>0&&(t[0]=a+s*h,t[1]=u+s*f),c<1&&(e[0]=a+c*h,e[1]=u+c*f),!0}}}}},pc=1e9,mc=-pc;function gc(t,e,n,r){function i(i,o){return t<=i&&i<=n&&e<=o&&o<=r}function o(i,o,a,s){var c=0,h=0;if(null==i||(c=l(i,a))!==(h=l(o,a))||u(i,o)<0^a>0)do{s.point(0===c||3===c?t:n,c>1?r:e)}while((c=(c+a+4)%4)!==h);else s.point(o[0],o[1])}function l(r,i){return ou(r[0]-t)<$a?i>0?0:3:ou(r[0]-n)<$a?i>0?2:1:ou(r[1]-e)<$a?i>0?1:0:i>0?3:2}function a(t,e){return u(t.x,e.x)}function u(t,e){var n=l(t,1),r=l(e,1);return n!==r?n-r:0===n?e[1]-t[1]:1===n?t[0]-e[0]:2===n?t[1]-e[1]:e[0]-t[0]}return function(l){var u,s,c,h,f,d,p,m,g,b,y,v=l,_=ec(),w={point:x,lineStart:function(){w.point=S,s&&s.push(c=[]),b=!0,g=!1,p=m=NaN},lineEnd:function(){u&&(S(h,f),d&&g&&_.rejoin(),u.push(_.result())),w.point=x,g&&v.lineEnd()},polygonStart:function(){v=_,u=[],s=[],y=!0},polygonEnd:function(){var e=function(){for(var e=0,n=0,i=s.length;n<i;++n)for(var o,l,a=s[n],u=1,c=a.length,h=a[0],f=h[0],d=h[1];u<c;++u)o=f,l=d,f=(h=a[u])[0],d=h[1],l<=r?d>r&&(f-o)*(r-l)>(d-l)*(t-o)&&++e:d<=r&&(f-o)*(r-l)<(d-l)*(t-o)&&--e;return e}(),n=y&&e,i=(u=L(u)).length;(n||i)&&(l.polygonStart(),n&&(l.lineStart(),o(null,null,1,l),l.lineEnd()),i&&ic(u,a,e,o,l),l.polygonEnd()),v=l,u=s=c=null}};function x(t,e){i(t,e)&&v.point(t,e)}function S(o,l){var a=i(o,l);if(s&&c.push([o,l]),b)h=o,f=l,d=a,b=!1,a&&(v.lineStart(),v.point(o,l));else if(a&&g)v.point(o,l);else{var u=[p=Math.max(mc,Math.min(pc,p)),m=Math.max(mc,Math.min(pc,m))],_=[o=Math.max(mc,Math.min(pc,o)),l=Math.max(mc,Math.min(pc,l))];dc(u,_,t,e,n,r)?(g||(v.lineStart(),v.point(u[0],u[1])),v.point(_[0],_[1]),a||v.lineEnd(),y=!1):a&&(v.lineStart(),v.point(o,l),y=!1)}p=o,m=l,g=a}return w}}var bc,yc,vc,_c=function(){var t,e,n,r=0,i=0,o=960,l=500;return n={stream:function(n){return t&&e===n?t:t=gc(r,i,o,l)(e=n)},extent:function(a){return arguments.length?(r=+a[0][0],i=+a[0][1],o=+a[1][0],l=+a[1][1],t=e=null,n):[[r,i],[o,l]]}}},wc=Ya(),xc={sphere:_u,point:_u,lineStart:function(){xc.point=Cc,xc.lineEnd=Sc},lineEnd:_u,polygonStart:_u,polygonEnd:_u};function Sc(){xc.point=xc.lineEnd=_u}function Cc(t,e){bc=t*=iu,yc=du(e*=iu),vc=uu(e),xc.point=kc}function kc(t,e){t*=iu;var n=du(e*=iu),r=uu(e),i=ou(t-bc),o=uu(i),l=r*du(i),a=vc*n-yc*r*o,u=yc*n+vc*r*o;wc.add(au(mu(l*l+a*a),u)),bc=t,yc=n,vc=r}var Rc=function(t){return wc.reset(),Pu(t,xc),+wc},jc=[null,null],Oc={type:"LineString",coordinates:jc},Ec=function(t,e){return jc[0]=t,jc[1]=e,Rc(Oc)},Tc={Feature:function(t,e){return Ic(t.geometry,e)},FeatureCollection:function(t,e){for(var n=t.features,r=-1,i=n.length;++r<i;)if(Ic(n[r].geometry,e))return!0;return!1}},Pc={Sphere:function(){return!0},Point:function(t,e){return Ac(t.coordinates,e)},MultiPoint:function(t,e){for(var n=t.coordinates,r=-1,i=n.length;++r<i;)if(Ac(n[r],e))return!0;return!1},LineString:function(t,e){return Mc(t.coordinates,e)},MultiLineString:function(t,e){for(var n=t.coordinates,r=-1,i=n.length;++r<i;)if(Mc(n[r],e))return!0;return!1},Polygon:function(t,e){return Dc(t.coordinates,e)},MultiPolygon:function(t,e){for(var n=t.coordinates,r=-1,i=n.length;++r<i;)if(Dc(n[r],e))return!0;return!1},GeometryCollection:function(t,e){for(var n=t.geometries,r=-1,i=n.length;++r<i;)if(Ic(n[r],e))return!0;return!1}};function Ic(t,e){return!(!t||!Pc.hasOwnProperty(t.type))&&Pc[t.type](t,e)}function Ac(t,e){return 0===Ec(t,e)}function Mc(t,e){var n=Ec(t[0],t[1]);return Ec(t[0],e)+Ec(e,t[1])<=n+$a}function Dc(t,e){return!!ac(t.map(Nc),Lc(e))}function Nc(t){return(t=t.map(Lc)).pop(),t}function Lc(t){return[t[0]*iu,t[1]*iu]}var Fc=function(t,e){return(t&&Tc.hasOwnProperty(t.type)?Tc[t.type]:Ic)(t,e)};function zc(t,e,n){var r=x(t,e-$a,n).concat(e);return function(t){return r.map(function(e){return[t,e]})}}function Vc(t,e,n){var r=x(t,e-$a,n).concat(e);return function(t){return r.map(function(e){return[e,t]})}}function Bc(){var t,e,n,r,i,o,l,a,u,s,c,h,f=10,d=f,p=90,m=360,g=2.5;function b(){return{type:"MultiLineString",coordinates:y()}}function y(){return x(su(r/p)*p,n,p).map(c).concat(x(su(a/m)*m,l,m).map(h)).concat(x(su(e/f)*f,t,f).filter(function(t){return ou(t%p)>$a}).map(u)).concat(x(su(o/d)*d,i,d).filter(function(t){return ou(t%m)>$a}).map(s))}return b.lines=function(){return y().map(function(t){return{type:"LineString",coordinates:t}})},b.outline=function(){return{type:"Polygon",coordinates:[c(r).concat(h(l).slice(1),c(n).reverse().slice(1),h(a).reverse().slice(1))]}},b.extent=function(t){return arguments.length?b.extentMajor(t).extentMinor(t):b.extentMinor()},b.extentMajor=function(t){return arguments.length?(a=+t[0][1],l=+t[1][1],(r=+t[0][0])>(n=+t[1][0])&&(t=r,r=n,n=t),a>l&&(t=a,a=l,l=t),b.precision(g)):[[r,a],[n,l]]},b.extentMinor=function(n){return arguments.length?(o=+n[0][1],i=+n[1][1],(e=+n[0][0])>(t=+n[1][0])&&(n=e,e=t,t=n),o>i&&(n=o,o=i,i=n),b.precision(g)):[[e,o],[t,i]]},b.step=function(t){return arguments.length?b.stepMajor(t).stepMinor(t):b.stepMinor()},b.stepMajor=function(t){return arguments.length?(p=+t[0],m=+t[1],b):[p,m]},b.stepMinor=function(t){return arguments.length?(f=+t[0],d=+t[1],b):[f,d]},b.precision=function(f){return arguments.length?(g=+f,u=zc(o,i,90),s=Vc(e,t,g),c=zc(a,l,90),h=Vc(r,n,g),b):g},b.extentMajor([[-180,-90+$a],[180,90-$a]]).extentMinor([[-180,-80-$a],[180,80+$a]])}function Hc(){return Bc()()}var Gc,Uc,qc,Qc,Wc=function(t,e){var n=t[0]*iu,r=t[1]*iu,i=e[0]*iu,o=e[1]*iu,l=uu(r),a=du(r),u=uu(o),s=du(o),c=l*uu(n),h=l*du(n),f=u*uu(i),d=u*du(i),p=2*yu(mu(vu(o-r)+l*u*vu(i-n))),m=du(p),g=p?function(t){var e=du(t*=p)/m,n=du(p-t)/m,r=n*c+e*f,i=n*h+e*d,o=n*a+e*s;return[au(i,r)*ru,au(o,mu(r*r+i*i))*ru]}:function(){return[n*ru,r*ru]};return g.distance=p,g},Yc=function(t){return t},Zc=Ya(),Kc=Ya(),Xc={point:_u,lineStart:_u,lineEnd:_u,polygonStart:function(){Xc.lineStart=$c,Xc.lineEnd=eh},polygonEnd:function(){Xc.lineStart=Xc.lineEnd=Xc.point=_u,Zc.add(ou(Kc)),Kc.reset()},result:function(){var t=Zc/2;return Zc.reset(),t}};function $c(){Xc.point=Jc}function Jc(t,e){Xc.point=th,Gc=qc=t,Uc=Qc=e}function th(t,e){Kc.add(Qc*t-qc*e),qc=t,Qc=e}function eh(){th(Gc,Uc)}var nh,rh,ih,oh,lh=Xc,ah=1/0,uh=ah,sh=-ah,ch=sh,hh={point:function(t,e){t<ah&&(ah=t),t>sh&&(sh=t),e<uh&&(uh=e),e>ch&&(ch=e)},lineStart:_u,lineEnd:_u,polygonStart:_u,polygonEnd:_u,result:function(){var t=[[ah,uh],[sh,ch]];return sh=ch=-(uh=ah=1/0),t}},fh=0,dh=0,ph=0,mh=0,gh=0,bh=0,yh=0,vh=0,_h=0,wh={point:xh,lineStart:Sh,lineEnd:Rh,polygonStart:function(){wh.lineStart=jh,wh.lineEnd=Oh},polygonEnd:function(){wh.point=xh,wh.lineStart=Sh,wh.lineEnd=Rh},result:function(){var t=_h?[yh/_h,vh/_h]:bh?[mh/bh,gh/bh]:ph?[fh/ph,dh/ph]:[NaN,NaN];return fh=dh=ph=mh=gh=bh=yh=vh=_h=0,t}};function xh(t,e){fh+=t,dh+=e,++ph}function Sh(){wh.point=Ch}function Ch(t,e){wh.point=kh,xh(ih=t,oh=e)}function kh(t,e){var n=t-ih,r=e-oh,i=mu(n*n+r*r);mh+=i*(ih+t)/2,gh+=i*(oh+e)/2,bh+=i,xh(ih=t,oh=e)}function Rh(){wh.point=xh}function jh(){wh.point=Eh}function Oh(){Th(nh,rh)}function Eh(t,e){wh.point=Th,xh(nh=ih=t,rh=oh=e)}function Th(t,e){var n=t-ih,r=e-oh,i=mu(n*n+r*r);mh+=i*(ih+t)/2,gh+=i*(oh+e)/2,bh+=i,yh+=(i=oh*t-ih*e)*(ih+t),vh+=i*(oh+e),_h+=3*i,xh(ih=t,oh=e)}var Ph=wh;function Ih(t){this._context=t}Ih.prototype={_radius:4.5,pointRadius:function(t){return this._radius=t,this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._context.closePath(),this._point=NaN},point:function(t,e){switch(this._point){case 0:this._context.moveTo(t,e),this._point=1;break;case 1:this._context.lineTo(t,e);break;default:this._context.moveTo(t+this._radius,e),this._context.arc(t,e,this._radius,0,nu)}},result:_u};var Ah,Mh,Dh,Nh,Lh,Fh=Ya(),zh={point:_u,lineStart:function(){zh.point=Vh},lineEnd:function(){Ah&&Bh(Mh,Dh),zh.point=_u},polygonStart:function(){Ah=!0},polygonEnd:function(){Ah=null},result:function(){var t=+Fh;return Fh.reset(),t}};function Vh(t,e){zh.point=Bh,Mh=Nh=t,Dh=Lh=e}function Bh(t,e){Fh.add(mu((Nh-=t)*Nh+(Lh-=e)*Lh)),Nh=t,Lh=e}var Hh=zh;function Gh(){this._string=[]}function Uh(t){return"m0,"+t+"a"+t+","+t+" 0 1,1 0,"+-2*t+"a"+t+","+t+" 0 1,1 0,"+2*t+"z"}Gh.prototype={_radius:4.5,_circle:Uh(4.5),pointRadius:function(t){return(t=+t)!==this._radius&&(this._radius=t,this._circle=null),this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._string.push("Z"),this._point=NaN},point:function(t,e){switch(this._point){case 0:this._string.push("M",t,",",e),this._point=1;break;case 1:this._string.push("L",t,",",e);break;default:null==this._circle&&(this._circle=Uh(this._radius)),this._string.push("M",t,",",e,this._circle)}},result:function(){if(this._string.length){var t=this._string.join("");return this._string=[],t}return null}};var qh=function(t,e){var n,r,i=4.5;function o(t){return t&&("function"==typeof i&&r.pointRadius(+i.apply(this,arguments)),Pu(t,n(r))),r.result()}return o.area=function(t){return Pu(t,n(lh)),lh.result()},o.measure=function(t){return Pu(t,n(Hh)),Hh.result()},o.bounds=function(t){return Pu(t,n(hh)),hh.result()},o.centroid=function(t){return Pu(t,n(Ph)),Ph.result()},o.projection=function(e){return arguments.length?(n=null==e?(t=null,Yc):(t=e).stream,o):t},o.context=function(t){return arguments.length?(r=null==t?(e=null,new Gh):new Ih(e=t),"function"!=typeof i&&r.pointRadius(i),o):e},o.pointRadius=function(t){return arguments.length?(i="function"==typeof t?t:(r.pointRadius(+t),+t),o):i},o.projection(t).context(e)},Qh=function(t){return{stream:Wh(t)}};function Wh(t){return function(e){var n=new Yh;for(var r in t)n[r]=t[r];return n.stream=e,n}}function Yh(){}function Zh(t,e,n){var r=t.clipExtent&&t.clipExtent();return t.scale(150).translate([0,0]),null!=r&&t.clipExtent(null),Pu(n,t.stream(hh)),e(hh.result()),null!=r&&t.clipExtent(r),t}function Kh(t,e,n){return Zh(t,function(n){var r=e[1][0]-e[0][0],i=e[1][1]-e[0][1],o=Math.min(r/(n[1][0]-n[0][0]),i/(n[1][1]-n[0][1])),l=+e[0][0]+(r-o*(n[1][0]+n[0][0]))/2,a=+e[0][1]+(i-o*(n[1][1]+n[0][1]))/2;t.scale(150*o).translate([l,a])},n)}function Xh(t,e,n){return Kh(t,[[0,0],e],n)}function $h(t,e,n){return Zh(t,function(n){var r=+e,i=r/(n[1][0]-n[0][0]),o=(r-i*(n[1][0]+n[0][0]))/2,l=-i*n[0][1];t.scale(150*i).translate([o,l])},n)}function Jh(t,e,n){return Zh(t,function(n){var r=+e,i=r/(n[1][1]-n[0][1]),o=-i*n[0][0],l=(r-i*(n[1][1]+n[0][1]))/2;t.scale(150*i).translate([o,l])},n)}Yh.prototype={constructor:Yh,point:function(t,e){this.stream.point(t,e)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}};var tf=16,ef=uu(30*iu),nf=function(t,e){return+e?function(t,e){function n(r,i,o,l,a,u,s,c,h,f,d,p,m,g){var b=s-r,y=c-i,v=b*b+y*y;if(v>4*e&&m--){var _=l+f,w=a+d,x=u+p,S=mu(_*_+w*w+x*x),C=yu(x/=S),k=ou(ou(x)-1)<$a||ou(o-h)<$a?(o+h)/2:au(w,_),R=t(k,C),j=R[0],O=R[1],E=j-r,T=O-i,P=y*E-b*T;(P*P/v>e||ou((b*E+y*T)/v-.5)>.3||l*f+a*d+u*p<ef)&&(n(r,i,o,l,a,u,j,O,k,_/=S,w/=S,x,m,g),g.point(j,O),n(j,O,k,_,w,x,s,c,h,f,d,p,m,g))}}return function(e){var r,i,o,l,a,u,s,c,h,f,d,p,m={point:g,lineStart:b,lineEnd:v,polygonStart:function(){e.polygonStart(),m.lineStart=_},polygonEnd:function(){e.polygonEnd(),m.lineStart=b}};function g(n,r){n=t(n,r),e.point(n[0],n[1])}function b(){c=NaN,m.point=y,e.lineStart()}function y(r,i){var o=Bu([r,i]),l=t(r,i);n(c,h,s,f,d,p,c=l[0],h=l[1],s=r,f=o[0],d=o[1],p=o[2],tf,e),e.point(c,h)}function v(){m.point=g,e.lineEnd()}function _(){b(),m.point=w,m.lineEnd=x}function w(t,e){y(r=t,e),i=c,o=h,l=f,a=d,u=p,m.point=y}function x(){n(c,h,s,f,d,p,i,o,r,l,a,u,tf,e),m.lineEnd=v,v()}return m}}(t,e):function(t){return Wh({point:function(e,n){e=t(e,n),this.stream.point(e[0],e[1])}})}(t)},rf=Wh({point:function(t,e){this.stream.point(t*iu,e*iu)}});function of(t,e,n,r){var i=uu(r),o=du(r),l=i*t,a=o*t,u=i/t,s=o/t,c=(o*n-i*e)/t,h=(o*e+i*n)/t;function f(t,r){return[l*t-a*r+e,n-a*t-l*r]}return f.invert=function(t,e){return[u*t-s*e+c,h-s*t-u*e]},f}function lf(t){return af(function(){return t})()}function af(t){var e,n,r,i,o,l,a,u,s,c,h=150,f=480,d=250,p=0,m=0,g=0,b=0,y=0,v=0,_=null,w=hc,x=null,S=Yc,C=.5;function k(t){return u(t[0]*iu,t[1]*iu)}function R(t){return(t=u.invert(t[0],t[1]))&&[t[0]*ru,t[1]*ru]}function j(){var t=of(h,0,0,v).apply(null,e(p,m)),r=(v?of:function(t,e,n){function r(r,i){return[e+t*r,n-t*i]}return r.invert=function(r,i){return[(r-e)/t,(n-i)/t]},r})(h,f-t[0],d-t[1],v);return n=Ws(g,b,y),a=qs(e,r),u=qs(n,a),l=nf(a,C),O()}function O(){return s=c=null,k}return k.stream=function(t){return s&&c===t?s:s=rf(function(t){return Wh({point:function(e,n){var r=t(e,n);return this.stream.point(r[0],r[1])}})}(n)(w(l(S(c=t)))))},k.preclip=function(t){return arguments.length?(w=t,_=void 0,O()):w},k.postclip=function(t){return arguments.length?(S=t,x=r=i=o=null,O()):S},k.clipAngle=function(t){return arguments.length?(w=+t?fc(_=t*iu):(_=null,hc),O()):_*ru},k.clipExtent=function(t){return arguments.length?(S=null==t?(x=r=i=o=null,Yc):gc(x=+t[0][0],r=+t[0][1],i=+t[1][0],o=+t[1][1]),O()):null==x?null:[[x,r],[i,o]]},k.scale=function(t){return arguments.length?(h=+t,j()):h},k.translate=function(t){return arguments.length?(f=+t[0],d=+t[1],j()):[f,d]},k.center=function(t){return arguments.length?(p=t[0]%360*iu,m=t[1]%360*iu,j()):[p*ru,m*ru]},k.rotate=function(t){return arguments.length?(g=t[0]%360*iu,b=t[1]%360*iu,y=t.length>2?t[2]%360*iu:0,j()):[g*ru,b*ru,y*ru]},k.angle=function(t){return arguments.length?(v=t%360*iu,j()):v*ru},k.precision=function(t){return arguments.length?(l=nf(a,C=t*t),O()):mu(C)},k.fitExtent=function(t,e){return Kh(k,t,e)},k.fitSize=function(t,e){return Xh(k,t,e)},k.fitWidth=function(t,e){return $h(k,t,e)},k.fitHeight=function(t,e){return Jh(k,t,e)},function(){return e=t.apply(this,arguments),k.invert=e.invert&&R,j()}}function uf(t){var e=0,n=Ja/3,r=af(t),i=r(e,n);return i.parallels=function(t){return arguments.length?r(e=t[0]*iu,n=t[1]*iu):[e*ru,n*ru]},i}function sf(t,e){var n=du(t),r=(n+du(e))/2;if(ou(r)<$a)return function(e){var n=uu(t);function r(t,e){return[t*n,du(e)/n]}return r.invert=function(t,e){return[t/n,yu(e*n)]},r}();var i=1+n*(2*r-n),o=mu(i)/r;function l(t,e){var n=mu(i-2*r*du(e))/r;return[n*du(t*=r),o-n*uu(t)]}return l.invert=function(t,e){var n=o-e;return[au(t,ou(n))/r*pu(n),yu((i-(t*t+n*n)*r*r)/(2*r))]},l}var cf=function(){return uf(sf).scale(155.424).center([0,33.6442])},hf=function(){return cf().parallels([29.5,45.5]).scale(1070).translate([480,250]).rotate([96,0]).center([-.6,38.7])},ff=function(){var t,e,n,r,i,o,l=hf(),a=cf().rotate([154,0]).center([-2,58.5]).parallels([55,65]),u=cf().rotate([157,0]).center([-3,19.9]).parallels([8,18]),s={point:function(t,e){o=[t,e]}};function c(t){var e=t[0],l=t[1];return o=null,n.point(e,l),o||(r.point(e,l),o)||(i.point(e,l),o)}function h(){return t=e=null,c}return c.invert=function(t){var e=l.scale(),n=l.translate(),r=(t[0]-n[0])/e,i=(t[1]-n[1])/e;return(i>=.12&&i<.234&&r>=-.425&&r<-.214?a:i>=.166&&i<.234&&r>=-.214&&r<-.115?u:l).invert(t)},c.stream=function(n){return t&&e===n?t:(r=[l.stream(e=n),a.stream(n),u.stream(n)],i=r.length,t={point:function(t,e){for(var n=-1;++n<i;)r[n].point(t,e)},sphere:function(){for(var t=-1;++t<i;)r[t].sphere()},lineStart:function(){for(var t=-1;++t<i;)r[t].lineStart()},lineEnd:function(){for(var t=-1;++t<i;)r[t].lineEnd()},polygonStart:function(){for(var t=-1;++t<i;)r[t].polygonStart()},polygonEnd:function(){for(var t=-1;++t<i;)r[t].polygonEnd()}});var r,i},c.precision=function(t){return arguments.length?(l.precision(t),a.precision(t),u.precision(t),h()):l.precision()},c.scale=function(t){return arguments.length?(l.scale(t),a.scale(.35*t),u.scale(t),c.translate(l.translate())):l.scale()},c.translate=function(t){if(!arguments.length)return l.translate();var e=l.scale(),o=+t[0],c=+t[1];return n=l.translate(t).clipExtent([[o-.455*e,c-.238*e],[o+.455*e,c+.238*e]]).stream(s),r=a.translate([o-.307*e,c+.201*e]).clipExtent([[o-.425*e+$a,c+.12*e+$a],[o-.214*e-$a,c+.234*e-$a]]).stream(s),i=u.translate([o-.205*e,c+.212*e]).clipExtent([[o-.214*e+$a,c+.166*e+$a],[o-.115*e-$a,c+.234*e-$a]]).stream(s),h()},c.fitExtent=function(t,e){return Kh(c,t,e)},c.fitSize=function(t,e){return Xh(c,t,e)},c.fitWidth=function(t,e){return $h(c,t,e)},c.fitHeight=function(t,e){return Jh(c,t,e)},c.scale(1070)};function df(t){return function(e,n){var r=uu(e),i=uu(n),o=t(r*i);return[o*i*du(e),o*du(n)]}}function pf(t){return function(e,n){var r=mu(e*e+n*n),i=t(r),o=du(i),l=uu(i);return[au(e*o,r*l),yu(r&&n*o/r)]}}var mf=df(function(t){return mu(2/(1+t))});mf.invert=pf(function(t){return 2*yu(t/2)});var gf=function(){return lf(mf).scale(124.75).clipAngle(179.999)},bf=df(function(t){return(t=bu(t))&&t/du(t)});bf.invert=pf(function(t){return t});var yf=function(){return lf(bf).scale(79.4188).clipAngle(179.999)};function vf(t,e){return[t,hu(gu((tu+e)/2))]}vf.invert=function(t,e){return[t,2*lu(cu(e))-tu]};var _f=function(){return wf(vf).scale(961/nu)};function wf(t){var e,n,r,i=lf(t),o=i.center,l=i.scale,a=i.translate,u=i.clipExtent,s=null;function c(){var o=Ja*l(),a=i(Xs(i.rotate()).invert([0,0]));return u(null==s?[[a[0]-o,a[1]-o],[a[0]+o,a[1]+o]]:t===vf?[[Math.max(a[0]-o,s),e],[Math.min(a[0]+o,n),r]]:[[s,Math.max(a[1]-o,e)],[n,Math.min(a[1]+o,r)]])}return i.scale=function(t){return arguments.length?(l(t),c()):l()},i.translate=function(t){return arguments.length?(a(t),c()):a()},i.center=function(t){return arguments.length?(o(t),c()):o()},i.clipExtent=function(t){return arguments.length?(null==t?s=e=n=r=null:(s=+t[0][0],e=+t[0][1],n=+t[1][0],r=+t[1][1]),c()):null==s?null:[[s,e],[n,r]]},c()}function xf(t){return gu((tu+t)/2)}function Sf(t,e){var n=uu(t),r=t===e?du(t):hu(n/uu(e))/hu(xf(e)/xf(t)),i=n*fu(xf(t),r)/r;if(!r)return vf;function o(t,e){i>0?e<-tu+$a&&(e=-tu+$a):e>tu-$a&&(e=tu-$a);var n=i/fu(xf(e),r);return[n*du(r*t),i-n*uu(r*t)]}return o.invert=function(t,e){var n=i-e,o=pu(r)*mu(t*t+n*n);return[au(t,ou(n))/r*pu(n),2*lu(fu(i/o,1/r))-tu]},o}var Cf=function(){return uf(Sf).scale(109.5).parallels([30,30])};function kf(t,e){return[t,e]}kf.invert=kf;var Rf=function(){return lf(kf).scale(152.63)};function jf(t,e){var n=uu(t),r=t===e?du(t):(n-uu(e))/(e-t),i=n/r+t;if(ou(r)<$a)return kf;function o(t,e){var n=i-e,o=r*t;return[n*du(o),i-n*uu(o)]}return o.invert=function(t,e){var n=i-e;return[au(t,ou(n))/r*pu(n),i-pu(r)*mu(t*t+n*n)]},o}var Of=function(){return uf(jf).scale(131.154).center([0,13.9389])};function Ef(t,e){var n=uu(e),r=uu(t)*n;return[n*du(t)/r,du(e)/r]}Ef.invert=pf(lu);var Tf=function(){return lf(Ef).scale(144.049).clipAngle(60)};function Pf(t,e,n,r){return 1===t&&1===e&&0===n&&0===r?Yc:Wh({point:function(i,o){this.stream.point(i*t+n,o*e+r)}})}var If=function(){var t,e,n,r,i,o,l=1,a=0,u=0,s=1,c=1,h=Yc,f=null,d=Yc;function p(){return r=i=null,o}return o={stream:function(t){return r&&i===t?r:r=h(d(i=t))},postclip:function(r){return arguments.length?(d=r,f=t=e=n=null,p()):d},clipExtent:function(r){return arguments.length?(d=null==r?(f=t=e=n=null,Yc):gc(f=+r[0][0],t=+r[0][1],e=+r[1][0],n=+r[1][1]),p()):null==f?null:[[f,t],[e,n]]},scale:function(t){return arguments.length?(h=Pf((l=+t)*s,l*c,a,u),p()):l},translate:function(t){return arguments.length?(h=Pf(l*s,l*c,a=+t[0],u=+t[1]),p()):[a,u]},reflectX:function(t){return arguments.length?(h=Pf(l*(s=t?-1:1),l*c,a,u),p()):s<0},reflectY:function(t){return arguments.length?(h=Pf(l*s,l*(c=t?-1:1),a,u),p()):c<0},fitExtent:function(t,e){return Kh(o,t,e)},fitSize:function(t,e){return Xh(o,t,e)},fitWidth:function(t,e){return $h(o,t,e)},fitHeight:function(t,e){return Jh(o,t,e)}}};function Af(t,e){var n=e*e,r=n*n;return[t*(.8707-.131979*n+r*(r*(.003971*n-.001529*r)-.013791)),e*(1.007226+n*(.015085+r*(.028874*n-.044475-.005916*r)))]}Af.invert=function(t,e){var n,r=e,i=25;do{var o=r*r,l=o*o;r-=n=(r*(1.007226+o*(.015085+l*(.028874*o-.044475-.005916*l)))-e)/(1.007226+o*(.045255+l*(.259866*o-.311325-.005916*11*l)))}while(ou(n)>$a&&--i>0);return[t/(.8707+(o=r*r)*(o*(o*o*o*(.003971-.001529*o)-.013791)-.131979)),r]};var Mf=function(){return lf(Af).scale(175.295)};function Df(t,e){return[uu(e)*du(t),du(e)]}Df.invert=pf(yu);var Nf=function(){return lf(Df).scale(249.5).clipAngle(90+$a)};function Lf(t,e){var n=uu(e),r=1+uu(t)*n;return[n*du(t)/r,du(e)/r]}Lf.invert=pf(function(t){return 2*lu(t)});var Ff=function(){return lf(Lf).scale(250).clipAngle(142)};function zf(t,e){return[hu(gu((tu+e)/2)),-t]}zf.invert=function(t,e){return[-e,2*lu(cu(t))-tu]};var Vf=function(){var t=wf(zf),e=t.center,n=t.rotate;return t.center=function(t){return arguments.length?e([-t[1],t[0]]):[(t=e())[1],-t[0]]},t.rotate=function(t){return arguments.length?n([t[0],t[1],t.length>2?t[2]+90:90]):[(t=n())[0],t[1],t[2]-90]},n([0,0,90]).scale(159.155)};function Bf(t,e){return t.parent===e.parent?1:2}function Hf(t,e){return t+e.x}function Gf(t,e){return Math.max(t,e.y)}var Uf=function(){var t=Bf,e=1,n=1,r=!1;function i(i){var o,l=0;i.eachAfter(function(e){var n=e.children;n?(e.x=function(t){return t.reduce(Hf,0)/t.length}(n),e.y=function(t){return 1+t.reduce(Gf,0)}(n)):(e.x=o?l+=t(e,o):0,e.y=0,o=e)});var a=function(t){for(var e;e=t.children;)t=e[0];return t}(i),u=function(t){for(var e;e=t.children;)t=e[e.length-1];return t}(i),s=a.x-t(a,u)/2,c=u.x+t(u,a)/2;return i.eachAfter(r?function(t){t.x=(t.x-i.x)*e,t.y=(i.y-t.y)*n}:function(t){t.x=(t.x-s)/(c-s)*e,t.y=(1-(i.y?t.y/i.y:1))*n})}return i.separation=function(e){return arguments.length?(t=e,i):t},i.size=function(t){return arguments.length?(r=!1,e=+t[0],n=+t[1],i):r?null:[e,n]},i.nodeSize=function(t){return arguments.length?(r=!0,e=+t[0],n=+t[1],i):r?[e,n]:null},i};function qf(t){var e=0,n=t.children,r=n&&n.length;if(r)for(;--r>=0;)e+=n[r].value;else e=1;t.value=e}function Qf(t,e){var n,r,i,o,l,a=new Kf(t),u=+t.value&&(a.value=t.value),s=[a];for(null==e&&(e=Wf);n=s.pop();)if(u&&(n.value=+n.data.value),(i=e(n.data))&&(l=i.length))for(n.children=new Array(l),o=l-1;o>=0;--o)s.push(r=n.children[o]=new Kf(i[o])),r.parent=n,r.depth=n.depth+1;return a.eachBefore(Zf)}function Wf(t){return t.children}function Yf(t){t.data=t.data.data}function Zf(t){var e=0;do{t.height=e}while((t=t.parent)&&t.height<++e)}function Kf(t){this.data=t,this.depth=this.height=0,this.parent=null}Kf.prototype=Qf.prototype={constructor:Kf,count:function(){return this.eachAfter(qf)},each:function(t){var e,n,r,i,o=this,l=[o];do{for(e=l.reverse(),l=[];o=e.pop();)if(t(o),n=o.children)for(r=0,i=n.length;r<i;++r)l.push(n[r])}while(l.length);return this},eachAfter:function(t){for(var e,n,r,i=this,o=[i],l=[];i=o.pop();)if(l.push(i),e=i.children)for(n=0,r=e.length;n<r;++n)o.push(e[n]);for(;i=l.pop();)t(i);return this},eachBefore:function(t){for(var e,n,r=this,i=[r];r=i.pop();)if(t(r),e=r.children)for(n=e.length-1;n>=0;--n)i.push(e[n]);return this},sum:function(t){return this.eachAfter(function(e){for(var n=+t(e.data)||0,r=e.children,i=r&&r.length;--i>=0;)n+=r[i].value;e.value=n})},sort:function(t){return this.eachBefore(function(e){e.children&&e.children.sort(t)})},path:function(t){for(var e=this,n=function(t,e){if(t===e)return t;var n=t.ancestors(),r=e.ancestors(),i=null;for(t=n.pop(),e=r.pop();t===e;)i=t,t=n.pop(),e=r.pop();return i}(e,t),r=[e];e!==n;)r.push(e=e.parent);for(var i=r.length;t!==n;)r.splice(i,0,t),t=t.parent;return r},ancestors:function(){for(var t=this,e=[t];t=t.parent;)e.push(t);return e},descendants:function(){var t=[];return this.each(function(e){t.push(e)}),t},leaves:function(){var t=[];return this.eachBefore(function(e){e.children||t.push(e)}),t},links:function(){var t=this,e=[];return t.each(function(n){n!==t&&e.push({source:n.parent,target:n})}),e},copy:function(){return Qf(this).eachBefore(Yf)}};var Xf=Array.prototype.slice,$f=function(t){for(var e,n,r=0,i=(t=function(t){for(var e,n,r=t.length;r;)n=Math.random()*r--|0,e=t[r],t[r]=t[n],t[n]=e;return t}(Xf.call(t))).length,o=[];r<i;)e=t[r],n&&ed(n,e)?++r:(n=rd(o=Jf(o,e)),r=0);return n};function Jf(t,e){var n,r;if(nd(e,t))return[e];for(n=0;n<t.length;++n)if(td(e,t[n])&&nd(id(t[n],e),t))return[t[n],e];for(n=0;n<t.length-1;++n)for(r=n+1;r<t.length;++r)if(td(id(t[n],t[r]),e)&&td(id(t[n],e),t[r])&&td(id(t[r],e),t[n])&&nd(od(t[n],t[r],e),t))return[t[n],t[r],e];throw new Error}function td(t,e){var n=t.r-e.r,r=e.x-t.x,i=e.y-t.y;return n<0||n*n<r*r+i*i}function ed(t,e){var n=t.r-e.r+1e-6,r=e.x-t.x,i=e.y-t.y;return n>0&&n*n>r*r+i*i}function nd(t,e){for(var n=0;n<e.length;++n)if(!ed(t,e[n]))return!1;return!0}function rd(t){switch(t.length){case 1:return{x:(e=t[0]).x,y:e.y,r:e.r};case 2:return id(t[0],t[1]);case 3:return od(t[0],t[1],t[2])}var e}function id(t,e){var n=t.x,r=t.y,i=t.r,o=e.x,l=e.y,a=e.r,u=o-n,s=l-r,c=a-i,h=Math.sqrt(u*u+s*s);return{x:(n+o+u/h*c)/2,y:(r+l+s/h*c)/2,r:(h+i+a)/2}}function od(t,e,n){var r=t.x,i=t.y,o=t.r,l=e.x,a=e.y,u=e.r,s=n.x,c=n.y,h=n.r,f=r-l,d=r-s,p=i-a,m=i-c,g=u-o,b=h-o,y=r*r+i*i-o*o,v=y-l*l-a*a+u*u,_=y-s*s-c*c+h*h,w=d*p-f*m,x=(p*_-m*v)/(2*w)-r,S=(m*g-p*b)/w,C=(d*v-f*_)/(2*w)-i,k=(f*b-d*g)/w,R=S*S+k*k-1,j=2*(o+x*S+C*k),O=x*x+C*C-o*o,E=-(R?(j+Math.sqrt(j*j-4*R*O))/(2*R):O/j);return{x:r+x+S*E,y:i+C+k*E,r:E}}function ld(t,e,n){var r,i,o,l,a=t.x-e.x,u=t.y-e.y,s=a*a+u*u;s?(i=e.r+n.r,l=t.r+n.r,(i*=i)>(l*=l)?(r=(s+l-i)/(2*s),o=Math.sqrt(Math.max(0,l/s-r*r)),n.x=t.x-r*a-o*u,n.y=t.y-r*u+o*a):(r=(s+i-l)/(2*s),o=Math.sqrt(Math.max(0,i/s-r*r)),n.x=e.x+r*a-o*u,n.y=e.y+r*u+o*a)):(n.x=e.x+n.r,n.y=e.y)}function ad(t,e){var n=t.r+e.r-1e-6,r=e.x-t.x,i=e.y-t.y;return n>0&&n*n>r*r+i*i}function ud(t){var e=t._,n=t.next._,r=e.r+n.r,i=(e.x*n.r+n.x*e.r)/r,o=(e.y*n.r+n.y*e.r)/r;return i*i+o*o}function sd(t){this._=t,this.next=null,this.previous=null}function cd(t){if(!(i=t.length))return 0;var e,n,r,i,o,l,a,u,s,c,h;if((e=t[0]).x=0,e.y=0,!(i>1))return e.r;if(e.x=-(n=t[1]).r,n.x=e.r,n.y=0,!(i>2))return e.r+n.r;ld(n,e,r=t[2]),e=new sd(e),n=new sd(n),r=new sd(r),e.next=r.previous=n,n.next=e.previous=r,r.next=n.previous=e;t:for(a=3;a<i;++a){ld(e._,n._,r=t[a]),r=new sd(r),u=n.next,s=e.previous,c=n._.r,h=e._.r;do{if(c<=h){if(ad(u._,r._)){e.next=n=u,n.previous=e,--a;continue t}c+=u._.r,u=u.next}else{if(ad(s._,r._)){(e=s).next=n,n.previous=e,--a;continue t}h+=s._.r,s=s.previous}}while(u!==s.next);for(r.previous=e,r.next=n,e.next=n.previous=n=r,o=ud(e);(r=r.next)!==n;)(l=ud(r))<o&&(e=r,o=l);n=e.next}for(e=[n._],r=n;(r=r.next)!==n;)e.push(r._);for(r=$f(e),a=0;a<i;++a)(e=t[a]).x-=r.x,e.y-=r.y;return r.r}var hd=function(t){return cd(t),t};function fd(t){if("function"!=typeof t)throw new Error;return t}function dd(){return 0}var pd=function(t){return function(){return t}};function md(t){return Math.sqrt(t.value)}var gd=function(){var t=null,e=1,n=1,r=dd;function i(i){return i.x=e/2,i.y=n/2,t?i.eachBefore(bd(t)).eachAfter(yd(r,.5)).eachBefore(vd(1)):i.eachBefore(bd(md)).eachAfter(yd(dd,1)).eachAfter(yd(r,i.r/Math.min(e,n))).eachBefore(vd(Math.min(e,n)/(2*i.r))),i}return i.radius=function(e){return arguments.length?(t=null==(n=e)?null:fd(n),i):t;var n},i.size=function(t){return arguments.length?(e=+t[0],n=+t[1],i):[e,n]},i.padding=function(t){return arguments.length?(r="function"==typeof t?t:pd(+t),i):r},i};function bd(t){return function(e){e.children||(e.r=Math.max(0,+t(e)||0))}}function yd(t,e){return function(n){if(r=n.children){var r,i,o,l=r.length,a=t(n)*e||0;if(a)for(i=0;i<l;++i)r[i].r+=a;if(o=cd(r),a)for(i=0;i<l;++i)r[i].r-=a;n.r=o+a}}}function vd(t){return function(e){var n=e.parent;e.r*=t,n&&(e.x=n.x+t*e.x,e.y=n.y+t*e.y)}}var _d=function(t){t.x0=Math.round(t.x0),t.y0=Math.round(t.y0),t.x1=Math.round(t.x1),t.y1=Math.round(t.y1)},wd=function(t,e,n,r,i){for(var o,l=t.children,a=-1,u=l.length,s=t.value&&(r-e)/t.value;++a<u;)(o=l[a]).y0=n,o.y1=i,o.x0=e,o.x1=e+=o.value*s},xd=function(){var t=1,e=1,n=0,r=!1;function i(i){var o=i.height+1;return i.x0=i.y0=n,i.x1=t,i.y1=e/o,i.eachBefore(function(t,e){return function(r){r.children&&wd(r,r.x0,t*(r.depth+1)/e,r.x1,t*(r.depth+2)/e);var i=r.x0,o=r.y0,l=r.x1-n,a=r.y1-n;l<i&&(i=l=(i+l)/2),a<o&&(o=a=(o+a)/2),r.x0=i,r.y0=o,r.x1=l,r.y1=a}}(e,o)),r&&i.eachBefore(_d),i}return i.round=function(t){return arguments.length?(r=!!t,i):r},i.size=function(n){return arguments.length?(t=+n[0],e=+n[1],i):[t,e]},i.padding=function(t){return arguments.length?(n=+t,i):n},i},Sd="$",Cd={depth:-1},kd={};function Rd(t){return t.id}function jd(t){return t.parentId}var Od=function(){var t=Rd,e=jd;function n(n){var r,i,o,l,a,u,s,c=n.length,h=new Array(c),f={};for(i=0;i<c;++i)a=h[i]=new Kf(r=n[i]),null!=(u=t(r,i,n))&&(u+="")&&(f[s=Sd+(a.id=u)]=s in f?kd:a);for(i=0;i<c;++i)if(a=h[i],null!=(u=e(n[i],i,n))&&(u+="")){if(!(l=f[Sd+u]))throw new Error("missing: "+u);if(l===kd)throw new Error("ambiguous: "+u);l.children?l.children.push(a):l.children=[a],a.parent=l}else{if(o)throw new Error("multiple roots");o=a}if(!o)throw new Error("no root");if(o.parent=Cd,o.eachBefore(function(t){t.depth=t.parent.depth+1,--c}).eachBefore(Zf),o.parent=null,c>0)throw new Error("cycle");return o}return n.id=function(e){return arguments.length?(t=fd(e),n):t},n.parentId=function(t){return arguments.length?(e=fd(t),n):e},n};function Ed(t,e){return t.parent===e.parent?1:2}function Td(t){var e=t.children;return e?e[0]:t.t}function Pd(t){var e=t.children;return e?e[e.length-1]:t.t}function Id(t,e,n){var r=n/(e.i-t.i);e.c-=r,e.s+=n,t.c+=r,e.z+=n,e.m+=n}function Ad(t,e,n){return t.a.parent===e.parent?t.a:n}function Md(t,e){this._=t,this.parent=null,this.children=null,this.A=null,this.a=this,this.z=0,this.m=0,this.c=0,this.s=0,this.t=null,this.i=e}Md.prototype=Object.create(Kf.prototype);var Dd=function(){var t=Ed,e=1,n=1,r=null;function i(i){var u=function(t){for(var e,n,r,i,o,l=new Md(t,0),a=[l];e=a.pop();)if(r=e._.children)for(e.children=new Array(o=r.length),i=o-1;i>=0;--i)a.push(n=e.children[i]=new Md(r[i],i)),n.parent=e;return(l.parent=new Md(null,0)).children=[l],l}(i);if(u.eachAfter(o),u.parent.m=-u.z,u.eachBefore(l),r)i.eachBefore(a);else{var s=i,c=i,h=i;i.eachBefore(function(t){t.x<s.x&&(s=t),t.x>c.x&&(c=t),t.depth>h.depth&&(h=t)});var f=s===c?1:t(s,c)/2,d=f-s.x,p=e/(c.x+f+d),m=n/(h.depth||1);i.eachBefore(function(t){t.x=(t.x+d)*p,t.y=t.depth*m})}return i}function o(e){var n=e.children,r=e.parent.children,i=e.i?r[e.i-1]:null;if(n){!function(t){for(var e,n=0,r=0,i=t.children,o=i.length;--o>=0;)(e=i[o]).z+=n,e.m+=n,n+=e.s+(r+=e.c)}(e);var o=(n[0].z+n[n.length-1].z)/2;i?(e.z=i.z+t(e._,i._),e.m=e.z-o):e.z=o}else i&&(e.z=i.z+t(e._,i._));e.parent.A=function(e,n,r){if(n){for(var i,o=e,l=e,a=n,u=o.parent.children[0],s=o.m,c=l.m,h=a.m,f=u.m;a=Pd(a),o=Td(o),a&&o;)u=Td(u),(l=Pd(l)).a=e,(i=a.z+h-o.z-s+t(a._,o._))>0&&(Id(Ad(a,e,r),e,i),s+=i,c+=i),h+=a.m,s+=o.m,f+=u.m,c+=l.m;a&&!Pd(l)&&(l.t=a,l.m+=h-c),o&&!Td(u)&&(u.t=o,u.m+=s-f,r=e)}return r}(e,i,e.parent.A||r[0])}function l(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function a(t){t.x*=e,t.y=t.depth*n}return i.separation=function(e){return arguments.length?(t=e,i):t},i.size=function(t){return arguments.length?(r=!1,e=+t[0],n=+t[1],i):r?null:[e,n]},i.nodeSize=function(t){return arguments.length?(r=!0,e=+t[0],n=+t[1],i):r?[e,n]:null},i},Nd=function(t,e,n,r,i){for(var o,l=t.children,a=-1,u=l.length,s=t.value&&(i-n)/t.value;++a<u;)(o=l[a]).x0=e,o.x1=r,o.y0=n,o.y1=n+=o.value*s},Ld=(1+Math.sqrt(5))/2;function Fd(t,e,n,r,i,o){for(var l,a,u,s,c,h,f,d,p,m,g,b=[],y=e.children,v=0,_=0,w=y.length,x=e.value;v<w;){u=i-n,s=o-r;do{c=y[_++].value}while(!c&&_<w);for(h=f=c,g=c*c*(m=Math.max(s/u,u/s)/(x*t)),p=Math.max(f/g,g/h);_<w;++_){if(c+=a=y[_].value,a<h&&(h=a),a>f&&(f=a),g=c*c*m,(d=Math.max(f/g,g/h))>p){c-=a;break}p=d}b.push(l={value:c,dice:u<s,children:y.slice(v,_)}),l.dice?wd(l,n,r,i,x?r+=s*c/x:o):Nd(l,n,r,x?n+=u*c/x:i,o),x-=c,v=_}return b}var zd=function t(e){function n(t,n,r,i,o){Fd(e,t,n,r,i,o)}return n.ratio=function(e){return t((e=+e)>1?e:1)},n}(Ld),Vd=function(){var t=zd,e=!1,n=1,r=1,i=[0],o=dd,l=dd,a=dd,u=dd,s=dd;function c(t){return t.x0=t.y0=0,t.x1=n,t.y1=r,t.eachBefore(h),i=[0],e&&t.eachBefore(_d),t}function h(e){var n=i[e.depth],r=e.x0+n,c=e.y0+n,h=e.x1-n,f=e.y1-n;h<r&&(r=h=(r+h)/2),f<c&&(c=f=(c+f)/2),e.x0=r,e.y0=c,e.x1=h,e.y1=f,e.children&&(n=i[e.depth+1]=o(e)/2,r+=s(e)-n,c+=l(e)-n,h-=a(e)-n,f-=u(e)-n,h<r&&(r=h=(r+h)/2),f<c&&(c=f=(c+f)/2),t(e,r,c,h,f))}return c.round=function(t){return arguments.length?(e=!!t,c):e},c.size=function(t){return arguments.length?(n=+t[0],r=+t[1],c):[n,r]},c.tile=function(e){return arguments.length?(t=fd(e),c):t},c.padding=function(t){return arguments.length?c.paddingInner(t).paddingOuter(t):c.paddingInner()},c.paddingInner=function(t){return arguments.length?(o="function"==typeof t?t:pd(+t),c):o},c.paddingOuter=function(t){return arguments.length?c.paddingTop(t).paddingRight(t).paddingBottom(t).paddingLeft(t):c.paddingTop()},c.paddingTop=function(t){return arguments.length?(l="function"==typeof t?t:pd(+t),c):l},c.paddingRight=function(t){return arguments.length?(a="function"==typeof t?t:pd(+t),c):a},c.paddingBottom=function(t){return arguments.length?(u="function"==typeof t?t:pd(+t),c):u},c.paddingLeft=function(t){return arguments.length?(s="function"==typeof t?t:pd(+t),c):s},c},Bd=function(t,e,n,r,i){var o,l,a=t.children,u=a.length,s=new Array(u+1);for(s[0]=l=o=0;o<u;++o)s[o+1]=l+=a[o].value;!function t(e,n,r,i,o,l,u){if(e>=n-1){var c=a[e];return c.x0=i,c.y0=o,c.x1=l,void(c.y1=u)}for(var h=s[e],f=r/2+h,d=e+1,p=n-1;d<p;){var m=d+p>>>1;s[m]<f?d=m+1:p=m}f-s[d-1]<s[d]-f&&e+1<d&&--d;var g=s[d]-h,b=r-g;if(l-i>u-o){var y=(i*b+l*g)/r;t(e,d,g,i,o,y,u),t(d,n,b,y,o,l,u)}else{var v=(o*b+u*g)/r;t(e,d,g,i,o,l,v),t(d,n,b,i,v,l,u)}}(0,u,t.value,e,n,r,i)},Hd=function(t,e,n,r,i){(1&t.depth?Nd:wd)(t,e,n,r,i)},Gd=function t(e){function n(t,n,r,i,o){if((l=t._squarify)&&l.ratio===e)for(var l,a,u,s,c,h=-1,f=l.length,d=t.value;++h<f;){for(u=(a=l[h]).children,s=a.value=0,c=u.length;s<c;++s)a.value+=u[s].value;a.dice?wd(a,n,r,i,r+=(o-r)*a.value/d):Nd(a,n,r,n+=(i-n)*a.value/d,o),d-=a.value}else t._squarify=l=Fd(e,t,n,r,i,o),l.ratio=e}return n.ratio=function(e){return t((e=+e)>1?e:1)},n}(Ld),Ud=function(t){for(var e,n=-1,r=t.length,i=t[r-1],o=0;++n<r;)o+=(e=i)[1]*(i=t[n])[0]-e[0]*i[1];return o/2},qd=function(t){for(var e,n,r=-1,i=t.length,o=0,l=0,a=t[i-1],u=0;++r<i;)u+=n=(e=a)[0]*(a=t[r])[1]-a[0]*e[1],o+=(e[0]+a[0])*n,l+=(e[1]+a[1])*n;return[o/(u*=3),l/u]},Qd=function(t,e,n){return(e[0]-t[0])*(n[1]-t[1])-(e[1]-t[1])*(n[0]-t[0])};function Wd(t,e){return t[0]-e[0]||t[1]-e[1]}function Yd(t){for(var e=t.length,n=[0,1],r=2,i=2;i<e;++i){for(;r>1&&Qd(t[n[r-2]],t[n[r-1]],t[i])<=0;)--r;n[r++]=i}return n.slice(0,r)}var Zd=function(t){if((n=t.length)<3)return null;var e,n,r=new Array(n),i=new Array(n);for(e=0;e<n;++e)r[e]=[+t[e][0],+t[e][1],e];for(r.sort(Wd),e=0;e<n;++e)i[e]=[r[e][0],-r[e][1]];var o=Yd(r),l=Yd(i),a=l[0]===o[0],u=l[l.length-1]===o[o.length-1],s=[];for(e=o.length-1;e>=0;--e)s.push(t[r[o[e]][2]]);for(e=+a;e<l.length-u;++e)s.push(t[r[l[e]][2]]);return s},Kd=function(t,e){for(var n,r,i=t.length,o=t[i-1],l=e[0],a=e[1],u=o[0],s=o[1],c=!1,h=0;h<i;++h)n=(o=t[h])[0],(r=o[1])>a!=s>a&&l<(u-n)*(a-r)/(s-r)+n&&(c=!c),u=n,s=r;return c},Xd=function(t){for(var e,n,r=-1,i=t.length,o=t[i-1],l=o[0],a=o[1],u=0;++r<i;)e=l,n=a,e-=l=(o=t[r])[0],n-=a=o[1],u+=Math.sqrt(e*e+n*n);return u},$d=function(){return Math.random()},Jd=function t(e){function n(t,n){return t=null==t?0:+t,n=null==n?1:+n,1===arguments.length?(n=t,t=0):n-=t,function(){return e()*n+t}}return n.source=t,n}($d),tp=function t(e){function n(t,n){var r,i;return t=null==t?0:+t,n=null==n?1:+n,function(){var o;if(null!=r)o=r,r=null;else do{r=2*e()-1,o=2*e()-1,i=r*r+o*o}while(!i||i>1);return t+n*o*Math.sqrt(-2*Math.log(i)/i)}}return n.source=t,n}($d),ep=function t(e){function n(){var t=tp.source(e).apply(this,arguments);return function(){return Math.exp(t())}}return n.source=t,n}($d),np=function t(e){function n(t){return function(){for(var n=0,r=0;r<t;++r)n+=e();return n}}return n.source=t,n}($d),rp=function t(e){function n(t){var n=np.source(e)(t);return function(){return n()/t}}return n.source=t,n}($d),ip=function t(e){function n(t){return function(){return-Math.log(1-e())/t}}return n.source=t,n}($d),op=Array.prototype,lp=op.map,ap=op.slice,up={name:"implicit"};function sp(t){var e=Zo(),n=[],r=up;function i(i){var o=i+"",l=e.get(o);if(!l){if(r!==up)return r;e.set(o,l=n.push(i))}return t[(l-1)%t.length]}return t=null==t?[]:ap.call(t),i.domain=function(t){if(!arguments.length)return n.slice();n=[],e=Zo();for(var r,o,l=-1,a=t.length;++l<a;)e.has(o=(r=t[l])+"")||e.set(o,n.push(r));return i},i.range=function(e){return arguments.length?(t=ap.call(e),i):t.slice()},i.unknown=function(t){return arguments.length?(r=t,i):r},i.copy=function(){return sp().domain(n).range(t).unknown(r)},i}function cp(){var t,e,n=sp().unknown(void 0),r=n.domain,i=n.range,o=[0,1],l=!1,a=0,u=0,s=.5;function c(){var n=r().length,c=o[1]<o[0],h=o[c-0],f=o[1-c];t=(f-h)/Math.max(1,n-a+2*u),l&&(t=Math.floor(t)),h+=(f-h-t*(n-a))*s,e=t*(1-a),l&&(h=Math.round(h),e=Math.round(e));var d=x(n).map(function(e){return h+t*e});return i(c?d.reverse():d)}return delete n.unknown,n.domain=function(t){return arguments.length?(r(t),c()):r()},n.range=function(t){return arguments.length?(o=[+t[0],+t[1]],c()):o.slice()},n.rangeRound=function(t){return o=[+t[0],+t[1]],l=!0,c()},n.bandwidth=function(){return e},n.step=function(){return t},n.round=function(t){return arguments.length?(l=!!t,c()):l},n.padding=function(t){return arguments.length?(a=u=Math.max(0,Math.min(1,t)),c()):a},n.paddingInner=function(t){return arguments.length?(a=Math.max(0,Math.min(1,t)),c()):a},n.paddingOuter=function(t){return arguments.length?(u=Math.max(0,Math.min(1,t)),c()):u},n.align=function(t){return arguments.length?(s=Math.max(0,Math.min(1,t)),c()):s},n.copy=function(){return cp().domain(r()).range(o).round(l).paddingInner(a).paddingOuter(u).align(s)},c()}function hp(){return function t(e){var n=e.copy;return e.padding=e.paddingOuter,delete e.paddingInner,delete e.paddingOuter,e.copy=function(){return t(n())},e}(cp().paddingInner(1))}var fp=function(t){return function(){return t}},dp=function(t){return+t},pp=[0,1];function mp(t,e){return(e-=t=+t)?function(n){return(n-t)/e}:fp(e)}function gp(t,e,n,r){var i=t[0],o=t[1],l=e[0],a=e[1];return o<i?(i=n(o,i),l=r(a,l)):(i=n(i,o),l=r(l,a)),function(t){return l(i(t))}}function bp(t,e,n,r){var i=Math.min(t.length,e.length)-1,o=new Array(i),l=new Array(i),a=-1;for(t[i]<t[0]&&(t=t.slice().reverse(),e=e.slice().reverse());++a<i;)o[a]=n(t[a],t[a+1]),l[a]=r(e[a],e[a+1]);return function(e){var n=u(t,e,1,i)-1;return l[n](o[n](e))}}function yp(t,e){return e.domain(t.domain()).range(t.range()).interpolate(t.interpolate()).clamp(t.clamp())}function vp(t,e){var n,r,i,o=pp,l=pp,a=Kn,u=!1;function s(){return n=Math.min(o.length,l.length)>2?bp:gp,r=i=null,c}function c(e){return(r||(r=n(o,l,u?function(t){return function(e,n){var r=t(e=+e,n=+n);return function(t){return t<=e?0:t>=n?1:r(t)}}}(t):t,a)))(+e)}return c.invert=function(t){return(i||(i=n(l,o,mp,u?function(t){return function(e,n){var r=t(e=+e,n=+n);return function(t){return t<=0?e:t>=1?n:r(t)}}}(e):e)))(+t)},c.domain=function(t){return arguments.length?(o=lp.call(t,dp),s()):o.slice()},c.range=function(t){return arguments.length?(l=ap.call(t),s()):l.slice()},c.rangeRound=function(t){return l=ap.call(t),a=Xn,s()},c.clamp=function(t){return arguments.length?(u=!!t,s()):u},c.interpolate=function(t){return arguments.length?(a=t,s()):a},s()}var _p=function(t,e,n){var r,i=t[0],o=t[t.length-1],l=O(i,o,null==e?10:e);switch((n=Ia(null==n?",f":n)).type){case"s":var a=Math.max(Math.abs(i),Math.abs(o));return null!=n.precision||isNaN(r=Qa(l,a))||(n.precision=r),La(n,a);case"":case"e":case"g":case"p":case"r":null!=n.precision||isNaN(r=Wa(l,Math.max(Math.abs(i),Math.abs(o))))||(n.precision=r-("e"===n.type));break;case"f":case"%":null!=n.precision||isNaN(r=qa(l))||(n.precision=r-2*("%"===n.type))}return Na(n)};function wp(t){var e=t.domain;return t.ticks=function(t){var n=e();return R(n[0],n[n.length-1],null==t?10:t)},t.tickFormat=function(t,n){return _p(e(),t,n)},t.nice=function(n){null==n&&(n=10);var r,i=e(),o=0,l=i.length-1,a=i[o],u=i[l];return u<a&&(r=a,a=u,u=r,r=o,o=l,l=r),(r=j(a,u,n))>0?r=j(a=Math.floor(a/r)*r,u=Math.ceil(u/r)*r,n):r<0&&(r=j(a=Math.ceil(a*r)/r,u=Math.floor(u*r)/r,n)),r>0?(i[o]=Math.floor(a/r)*r,i[l]=Math.ceil(u/r)*r,e(i)):r<0&&(i[o]=Math.ceil(a*r)/r,i[l]=Math.floor(u*r)/r,e(i)),t},t}function xp(){var t=vp(mp,qn);return t.copy=function(){return yp(t,xp())},wp(t)}function Sp(){var t=[0,1];function e(t){return+t}return e.invert=e,e.domain=e.range=function(n){return arguments.length?(t=lp.call(n,dp),e):t.slice()},e.copy=function(){return Sp().domain(t)},wp(e)}var Cp=function(t,e){var n,r=0,i=(t=t.slice()).length-1,o=t[r],l=t[i];return l<o&&(n=r,r=i,i=n,n=o,o=l,l=n),t[r]=e.floor(o),t[i]=e.ceil(l),t};function kp(t,e){return(e=Math.log(e/t))?function(n){return Math.log(n/t)/e}:fp(e)}function Rp(t,e){return t<0?function(n){return-Math.pow(-e,n)*Math.pow(-t,1-n)}:function(n){return Math.pow(e,n)*Math.pow(t,1-n)}}function jp(t){return isFinite(t)?+("1e"+t):t<0?0:t}function Op(t){return 10===t?jp:t===Math.E?Math.exp:function(e){return Math.pow(t,e)}}function Ep(t){return t===Math.E?Math.log:10===t&&Math.log10||2===t&&Math.log2||(t=Math.log(t),function(e){return Math.log(e)/t})}function Tp(t){return function(e){return-t(-e)}}function Pp(){var t=vp(kp,Rp).domain([1,10]),e=t.domain,n=10,r=Ep(10),i=Op(10);function o(){return r=Ep(n),i=Op(n),e()[0]<0&&(r=Tp(r),i=Tp(i)),t}return t.base=function(t){return arguments.length?(n=+t,o()):n},t.domain=function(t){return arguments.length?(e(t),o()):e()},t.ticks=function(t){var o,l=e(),a=l[0],u=l[l.length-1];(o=u<a)&&(f=a,a=u,u=f);var s,c,h,f=r(a),d=r(u),p=null==t?10:+t,m=[];if(!(n%1)&&d-f<p){if(f=Math.round(f)-1,d=Math.round(d)+1,a>0){for(;f<d;++f)for(c=1,s=i(f);c<n;++c)if(!((h=s*c)<a)){if(h>u)break;m.push(h)}}else for(;f<d;++f)for(c=n-1,s=i(f);c>=1;--c)if(!((h=s*c)<a)){if(h>u)break;m.push(h)}}else m=R(f,d,Math.min(d-f,p)).map(i);return o?m.reverse():m},t.tickFormat=function(e,o){if(null==o&&(o=10===n?".0e":","),"function"!=typeof o&&(o=Na(o)),e===1/0)return o;null==e&&(e=10);var l=Math.max(1,n*e/t.ticks().length);return function(t){var e=t/i(Math.round(r(t)));return e*n<n-.5&&(e*=n),e<=l?o(t):""}},t.nice=function(){return e(Cp(e(),{floor:function(t){return i(Math.floor(r(t)))},ceil:function(t){return i(Math.ceil(r(t)))}}))},t.copy=function(){return yp(t,Pp().base(n))},t}function Ip(t,e){return t<0?-Math.pow(-t,e):Math.pow(t,e)}function Ap(){var t=1,e=vp(function(e,n){return(n=Ip(n,t)-(e=Ip(e,t)))?function(r){return(Ip(r,t)-e)/n}:fp(n)},function(e,n){return n=Ip(n,t)-(e=Ip(e,t)),function(r){return Ip(e+n*r,1/t)}}),n=e.domain;return e.exponent=function(e){return arguments.length?(t=+e,n(n())):t},e.copy=function(){return yp(e,Ap().exponent(t))},wp(e)}function Mp(){return Ap().exponent(.5)}function Dp(){var t=[],e=[],n=[];function i(){var r=0,i=Math.max(1,e.length);for(n=new Array(i-1);++r<i;)n[r-1]=P(t,r/i);return o}function o(t){if(!isNaN(t=+t))return e[u(n,t)]}return o.invertExtent=function(r){var i=e.indexOf(r);return i<0?[NaN,NaN]:[i>0?n[i-1]:t[0],i<n.length?n[i]:t[t.length-1]]},o.domain=function(e){if(!arguments.length)return t.slice();t=[];for(var n,o=0,l=e.length;o<l;++o)null==(n=e[o])||isNaN(n=+n)||t.push(n);return t.sort(r),i()},o.range=function(t){return arguments.length?(e=ap.call(t),i()):e.slice()},o.quantiles=function(){return n.slice()},o.copy=function(){return Dp().domain(t).range(e)},o}function Np(){var t=0,e=1,n=1,r=[.5],i=[0,1];function o(t){if(t<=t)return i[u(r,t,0,n)]}function l(){var i=-1;for(r=new Array(n);++i<n;)r[i]=((i+1)*e-(i-n)*t)/(n+1);return o}return o.domain=function(n){return arguments.length?(t=+n[0],e=+n[1],l()):[t,e]},o.range=function(t){return arguments.length?(n=(i=ap.call(t)).length-1,l()):i.slice()},o.invertExtent=function(o){var l=i.indexOf(o);return l<0?[NaN,NaN]:l<1?[t,r[0]]:l>=n?[r[n-1],e]:[r[l-1],r[l]]},o.copy=function(){return Np().domain([t,e]).range(i)},wp(o)}function Lp(){var t=[.5],e=[0,1],n=1;function r(r){if(r<=r)return e[u(t,r,0,n)]}return r.domain=function(i){return arguments.length?(t=ap.call(i),n=Math.min(t.length,e.length-1),r):t.slice()},r.range=function(i){return arguments.length?(e=ap.call(i),n=Math.min(t.length,e.length-1),r):e.slice()},r.invertExtent=function(n){var r=e.indexOf(n);return[t[r-1],t[r]]},r.copy=function(){return Lp().domain(t).range(e)},r}var Fp=new Date,zp=new Date;function Vp(t,e,n,r){function i(e){return t(e=new Date(+e)),e}return i.floor=i,i.ceil=function(n){return t(n=new Date(n-1)),e(n,1),t(n),n},i.round=function(t){var e=i(t),n=i.ceil(t);return t-e<n-t?e:n},i.offset=function(t,n){return e(t=new Date(+t),null==n?1:Math.floor(n)),t},i.range=function(n,r,o){var l,a=[];if(n=i.ceil(n),o=null==o?1:Math.floor(o),!(n<r&&o>0))return a;do{a.push(l=new Date(+n)),e(n,o),t(n)}while(l<n&&n<r);return a},i.filter=function(n){return Vp(function(e){if(e>=e)for(;t(e),!n(e);)e.setTime(e-1)},function(t,r){if(t>=t)if(r<0)for(;++r<=0;)for(;e(t,-1),!n(t););else for(;--r>=0;)for(;e(t,1),!n(t););})},n&&(i.count=function(e,r){return Fp.setTime(+e),zp.setTime(+r),t(Fp),t(zp),Math.floor(n(Fp,zp))},i.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?i.filter(r?function(e){return r(e)%t==0}:function(e){return i.count(0,e)%t==0}):i:null}),i}var Bp=Vp(function(){},function(t,e){t.setTime(+t+e)},function(t,e){return e-t});Bp.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?Vp(function(e){e.setTime(Math.floor(e/t)*t)},function(e,n){e.setTime(+e+n*t)},function(e,n){return(n-e)/t}):Bp:null};var Hp=Bp,Gp=Bp.range,Up=6e4,qp=6048e5,Qp=Vp(function(t){t.setTime(1e3*Math.floor(t/1e3))},function(t,e){t.setTime(+t+1e3*e)},function(t,e){return(e-t)/1e3},function(t){return t.getUTCSeconds()}),Wp=Qp,Yp=Qp.range,Zp=Vp(function(t){t.setTime(Math.floor(t/Up)*Up)},function(t,e){t.setTime(+t+e*Up)},function(t,e){return(e-t)/Up},function(t){return t.getMinutes()}),Kp=Zp,Xp=Zp.range,$p=Vp(function(t){var e=t.getTimezoneOffset()*Up%36e5;e<0&&(e+=36e5),t.setTime(36e5*Math.floor((+t-e)/36e5)+e)},function(t,e){t.setTime(+t+36e5*e)},function(t,e){return(e-t)/36e5},function(t){return t.getHours()}),Jp=$p,tm=$p.range,em=Vp(function(t){t.setHours(0,0,0,0)},function(t,e){t.setDate(t.getDate()+e)},function(t,e){return(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*Up)/864e5},function(t){return t.getDate()-1}),nm=em,rm=em.range;function im(t){return Vp(function(e){e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},function(t,e){t.setDate(t.getDate()+7*e)},function(t,e){return(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*Up)/qp})}var om=im(0),lm=im(1),am=im(2),um=im(3),sm=im(4),cm=im(5),hm=im(6),fm=om.range,dm=lm.range,pm=am.range,mm=um.range,gm=sm.range,bm=cm.range,ym=hm.range,vm=Vp(function(t){t.setDate(1),t.setHours(0,0,0,0)},function(t,e){t.setMonth(t.getMonth()+e)},function(t,e){return e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear())},function(t){return t.getMonth()}),_m=vm,wm=vm.range,xm=Vp(function(t){t.setMonth(0,1),t.setHours(0,0,0,0)},function(t,e){t.setFullYear(t.getFullYear()+e)},function(t,e){return e.getFullYear()-t.getFullYear()},function(t){return t.getFullYear()});xm.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Vp(function(e){e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},function(e,n){e.setFullYear(e.getFullYear()+n*t)}):null};var Sm=xm,Cm=xm.range,km=Vp(function(t){t.setUTCSeconds(0,0)},function(t,e){t.setTime(+t+e*Up)},function(t,e){return(e-t)/Up},function(t){return t.getUTCMinutes()}),Rm=km,jm=km.range,Om=Vp(function(t){t.setUTCMinutes(0,0,0)},function(t,e){t.setTime(+t+36e5*e)},function(t,e){return(e-t)/36e5},function(t){return t.getUTCHours()}),Em=Om,Tm=Om.range,Pm=Vp(function(t){t.setUTCHours(0,0,0,0)},function(t,e){t.setUTCDate(t.getUTCDate()+e)},function(t,e){return(e-t)/864e5},function(t){return t.getUTCDate()-1}),Im=Pm,Am=Pm.range;function Mm(t){return Vp(function(e){e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},function(t,e){t.setUTCDate(t.getUTCDate()+7*e)},function(t,e){return(e-t)/qp})}var Dm=Mm(0),Nm=Mm(1),Lm=Mm(2),Fm=Mm(3),zm=Mm(4),Vm=Mm(5),Bm=Mm(6),Hm=Dm.range,Gm=Nm.range,Um=Lm.range,qm=Fm.range,Qm=zm.range,Wm=Vm.range,Ym=Bm.range,Zm=Vp(function(t){t.setUTCDate(1),t.setUTCHours(0,0,0,0)},function(t,e){t.setUTCMonth(t.getUTCMonth()+e)},function(t,e){return e.getUTCMonth()-t.getUTCMonth()+12*(e.getUTCFullYear()-t.getUTCFullYear())},function(t){return t.getUTCMonth()}),Km=Zm,Xm=Zm.range,$m=Vp(function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},function(t,e){t.setUTCFullYear(t.getUTCFullYear()+e)},function(t,e){return e.getUTCFullYear()-t.getUTCFullYear()},function(t){return t.getUTCFullYear()});$m.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Vp(function(e){e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},function(e,n){e.setUTCFullYear(e.getUTCFullYear()+n*t)}):null};var Jm=$m,tg=$m.range;function eg(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function ng(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function rg(t){return{y:t,m:0,d:1,H:0,M:0,S:0,L:0}}function ig(t){var e=t.dateTime,n=t.date,r=t.time,i=t.periods,o=t.days,l=t.shortDays,a=t.months,u=t.shortMonths,s=gg(i),c=bg(i),h=gg(o),f=bg(o),d=gg(l),p=bg(l),m=gg(a),g=bg(a),b=gg(u),y=bg(u),v={a:function(t){return l[t.getDay()]},A:function(t){return o[t.getDay()]},b:function(t){return u[t.getMonth()]},B:function(t){return a[t.getMonth()]},c:null,d:Lg,e:Lg,f:Hg,H:Fg,I:zg,j:Vg,L:Bg,m:Gg,M:Ug,p:function(t){return i[+(t.getHours()>=12)]},Q:yb,s:vb,S:qg,u:Qg,U:Wg,V:Yg,w:Zg,W:Kg,x:null,X:null,y:Xg,Y:$g,Z:Jg,"%":bb},_={a:function(t){return l[t.getUTCDay()]},A:function(t){return o[t.getUTCDay()]},b:function(t){return u[t.getUTCMonth()]},B:function(t){return a[t.getUTCMonth()]},c:null,d:tb,e:tb,f:ob,H:eb,I:nb,j:rb,L:ib,m:lb,M:ab,p:function(t){return i[+(t.getUTCHours()>=12)]},Q:yb,s:vb,S:ub,u:sb,U:cb,V:hb,w:fb,W:db,x:null,X:null,y:pb,Y:mb,Z:gb,"%":bb},w={a:function(t,e,n){var r=d.exec(e.slice(n));return r?(t.w=p[r[0].toLowerCase()],n+r[0].length):-1},A:function(t,e,n){var r=h.exec(e.slice(n));return r?(t.w=f[r[0].toLowerCase()],n+r[0].length):-1},b:function(t,e,n){var r=b.exec(e.slice(n));return r?(t.m=y[r[0].toLowerCase()],n+r[0].length):-1},B:function(t,e,n){var r=m.exec(e.slice(n));return r?(t.m=g[r[0].toLowerCase()],n+r[0].length):-1},c:function(t,n,r){return C(t,e,n,r)},d:jg,e:jg,f:Ag,H:Eg,I:Eg,j:Og,L:Ig,m:Rg,M:Tg,p:function(t,e,n){var r=s.exec(e.slice(n));return r?(t.p=c[r[0].toLowerCase()],n+r[0].length):-1},Q:Dg,s:Ng,S:Pg,u:vg,U:_g,V:wg,w:yg,W:xg,x:function(t,e,r){return C(t,n,e,r)},X:function(t,e,n){return C(t,r,e,n)},y:Cg,Y:Sg,Z:kg,"%":Mg};function x(t,e){return function(n){var r,i,o,l=[],a=-1,u=0,s=t.length;for(n instanceof Date||(n=new Date(+n));++a<s;)37===t.charCodeAt(a)&&(l.push(t.slice(u,a)),null!=(i=cg[r=t.charAt(++a)])?r=t.charAt(++a):i="e"===r?" ":"0",(o=e[r])&&(r=o(n,i)),l.push(r),u=a+1);return l.push(t.slice(u,a)),l.join("")}}function S(t,e){return function(n){var r,i,o=rg(1900);if(C(o,t,n+="",0)!=n.length)return null;if("Q"in o)return new Date(o.Q);if("p"in o&&(o.H=o.H%12+12*o.p),"V"in o){if(o.V<1||o.V>53)return null;"w"in o||(o.w=1),"Z"in o?(r=(i=(r=ng(rg(o.y))).getUTCDay())>4||0===i?Nm.ceil(r):Nm(r),r=Im.offset(r,7*(o.V-1)),o.y=r.getUTCFullYear(),o.m=r.getUTCMonth(),o.d=r.getUTCDate()+(o.w+6)%7):(r=(i=(r=e(rg(o.y))).getDay())>4||0===i?lm.ceil(r):lm(r),r=nm.offset(r,7*(o.V-1)),o.y=r.getFullYear(),o.m=r.getMonth(),o.d=r.getDate()+(o.w+6)%7)}else("W"in o||"U"in o)&&("w"in o||(o.w="u"in o?o.u%7:"W"in o?1:0),i="Z"in o?ng(rg(o.y)).getUTCDay():e(rg(o.y)).getDay(),o.m=0,o.d="W"in o?(o.w+6)%7+7*o.W-(i+5)%7:o.w+7*o.U-(i+6)%7);return"Z"in o?(o.H+=o.Z/100|0,o.M+=o.Z%100,ng(o)):e(o)}}function C(t,e,n,r){for(var i,o,l=0,a=e.length,u=n.length;l<a;){if(r>=u)return-1;if(37===(i=e.charCodeAt(l++))){if(i=e.charAt(l++),!(o=w[i in cg?e.charAt(l++):i])||(r=o(t,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return v.x=x(n,v),v.X=x(r,v),v.c=x(e,v),_.x=x(n,_),_.X=x(r,_),_.c=x(e,_),{format:function(t){var e=x(t+="",v);return e.toString=function(){return t},e},parse:function(t){var e=S(t+="",eg);return e.toString=function(){return t},e},utcFormat:function(t){var e=x(t+="",_);return e.toString=function(){return t},e},utcParse:function(t){var e=S(t,ng);return e.toString=function(){return t},e}}}var og,lg,ag,ug,sg,cg={"-":"",_:" ",0:"0"},hg=/^\s*\d+/,fg=/^%/,dg=/[\\^$*+?|[\]().{}]/g;function pg(t,e,n){var r=t<0?"-":"",i=(r?-t:t)+"",o=i.length;return r+(o<n?new Array(n-o+1).join(e)+i:i)}function mg(t){return t.replace(dg,"\\$&")}function gg(t){return new RegExp("^(?:"+t.map(mg).join("|")+")","i")}function bg(t){for(var e={},n=-1,r=t.length;++n<r;)e[t[n].toLowerCase()]=n;return e}function yg(t,e,n){var r=hg.exec(e.slice(n,n+1));return r?(t.w=+r[0],n+r[0].length):-1}function vg(t,e,n){var r=hg.exec(e.slice(n,n+1));return r?(t.u=+r[0],n+r[0].length):-1}function _g(t,e,n){var r=hg.exec(e.slice(n,n+2));return r?(t.U=+r[0],n+r[0].length):-1}function wg(t,e,n){var r=hg.exec(e.slice(n,n+2));return r?(t.V=+r[0],n+r[0].length):-1}function xg(t,e,n){var r=hg.exec(e.slice(n,n+2));return r?(t.W=+r[0],n+r[0].length):-1}function Sg(t,e,n){var r=hg.exec(e.slice(n,n+4));return r?(t.y=+r[0],n+r[0].length):-1}function Cg(t,e,n){var r=hg.exec(e.slice(n,n+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function kg(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function Rg(t,e,n){var r=hg.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function jg(t,e,n){var r=hg.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function Og(t,e,n){var r=hg.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function Eg(t,e,n){var r=hg.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function Tg(t,e,n){var r=hg.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function Pg(t,e,n){var r=hg.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function Ig(t,e,n){var r=hg.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function Ag(t,e,n){var r=hg.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function Mg(t,e,n){var r=fg.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function Dg(t,e,n){var r=hg.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function Ng(t,e,n){var r=hg.exec(e.slice(n));return r?(t.Q=1e3*+r[0],n+r[0].length):-1}function Lg(t,e){return pg(t.getDate(),e,2)}function Fg(t,e){return pg(t.getHours(),e,2)}function zg(t,e){return pg(t.getHours()%12||12,e,2)}function Vg(t,e){return pg(1+nm.count(Sm(t),t),e,3)}function Bg(t,e){return pg(t.getMilliseconds(),e,3)}function Hg(t,e){return Bg(t,e)+"000"}function Gg(t,e){return pg(t.getMonth()+1,e,2)}function Ug(t,e){return pg(t.getMinutes(),e,2)}function qg(t,e){return pg(t.getSeconds(),e,2)}function Qg(t){var e=t.getDay();return 0===e?7:e}function Wg(t,e){return pg(om.count(Sm(t),t),e,2)}function Yg(t,e){var n=t.getDay();return t=n>=4||0===n?sm(t):sm.ceil(t),pg(sm.count(Sm(t),t)+(4===Sm(t).getDay()),e,2)}function Zg(t){return t.getDay()}function Kg(t,e){return pg(lm.count(Sm(t),t),e,2)}function Xg(t,e){return pg(t.getFullYear()%100,e,2)}function $g(t,e){return pg(t.getFullYear()%1e4,e,4)}function Jg(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+pg(e/60|0,"0",2)+pg(e%60,"0",2)}function tb(t,e){return pg(t.getUTCDate(),e,2)}function eb(t,e){return pg(t.getUTCHours(),e,2)}function nb(t,e){return pg(t.getUTCHours()%12||12,e,2)}function rb(t,e){return pg(1+Im.count(Jm(t),t),e,3)}function ib(t,e){return pg(t.getUTCMilliseconds(),e,3)}function ob(t,e){return ib(t,e)+"000"}function lb(t,e){return pg(t.getUTCMonth()+1,e,2)}function ab(t,e){return pg(t.getUTCMinutes(),e,2)}function ub(t,e){return pg(t.getUTCSeconds(),e,2)}function sb(t){var e=t.getUTCDay();return 0===e?7:e}function cb(t,e){return pg(Dm.count(Jm(t),t),e,2)}function hb(t,e){var n=t.getUTCDay();return t=n>=4||0===n?zm(t):zm.ceil(t),pg(zm.count(Jm(t),t)+(4===Jm(t).getUTCDay()),e,2)}function fb(t){return t.getUTCDay()}function db(t,e){return pg(Nm.count(Jm(t),t),e,2)}function pb(t,e){return pg(t.getUTCFullYear()%100,e,2)}function mb(t,e){return pg(t.getUTCFullYear()%1e4,e,4)}function gb(){return"+0000"}function bb(){return"%"}function yb(t){return+t}function vb(t){return Math.floor(+t/1e3)}function _b(t){return og=ig(t),lg=og.format,ag=og.parse,ug=og.utcFormat,sg=og.utcParse,og}_b({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});var wb=Date.prototype.toISOString?function(t){return t.toISOString()}:ug("%Y-%m-%dT%H:%M:%S.%LZ"),xb=+new Date("2000-01-01T00:00:00.000Z")?function(t){var e=new Date(t);return isNaN(e)?null:e}:sg("%Y-%m-%dT%H:%M:%S.%LZ"),Sb=1e3,Cb=60*Sb,kb=60*Cb,Rb=24*kb,jb=7*Rb,Ob=30*Rb,Eb=365*Rb;function Tb(t){return new Date(t)}function Pb(t){return t instanceof Date?+t:+new Date(+t)}function Ib(t,e,n,r,o,l,a,u,s){var c=vp(mp,qn),h=c.invert,f=c.domain,d=s(".%L"),p=s(":%S"),m=s("%I:%M"),g=s("%I %p"),b=s("%a %d"),y=s("%b %d"),v=s("%B"),_=s("%Y"),w=[[a,1,Sb],[a,5,5*Sb],[a,15,15*Sb],[a,30,30*Sb],[l,1,Cb],[l,5,5*Cb],[l,15,15*Cb],[l,30,30*Cb],[o,1,kb],[o,3,3*kb],[o,6,6*kb],[o,12,12*kb],[r,1,Rb],[r,2,2*Rb],[n,1,jb],[e,1,Ob],[e,3,3*Ob],[t,1,Eb]];function x(i){return(a(i)<i?d:l(i)<i?p:o(i)<i?m:r(i)<i?g:e(i)<i?n(i)<i?b:y:t(i)<i?v:_)(i)}function S(e,n,r,o){if(null==e&&(e=10),"number"==typeof e){var l=Math.abs(r-n)/e,a=i(function(t){return t[2]}).right(w,l);a===w.length?(o=O(n/Eb,r/Eb,e),e=t):a?(o=(a=w[l/w[a-1][2]<w[a][2]/l?a-1:a])[1],e=a[0]):(o=Math.max(O(n,r,e),1),e=u)}return null==o?e:e.every(o)}return c.invert=function(t){return new Date(h(t))},c.domain=function(t){return arguments.length?f(lp.call(t,Pb)):f().map(Tb)},c.ticks=function(t,e){var n,r=f(),i=r[0],o=r[r.length-1],l=o<i;return l&&(n=i,i=o,o=n),n=(n=S(t,i,o,e))?n.range(i,o+1):[],l?n.reverse():n},c.tickFormat=function(t,e){return null==e?x:s(e)},c.nice=function(t,e){var n=f();return(t=S(t,n[0],n[n.length-1],e))?f(Cp(n,t)):c},c.copy=function(){return yp(c,Ib(t,e,n,r,o,l,a,u,s))},c}var Ab=function(){return Ib(Sm,_m,om,nm,Jp,Kp,Wp,Hp,lg).domain([new Date(2e3,0,1),new Date(2e3,0,2)])},Mb=function(){return Ib(Jm,Km,Dm,Im,Em,Rm,Wp,Hp,ug).domain([Date.UTC(2e3,0,1),Date.UTC(2e3,0,2)])};function Db(t){var e=0,n=1,r=1,i=!1;function o(n){var o=(n-e)*r;return t(i?Math.max(0,Math.min(1,o)):o)}return o.domain=function(t){return arguments.length?(r=(e=+t[0])==(n=+t[1])?0:1/(n-e),o):[e,n]},o.clamp=function(t){return arguments.length?(i=!!t,o):i},o.interpolator=function(e){return arguments.length?(t=e,o):t},o.copy=function(){return Db(t).domain([e,n]).clamp(i)},wp(o)}function Nb(t){var e=0,n=.5,r=1,i=1,o=1,l=!1;function a(e){var r=.5+((e=+e)-n)*(e<n?i:o);return t(l?Math.max(0,Math.min(1,r)):r)}return a.domain=function(t){return arguments.length?(r=+t[2],i=(e=+t[0])==(n=+t[1])?0:.5/(n-e),o=n===r?0:.5/(r-n),a):[e,n,r]},a.clamp=function(t){return arguments.length?(l=!!t,a):l},a.interpolator=function(e){return arguments.length?(t=e,a):t},a.copy=function(){return Nb(t).domain([e,n,r]).clamp(l)},wp(a)}var Lb=function(t){for(var e=t.length/6|0,n=new Array(e),r=0;r<e;)n[r]="#"+t.slice(6*r,6*++r);return n},Fb=Lb("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf"),zb=Lb("7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666"),Vb=Lb("1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666"),Bb=Lb("a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928"),Hb=Lb("fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2"),Gb=Lb("b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc"),Ub=Lb("e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999"),qb=Lb("66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3"),Qb=Lb("8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f"),Wb=function(t){return Bn(t[t.length-1])},Yb=new Array(3).concat("d8b365f5f5f55ab4ac","a6611adfc27d80cdc1018571","a6611adfc27df5f5f580cdc1018571","8c510ad8b365f6e8c3c7eae55ab4ac01665e","8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e","8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e","8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e","5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30","5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30").map(Lb),Zb=Wb(Yb),Kb=new Array(3).concat("af8dc3f7f7f77fbf7b","7b3294c2a5cfa6dba0008837","7b3294c2a5cff7f7f7a6dba0008837","762a83af8dc3e7d4e8d9f0d37fbf7b1b7837","762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837","762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837","762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837","40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b","40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b").map(Lb),Xb=Wb(Kb),$b=new Array(3).concat("e9a3c9f7f7f7a1d76a","d01c8bf1b6dab8e1864dac26","d01c8bf1b6daf7f7f7b8e1864dac26","c51b7de9a3c9fde0efe6f5d0a1d76a4d9221","c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221","c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221","c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221","8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419","8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419").map(Lb),Jb=Wb($b),ty=new Array(3).concat("998ec3f7f7f7f1a340","5e3c99b2abd2fdb863e66101","5e3c99b2abd2f7f7f7fdb863e66101","542788998ec3d8daebfee0b6f1a340b35806","542788998ec3d8daebf7f7f7fee0b6f1a340b35806","5427888073acb2abd2d8daebfee0b6fdb863e08214b35806","5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806","2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08","2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08").map(Lb),ey=Wb(ty),ny=new Array(3).concat("ef8a62f7f7f767a9cf","ca0020f4a58292c5de0571b0","ca0020f4a582f7f7f792c5de0571b0","b2182bef8a62fddbc7d1e5f067a9cf2166ac","b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac","b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac","b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac","67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061","67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061").map(Lb),ry=Wb(ny),iy=new Array(3).concat("ef8a62ffffff999999","ca0020f4a582bababa404040","ca0020f4a582ffffffbababa404040","b2182bef8a62fddbc7e0e0e09999994d4d4d","b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d","b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d","b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d","67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a","67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a").map(Lb),oy=Wb(iy),ly=new Array(3).concat("fc8d59ffffbf91bfdb","d7191cfdae61abd9e92c7bb6","d7191cfdae61ffffbfabd9e92c7bb6","d73027fc8d59fee090e0f3f891bfdb4575b4","d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4","d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4","d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4","a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695","a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695").map(Lb),ay=Wb(ly),uy=new Array(3).concat("fc8d59ffffbf91cf60","d7191cfdae61a6d96a1a9641","d7191cfdae61ffffbfa6d96a1a9641","d73027fc8d59fee08bd9ef8b91cf601a9850","d73027fc8d59fee08bffffbfd9ef8b91cf601a9850","d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850","d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850","a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837","a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837").map(Lb),sy=Wb(uy),cy=new Array(3).concat("fc8d59ffffbf99d594","d7191cfdae61abdda42b83ba","d7191cfdae61ffffbfabdda42b83ba","d53e4ffc8d59fee08be6f59899d5943288bd","d53e4ffc8d59fee08bffffbfe6f59899d5943288bd","d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd","d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd","9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2","9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2").map(Lb),hy=Wb(cy),fy=new Array(3).concat("e5f5f999d8c92ca25f","edf8fbb2e2e266c2a4238b45","edf8fbb2e2e266c2a42ca25f006d2c","edf8fbccece699d8c966c2a42ca25f006d2c","edf8fbccece699d8c966c2a441ae76238b45005824","f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824","f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b").map(Lb),dy=Wb(fy),py=new Array(3).concat("e0ecf49ebcda8856a7","edf8fbb3cde38c96c688419d","edf8fbb3cde38c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b").map(Lb),my=Wb(py),gy=new Array(3).concat("e0f3dba8ddb543a2ca","f0f9e8bae4bc7bccc42b8cbe","f0f9e8bae4bc7bccc443a2ca0868ac","f0f9e8ccebc5a8ddb57bccc443a2ca0868ac","f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e","f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e","f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081").map(Lb),by=Wb(gy),yy=new Array(3).concat("fee8c8fdbb84e34a33","fef0d9fdcc8afc8d59d7301f","fef0d9fdcc8afc8d59e34a33b30000","fef0d9fdd49efdbb84fc8d59e34a33b30000","fef0d9fdd49efdbb84fc8d59ef6548d7301f990000","fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000","fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000").map(Lb),vy=Wb(yy),_y=new Array(3).concat("ece2f0a6bddb1c9099","f6eff7bdc9e167a9cf02818a","f6eff7bdc9e167a9cf1c9099016c59","f6eff7d0d1e6a6bddb67a9cf1c9099016c59","f6eff7d0d1e6a6bddb67a9cf3690c002818a016450","fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450","fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636").map(Lb),wy=Wb(_y),xy=new Array(3).concat("ece7f2a6bddb2b8cbe","f1eef6bdc9e174a9cf0570b0","f1eef6bdc9e174a9cf2b8cbe045a8d","f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d","f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b","fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b","fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858").map(Lb),Sy=Wb(xy),Cy=new Array(3).concat("e7e1efc994c7dd1c77","f1eef6d7b5d8df65b0ce1256","f1eef6d7b5d8df65b0dd1c77980043","f1eef6d4b9dac994c7df65b0dd1c77980043","f1eef6d4b9dac994c7df65b0e7298ace125691003f","f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f","f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f").map(Lb),ky=Wb(Cy),Ry=new Array(3).concat("fde0ddfa9fb5c51b8a","feebe2fbb4b9f768a1ae017e","feebe2fbb4b9f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a").map(Lb),jy=Wb(Ry),Oy=new Array(3).concat("edf8b17fcdbb2c7fb8","ffffcca1dab441b6c4225ea8","ffffcca1dab441b6c42c7fb8253494","ffffccc7e9b47fcdbb41b6c42c7fb8253494","ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84","ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84","ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58").map(Lb),Ey=Wb(Oy),Ty=new Array(3).concat("f7fcb9addd8e31a354","ffffccc2e69978c679238443","ffffccc2e69978c67931a354006837","ffffccd9f0a3addd8e78c67931a354006837","ffffccd9f0a3addd8e78c67941ab5d238443005a32","ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32","ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529").map(Lb),Py=Wb(Ty),Iy=new Array(3).concat("fff7bcfec44fd95f0e","ffffd4fed98efe9929cc4c02","ffffd4fed98efe9929d95f0e993404","ffffd4fee391fec44ffe9929d95f0e993404","ffffd4fee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506").map(Lb),Ay=Wb(Iy),My=new Array(3).concat("ffeda0feb24cf03b20","ffffb2fecc5cfd8d3ce31a1c","ffffb2fecc5cfd8d3cf03b20bd0026","ffffb2fed976feb24cfd8d3cf03b20bd0026","ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026","ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026","ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026").map(Lb),Dy=Wb(My),Ny=new Array(3).concat("deebf79ecae13182bd","eff3ffbdd7e76baed62171b5","eff3ffbdd7e76baed63182bd08519c","eff3ffc6dbef9ecae16baed63182bd08519c","eff3ffc6dbef9ecae16baed64292c62171b5084594","f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594","f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b").map(Lb),Ly=Wb(Ny),Fy=new Array(3).concat("e5f5e0a1d99b31a354","edf8e9bae4b374c476238b45","edf8e9bae4b374c47631a354006d2c","edf8e9c7e9c0a1d99b74c47631a354006d2c","edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32","f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32","f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b").map(Lb),zy=Wb(Fy),Vy=new Array(3).concat("f0f0f0bdbdbd636363","f7f7f7cccccc969696525252","f7f7f7cccccc969696636363252525","f7f7f7d9d9d9bdbdbd969696636363252525","f7f7f7d9d9d9bdbdbd969696737373525252252525","fffffff0f0f0d9d9d9bdbdbd969696737373525252252525","fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000").map(Lb),By=Wb(Vy),Hy=new Array(3).concat("efedf5bcbddc756bb1","f2f0f7cbc9e29e9ac86a51a3","f2f0f7cbc9e29e9ac8756bb154278f","f2f0f7dadaebbcbddc9e9ac8756bb154278f","f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486","fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486","fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d").map(Lb),Gy=Wb(Hy),Uy=new Array(3).concat("fee0d2fc9272de2d26","fee5d9fcae91fb6a4acb181d","fee5d9fcae91fb6a4ade2d26a50f15","fee5d9fcbba1fc9272fb6a4ade2d26a50f15","fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d","fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d","fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d").map(Lb),qy=Wb(Uy),Qy=new Array(3).concat("fee6cefdae6be6550d","feeddefdbe85fd8d3cd94701","feeddefdbe85fd8d3ce6550da63603","feeddefdd0a2fdae6bfd8d3ce6550da63603","feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04","fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04","fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704").map(Lb),Wy=Wb(Qy),Yy=gr(Rn(300,.5,0),Rn(-240,.5,1)),Zy=gr(Rn(-100,.75,.35),Rn(80,1.5,.8)),Ky=gr(Rn(260,.75,.35),Rn(80,1.5,.8)),Xy=Rn(),$y=function(t){(t<0||t>1)&&(t-=Math.floor(t));var e=Math.abs(t-.5);return Xy.h=360*t-100,Xy.s=1.5-1.5*e,Xy.l=.8-.9*e,Xy+""},Jy=qe(),tv=Math.PI/3,ev=2*Math.PI/3,nv=function(t){var e;return t=(.5-t)*Math.PI,Jy.r=255*(e=Math.sin(t))*e,Jy.g=255*(e=Math.sin(t+tv))*e,Jy.b=255*(e=Math.sin(t+ev))*e,Jy+""};function rv(t){var e=t.length;return function(n){return t[Math.max(0,Math.min(e-1,Math.floor(n*e)))]}}var iv=rv(Lb("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),ov=rv(Lb("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),lv=rv(Lb("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),av=rv(Lb("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")),uv=function(t){return function(){return t}},sv=Math.abs,cv=Math.atan2,hv=Math.cos,fv=Math.max,dv=Math.min,pv=Math.sin,mv=Math.sqrt,gv=1e-12,bv=Math.PI,yv=bv/2,vv=2*bv;function _v(t){return t>=1?yv:t<=-1?-yv:Math.asin(t)}function wv(t){return t.innerRadius}function xv(t){return t.outerRadius}function Sv(t){return t.startAngle}function Cv(t){return t.endAngle}function kv(t){return t&&t.padAngle}function Rv(t,e,n,r,i,o,l){var a=t-n,u=e-r,s=(l?o:-o)/mv(a*a+u*u),c=s*u,h=-s*a,f=t+c,d=e+h,p=n+c,m=r+h,g=(f+p)/2,b=(d+m)/2,y=p-f,v=m-d,_=y*y+v*v,w=i-o,x=f*m-p*d,S=(v<0?-1:1)*mv(fv(0,w*w*_-x*x)),C=(x*v-y*S)/_,k=(-x*y-v*S)/_,R=(x*v+y*S)/_,j=(-x*y+v*S)/_,O=C-g,E=k-b,T=R-g,P=j-b;return O*O+E*E>T*T+P*P&&(C=R,k=j),{cx:C,cy:k,x01:-c,y01:-h,x11:C*(i/w-1),y11:k*(i/w-1)}}var jv=function(){var t=wv,e=xv,n=uv(0),r=null,i=Sv,o=Cv,l=kv,a=null;function u(){var u,s,c,h=+t.apply(this,arguments),f=+e.apply(this,arguments),d=i.apply(this,arguments)-yv,p=o.apply(this,arguments)-yv,m=sv(p-d),g=p>d;if(a||(a=u=Vo()),f<h&&(s=f,f=h,h=s),f>gv)if(m>vv-gv)a.moveTo(f*hv(d),f*pv(d)),a.arc(0,0,f,d,p,!g),h>gv&&(a.moveTo(h*hv(p),h*pv(p)),a.arc(0,0,h,p,d,g));else{var b,y,v=d,_=p,w=d,x=p,S=m,C=m,k=l.apply(this,arguments)/2,R=k>gv&&(r?+r.apply(this,arguments):mv(h*h+f*f)),j=dv(sv(f-h)/2,+n.apply(this,arguments)),O=j,E=j;if(R>gv){var T=_v(R/h*pv(k)),P=_v(R/f*pv(k));(S-=2*T)>gv?(w+=T*=g?1:-1,x-=T):(S=0,w=x=(d+p)/2),(C-=2*P)>gv?(v+=P*=g?1:-1,_-=P):(C=0,v=_=(d+p)/2)}var I=f*hv(v),A=f*pv(v),M=h*hv(x),D=h*pv(x);if(j>gv){var N=f*hv(_),L=f*pv(_),F=h*hv(w),z=h*pv(w);if(m<bv){var V=S>gv?function(t,e,n,r,i,o,l,a){var u=F-I,s=z-A,c=l-N,h=a-L,f=(c*(A-L)-h*(I-N))/(h*u-c*s);return[I+f*u,A+f*s]}(0,0,0,0,0,0,M,D):[M,D],B=I-V[0],H=A-V[1],G=N-V[0],U=L-V[1],q=1/pv(((c=(B*G+H*U)/(mv(B*B+H*H)*mv(G*G+U*U)))>1?0:c<-1?bv:Math.acos(c))/2),Q=mv(V[0]*V[0]+V[1]*V[1]);O=dv(j,(h-Q)/(q-1)),E=dv(j,(f-Q)/(q+1))}}C>gv?E>gv?(b=Rv(F,z,I,A,f,E,g),y=Rv(N,L,M,D,f,E,g),a.moveTo(b.cx+b.x01,b.cy+b.y01),E<j?a.arc(b.cx,b.cy,E,cv(b.y01,b.x01),cv(y.y01,y.x01),!g):(a.arc(b.cx,b.cy,E,cv(b.y01,b.x01),cv(b.y11,b.x11),!g),a.arc(0,0,f,cv(b.cy+b.y11,b.cx+b.x11),cv(y.cy+y.y11,y.cx+y.x11),!g),a.arc(y.cx,y.cy,E,cv(y.y11,y.x11),cv(y.y01,y.x01),!g))):(a.moveTo(I,A),a.arc(0,0,f,v,_,!g)):a.moveTo(I,A),h>gv&&S>gv?O>gv?(b=Rv(M,D,N,L,h,-O,g),y=Rv(I,A,F,z,h,-O,g),a.lineTo(b.cx+b.x01,b.cy+b.y01),O<j?a.arc(b.cx,b.cy,O,cv(b.y01,b.x01),cv(y.y01,y.x01),!g):(a.arc(b.cx,b.cy,O,cv(b.y01,b.x01),cv(b.y11,b.x11),!g),a.arc(0,0,h,cv(b.cy+b.y11,b.cx+b.x11),cv(y.cy+y.y11,y.cx+y.x11),g),a.arc(y.cx,y.cy,O,cv(y.y11,y.x11),cv(y.y01,y.x01),!g))):a.arc(0,0,h,x,w,g):a.lineTo(M,D)}else a.moveTo(0,0);if(a.closePath(),u)return a=null,u+""||null}return u.centroid=function(){var n=(+t.apply(this,arguments)+ +e.apply(this,arguments))/2,r=(+i.apply(this,arguments)+ +o.apply(this,arguments))/2-bv/2;return[hv(r)*n,pv(r)*n]},u.innerRadius=function(e){return arguments.length?(t="function"==typeof e?e:uv(+e),u):t},u.outerRadius=function(t){return arguments.length?(e="function"==typeof t?t:uv(+t),u):e},u.cornerRadius=function(t){return arguments.length?(n="function"==typeof t?t:uv(+t),u):n},u.padRadius=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:uv(+t),u):r},u.startAngle=function(t){return arguments.length?(i="function"==typeof t?t:uv(+t),u):i},u.endAngle=function(t){return arguments.length?(o="function"==typeof t?t:uv(+t),u):o},u.padAngle=function(t){return arguments.length?(l="function"==typeof t?t:uv(+t),u):l},u.context=function(t){return arguments.length?(a=null==t?null:t,u):a},u};function Ov(t){this._context=t}Ov.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e)}}};var Ev=function(t){return new Ov(t)};function Tv(t){return t[0]}function Pv(t){return t[1]}var Iv=function(){var t=Tv,e=Pv,n=uv(!0),r=null,i=Ev,o=null;function l(l){var a,u,s,c=l.length,h=!1;for(null==r&&(o=i(s=Vo())),a=0;a<=c;++a)!(a<c&&n(u=l[a],a,l))===h&&((h=!h)?o.lineStart():o.lineEnd()),h&&o.point(+t(u,a,l),+e(u,a,l));if(s)return o=null,s+""||null}return l.x=function(e){return arguments.length?(t="function"==typeof e?e:uv(+e),l):t},l.y=function(t){return arguments.length?(e="function"==typeof t?t:uv(+t),l):e},l.defined=function(t){return arguments.length?(n="function"==typeof t?t:uv(!!t),l):n},l.curve=function(t){return arguments.length?(i=t,null!=r&&(o=i(r)),l):i},l.context=function(t){return arguments.length?(null==t?r=o=null:o=i(r=t),l):r},l},Av=function(){var t=Tv,e=null,n=uv(0),r=Pv,i=uv(!0),o=null,l=Ev,a=null;function u(u){var s,c,h,f,d,p=u.length,m=!1,g=new Array(p),b=new Array(p);for(null==o&&(a=l(d=Vo())),s=0;s<=p;++s){if(!(s<p&&i(f=u[s],s,u))===m)if(m=!m)c=s,a.areaStart(),a.lineStart();else{for(a.lineEnd(),a.lineStart(),h=s-1;h>=c;--h)a.point(g[h],b[h]);a.lineEnd(),a.areaEnd()}m&&(g[s]=+t(f,s,u),b[s]=+n(f,s,u),a.point(e?+e(f,s,u):g[s],r?+r(f,s,u):b[s]))}if(d)return a=null,d+""||null}function s(){return Iv().defined(i).curve(l).context(o)}return u.x=function(n){return arguments.length?(t="function"==typeof n?n:uv(+n),e=null,u):t},u.x0=function(e){return arguments.length?(t="function"==typeof e?e:uv(+e),u):t},u.x1=function(t){return arguments.length?(e=null==t?null:"function"==typeof t?t:uv(+t),u):e},u.y=function(t){return arguments.length?(n="function"==typeof t?t:uv(+t),r=null,u):n},u.y0=function(t){return arguments.length?(n="function"==typeof t?t:uv(+t),u):n},u.y1=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:uv(+t),u):r},u.lineX0=u.lineY0=function(){return s().x(t).y(n)},u.lineY1=function(){return s().x(t).y(r)},u.lineX1=function(){return s().x(e).y(n)},u.defined=function(t){return arguments.length?(i="function"==typeof t?t:uv(!!t),u):i},u.curve=function(t){return arguments.length?(l=t,null!=o&&(a=l(o)),u):l},u.context=function(t){return arguments.length?(null==t?o=a=null:a=l(o=t),u):o},u},Mv=function(t,e){return e<t?-1:e>t?1:e>=t?0:NaN},Dv=function(t){return t},Nv=function(){var t=Dv,e=Mv,n=null,r=uv(0),i=uv(vv),o=uv(0);function l(l){var a,u,s,c,h,f=l.length,d=0,p=new Array(f),m=new Array(f),g=+r.apply(this,arguments),b=Math.min(vv,Math.max(-vv,i.apply(this,arguments)-g)),y=Math.min(Math.abs(b)/f,o.apply(this,arguments)),v=y*(b<0?-1:1);for(a=0;a<f;++a)(h=m[p[a]=a]=+t(l[a],a,l))>0&&(d+=h);for(null!=e?p.sort(function(t,n){return e(m[t],m[n])}):null!=n&&p.sort(function(t,e){return n(l[t],l[e])}),a=0,s=d?(b-f*v)/d:0;a<f;++a,g=c)m[u=p[a]]={data:l[u],index:a,value:h=m[u],startAngle:g,endAngle:c=g+(h>0?h*s:0)+v,padAngle:y};return m}return l.value=function(e){return arguments.length?(t="function"==typeof e?e:uv(+e),l):t},l.sortValues=function(t){return arguments.length?(e=t,n=null,l):e},l.sort=function(t){return arguments.length?(n=t,e=null,l):n},l.startAngle=function(t){return arguments.length?(r="function"==typeof t?t:uv(+t),l):r},l.endAngle=function(t){return arguments.length?(i="function"==typeof t?t:uv(+t),l):i},l.padAngle=function(t){return arguments.length?(o="function"==typeof t?t:uv(+t),l):o},l},Lv=zv(Ev);function Fv(t){this._curve=t}function zv(t){function e(e){return new Fv(t(e))}return e._curve=t,e}function Vv(t){var e=t.curve;return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t.curve=function(t){return arguments.length?e(zv(t)):e()._curve},t}Fv.prototype={areaStart:function(){this._curve.areaStart()},areaEnd:function(){this._curve.areaEnd()},lineStart:function(){this._curve.lineStart()},lineEnd:function(){this._curve.lineEnd()},point:function(t,e){this._curve.point(e*Math.sin(t),e*-Math.cos(t))}};var Bv=function(){return Vv(Iv().curve(Lv))},Hv=function(){var t=Av().curve(Lv),e=t.curve,n=t.lineX0,r=t.lineX1,i=t.lineY0,o=t.lineY1;return t.angle=t.x,delete t.x,t.startAngle=t.x0,delete t.x0,t.endAngle=t.x1,delete t.x1,t.radius=t.y,delete t.y,t.innerRadius=t.y0,delete t.y0,t.outerRadius=t.y1,delete t.y1,t.lineStartAngle=function(){return Vv(n())},delete t.lineX0,t.lineEndAngle=function(){return Vv(r())},delete t.lineX1,t.lineInnerRadius=function(){return Vv(i())},delete t.lineY0,t.lineOuterRadius=function(){return Vv(o())},delete t.lineY1,t.curve=function(t){return arguments.length?e(zv(t)):e()._curve},t},Gv=function(t,e){return[(e=+e)*Math.cos(t-=Math.PI/2),e*Math.sin(t)]},Uv=Array.prototype.slice;function qv(t){return t.source}function Qv(t){return t.target}function Wv(t){var e=qv,n=Qv,r=Tv,i=Pv,o=null;function l(){var l,a=Uv.call(arguments),u=e.apply(this,a),s=n.apply(this,a);if(o||(o=l=Vo()),t(o,+r.apply(this,(a[0]=u,a)),+i.apply(this,a),+r.apply(this,(a[0]=s,a)),+i.apply(this,a)),l)return o=null,l+""||null}return l.source=function(t){return arguments.length?(e=t,l):e},l.target=function(t){return arguments.length?(n=t,l):n},l.x=function(t){return arguments.length?(r="function"==typeof t?t:uv(+t),l):r},l.y=function(t){return arguments.length?(i="function"==typeof t?t:uv(+t),l):i},l.context=function(t){return arguments.length?(o=null==t?null:t,l):o},l}function Yv(t,e,n,r,i){t.moveTo(e,n),t.bezierCurveTo(e=(e+r)/2,n,e,i,r,i)}function Zv(t,e,n,r,i){t.moveTo(e,n),t.bezierCurveTo(e,n=(n+i)/2,r,n,r,i)}function Kv(t,e,n,r,i){var o=Gv(e,n),l=Gv(e,n=(n+i)/2),a=Gv(r,n),u=Gv(r,i);t.moveTo(o[0],o[1]),t.bezierCurveTo(l[0],l[1],a[0],a[1],u[0],u[1])}function Xv(){return Wv(Yv)}function $v(){return Wv(Zv)}function Jv(){var t=Wv(Kv);return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t}var t_={draw:function(t,e){var n=Math.sqrt(e/bv);t.moveTo(n,0),t.arc(0,0,n,0,vv)}},e_={draw:function(t,e){var n=Math.sqrt(e/5)/2;t.moveTo(-3*n,-n),t.lineTo(-n,-n),t.lineTo(-n,-3*n),t.lineTo(n,-3*n),t.lineTo(n,-n),t.lineTo(3*n,-n),t.lineTo(3*n,n),t.lineTo(n,n),t.lineTo(n,3*n),t.lineTo(-n,3*n),t.lineTo(-n,n),t.lineTo(-3*n,n),t.closePath()}},n_=Math.sqrt(1/3),r_=2*n_,i_={draw:function(t,e){var n=Math.sqrt(e/r_),r=n*n_;t.moveTo(0,-n),t.lineTo(r,0),t.lineTo(0,n),t.lineTo(-r,0),t.closePath()}},o_=Math.sin(bv/10)/Math.sin(7*bv/10),l_=Math.sin(vv/10)*o_,a_=-Math.cos(vv/10)*o_,u_={draw:function(t,e){var n=Math.sqrt(.8908130915292852*e),r=l_*n,i=a_*n;t.moveTo(0,-n),t.lineTo(r,i);for(var o=1;o<5;++o){var l=vv*o/5,a=Math.cos(l),u=Math.sin(l);t.lineTo(u*n,-a*n),t.lineTo(a*r-u*i,u*r+a*i)}t.closePath()}},s_={draw:function(t,e){var n=Math.sqrt(e),r=-n/2;t.rect(r,r,n,n)}},c_=Math.sqrt(3),h_={draw:function(t,e){var n=-Math.sqrt(e/(3*c_));t.moveTo(0,2*n),t.lineTo(-c_*n,-n),t.lineTo(c_*n,-n),t.closePath()}},f_=Math.sqrt(3)/2,d_=1/Math.sqrt(12),p_=3*(d_/2+1),m_={draw:function(t,e){var n=Math.sqrt(e/p_),r=n/2,i=n*d_,o=r,l=n*d_+n,a=-o,u=l;t.moveTo(r,i),t.lineTo(o,l),t.lineTo(a,u),t.lineTo(-.5*r-f_*i,f_*r+-.5*i),t.lineTo(-.5*o-f_*l,f_*o+-.5*l),t.lineTo(-.5*a-f_*u,f_*a+-.5*u),t.lineTo(-.5*r+f_*i,-.5*i-f_*r),t.lineTo(-.5*o+f_*l,-.5*l-f_*o),t.lineTo(-.5*a+f_*u,-.5*u-f_*a),t.closePath()}},g_=[t_,e_,i_,s_,u_,h_,m_],b_=function(){var t=uv(t_),e=uv(64),n=null;function r(){var r;if(n||(n=r=Vo()),t.apply(this,arguments).draw(n,+e.apply(this,arguments)),r)return n=null,r+""||null}return r.type=function(e){return arguments.length?(t="function"==typeof e?e:uv(e),r):t},r.size=function(t){return arguments.length?(e="function"==typeof t?t:uv(+t),r):e},r.context=function(t){return arguments.length?(n=null==t?null:t,r):n},r},y_=function(){};function v_(t,e,n){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+n)/6)}function __(t){this._context=t}__.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:v_(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:v_(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};var w_=function(t){return new __(t)};function x_(t){this._context=t}x_.prototype={areaStart:y_,areaEnd:y_,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:v_(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};var S_=function(t){return new x_(t)};function C_(t){this._context=t}C_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+t)/6,r=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:v_(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};var k_=function(t){return new C_(t)};function R_(t,e){this._basis=new __(t),this._beta=e}R_.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,e=this._y,n=t.length-1;if(n>0)for(var r,i=t[0],o=e[0],l=t[n]-i,a=e[n]-o,u=-1;++u<=n;)this._basis.point(this._beta*t[u]+(1-this._beta)*(i+(r=u/n)*l),this._beta*e[u]+(1-this._beta)*(o+r*a));this._x=this._y=null,this._basis.lineEnd()},point:function(t,e){this._x.push(+t),this._y.push(+e)}};var j_=function t(e){function n(t){return 1===e?new __(t):new R_(t,e)}return n.beta=function(e){return t(+e)},n}(.85);function O_(t,e,n){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-n),t._x2,t._y2)}function E_(t,e){this._context=t,this._k=(1-e)/6}E_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:O_(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:O_(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var T_=function t(e){function n(t){return new E_(t,e)}return n.tension=function(e){return t(+e)},n}(0);function P_(t,e){this._context=t,this._k=(1-e)/6}P_.prototype={areaStart:y_,areaEnd:y_,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:O_(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var I_=function t(e){function n(t){return new P_(t,e)}return n.tension=function(e){return t(+e)},n}(0);function A_(t,e){this._context=t,this._k=(1-e)/6}A_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:O_(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var M_=function t(e){function n(t){return new A_(t,e)}return n.tension=function(e){return t(+e)},n}(0);function D_(t,e,n){var r=t._x1,i=t._y1,o=t._x2,l=t._y2;if(t._l01_a>gv){var a=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,u=3*t._l01_a*(t._l01_a+t._l12_a);r=(r*a-t._x0*t._l12_2a+t._x2*t._l01_2a)/u,i=(i*a-t._y0*t._l12_2a+t._y2*t._l01_2a)/u}if(t._l23_a>gv){var s=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,c=3*t._l23_a*(t._l23_a+t._l12_a);o=(o*s+t._x1*t._l23_2a-e*t._l12_2a)/c,l=(l*s+t._y1*t._l23_2a-n*t._l12_2a)/c}t._context.bezierCurveTo(r,i,o,l,t._x2,t._y2)}function N_(t,e){this._context=t,this._alpha=e}N_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:D_(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var L_=function t(e){function n(t){return e?new N_(t,e):new E_(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function F_(t,e){this._context=t,this._alpha=e}F_.prototype={areaStart:y_,areaEnd:y_,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:D_(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var z_=function t(e){function n(t){return e?new F_(t,e):new P_(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function V_(t,e){this._context=t,this._alpha=e}V_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:D_(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var B_=function t(e){function n(t){return e?new V_(t,e):new A_(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function H_(t){this._context=t}H_.prototype={areaStart:y_,areaEnd:y_,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))}};var G_=function(t){return new H_(t)};function U_(t){return t<0?-1:1}function q_(t,e,n){var r=t._x1-t._x0,i=e-t._x1,o=(t._y1-t._y0)/(r||i<0&&-0),l=(n-t._y1)/(i||r<0&&-0),a=(o*i+l*r)/(r+i);return(U_(o)+U_(l))*Math.min(Math.abs(o),Math.abs(l),.5*Math.abs(a))||0}function Q_(t,e){var n=t._x1-t._x0;return n?(3*(t._y1-t._y0)/n-e)/2:e}function W_(t,e,n){var r=t._x0,i=t._x1,o=t._y1,l=(i-r)/3;t._context.bezierCurveTo(r+l,t._y0+l*e,i-l,o-l*n,i,o)}function Y_(t){this._context=t}function Z_(t){this._context=new K_(t)}function K_(t){this._context=t}function X_(t){return new Y_(t)}function $_(t){return new Z_(t)}function J_(t){this._context=t}function tw(t){var e,n,r=t.length-1,i=new Array(r),o=new Array(r),l=new Array(r);for(i[0]=0,o[0]=2,l[0]=t[0]+2*t[1],e=1;e<r-1;++e)i[e]=1,o[e]=4,l[e]=4*t[e]+2*t[e+1];for(i[r-1]=2,o[r-1]=7,l[r-1]=8*t[r-1]+t[r],e=1;e<r;++e)o[e]-=n=i[e]/o[e-1],l[e]-=n*l[e-1];for(i[r-1]=l[r-1]/o[r-1],e=r-2;e>=0;--e)i[e]=(l[e]-i[e+1])/o[e];for(o[r-1]=(t[r]+i[r-1])/2,e=0;e<r-1;++e)o[e]=2*t[e+1]-i[e+1];return[i,o]}Y_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:W_(this,this._t0,Q_(this,this._t0))}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){var n=NaN;if(e=+e,(t=+t)!==this._x1||e!==this._y1){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,W_(this,Q_(this,n=q_(this,t,e)),n);break;default:W_(this,this._t0,n=q_(this,t,e))}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=n}}},(Z_.prototype=Object.create(Y_.prototype)).point=function(t,e){Y_.prototype.point.call(this,e,t)},K_.prototype={moveTo:function(t,e){this._context.moveTo(e,t)},closePath:function(){this._context.closePath()},lineTo:function(t,e){this._context.lineTo(e,t)},bezierCurveTo:function(t,e,n,r,i,o){this._context.bezierCurveTo(e,t,r,n,o,i)}},J_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var t=this._x,e=this._y,n=t.length;if(n)if(this._line?this._context.lineTo(t[0],e[0]):this._context.moveTo(t[0],e[0]),2===n)this._context.lineTo(t[1],e[1]);else for(var r=tw(t),i=tw(e),o=0,l=1;l<n;++o,++l)this._context.bezierCurveTo(r[0][o],i[0][o],r[1][o],i[1][o],t[l],e[l]);(this._line||0!==this._line&&1===n)&&this._context.closePath(),this._line=1-this._line,this._x=this._y=null},point:function(t,e){this._x.push(+t),this._y.push(+e)}};var ew=function(t){return new J_(t)};function nw(t,e){this._context=t,this._t=e}nw.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=this._y=NaN,this._point=0},lineEnd:function(){0<this._t&&this._t<1&&2===this._point&&this._context.lineTo(this._x,this._y),(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line>=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var n=this._x*(1-this._t)+t*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,e)}}this._x=t,this._y=e}};var rw=function(t){return new nw(t,.5)};function iw(t){return new nw(t,0)}function ow(t){return new nw(t,1)}var lw=function(t,e){if((i=t.length)>1)for(var n,r,i,o=1,l=t[e[0]],a=l.length;o<i;++o)for(r=l,l=t[e[o]],n=0;n<a;++n)l[n][1]+=l[n][0]=isNaN(r[n][1])?r[n][0]:r[n][1]},aw=function(t){for(var e=t.length,n=new Array(e);--e>=0;)n[e]=e;return n};function uw(t,e){return t[e]}var sw=function(){var t=uv([]),e=aw,n=lw,r=uw;function i(i){var o,l,a=t.apply(this,arguments),u=i.length,s=a.length,c=new Array(s);for(o=0;o<s;++o){for(var h,f=a[o],d=c[o]=new Array(u),p=0;p<u;++p)d[p]=h=[0,+r(i[p],f,p,i)],h.data=i[p];d.key=f}for(o=0,l=e(c);o<s;++o)c[l[o]].index=o;return n(c,l),c}return i.keys=function(e){return arguments.length?(t="function"==typeof e?e:uv(Uv.call(e)),i):t},i.value=function(t){return arguments.length?(r="function"==typeof t?t:uv(+t),i):r},i.order=function(t){return arguments.length?(e=null==t?aw:"function"==typeof t?t:uv(Uv.call(t)),i):e},i.offset=function(t){return arguments.length?(n=null==t?lw:t,i):n},i},cw=function(t,e){if((r=t.length)>0){for(var n,r,i,o=0,l=t[0].length;o<l;++o){for(i=n=0;n<r;++n)i+=t[n][o][1]||0;if(i)for(n=0;n<r;++n)t[n][o][1]/=i}lw(t,e)}},hw=function(t,e){if((a=t.length)>1)for(var n,r,i,o,l,a,u=0,s=t[e[0]].length;u<s;++u)for(o=l=0,n=0;n<a;++n)(i=(r=t[e[n]][u])[1]-r[0])>=0?(r[0]=o,r[1]=o+=i):i<0?(r[1]=l,r[0]=l+=i):r[0]=o},fw=function(t,e){if((n=t.length)>0){for(var n,r=0,i=t[e[0]],o=i.length;r<o;++r){for(var l=0,a=0;l<n;++l)a+=t[l][r][1]||0;i[r][1]+=i[r][0]=-a/2}lw(t,e)}},dw=function(t,e){if((i=t.length)>0&&(r=(n=t[e[0]]).length)>0){for(var n,r,i,o=0,l=1;l<r;++l){for(var a=0,u=0,s=0;a<i;++a){for(var c=t[e[a]],h=c[l][1]||0,f=(h-(c[l-1][1]||0))/2,d=0;d<a;++d){var p=t[e[d]];f+=(p[l][1]||0)-(p[l-1][1]||0)}u+=h,s+=f*h}n[l-1][1]+=n[l-1][0]=o,u&&(o-=s/u)}n[l-1][1]+=n[l-1][0]=o,lw(t,e)}},pw=function(t){var e=t.map(mw);return aw(t).sort(function(t,n){return e[t]-e[n]})};function mw(t){for(var e,n=0,r=-1,i=t.length;++r<i;)(e=+t[r][1])&&(n+=e);return n}var gw=function(t){return pw(t).reverse()},bw=function(t){var e,n,r=t.length,i=t.map(mw),o=aw(t).sort(function(t,e){return i[e]-i[t]}),l=0,a=0,u=[],s=[];for(e=0;e<r;++e)n=o[e],l<a?(l+=i[n],u.push(n)):(a+=i[n],s.push(n));return s.reverse().concat(u)},yw=function(t){return aw(t).reverse()},vw=function(t){return function(){return t}};function _w(t){return t[0]}function ww(t){return t[1]}function xw(){this._=null}function Sw(t){t.U=t.C=t.L=t.R=t.P=t.N=null}function Cw(t,e){var n=e,r=e.R,i=n.U;i?i.L===n?i.L=r:i.R=r:t._=r,r.U=i,n.U=r,n.R=r.L,n.R&&(n.R.U=n),r.L=n}function kw(t,e){var n=e,r=e.L,i=n.U;i?i.L===n?i.L=r:i.R=r:t._=r,r.U=i,n.U=r,n.L=r.R,n.L&&(n.L.U=n),r.R=n}function Rw(t){for(;t.L;)t=t.L;return t}xw.prototype={constructor:xw,insert:function(t,e){var n,r,i;if(t){if(e.P=t,e.N=t.N,t.N&&(t.N.P=e),t.N=e,t.R){for(t=t.R;t.L;)t=t.L;t.L=e}else t.R=e;n=t}else this._?(t=Rw(this._),e.P=null,e.N=t,t.P=t.L=e,n=t):(e.P=e.N=null,this._=e,n=null);for(e.L=e.R=null,e.U=n,e.C=!0,t=e;n&&n.C;)n===(r=n.U).L?(i=r.R)&&i.C?(n.C=i.C=!1,r.C=!0,t=r):(t===n.R&&(Cw(this,n),n=(t=n).U),n.C=!1,r.C=!0,kw(this,r)):(i=r.L)&&i.C?(n.C=i.C=!1,r.C=!0,t=r):(t===n.L&&(kw(this,n),n=(t=n).U),n.C=!1,r.C=!0,Cw(this,r)),n=t.U;this._.C=!1},remove:function(t){t.N&&(t.N.P=t.P),t.P&&(t.P.N=t.N),t.N=t.P=null;var e,n,r,i=t.U,o=t.L,l=t.R;if(n=o?l?Rw(l):o:l,i?i.L===t?i.L=n:i.R=n:this._=n,o&&l?(r=n.C,n.C=t.C,n.L=o,o.U=n,n!==l?(i=n.U,n.U=t.U,i.L=t=n.R,n.R=l,l.U=n):(n.U=i,i=n,t=n.R)):(r=t.C,t=n),t&&(t.U=i),!r)if(t&&t.C)t.C=!1;else{do{if(t===this._)break;if(t===i.L){if((e=i.R).C&&(e.C=!1,i.C=!0,Cw(this,i),e=i.R),e.L&&e.L.C||e.R&&e.R.C){e.R&&e.R.C||(e.L.C=!1,e.C=!0,kw(this,e),e=i.R),e.C=i.C,i.C=e.R.C=!1,Cw(this,i),t=this._;break}}else if((e=i.L).C&&(e.C=!1,i.C=!0,kw(this,i),e=i.L),e.L&&e.L.C||e.R&&e.R.C){e.L&&e.L.C||(e.R.C=!1,e.C=!0,Cw(this,e),e=i.L),e.C=i.C,i.C=e.L.C=!1,kw(this,i),t=this._;break}e.C=!0,t=i,i=i.U}while(!t.C);t&&(t.C=!1)}}};var jw=xw;function Ow(t,e,n,r){var i=[null,null],o=Kw.push(i)-1;return i.left=t,i.right=e,n&&Tw(i,t,e,n),r&&Tw(i,e,t,r),Yw[t.index].halfedges.push(o),Yw[e.index].halfedges.push(o),i}function Ew(t,e,n){var r=[e,n];return r.left=t,r}function Tw(t,e,n,r){t[0]||t[1]?t.left===n?t[1]=r:t[0]=r:(t[0]=r,t.left=e,t.right=n)}function Pw(t,e,n,r,i){var o,l=t[0],a=t[1],u=l[0],s=l[1],c=0,h=1,f=a[0]-u,d=a[1]-s;if(o=e-u,f||!(o>0)){if(o/=f,f<0){if(o<c)return;o<h&&(h=o)}else if(f>0){if(o>h)return;o>c&&(c=o)}if(o=r-u,f||!(o<0)){if(o/=f,f<0){if(o>h)return;o>c&&(c=o)}else if(f>0){if(o<c)return;o<h&&(h=o)}if(o=n-s,d||!(o>0)){if(o/=d,d<0){if(o<c)return;o<h&&(h=o)}else if(d>0){if(o>h)return;o>c&&(c=o)}if(o=i-s,d||!(o<0)){if(o/=d,d<0){if(o>h)return;o>c&&(c=o)}else if(d>0){if(o<c)return;o<h&&(h=o)}return!(c>0||h<1)||(c>0&&(t[0]=[u+c*f,s+c*d]),h<1&&(t[1]=[u+h*f,s+h*d]),!0)}}}}}function Iw(t,e,n,r,i){var o=t[1];if(o)return!0;var l,a,u=t[0],s=t.left,c=t.right,h=s[0],f=s[1],d=c[0],p=c[1],m=(h+d)/2,g=(f+p)/2;if(p===f){if(m<e||m>=r)return;if(h>d){if(u){if(u[1]>=i)return}else u=[m,n];o=[m,i]}else{if(u){if(u[1]<n)return}else u=[m,i];o=[m,n]}}else if(a=g-(l=(h-d)/(p-f))*m,l<-1||l>1)if(h>d){if(u){if(u[1]>=i)return}else u=[(n-a)/l,n];o=[(i-a)/l,i]}else{if(u){if(u[1]<n)return}else u=[(i-a)/l,i];o=[(n-a)/l,n]}else if(f<p){if(u){if(u[0]>=r)return}else u=[e,l*e+a];o=[r,l*r+a]}else{if(u){if(u[0]<e)return}else u=[r,l*r+a];o=[e,l*e+a]}return t[0]=u,t[1]=o,!0}function Aw(t,e){var n=t.site,r=e.left,i=e.right;return n===i&&(i=r,r=n),i?Math.atan2(i[1]-r[1],i[0]-r[0]):(n===r?(r=e[1],i=e[0]):(r=e[0],i=e[1]),Math.atan2(r[0]-i[0],i[1]-r[1]))}function Mw(t,e){return e[+(e.left!==t.site)]}function Dw(t,e){return e[+(e.left===t.site)]}var Nw,Lw=[];function Fw(t){var e=t.P,n=t.N;if(e&&n){var r=e.site,i=t.site,o=n.site;if(r!==o){var l=i[0],a=i[1],u=r[0]-l,s=r[1]-a,c=o[0]-l,h=o[1]-a,f=2*(u*h-s*c);if(!(f>=-$w)){var d=u*u+s*s,p=c*c+h*h,m=(h*d-s*p)/f,g=(u*p-c*d)/f,b=Lw.pop()||new function(){Sw(this),this.x=this.y=this.arc=this.site=this.cy=null};b.arc=t,b.site=i,b.x=m+l,b.y=(b.cy=g+a)+Math.sqrt(m*m+g*g),t.circle=b;for(var y=null,v=Zw._;v;)if(b.y<v.y||b.y===v.y&&b.x<=v.x){if(!v.L){y=v.P;break}v=v.L}else{if(!v.R){y=v;break}v=v.R}Zw.insert(y,b),y||(Nw=b)}}}}function zw(t){var e=t.circle;e&&(e.P||(Nw=e.N),Zw.remove(e),Lw.push(e),Sw(e),t.circle=null)}var Vw=[];function Bw(t){var e=Vw.pop()||new function(){Sw(this),this.edge=this.site=this.circle=null};return e.site=t,e}function Hw(t){zw(t),Ww.remove(t),Vw.push(t),Sw(t)}function Gw(t){var e=t.circle,n=e.x,r=e.cy,i=[n,r],o=t.P,l=t.N,a=[t];Hw(t);for(var u=o;u.circle&&Math.abs(n-u.circle.x)<Xw&&Math.abs(r-u.circle.cy)<Xw;)o=u.P,a.unshift(u),Hw(u),u=o;a.unshift(u),zw(u);for(var s=l;s.circle&&Math.abs(n-s.circle.x)<Xw&&Math.abs(r-s.circle.cy)<Xw;)l=s.N,a.push(s),Hw(s),s=l;a.push(s),zw(s);var c,h=a.length;for(c=1;c<h;++c)Tw((s=a[c]).edge,(u=a[c-1]).site,s.site,i);(s=a[h-1]).edge=Ow((u=a[0]).site,s.site,null,i),Fw(u),Fw(s)}function Uw(t){for(var e,n,r,i,o=t[0],l=t[1],a=Ww._;a;)if((r=qw(a,l)-o)>Xw)a=a.L;else{if(!((i=o-Qw(a,l))>Xw)){r>-Xw?(e=a.P,n=a):i>-Xw?(e=a,n=a.N):e=n=a;break}if(!a.R){e=a;break}a=a.R}!function(t){Yw[t.index]={site:t,halfedges:[]}}(t);var u=Bw(t);if(Ww.insert(e,u),e||n){if(e===n)return zw(e),n=Bw(e.site),Ww.insert(u,n),u.edge=n.edge=Ow(e.site,u.site),Fw(e),void Fw(n);if(n){zw(e),zw(n);var s=e.site,c=s[0],h=s[1],f=t[0]-c,d=t[1]-h,p=n.site,m=p[0]-c,g=p[1]-h,b=2*(f*g-d*m),y=f*f+d*d,v=m*m+g*g,_=[(g*y-d*v)/b+c,(f*v-m*y)/b+h];Tw(n.edge,s,p,_),u.edge=Ow(s,t,null,_),n.edge=Ow(t,p,null,_),Fw(e),Fw(n)}else u.edge=Ow(e.site,u.site)}}function qw(t,e){var n=t.site,r=n[0],i=n[1],o=i-e;if(!o)return r;var l=t.P;if(!l)return-1/0;var a=(n=l.site)[0],u=n[1],s=u-e;if(!s)return a;var c=a-r,h=1/o-1/s,f=c/s;return h?(-f+Math.sqrt(f*f-2*h*(c*c/(-2*s)-u+s/2+i-o/2)))/h+r:(r+a)/2}function Qw(t,e){var n=t.N;if(n)return qw(n,e);var r=t.site;return r[1]===e?r[0]:1/0}var Ww,Yw,Zw,Kw,Xw=1e-6,$w=1e-12;function Jw(t,e){return e[1]-t[1]||e[0]-t[0]}function tx(t,e){var n,r,i,o=t.sort(Jw).pop();for(Kw=[],Yw=new Array(t.length),Ww=new jw,Zw=new jw;;)if(i=Nw,o&&(!i||o[1]<i.y||o[1]===i.y&&o[0]<i.x))o[0]===n&&o[1]===r||(Uw(o),n=o[0],r=o[1]),o=t.pop();else{if(!i)break;Gw(i.arc)}if(function(){for(var t,e,n,r,i=0,o=Yw.length;i<o;++i)if((t=Yw[i])&&(r=(e=t.halfedges).length)){var l=new Array(r),a=new Array(r);for(n=0;n<r;++n)l[n]=n,a[n]=Aw(t,Kw[e[n]]);for(l.sort(function(t,e){return a[e]-a[t]}),n=0;n<r;++n)a[n]=e[l[n]];for(n=0;n<r;++n)e[n]=a[n]}}(),e){var l=+e[0][0],a=+e[0][1],u=+e[1][0],s=+e[1][1];!function(t,e,n,r){for(var i,o=Kw.length;o--;)Iw(i=Kw[o],t,e,n,r)&&Pw(i,t,e,n,r)&&(Math.abs(i[0][0]-i[1][0])>Xw||Math.abs(i[0][1]-i[1][1])>Xw)||delete Kw[o]}(l,a,u,s),function(t,e,n,r){var i,o,l,a,u,s,c,h,f,d,p,m,g=Yw.length,b=!0;for(i=0;i<g;++i)if(o=Yw[i]){for(l=o.site,a=(u=o.halfedges).length;a--;)Kw[u[a]]||u.splice(a,1);for(a=0,s=u.length;a<s;)p=(d=Dw(o,Kw[u[a]]))[0],m=d[1],h=(c=Mw(o,Kw[u[++a%s]]))[0],f=c[1],(Math.abs(p-h)>Xw||Math.abs(m-f)>Xw)&&(u.splice(a,0,Kw.push(Ew(l,d,Math.abs(p-t)<Xw&&r-m>Xw?[t,Math.abs(h-t)<Xw?f:r]:Math.abs(m-r)<Xw&&n-p>Xw?[Math.abs(f-r)<Xw?h:n,r]:Math.abs(p-n)<Xw&&m-e>Xw?[n,Math.abs(h-n)<Xw?f:e]:Math.abs(m-e)<Xw&&p-t>Xw?[Math.abs(f-e)<Xw?h:t,e]:null))-1),++s);s&&(b=!1)}if(b){var y,v,_,w=1/0;for(i=0,b=null;i<g;++i)(o=Yw[i])&&(_=(y=(l=o.site)[0]-t)*y+(v=l[1]-e)*v)<w&&(w=_,b=o);if(b){var x=[t,e],S=[t,r],C=[n,r],k=[n,e];b.halfedges.push(Kw.push(Ew(l=b.site,x,S))-1,Kw.push(Ew(l,S,C))-1,Kw.push(Ew(l,C,k))-1,Kw.push(Ew(l,k,x))-1)}}for(i=0;i<g;++i)(o=Yw[i])&&(o.halfedges.length||delete Yw[i])}(l,a,u,s)}this.edges=Kw,this.cells=Yw,Ww=Zw=Kw=Yw=null}tx.prototype={constructor:tx,polygons:function(){var t=this.edges;return this.cells.map(function(e){var n=e.halfedges.map(function(n){return Mw(e,t[n])});return n.data=e.site.data,n})},triangles:function(){var t=[],e=this.edges;return this.cells.forEach(function(n,r){if(o=(i=n.halfedges).length)for(var i,o,l,a,u,s,c=n.site,h=-1,f=e[i[o-1]],d=f.left===c?f.right:f.left;++h<o;)l=d,d=(f=e[i[h]]).left===c?f.right:f.left,l&&d&&r<l.index&&r<d.index&&((a=c)[0]-(s=d)[0])*((u=l)[1]-a[1])-(a[0]-u[0])*(s[1]-a[1])<0&&t.push([c.data,l.data,d.data])}),t},links:function(){return this.edges.filter(function(t){return t.right}).map(function(t){return{source:t.left.data,target:t.right.data}})},find:function(t,e,n){for(var r,i,o=this,l=o._found||0,a=o.cells.length;!(i=o.cells[l]);)if(++l>=a)return null;var u=t-i.site[0],s=e-i.site[1],c=u*u+s*s;do{i=o.cells[r=l],l=null,i.halfedges.forEach(function(n){var r=o.edges[n],a=r.left;if(a!==i.site&&a||(a=r.right)){var u=t-a[0],s=e-a[1],h=u*u+s*s;h<c&&(c=h,l=a.index)}})}while(null!==l);return o._found=r,null==n||c<=n*n?i.site:null}};var ex=function(){var t=_w,e=ww,n=null;function r(r){return new tx(r.map(function(n,i){var o=[Math.round(t(n,i,r)/Xw)*Xw,Math.round(e(n,i,r)/Xw)*Xw];return o.index=i,o.data=n,o}),n)}return r.polygons=function(t){return r(t).polygons()},r.links=function(t){return r(t).links()},r.triangles=function(t){return r(t).triangles()},r.x=function(e){return arguments.length?(t="function"==typeof e?e:vw(+e),r):t},r.y=function(t){return arguments.length?(e="function"==typeof t?t:vw(+t),r):e},r.extent=function(t){return arguments.length?(n=null==t?null:[[+t[0][0],+t[0][1]],[+t[1][0],+t[1][1]]],r):n&&[[n[0][0],n[0][1]],[n[1][0],n[1][1]]]},r.size=function(t){return arguments.length?(n=null==t?null:[[0,0],[+t[0],+t[1]]],r):n&&[n[1][0]-n[0][0],n[1][1]-n[0][1]]},r},nx=function(t){return function(){return t}};function rx(t,e,n){this.k=t,this.x=e,this.y=n}rx.prototype={constructor:rx,scale:function(t){return 1===t?this:new rx(this.k*t,this.x,this.y)},translate:function(t,e){return 0===t&0===e?this:new rx(this.k,this.x+this.k*t,this.y+this.k*e)},apply:function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},applyX:function(t){return t*this.k+this.x},applyY:function(t){return t*this.k+this.y},invert:function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},invertX:function(t){return(t-this.x)/this.k},invertY:function(t){return(t-this.y)/this.k},rescaleX:function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},rescaleY:function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var ix=new rx(1,0,0);function ox(t){return t.__zoom||ix}function lx(){Wt.stopImmediatePropagation()}ox.prototype=rx.prototype;var ax=function(){Wt.preventDefault(),Wt.stopImmediatePropagation()};function ux(){return!Wt.button}function sx(){var t,e,n=this;return n instanceof SVGElement?(t=(n=n.ownerSVGElement||n).width.baseVal.value,e=n.height.baseVal.value):(t=n.clientWidth,e=n.clientHeight),[[0,0],[t,e]]}function cx(){return this.__zoom||ix}function hx(){return-Wt.deltaY*(Wt.deltaMode?120:1)/500}function fx(){return"ontouchstart"in this}function dx(t,e,n){var r=t.invertX(e[0][0])-n[0][0],i=t.invertX(e[1][0])-n[1][0],o=t.invertY(e[0][1])-n[0][1],l=t.invertY(e[1][1])-n[1][1];return t.translate(i>r?(r+i)/2:Math.min(0,r)||Math.max(0,i),l>o?(o+l)/2:Math.min(0,o)||Math.max(0,l))}var px=function(){var t,e,n=ux,r=sx,i=dx,o=hx,l=fx,a=[0,1/0],u=[[-1/0,-1/0],[1/0,1/0]],s=250,c=lr,h=[],f=ft("start","zoom","end"),d=500,p=150,m=0;function g(t){t.property("__zoom",cx).on("wheel.zoom",S).on("mousedown.zoom",C).on("dblclick.zoom",k).filter(l).on("touchstart.zoom",R).on("touchmove.zoom",j).on("touchend.zoom touchcancel.zoom",O).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function b(t,e){return(e=Math.max(a[0],Math.min(a[1],e)))===t.k?t:new rx(e,t.x,t.y)}function y(t,e,n){var r=e[0]-n[0]*t.k,i=e[1]-n[1]*t.k;return r===t.x&&i===t.y?t:new rx(t.k,r,i)}function v(t){return[(+t[0][0]+ +t[1][0])/2,(+t[0][1]+ +t[1][1])/2]}function _(t,e,n){t.on("start.zoom",function(){w(this,arguments).start()}).on("interrupt.zoom end.zoom",function(){w(this,arguments).end()}).tween("zoom",function(){var t=arguments,i=w(this,t),o=r.apply(this,t),l=n||v(o),a=Math.max(o[1][0]-o[0][0],o[1][1]-o[0][1]),u=this.__zoom,s="function"==typeof e?e.apply(this,t):e,h=c(u.invert(l).concat(a/u.k),s.invert(l).concat(a/s.k));return function(t){if(1===t)t=s;else{var e=h(t),n=a/e[2];t=new rx(n,l[0]-e[0]*n,l[1]-e[1]*n)}i.zoom(null,t)}})}function w(t,e){for(var n,r=0,i=h.length;r<i;++r)if((n=h[r]).that===t)return n;return new x(t,e)}function x(t,e){this.that=t,this.args=e,this.index=-1,this.active=0,this.extent=r.apply(t,e)}function S(){if(n.apply(this,arguments)){var t=w(this,arguments),e=this.__zoom,r=Math.max(a[0],Math.min(a[1],e.k*Math.pow(2,o.apply(this,arguments)))),l=he(this);if(t.wheel)t.mouse[0][0]===l[0]&&t.mouse[0][1]===l[1]||(t.mouse[1]=e.invert(t.mouse[0]=l)),clearTimeout(t.wheel);else{if(e.k===r)return;t.mouse=[l,e.invert(l)],Jr(this),t.start()}ax(),t.wheel=setTimeout(function(){t.wheel=null,t.end()},p),t.zoom("mouse",i(y(b(e,r),t.mouse[0],t.mouse[1]),t.extent,u))}}function C(){if(!e&&n.apply(this,arguments)){var t=w(this,arguments),r=ie(Wt.view).on("mousemove.zoom",function(){if(ax(),!t.moved){var e=Wt.clientX-l,n=Wt.clientY-a;t.moved=e*e+n*n>m}t.zoom("mouse",i(y(t.that.__zoom,t.mouse[0]=he(t.that),t.mouse[1]),t.extent,u))},!0).on("mouseup.zoom",function(){r.on("mousemove.zoom mouseup.zoom",null),ye(Wt.view,t.moved),ax(),t.end()},!0),o=he(this),l=Wt.clientX,a=Wt.clientY;be(Wt.view),lx(),t.mouse=[o,this.__zoom.invert(o)],Jr(this),t.start()}}function k(){if(n.apply(this,arguments)){var t=this.__zoom,e=he(this),o=t.invert(e),l=i(y(b(t,t.k*(Wt.shiftKey?.5:2)),e,o),r.apply(this,arguments),u);ax(),s>0?ie(this).transition().duration(s).call(_,l,e):ie(this).call(g.transform,l)}}function R(){if(n.apply(this,arguments)){var e,r,i,o,l=w(this,arguments),a=Wt.changedTouches,u=a.length;for(lx(),r=0;r<u;++r)o=[o=de(this,a,(i=a[r]).identifier),this.__zoom.invert(o),i.identifier],l.touch0?l.touch1||(l.touch1=o):(l.touch0=o,e=!0);if(t&&(t=clearTimeout(t),!l.touch1))return l.end(),void((o=ie(this).on("dblclick.zoom"))&&o.apply(this,arguments));e&&(t=setTimeout(function(){t=null},d),Jr(this),l.start())}}function j(){var e,n,r,o,l=w(this,arguments),a=Wt.changedTouches,s=a.length;for(ax(),t&&(t=clearTimeout(t)),e=0;e<s;++e)r=de(this,a,(n=a[e]).identifier),l.touch0&&l.touch0[2]===n.identifier?l.touch0[0]=r:l.touch1&&l.touch1[2]===n.identifier&&(l.touch1[0]=r);if(n=l.that.__zoom,l.touch1){var c=l.touch0[0],h=l.touch0[1],f=l.touch1[0],d=l.touch1[1],p=(p=f[0]-c[0])*p+(p=f[1]-c[1])*p,m=(m=d[0]-h[0])*m+(m=d[1]-h[1])*m;n=b(n,Math.sqrt(p/m)),r=[(c[0]+f[0])/2,(c[1]+f[1])/2],o=[(h[0]+d[0])/2,(h[1]+d[1])/2]}else{if(!l.touch0)return;r=l.touch0[0],o=l.touch0[1]}l.zoom("touch",i(y(n,r,o),l.extent,u))}function O(){var t,n,r=w(this,arguments),i=Wt.changedTouches,o=i.length;for(lx(),e&&clearTimeout(e),e=setTimeout(function(){e=null},d),t=0;t<o;++t)n=i[t],r.touch0&&r.touch0[2]===n.identifier?delete r.touch0:r.touch1&&r.touch1[2]===n.identifier&&delete r.touch1;r.touch1&&!r.touch0&&(r.touch0=r.touch1,delete r.touch1),r.touch0?r.touch0[1]=this.__zoom.invert(r.touch0[0]):r.end()}return g.transform=function(t,e){var n=t.selection?t.selection():t;n.property("__zoom",cx),t!==n?_(t,e):n.interrupt().each(function(){w(this,arguments).start().zoom(null,"function"==typeof e?e.apply(this,arguments):e).end()})},g.scaleBy=function(t,e){g.scaleTo(t,function(){return this.__zoom.k*("function"==typeof e?e.apply(this,arguments):e)})},g.scaleTo=function(t,e){g.transform(t,function(){var t=r.apply(this,arguments),n=this.__zoom,o=v(t),l=n.invert(o),a="function"==typeof e?e.apply(this,arguments):e;return i(y(b(n,a),o,l),t,u)})},g.translateBy=function(t,e,n){g.transform(t,function(){return i(this.__zoom.translate("function"==typeof e?e.apply(this,arguments):e,"function"==typeof n?n.apply(this,arguments):n),r.apply(this,arguments),u)})},g.translateTo=function(t,e,n){g.transform(t,function(){var t=r.apply(this,arguments),o=this.__zoom,l=v(t);return i(ix.translate(l[0],l[1]).scale(o.k).translate("function"==typeof e?-e.apply(this,arguments):-e,"function"==typeof n?-n.apply(this,arguments):-n),t,u)})},x.prototype={start:function(){return 1==++this.active&&(this.index=h.push(this)-1,this.emit("start")),this},zoom:function(t,e){return this.mouse&&"mouse"!==t&&(this.mouse[1]=e.invert(this.mouse[0])),this.touch0&&"touch"!==t&&(this.touch0[1]=e.invert(this.touch0[0])),this.touch1&&"touch"!==t&&(this.touch1[1]=e.invert(this.touch1[0])),this.that.__zoom=e,this.emit("zoom"),this},end:function(){return 0==--this.active&&(h.splice(this.index,1),this.index=-1,this.emit("end")),this},emit:function(t){$t(new function(t,e,n){this.target=g,this.type=e,this.transform=n}(0,t,this.that.__zoom),f.apply,f,[t,this.that,this.args])}},g.wheelDelta=function(t){return arguments.length?(o="function"==typeof t?t:nx(+t),g):o},g.filter=function(t){return arguments.length?(n="function"==typeof t?t:nx(!!t),g):n},g.touchable=function(t){return arguments.length?(l="function"==typeof t?t:nx(!!t),g):l},g.extent=function(t){return arguments.length?(r="function"==typeof t?t:nx([[+t[0][0],+t[0][1]],[+t[1][0],+t[1][1]]]),g):r},g.scaleExtent=function(t){return arguments.length?(a[0]=+t[0],a[1]=+t[1],g):[a[0],a[1]]},g.translateExtent=function(t){return arguments.length?(u[0][0]=+t[0][0],u[1][0]=+t[1][0],u[0][1]=+t[0][1],u[1][1]=+t[1][1],g):[[u[0][0],u[0][1]],[u[1][0],u[1][1]]]},g.constrain=function(t){return arguments.length?(i=t,g):i},g.duration=function(t){return arguments.length?(s=+t,g):s},g.interpolate=function(t){return arguments.length?(c=t,g):c},g.on=function(){var t=f.on.apply(f,arguments);return t===f?g:t},g.clickDistance=function(t){return arguments.length?(m=(t=+t)*t,g):Math.sqrt(m)},g};n.d(e,!1,function(){return"5.5.0"}),n.d(e,!1,function(){return u}),n.d(e,!1,function(){return l}),n.d(e,!1,function(){return a}),n.d(e,!1,function(){return r}),n.d(e,!1,function(){return i}),n.d(e,!1,function(){return h}),n.d(e,!1,function(){return f}),n.d(e,!1,function(){return m}),n.d(e,!1,function(){return g}),n.d(e,!1,function(){return T}),n.d(e,!1,function(){return I}),n.d(e,!1,function(){return A}),n.d(e,!1,function(){return E}),n.d(e,!1,function(){return M}),n.d(e,!1,function(){return D}),n.d(e,!1,function(){return N}),n.d(e,!1,function(){return L}),n.d(e,!1,function(){return F}),n.d(e,!1,function(){return s}),n.d(e,!1,function(){return z}),n.d(e,!1,function(){return P}),n.d(e,!1,function(){return x}),n.d(e,!1,function(){return V}),n.d(e,!1,function(){return B}),n.d(e,!1,function(){return H}),n.d(e,!1,function(){return R}),n.d(e,!1,function(){return j}),n.d(e,!1,function(){return O}),n.d(e,!1,function(){return G}),n.d(e,!1,function(){return p}),n.d(e,!1,function(){return q}),n.d(e,!1,function(){return rt}),n.d(e,!1,function(){return it}),n.d(e,!1,function(){return ot}),n.d(e,!1,function(){return lt}),n.d(e,!1,function(){return Co}),n.d(e,!1,function(){return xo}),n.d(e,!1,function(){return So}),n.d(e,!1,function(){return wo}),n.d(e,!1,function(){return Io}),n.d(e,!1,function(){return Qo}),n.d(e,!1,function(){return Ko}),n.d(e,!1,function(){return il}),n.d(e,!1,function(){return Zo}),n.d(e,!1,function(){return ol}),n.d(e,!1,function(){return ll}),n.d(e,!1,function(){return al}),n.d(e,!1,function(){return Be}),n.d(e,!1,function(){return qe}),n.d(e,!1,function(){return Ze}),n.d(e,!1,function(){return cn}),n.d(e,!1,function(){return yn}),n.d(e,!1,function(){return bn}),n.d(e,!1,function(){return sn}),n.d(e,!1,function(){return Rn}),n.d(e,!1,function(){return bl}),n.d(e,!1,function(){return xl}),n.d(e,!1,function(){return ft}),n.d(e,!1,function(){return ke}),n.d(e,!1,function(){return be}),n.d(e,!1,function(){return ye}),n.d(e,!1,function(){return El}),n.d(e,!1,function(){return Pl}),n.d(e,!1,function(){return Il}),n.d(e,!1,function(){return Al}),n.d(e,!1,function(){return Ml}),n.d(e,!1,function(){return Nl}),n.d(e,!1,function(){return Ll}),n.d(e,!1,function(){return Fl}),n.d(e,!1,function(){return zl}),n.d(e,!1,function(){return ui}),n.d(e,!1,function(){return hi}),n.d(e,!1,function(){return si}),n.d(e,!1,function(){return ci}),n.d(e,!1,function(){return hi}),n.d(e,!1,function(){return pi}),n.d(e,!1,function(){return fi}),n.d(e,!1,function(){return di}),n.d(e,!1,function(){return pi}),n.d(e,!1,function(){return bi}),n.d(e,!1,function(){return mi}),n.d(e,!1,function(){return gi}),n.d(e,!1,function(){return bi}),n.d(e,!1,function(){return xi}),n.d(e,!1,function(){return _i}),n.d(e,!1,function(){return wi}),n.d(e,!1,function(){return xi}),n.d(e,!1,function(){return ki}),n.d(e,!1,function(){return Si}),n.d(e,!1,function(){return Ci}),n.d(e,!1,function(){return ki}),n.d(e,!1,function(){return Oi}),n.d(e,!1,function(){return Ri}),n.d(e,!1,function(){return ji}),n.d(e,!1,function(){return Oi}),n.d(e,!1,function(){return Vi}),n.d(e,!1,function(){return zi}),n.d(e,!1,function(){return Vi}),n.d(e,!1,function(){return Bi}),n.d(e,!1,function(){return Ui}),n.d(e,!1,function(){return Hi}),n.d(e,!1,function(){return Gi}),n.d(e,!1,function(){return Ui}),n.d(e,!1,function(){return Wi}),n.d(e,!1,function(){return Qi}),n.d(e,!1,function(){return Wi}),n.d(e,!1,function(){return Yi}),n.d(e,!1,function(){return Bl}),n.d(e,!1,function(){return Gl}),n.d(e,!1,function(){return Wl}),n.d(e,!1,function(){return Yl}),n.d(e,!1,function(){return Zl}),n.d(e,!1,function(){return Kl}),n.d(e,!1,function(){return $l}),n.d(e,!1,function(){return ql}),n.d(e,!1,function(){return ta}),n.d(e,!1,function(){return ea}),n.d(e,!1,function(){return na}),n.d(e,!1,function(){return ra}),n.d(e,!1,function(){return ga}),n.d(e,!1,function(){return va}),n.d(e,!1,function(){return ka}),n.d(e,!1,function(){return Ra}),n.d(e,!1,function(){return Ca}),n.d(e,!1,function(){return ja}),n.d(e,!1,function(){return Oa}),n.d(e,!1,function(){return Ua}),n.d(e,!1,function(){return Na}),n.d(e,!1,function(){return La}),n.d(e,!1,function(){return Ga}),n.d(e,!1,function(){return Ia}),n.d(e,!1,function(){return qa}),n.d(e,!1,function(){return Qa}),n.d(e,!1,function(){return Wa}),n.d(e,!1,function(){return zu}),n.d(e,!1,function(){return Ps}),n.d(e,!1,function(){return Gs}),n.d(e,!1,function(){return tc}),n.d(e,!1,function(){return hc}),n.d(e,!1,function(){return fc}),n.d(e,!1,function(){return _c}),n.d(e,!1,function(){return gc}),n.d(e,!1,function(){return Fc}),n.d(e,!1,function(){return Ec}),n.d(e,!1,function(){return Bc}),n.d(e,!1,function(){return Hc}),n.d(e,!1,function(){return Wc}),n.d(e,!1,function(){return Rc}),n.d(e,!1,function(){return qh}),n.d(e,!1,function(){return hf}),n.d(e,!1,function(){return ff}),n.d(e,!1,function(){return gf}),n.d(e,!1,function(){return mf}),n.d(e,!1,function(){return yf}),n.d(e,!1,function(){return bf}),n.d(e,!1,function(){return Cf}),n.d(e,!1,function(){return Sf}),n.d(e,!1,function(){return cf}),n.d(e,!1,function(){return sf}),n.d(e,!1,function(){return Of}),n.d(e,!1,function(){return jf}),n.d(e,!1,function(){return Rf}),n.d(e,!1,function(){return kf}),n.d(e,!1,function(){return Tf}),n.d(e,!1,function(){return Ef}),n.d(e,!1,function(){return If}),n.d(e,!1,function(){return lf}),n.d(e,!1,function(){return af}),n.d(e,!1,function(){return _f}),n.d(e,!1,function(){return vf}),n.d(e,!1,function(){return Mf}),n.d(e,!1,function(){return Af}),n.d(e,!1,function(){return Nf}),n.d(e,!1,function(){return Df}),n.d(e,!1,function(){return Ff}),n.d(e,!1,function(){return Lf}),n.d(e,!1,function(){return Vf}),n.d(e,!1,function(){return zf}),n.d(e,!1,function(){return Xs}),n.d(e,!1,function(){return Pu}),n.d(e,!1,function(){return Qh}),n.d(e,!1,function(){return Uf}),n.d(e,!1,function(){return Qf}),n.d(e,!1,function(){return gd}),n.d(e,!1,function(){return hd}),n.d(e,!1,function(){return $f}),n.d(e,!1,function(){return xd}),n.d(e,!1,function(){return Od}),n.d(e,!1,function(){return Dd}),n.d(e,!1,function(){return Vd}),n.d(e,!1,function(){return Bd}),n.d(e,!1,function(){return wd}),n.d(e,!1,function(){return Nd}),n.d(e,!1,function(){return Hd}),n.d(e,!1,function(){return zd}),n.d(e,!1,function(){return Gd}),n.d(e,!1,function(){return Kn}),n.d(e,!1,function(){return Gn}),n.d(e,!1,function(){return En}),n.d(e,!1,function(){return Tn}),n.d(e,!1,function(){return Un}),n.d(e,!1,function(){return qn}),n.d(e,!1,function(){return Qn}),n.d(e,!1,function(){return Xn}),n.d(e,!1,function(){return Zn}),n.d(e,!1,function(){return nr}),n.d(e,!1,function(){return rr}),n.d(e,!1,function(){return lr}),n.d(e,!1,function(){return Dn}),n.d(e,!1,function(){return Bn}),n.d(e,!1,function(){return Hn}),n.d(e,!1,function(){return ur}),n.d(e,!1,function(){return sr}),n.d(e,!1,function(){return cr}),n.d(e,!1,function(){return fr}),n.d(e,!1,function(){return dr}),n.d(e,!1,function(){return mr}),n.d(e,!1,function(){return gr}),n.d(e,!1,function(){return br}),n.d(e,!1,function(){return _r}),n.d(e,!1,function(){return Vo}),n.d(e,!1,function(){return Ud}),n.d(e,!1,function(){return qd}),n.d(e,!1,function(){return Zd}),n.d(e,!1,function(){return Kd}),n.d(e,!1,function(){return Xd}),n.d(e,!1,function(){return ca}),n.d(e,!1,function(){return Jd}),n.d(e,!1,function(){return tp}),n.d(e,!1,function(){return ep}),n.d(e,!1,function(){return rp}),n.d(e,!1,function(){return np}),n.d(e,!1,function(){return ip}),n.d(e,!1,function(){return cp}),n.d(e,!1,function(){return hp}),n.d(e,!1,function(){return Sp}),n.d(e,!1,function(){return xp}),n.d(e,!1,function(){return Pp}),n.d(e,!1,function(){return sp}),n.d(e,!1,function(){return up}),n.d(e,!1,function(){return Ap}),n.d(e,!1,function(){return Mp}),n.d(e,!1,function(){return Dp}),n.d(e,!1,function(){return Np}),n.d(e,!1,function(){return Lp}),n.d(e,!1,function(){return Ab}),n.d(e,!1,function(){return Mb}),n.d(e,!1,function(){return Db}),n.d(e,!1,function(){return Nb}),n.d(e,!1,function(){return Fb}),n.d(e,!1,function(){return zb}),n.d(e,!1,function(){return Vb}),n.d(e,!1,function(){return Bb}),n.d(e,!1,function(){return Hb}),n.d(e,!1,function(){return Gb}),n.d(e,!1,function(){return Ub}),n.d(e,!1,function(){return qb}),n.d(e,!1,function(){return Qb}),n.d(e,!1,function(){return Zb}),n.d(e,!1,function(){return Yb}),n.d(e,!1,function(){return Xb}),n.d(e,!1,function(){return Kb}),n.d(e,!1,function(){return Jb}),n.d(e,!1,function(){return $b}),n.d(e,!1,function(){return ey}),n.d(e,!1,function(){return ty}),n.d(e,!1,function(){return ry}),n.d(e,!1,function(){return ny}),n.d(e,!1,function(){return oy}),n.d(e,!1,function(){return iy}),n.d(e,!1,function(){return ay}),n.d(e,!1,function(){return ly}),n.d(e,!1,function(){return sy}),n.d(e,!1,function(){return uy}),n.d(e,!1,function(){return hy}),n.d(e,!1,function(){return cy}),n.d(e,!1,function(){return dy}),n.d(e,!1,function(){return fy}),n.d(e,!1,function(){return my}),n.d(e,!1,function(){return py}),n.d(e,!1,function(){return by}),n.d(e,!1,function(){return gy}),n.d(e,!1,function(){return vy}),n.d(e,!1,function(){return yy}),n.d(e,!1,function(){return wy}),n.d(e,!1,function(){return _y}),n.d(e,!1,function(){return Sy}),n.d(e,!1,function(){return xy}),n.d(e,!1,function(){return ky}),n.d(e,!1,function(){return Cy}),n.d(e,!1,function(){return jy}),n.d(e,!1,function(){return Ry}),n.d(e,!1,function(){return Ey}),n.d(e,!1,function(){return Oy}),n.d(e,!1,function(){return Py}),n.d(e,!1,function(){return Ty}),n.d(e,!1,function(){return Ay}),n.d(e,!1,function(){return Iy}),n.d(e,!1,function(){return Dy}),n.d(e,!1,function(){return My}),n.d(e,!1,function(){return Ly}),n.d(e,!1,function(){return Ny}),n.d(e,!1,function(){return zy}),n.d(e,!1,function(){return Fy}),n.d(e,!1,function(){return By}),n.d(e,!1,function(){return Vy}),n.d(e,!1,function(){return Gy}),n.d(e,!1,function(){return Hy}),n.d(e,!1,function(){return qy}),n.d(e,!1,function(){return Uy}),n.d(e,!1,function(){return Wy}),n.d(e,!1,function(){return Qy}),n.d(e,!1,function(){return Yy}),n.d(e,!1,function(){return $y}),n.d(e,!1,function(){return Zy}),n.d(e,!1,function(){return Ky}),n.d(e,!1,function(){return nv}),n.d(e,!1,function(){return iv}),n.d(e,!1,function(){return ov}),n.d(e,!1,function(){return lv}),n.d(e,!1,function(){return av}),n.d(e,!1,function(){return oe}),n.d(e,!1,function(){return gt}),n.d(e,!1,function(){return ae}),n.d(e,!1,function(){return Ct}),n.d(e,!1,function(){return he}),n.d(e,!1,function(){return mt}),n.d(e,!1,function(){return pt}),n.d(e,!1,function(){return ce}),n.d(e,"a",function(){return ie}),n.d(e,!1,function(){return fe}),n.d(e,!1,function(){return re}),n.d(e,!1,function(){return yt}),n.d(e,!1,function(){return _t}),n.d(e,!1,function(){return It}),n.d(e,!1,function(){return de}),n.d(e,!1,function(){return pe}),n.d(e,!1,function(){return Pt}),n.d(e,!1,function(){return Wt}),n.d(e,!1,function(){return $t}),n.d(e,!1,function(){return jv}),n.d(e,!1,function(){return Av}),n.d(e,!1,function(){return Iv}),n.d(e,!1,function(){return Nv}),n.d(e,!1,function(){return Hv}),n.d(e,!1,function(){return Hv}),n.d(e,!1,function(){return Bv}),n.d(e,!1,function(){return Bv}),n.d(e,!1,function(){return Gv}),n.d(e,!1,function(){return Xv}),n.d(e,!1,function(){return $v}),n.d(e,!1,function(){return Jv}),n.d(e,!1,function(){return b_}),n.d(e,!1,function(){return g_}),n.d(e,!1,function(){return t_}),n.d(e,!1,function(){return e_}),n.d(e,!1,function(){return i_}),n.d(e,!1,function(){return s_}),n.d(e,!1,function(){return u_}),n.d(e,!1,function(){return h_}),n.d(e,!1,function(){return m_}),n.d(e,!1,function(){return S_}),n.d(e,!1,function(){return k_}),n.d(e,!1,function(){return w_}),n.d(e,!1,function(){return j_}),n.d(e,!1,function(){return I_}),n.d(e,!1,function(){return M_}),n.d(e,!1,function(){return T_}),n.d(e,!1,function(){return z_}),n.d(e,!1,function(){return B_}),n.d(e,!1,function(){return L_}),n.d(e,!1,function(){return G_}),n.d(e,!1,function(){return Ev}),n.d(e,!1,function(){return X_}),n.d(e,!1,function(){return $_}),n.d(e,!1,function(){return ew}),n.d(e,!1,function(){return rw}),n.d(e,!1,function(){return ow}),n.d(e,!1,function(){return iw}),n.d(e,!1,function(){return sw}),n.d(e,!1,function(){return cw}),n.d(e,!1,function(){return hw}),n.d(e,!1,function(){return lw}),n.d(e,!1,function(){return fw}),n.d(e,!1,function(){return dw}),n.d(e,!1,function(){return pw}),n.d(e,!1,function(){return gw}),n.d(e,!1,function(){return bw}),n.d(e,!1,function(){return aw}),n.d(e,!1,function(){return yw}),n.d(e,!1,function(){return Vp}),n.d(e,!1,function(){return Hp}),n.d(e,!1,function(){return Gp}),n.d(e,!1,function(){return Hp}),n.d(e,!1,function(){return Gp}),n.d(e,!1,function(){return Wp}),n.d(e,!1,function(){return Yp}),n.d(e,!1,function(){return Wp}),n.d(e,!1,function(){return Yp}),n.d(e,!1,function(){return Kp}),n.d(e,!1,function(){return Xp}),n.d(e,!1,function(){return Jp}),n.d(e,!1,function(){return tm}),n.d(e,!1,function(){return nm}),n.d(e,!1,function(){return rm}),n.d(e,!1,function(){return om}),n.d(e,!1,function(){return fm}),n.d(e,!1,function(){return om}),n.d(e,!1,function(){return fm}),n.d(e,!1,function(){return lm}),n.d(e,!1,function(){return dm}),n.d(e,!1,function(){return am}),n.d(e,!1,function(){return pm}),n.d(e,!1,function(){return um}),n.d(e,!1,function(){return mm}),n.d(e,!1,function(){return sm}),n.d(e,!1,function(){return gm}),n.d(e,!1,function(){return cm}),n.d(e,!1,function(){return bm}),n.d(e,!1,function(){return hm}),n.d(e,!1,function(){return ym}),n.d(e,!1,function(){return _m}),n.d(e,!1,function(){return wm}),n.d(e,!1,function(){return Sm}),n.d(e,!1,function(){return Cm}),n.d(e,!1,function(){return Rm}),n.d(e,!1,function(){return jm}),n.d(e,!1,function(){return Em}),n.d(e,!1,function(){return Tm}),n.d(e,!1,function(){return Im}),n.d(e,!1,function(){return Am}),n.d(e,!1,function(){return Dm}),n.d(e,!1,function(){return Hm}),n.d(e,!1,function(){return Dm}),n.d(e,!1,function(){return Hm}),n.d(e,!1,function(){return Nm}),n.d(e,!1,function(){return Gm}),n.d(e,!1,function(){return Lm}),n.d(e,!1,function(){return Um}),n.d(e,!1,function(){return Fm}),n.d(e,!1,function(){return qm}),n.d(e,!1,function(){return zm}),n.d(e,!1,function(){return Qm}),n.d(e,!1,function(){return Vm}),n.d(e,!1,function(){return Wm}),n.d(e,!1,function(){return Bm}),n.d(e,!1,function(){return Ym}),n.d(e,!1,function(){return Km}),n.d(e,!1,function(){return Xm}),n.d(e,!1,function(){return Jm}),n.d(e,!1,function(){return tg}),n.d(e,!1,function(){return _b}),n.d(e,!1,function(){return lg}),n.d(e,!1,function(){return ag}),n.d(e,!1,function(){return ug}),n.d(e,!1,function(){return sg}),n.d(e,!1,function(){return ig}),n.d(e,!1,function(){return wb}),n.d(e,!1,function(){return xb}),n.d(e,!1,function(){return Tr}),n.d(e,!1,function(){return Ar}),n.d(e,!1,function(){return Mr}),n.d(e,!1,function(){return Fr}),n.d(e,!1,function(){return zr}),n.d(e,!1,function(){return oi}),n.d(e,!1,function(){return $i}),n.d(e,!1,function(){return Jr}),n.d(e,!1,function(){return ex}),n.d(e,!1,function(){return px}),n.d(e,!1,function(){return ox}),n.d(e,!1,function(){return ix})},W0Ae:function(t,e,n){"use strict";n.d(e,"a",function(){return u});var r=n("mrSG"),i=n("isby"),o=n("IUTb"),l=n("MGBS"),a=n("zotm");function u(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];if(1===t.length){if(!Object(i.a)(t[0]))return t[0];t=t[0]}return Object(o.a)(t,void 0).lift(new s)}var s=function(){function t(){}return t.prototype.call=function(t,e){return e.subscribe(new c(t))},t}(),c=function(t){function e(e){var n=t.call(this,e)||this;return n.hasFirst=!1,n.observables=[],n.subscriptions=[],n}return r.b(e,t),e.prototype._next=function(t){this.observables.push(t)},e.prototype._complete=function(){var t=this.observables,e=t.length;if(0===e)this.destination.complete();else{for(var n=0;n<e&&!this.hasFirst;n++){var r=t[n],i=Object(a.a)(this,r,r,n);this.subscriptions&&this.subscriptions.push(i),this.add(i)}this.observables=null}},e.prototype.notifyNext=function(t,e,n,r,i){if(!this.hasFirst){this.hasFirst=!0;for(var o=0;o<this.subscriptions.length;o++)if(o!==n){var l=this.subscriptions[o];l.unsubscribe(),this.remove(l)}this.subscriptions=null}this.destination.next(e)},e}(l.a)},Wf4p:function(t,e,n){"use strict";n.d(e,"a",function(){return s}),n.d(e,"b",function(){return c}),n.d(e,"l",function(){return f}),n.d(e,"e",function(){return h}),n.d(e,"E",function(){return d}),n.d(e,"C",function(){return p}),n.d(e,"D",function(){return m}),n.d(e,"G",function(){return g}),n.d(e,"F",function(){return b}),n.d(e,"y",function(){return E}),n.d(e,"p",function(){return T}),n.d(e,"g",function(){return y}),n.d(e,"c",function(){return v}),n.d(e,"f",function(){return _}),n.d(e,"x",function(){return j}),n.d(e,"i",function(){return O}),n.d(e,"d",function(){return P}),n.d(e,"m",function(){return I}),n.d(e,"o",function(){return A}),n.d(e,"n",function(){return M}),n.d(e,"s",function(){return $}),n.d(e,"j",function(){return Y}),n.d(e,"r",function(){return Z}),n.d(e,"A",function(){return K}),n.d(e,"B",function(){return X}),n.d(e,"q",function(){return Q}),n.d(e,"h",function(){return J}),n.d(e,"w",function(){return H}),n.d(e,"k",function(){return V}),n.d(e,"v",function(){return B}),n.d(e,"z",function(){return z}),n.d(e,"u",function(){return U}),n.d(e,"t",function(){return G});var r=n("CcnG"),i=n("mrSG"),o=n("n6gG"),l=n("K9Ia"),a=(n("6blF"),n("dWZg")),u=(n("ZYjt"),n("YSh2")),s=function(){function t(){}return t.STANDARD_CURVE="cubic-bezier(0.4,0.0,0.2,1)",t.DECELERATION_CURVE="cubic-bezier(0.0,0.0,0.2,1)",t.ACCELERATION_CURVE="cubic-bezier(0.4,0.0,1,1)",t.SHARP_CURVE="cubic-bezier(0.4,0.0,0.6,1)",t}(),c=function(){function t(){}return t.COMPLEX="375ms",t.ENTERING="225ms",t.EXITING="195ms",t}(),h=new r.q("mat-sanity-checks",{providedIn:"root",factory:function(){return!0}}),f=function(){function t(t){this._sanityChecksEnabled=t,this._hasDoneGlobalChecks=!1,this._hasCheckedHammer=!1,this._document="object"==typeof document&&document?document:null,this._window="object"==typeof window&&window?window:null,this._areChecksEnabled()&&!this._hasDoneGlobalChecks&&(this._checkDoctypeIsDefined(),this._checkThemeIsPresent(),this._hasDoneGlobalChecks=!0)}return t.prototype._areChecksEnabled=function(){return this._sanityChecksEnabled&&Object(r.Z)()&&!this._isTestEnv()},t.prototype._isTestEnv=function(){return this._window&&(this._window.__karma__||this._window.jasmine)},t.prototype._checkDoctypeIsDefined=function(){this._document&&!this._document.doctype&&console.warn("Current document does not have a doctype. This may cause some Angular Material components not to behave as expected.")},t.prototype._checkThemeIsPresent=function(){if(this._document&&this._document.body&&"function"==typeof getComputedStyle){var t=this._document.createElement("div");t.classList.add("mat-theme-loaded-marker"),this._document.body.appendChild(t);var e=getComputedStyle(t);e&&"none"!==e.display&&console.warn("Could not find Angular Material core theme. Most Material components may not work as expected. For more info refer to the theming guide: https://material.angular.io/guide/theming"),this._document.body.removeChild(t)}},t.prototype._checkHammerIsAvailable=function(){!this._hasCheckedHammer&&this._window&&(this._areChecksEnabled()&&!this._window.Hammer&&console.warn("Could not find HammerJS. Certain Angular Material components may not work correctly."),this._hasCheckedHammer=!0)},t}();function d(t){return function(t){function e(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];var r=t.apply(this,e)||this;return r._disabled=!1,r}return Object(i.b)(e,t),Object.defineProperty(e.prototype,"disabled",{get:function(){return this._disabled},set:function(t){this._disabled=Object(o.c)(t)},enumerable:!0,configurable:!0}),e}(t)}function p(t,e){return function(t){function n(){for(var n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];var i=t.apply(this,n)||this;return i.color=e,i}return Object(i.b)(n,t),Object.defineProperty(n.prototype,"color",{get:function(){return this._color},set:function(t){var n=t||e;n!==this._color&&(this._color&&this._elementRef.nativeElement.classList.remove("mat-"+this._color),n&&this._elementRef.nativeElement.classList.add("mat-"+n),this._color=n)},enumerable:!0,configurable:!0}),n}(t)}function m(t){return function(t){function e(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];var r=t.apply(this,e)||this;return r._disableRipple=!1,r}return Object(i.b)(e,t),Object.defineProperty(e.prototype,"disableRipple",{get:function(){return this._disableRipple},set:function(t){this._disableRipple=Object(o.c)(t)},enumerable:!0,configurable:!0}),e}(t)}function g(t,e){return void 0===e&&(e=0),function(t){function n(){for(var n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];var i=t.apply(this,n)||this;return i._tabIndex=e,i}return Object(i.b)(n,t),Object.defineProperty(n.prototype,"tabIndex",{get:function(){return this.disabled?-1:this._tabIndex},set:function(t){this._tabIndex=null!=t?t:e},enumerable:!0,configurable:!0}),n}(t)}function b(t){return function(t){function e(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];var r=t.apply(this,e)||this;return r.errorState=!1,r.stateChanges=new l.a,r}return Object(i.b)(e,t),e.prototype.updateErrorState=function(){var t=this.errorState,e=(this.errorStateMatcher||this._defaultErrorStateMatcher).isErrorState(this.ngControl?this.ngControl.control:null,this._parentFormGroup||this._parentForm);e!==t&&(this.errorState=e,this.stateChanges.next())},e}(t)}var y=new r.q("MAT_DATE_LOCALE",{providedIn:"root",factory:function(){return Object(r.Y)(r.u)}}),v=function(){function t(){this._localeChanges=new l.a}return Object.defineProperty(t.prototype,"localeChanges",{get:function(){return this._localeChanges},enumerable:!0,configurable:!0}),t.prototype.deserialize=function(t){return null==t||this.isDateInstance(t)&&this.isValid(t)?t:this.invalid()},t.prototype.setLocale=function(t){this.locale=t,this._localeChanges.next()},t.prototype.compareDate=function(t,e){return this.getYear(t)-this.getYear(e)||this.getMonth(t)-this.getMonth(e)||this.getDate(t)-this.getDate(e)},t.prototype.sameDate=function(t,e){if(t&&e){var n=this.isValid(t),r=this.isValid(e);return n&&r?!this.compareDate(t,e):n==r}return t==e},t.prototype.clampDate=function(t,e,n){return e&&this.compareDate(t,e)<0?e:n&&this.compareDate(t,n)>0?n:t},t}(),_=new r.q("mat-date-formats"),w="undefined"!=typeof Intl,x={long:["January","February","March","April","May","June","July","August","September","October","November","December"],short:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],narrow:["J","F","M","A","M","J","J","A","S","O","N","D"]},S=R(31,function(t){return String(t+1)}),C={long:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],short:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],narrow:["S","M","T","W","T","F","S"]},k=/^\d{4}-\d{2}-\d{2}(?:T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|(?:(?:\+|-)\d{2}:\d{2}))?)?$/;function R(t,e){for(var n=Array(t),r=0;r<t;r++)n[r]=e(r);return n}var j=function(t){function e(e,n){var r=t.call(this)||this;return r.useUtcForDisplay=!0,t.prototype.setLocale.call(r,e),r.useUtcForDisplay=!n.TRIDENT,r._clampDate=n.TRIDENT||n.EDGE,r}return Object(i.b)(e,t),e.prototype.getYear=function(t){return t.getFullYear()},e.prototype.getMonth=function(t){return t.getMonth()},e.prototype.getDate=function(t){return t.getDate()},e.prototype.getDayOfWeek=function(t){return t.getDay()},e.prototype.getMonthNames=function(t){var e=this;if(w){var n=new Intl.DateTimeFormat(this.locale,{month:t,timeZone:"utc"});return R(12,function(t){return e._stripDirectionalityCharacters(e._format(n,new Date(2017,t,1)))})}return x[t]},e.prototype.getDateNames=function(){var t=this;if(w){var e=new Intl.DateTimeFormat(this.locale,{day:"numeric",timeZone:"utc"});return R(31,function(n){return t._stripDirectionalityCharacters(t._format(e,new Date(2017,0,n+1)))})}return S},e.prototype.getDayOfWeekNames=function(t){var e=this;if(w){var n=new Intl.DateTimeFormat(this.locale,{weekday:t,timeZone:"utc"});return R(7,function(t){return e._stripDirectionalityCharacters(e._format(n,new Date(2017,0,t+1)))})}return C[t]},e.prototype.getYearName=function(t){if(w){var e=new Intl.DateTimeFormat(this.locale,{year:"numeric",timeZone:"utc"});return this._stripDirectionalityCharacters(this._format(e,t))}return String(this.getYear(t))},e.prototype.getFirstDayOfWeek=function(){return 0},e.prototype.getNumDaysInMonth=function(t){return this.getDate(this._createDateWithOverflow(this.getYear(t),this.getMonth(t)+1,0))},e.prototype.clone=function(t){return this.createDate(this.getYear(t),this.getMonth(t),this.getDate(t))},e.prototype.createDate=function(t,e,n){if(e<0||e>11)throw Error('Invalid month index "'+e+'". Month index has to be between 0 and 11.');if(n<1)throw Error('Invalid date "'+n+'". Date has to be greater than 0.');var r=this._createDateWithOverflow(t,e,n);if(r.getMonth()!=e)throw Error('Invalid date "'+n+'" for month with index "'+e+'".');return r},e.prototype.today=function(){return new Date},e.prototype.parse=function(t){return"number"==typeof t?new Date(t):t?new Date(Date.parse(t)):null},e.prototype.format=function(t,e){if(!this.isValid(t))throw Error("NativeDateAdapter: Cannot format invalid date.");if(w){this._clampDate&&(t.getFullYear()<1||t.getFullYear()>9999)&&(t=this.clone(t)).setFullYear(Math.max(1,Math.min(9999,t.getFullYear()))),e=Object(i.a)({},e,{timeZone:"utc"});var n=new Intl.DateTimeFormat(this.locale,e);return this._stripDirectionalityCharacters(this._format(n,t))}return this._stripDirectionalityCharacters(t.toDateString())},e.prototype.addCalendarYears=function(t,e){return this.addCalendarMonths(t,12*e)},e.prototype.addCalendarMonths=function(t,e){var n=this._createDateWithOverflow(this.getYear(t),this.getMonth(t)+e,this.getDate(t));return this.getMonth(n)!=((this.getMonth(t)+e)%12+12)%12&&(n=this._createDateWithOverflow(this.getYear(n),this.getMonth(n),0)),n},e.prototype.addCalendarDays=function(t,e){return this._createDateWithOverflow(this.getYear(t),this.getMonth(t),this.getDate(t)+e)},e.prototype.toIso8601=function(t){return[t.getUTCFullYear(),this._2digit(t.getUTCMonth()+1),this._2digit(t.getUTCDate())].join("-")},e.prototype.deserialize=function(e){if("string"==typeof e){if(!e)return null;if(k.test(e)){var n=new Date(e);if(this.isValid(n))return n}}return t.prototype.deserialize.call(this,e)},e.prototype.isDateInstance=function(t){return t instanceof Date},e.prototype.isValid=function(t){return!isNaN(t.getTime())},e.prototype.invalid=function(){return new Date(NaN)},e.prototype._createDateWithOverflow=function(t,e,n){var r=new Date(t,e,n);return t>=0&&t<100&&r.setFullYear(this.getYear(r)-1900),r},e.prototype._2digit=function(t){return("00"+t).slice(-2)},e.prototype._stripDirectionalityCharacters=function(t){return t.replace(/[\u200e\u200f]/g,"")},e.prototype._format=function(t,e){var n=new Date(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()));return t.format(n)},e}(v),O={parse:{dateInput:null},display:{dateInput:{year:"numeric",month:"numeric",day:"numeric"},monthYearLabel:{year:"numeric",month:"short"},dateA11yLabel:{year:"numeric",month:"long",day:"numeric"},monthYearA11yLabel:{year:"numeric",month:"long"}}},E=function(){},T=function(){},P=function(){function t(){}return t.prototype.isErrorState=function(t,e){return!!(t&&t.invalid&&(t.touched||e&&e.submitted))},t.ngInjectableDef=Object(r.U)({factory:function(){return new t},token:t,providedIn:"root"}),t}(),I=function(){},A=function(){function t(t,e){var n=this;this._lines=t,this._element=e,this._setLineClass(this._lines.length),this._lines.changes.subscribe(function(){n._setLineClass(n._lines.length)})}return t.prototype._setLineClass=function(t){this._resetClasses(),2===t||3===t?this._setClass("mat-"+t+"-line",!0):t>3&&this._setClass("mat-multi-line",!0)},t.prototype._resetClasses=function(){this._setClass("mat-2-line",!1),this._setClass("mat-3-line",!1),this._setClass("mat-multi-line",!1)},t.prototype._setClass=function(t,e){e?this._element.nativeElement.classList.add(t):this._element.nativeElement.classList.remove(t)},t}(),M=function(){},D=function(){var t={FADING_IN:0,VISIBLE:1,FADING_OUT:2,HIDDEN:3};return t[t.FADING_IN]="FADING_IN",t[t.VISIBLE]="VISIBLE",t[t.FADING_OUT]="FADING_OUT",t[t.HIDDEN]="HIDDEN",t}(),N=function(){function t(t,e,n){this._renderer=t,this.element=e,this.config=n,this.state=D.HIDDEN}return t.prototype.fadeOut=function(){this._renderer.fadeOutRipple(this)},t}(),L={enterDuration:450,exitDuration:400},F=800,z=function(){function t(t,e,n,r){var i=this;this._target=t,this._ngZone=e,this._isPointerDown=!1,this._triggerEvents=new Map,this._activeRipples=new Set,this._eventOptions=!!Object(a.d)()&&{passive:!0},this.onMousedown=function(t){var e=i._lastTouchStartEvent&&Date.now()<i._lastTouchStartEvent+F;i._target.rippleDisabled||e||(i._isPointerDown=!0,i.fadeInRipple(t.clientX,t.clientY,i._target.rippleConfig))},this.onTouchStart=function(t){i._target.rippleDisabled||(i._lastTouchStartEvent=Date.now(),i._isPointerDown=!0,i.fadeInRipple(t.touches[0].clientX,t.touches[0].clientY,i._target.rippleConfig))},this.onPointerUp=function(){i._isPointerDown&&(i._isPointerDown=!1,i._activeRipples.forEach(function(t){!t.config.persistent&&(t.state===D.VISIBLE||t.config.terminateOnPointerUp&&t.state===D.FADING_IN)&&t.fadeOut()}))},r.isBrowser&&(this._containerElement=n.nativeElement,this._triggerEvents.set("mousedown",this.onMousedown),this._triggerEvents.set("mouseup",this.onPointerUp),this._triggerEvents.set("mouseleave",this.onPointerUp),this._triggerEvents.set("touchstart",this.onTouchStart),this._triggerEvents.set("touchend",this.onPointerUp))}return t.prototype.fadeInRipple=function(t,e,n){var r=this;void 0===n&&(n={});var o=this._containerRect=this._containerRect||this._containerElement.getBoundingClientRect(),l=Object(i.a)({},L,n.animation);n.centered&&(t=o.left+o.width/2,e=o.top+o.height/2);var a=n.radius||function(t,e,n){var r=Math.max(Math.abs(t-n.left),Math.abs(t-n.right)),i=Math.max(Math.abs(e-n.top),Math.abs(e-n.bottom));return Math.sqrt(r*r+i*i)}(t,e,o),u=t-o.left,s=e-o.top,c=l.enterDuration/(n.speedFactor||1),h=document.createElement("div");h.classList.add("mat-ripple-element"),h.style.left=u-a+"px",h.style.top=s-a+"px",h.style.height=2*a+"px",h.style.width=2*a+"px",h.style.backgroundColor=n.color||null,h.style.transitionDuration=c+"ms",this._containerElement.appendChild(h),window.getComputedStyle(h).getPropertyValue("opacity"),h.style.transform="scale(1)";var f=new N(this,h,n);return f.state=D.FADING_IN,this._activeRipples.add(f),n.persistent||(this._mostRecentTransientRipple=f),this.runTimeoutOutsideZone(function(){var t=f===r._mostRecentTransientRipple;f.state=D.VISIBLE,n.persistent||t&&r._isPointerDown||f.fadeOut()},c),f},t.prototype.fadeOutRipple=function(t){var e=this._activeRipples.delete(t);if(t===this._mostRecentTransientRipple&&(this._mostRecentTransientRipple=null),this._activeRipples.size||(this._containerRect=null),e){var n=t.element,r=Object(i.a)({},L,t.config.animation);n.style.transitionDuration=r.exitDuration+"ms",n.style.opacity="0",t.state=D.FADING_OUT,this.runTimeoutOutsideZone(function(){t.state=D.HIDDEN,n.parentNode.removeChild(n)},r.exitDuration)}},t.prototype.fadeOutAll=function(){this._activeRipples.forEach(function(t){return t.fadeOut()})},t.prototype.setupTriggerEvents=function(t){var e=this;t&&t!==this._triggerElement&&(this._removeTriggerEvents(),this._ngZone.runOutsideAngular(function(){e._triggerEvents.forEach(function(n,r){return t.addEventListener(r,n,e._eventOptions)})}),this._triggerElement=t)},t.prototype.runTimeoutOutsideZone=function(t,e){void 0===e&&(e=0),this._ngZone.runOutsideAngular(function(){return setTimeout(t,e)})},t.prototype._removeTriggerEvents=function(){var t=this;this._triggerElement&&this._triggerEvents.forEach(function(e,n){t._triggerElement.removeEventListener(n,e,t._eventOptions)})},t}(),V=new r.q("mat-ripple-global-options"),B=function(){function t(t,e,n,r,i){this._elementRef=t,this.radius=0,this.speedFactor=1,this._disabled=!1,this._isInitialized=!1,this._globalOptions=r||{},this._rippleRenderer=new z(this,e,t,n),"NoopAnimations"===i&&(this._globalOptions.animation={enterDuration:0,exitDuration:0})}return Object.defineProperty(t.prototype,"disabled",{get:function(){return this._disabled},set:function(t){this._disabled=t,this._setupTriggerEventsIfEnabled()},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"trigger",{get:function(){return this._trigger||this._elementRef.nativeElement},set:function(t){this._trigger=t,this._setupTriggerEventsIfEnabled()},enumerable:!0,configurable:!0}),t.prototype.ngOnInit=function(){this._isInitialized=!0,this._setupTriggerEventsIfEnabled()},t.prototype.ngOnDestroy=function(){this._rippleRenderer._removeTriggerEvents()},t.prototype.fadeOutAll=function(){this._rippleRenderer.fadeOutAll()},Object.defineProperty(t.prototype,"rippleConfig",{get:function(){return{centered:this.centered,radius:this.radius,color:this.color,animation:Object(i.a)({},this._globalOptions.animation,this.animation),terminateOnPointerUp:this._globalOptions.terminateOnPointerUp,speedFactor:this.speedFactor*(this._globalOptions.baseSpeedFactor||1)}},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"rippleDisabled",{get:function(){return this.disabled||!!this._globalOptions.disabled},enumerable:!0,configurable:!0}),t.prototype._setupTriggerEventsIfEnabled=function(){!this.disabled&&this._isInitialized&&this._rippleRenderer.setupTriggerEvents(this.trigger)},t.prototype.launch=function(t,e,n){return void 0===e&&(e=0),"number"==typeof t?this._rippleRenderer.fadeInRipple(t,e,Object(i.a)({},this.rippleConfig,n)):this._rippleRenderer.fadeInRipple(0,0,Object(i.a)({},this.rippleConfig,t))},t}(),H=function(){},G=function(t){this._animationMode=t,this.state="unchecked",this.disabled=!1},U=function(){},q=0,Q=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._labelId="mat-optgroup-label-"+q++,e}return Object(i.b)(e,t),e}(d(function(){})),W=0,Y=new r.q("MAT_OPTION_PARENT_COMPONENT"),Z=function(){function t(t,e,n,i){this._element=t,this._changeDetectorRef=e,this._parent=n,this.group=i,this._selected=!1,this._active=!1,this._disabled=!1,this._id="mat-option-"+W++,this._mostRecentViewValue="",this.onSelectionChange=new r.n,this._stateChanges=new l.a}return Object.defineProperty(t.prototype,"multiple",{get:function(){return this._parent&&this._parent.multiple},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"id",{get:function(){return this._id},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"selected",{get:function(){return this._selected},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"disabled",{get:function(){return this.group&&this.group.disabled||this._disabled},set:function(t){this._disabled=Object(o.c)(t)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"disableRipple",{get:function(){return this._parent&&this._parent.disableRipple},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"active",{get:function(){return this._active},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"viewValue",{get:function(){return(this._getHostElement().textContent||"").trim()},enumerable:!0,configurable:!0}),t.prototype.select=function(){this._selected||(this._selected=!0,this._changeDetectorRef.markForCheck(),this._emitSelectionChangeEvent())},t.prototype.deselect=function(){this._selected&&(this._selected=!1,this._changeDetectorRef.markForCheck(),this._emitSelectionChangeEvent())},t.prototype.focus=function(){var t=this._getHostElement();"function"==typeof t.focus&&t.focus()},t.prototype.setActiveStyles=function(){this._active||(this._active=!0,this._changeDetectorRef.markForCheck())},t.prototype.setInactiveStyles=function(){this._active&&(this._active=!1,this._changeDetectorRef.markForCheck())},t.prototype.getLabel=function(){return this.viewValue},t.prototype._handleKeydown=function(t){t.keyCode!==u.f&&t.keyCode!==u.l||(this._selectViaInteraction(),t.preventDefault())},t.prototype._selectViaInteraction=function(){this.disabled||(this._selected=!this.multiple||!this._selected,this._changeDetectorRef.markForCheck(),this._emitSelectionChangeEvent(!0))},t.prototype._getTabIndex=function(){return this.disabled?"-1":"0"},t.prototype._getHostElement=function(){return this._element.nativeElement},t.prototype.ngAfterViewChecked=function(){if(this._selected){var t=this.viewValue;t!==this._mostRecentViewValue&&(this._mostRecentViewValue=t,this._stateChanges.next())}},t.prototype.ngOnDestroy=function(){this._stateChanges.complete()},t.prototype._emitSelectionChangeEvent=function(t){void 0===t&&(t=!1),this.onSelectionChange.emit(new function(t,e){void 0===e&&(e=!1),this.source=t,this.isUserInput=e}(this,t))},t}();function K(t,e,n){if(n.length){for(var r=e.toArray(),i=n.toArray(),o=0,l=0;l<t+1;l++)r[l].group&&r[l].group===i[o]&&o++;return o}return 0}function X(t,e,n,r){var i=t*e;return i<n?i:i+e>n+r?Math.max(0,i-r+e):n}var $=function(){},J=new r.q("mat-label-global-options")},XlPw:function(t,e,n){"use strict";n.d(e,"a",function(){return i});var r=n("6blF");function i(t,e){return new r.a(e?function(n){return e.schedule(o,0,{error:t,subscriber:n})}:function(e){return e.error(t)})}function o(t){t.subscriber.error(t.error)}},YSh2:function(t,e,n){"use strict";n.d(e,"b",function(){return r}),n.d(e,"m",function(){return i}),n.d(e,"f",function(){return o}),n.d(e,"g",function(){return l}),n.d(e,"l",function(){return a}),n.d(e,"e",function(){return u}),n.d(e,"h",function(){return s}),n.d(e,"i",function(){return c}),n.d(e,"n",function(){return h}),n.d(e,"k",function(){return f}),n.d(e,"d",function(){return d}),n.d(e,"c",function(){return p}),n.d(e,"p",function(){return m}),n.d(e,"j",function(){return g}),n.d(e,"a",function(){return b}),n.d(e,"o",function(){return y});var r=8,i=9,o=13,l=27,a=32,u=35,s=36,c=37,h=38,f=39,d=40,p=46,m=48,g=57,b=65,y=90},YhbO:function(t,e,n){"use strict";n.d(e,"b",function(){return c}),n.d(e,"a",function(){return u}),n.d(e,"c",function(){return h});var r=n("CcnG"),i=n("n6gG"),o=n("K9Ia"),l=n("pugT"),a=0,u=function(){function t(){this._openCloseAllActions=new o.a,this.id="cdk-accordion-"+a++,this._multi=!1}return Object.defineProperty(t.prototype,"multi",{get:function(){return this._multi},set:function(t){this._multi=Object(i.c)(t)},enumerable:!0,configurable:!0}),t.prototype.openAll=function(){this._openCloseAll(!0)},t.prototype.closeAll=function(){this._openCloseAll(!1)},t.prototype._openCloseAll=function(t){this.multi&&this._openCloseAllActions.next(t)},t}(),s=0,c=function(){function t(t,e,n){var i=this;this.accordion=t,this._changeDetectorRef=e,this._expansionDispatcher=n,this._openCloseAllSubscription=l.a.EMPTY,this.closed=new r.n,this.opened=new r.n,this.destroyed=new r.n,this.expandedChange=new r.n,this.id="cdk-accordion-child-"+s++,this._expanded=!1,this._disabled=!1,this._removeUniqueSelectionListener=function(){},this._removeUniqueSelectionListener=n.listen(function(t,e){i.accordion&&!i.accordion.multi&&i.accordion.id===e&&i.id!==t&&(i.expanded=!1)}),this.accordion&&(this._openCloseAllSubscription=this._subscribeToOpenCloseAllActions())}return Object.defineProperty(t.prototype,"expanded",{get:function(){return this._expanded},set:function(t){t=Object(i.c)(t),this._expanded!==t&&(this._expanded=t,this.expandedChange.emit(t),t?(this.opened.emit(),this._expansionDispatcher.notify(this.id,this.accordion?this.accordion.id:this.id)):this.closed.emit(),this._changeDetectorRef.markForCheck())},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"disabled",{get:function(){return this._disabled},set:function(t){this._disabled=Object(i.c)(t)},enumerable:!0,configurable:!0}),t.prototype.ngOnDestroy=function(){this.opened.complete(),this.closed.complete(),this.destroyed.emit(),this.destroyed.complete(),this._removeUniqueSelectionListener(),this._openCloseAllSubscription.unsubscribe()},t.prototype.toggle=function(){this.disabled||(this.expanded=!this.expanded)},t.prototype.close=function(){this.disabled||(this.expanded=!1)},t.prototype.open=function(){this.disabled||(this.expanded=!0)},t.prototype._subscribeToOpenCloseAllActions=function(){var t=this;return this.accordion._openCloseAllActions.subscribe(function(e){t.disabled||(t.expanded=e)})},t}(),h=function(){}},YlbQ:function(t,e,n){"use strict";n.d(e,"c",function(){return a}),n.d(e,"a",function(){return o}),n.d(e,"b",function(){return l}),n("mrSG"),n("6blF"),n("F/XL");var r=n("K9Ia"),i=n("CcnG"),o=function(){},l=function(){function t(t,e,n){void 0===t&&(t=!1),void 0===n&&(n=!0);var i=this;this._multiple=t,this._emitChanges=n,this._selection=new Set,this._deselectedToEmit=[],this._selectedToEmit=[],this.onChange=this._emitChanges?new r.a:null,e&&e.length&&(t?e.forEach(function(t){return i._markSelected(t)}):this._markSelected(e[0]),this._selectedToEmit.length=0)}return Object.defineProperty(t.prototype,"selected",{get:function(){return this._selected||(this._selected=Array.from(this._selection.values())),this._selected},enumerable:!0,configurable:!0}),t.prototype.select=function(){for(var t=this,e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];this._verifyValueAssignment(e),e.forEach(function(e){return t._markSelected(e)}),this._emitChangeEvent()},t.prototype.deselect=function(){for(var t=this,e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];this._verifyValueAssignment(e),e.forEach(function(e){return t._unmarkSelected(e)}),this._emitChangeEvent()},t.prototype.toggle=function(t){this.isSelected(t)?this.deselect(t):this.select(t)},t.prototype.clear=function(){this._unmarkAll(),this._emitChangeEvent()},t.prototype.isSelected=function(t){return this._selection.has(t)},t.prototype.isEmpty=function(){return 0===this._selection.size},t.prototype.hasValue=function(){return!this.isEmpty()},t.prototype.sort=function(t){this._multiple&&this.selected&&this._selected.sort(t)},t.prototype.isMultipleSelection=function(){return this._multiple},t.prototype._emitChangeEvent=function(){this._selected=null,(this._selectedToEmit.length||this._deselectedToEmit.length)&&(this.onChange&&this.onChange.next({source:this,added:this._selectedToEmit,removed:this._deselectedToEmit}),this._deselectedToEmit=[],this._selectedToEmit=[])},t.prototype._markSelected=function(t){this.isSelected(t)||(this._multiple||this._unmarkAll(),this._selection.add(t),this._emitChanges&&this._selectedToEmit.push(t))},t.prototype._unmarkSelected=function(t){this.isSelected(t)&&(this._selection.delete(t),this._emitChanges&&this._deselectedToEmit.push(t))},t.prototype._unmarkAll=function(){var t=this;this.isEmpty()||this._selection.forEach(function(e){return t._unmarkSelected(e)})},t.prototype._verifyValueAssignment=function(t){if(t.length>1&&!this._multiple)throw Error("Cannot pass multiple values into SelectionModel with single-value mode.")},t}(),a=function(){function t(){this._listeners=[]}return t.prototype.notify=function(t,e){for(var n=0,r=this._listeners;n<r.length;n++)(0,r[n])(t,e)},t.prototype.listen=function(t){var e=this;return this._listeners.push(t),function(){e._listeners=e._listeners.filter(function(e){return t!==e})}},t.prototype.ngOnDestroy=function(){this._listeners=[]},t.ngInjectableDef=Object(i.U)({factory:function(){return new t},token:t,providedIn:"root"}),t}()},ZYCi:function(t,e,n){"use strict";n.d(e,"v",function(){return He}),n.d(e,"C",function(){return $e}),n.d(e,"x",function(){return Qe}),n.d(e,"D",function(){return Je}),n.d(e,"E",function(){return tn}),n.d(e,"z",function(){return Ye}),n.d(e,"y",function(){return We}),n.d(e,"B",function(){return Xe}),n.d(e,"w",function(){return Ue}),n.d(e,"A",function(){return Ke}),n.d(e,"F",function(){return Ve}),n.d(e,"o",function(){return Te}),n.d(e,"q",function(){return Me}),n.d(e,"d",function(){return j}),n.d(e,"e",function(){return R}),n.d(e,"f",function(){return O}),n.d(e,"m",function(){return ye}),n.d(e,"n",function(){return je}),n.d(e,"l",function(){return _e}),n.d(e,"j",function(){return Be}),n.d(e,"k",function(){return en}),n.d(e,"p",function(){return qe}),n.d(e,"b",function(){return Ae}),n.d(e,"g",function(){return Fe}),n.d(e,"h",function(){return Le}),n.d(e,"i",function(){return Ne}),n.d(e,"r",function(){return ze}),n.d(e,"a",function(){return Bt}),n.d(e,"s",function(){return xe}),n.d(e,"c",function(){return ct}),n.d(e,"t",function(){return st}),n.d(e,"u",function(){return B});var r=n("mrSG"),i=n("CcnG"),o=n("F/XL"),l=n("0/uQ"),a=n("6blF"),u=n("3fWJ"),s=n("26FU"),c=n("K9Ia"),h=n("67Y/"),f=n("Txjg"),d=n("w1EH"),p=n("Zn8D"),m=n("zAZS"),g=n("9Z1F"),b=n("P6uZ"),y=n("psW0"),v=n("Phjn"),_=n("Qgas"),w=n("VnD/"),x=n("Ip0R"),S=n("ZYjt"),C=function(t,e){this.id=t,this.url=e},k=function(t){function e(e,n,r,i){void 0===r&&(r="imperative"),void 0===i&&(i=null);var o=t.call(this,e,n)||this;return o.navigationTrigger=r,o.restoredState=i,o}return Object(r.b)(e,t),e.prototype.toString=function(){return"NavigationStart(id: "+this.id+", url: '"+this.url+"')"},e}(C),R=function(t){function e(e,n,r){var i=t.call(this,e,n)||this;return i.urlAfterRedirects=r,i}return Object(r.b)(e,t),e.prototype.toString=function(){return"NavigationEnd(id: "+this.id+", url: '"+this.url+"', urlAfterRedirects: '"+this.urlAfterRedirects+"')"},e}(C),j=function(t){function e(e,n,r){var i=t.call(this,e,n)||this;return i.reason=r,i}return Object(r.b)(e,t),e.prototype.toString=function(){return"NavigationCancel(id: "+this.id+", url: '"+this.url+"')"},e}(C),O=function(t){function e(e,n,r){var i=t.call(this,e,n)||this;return i.error=r,i}return Object(r.b)(e,t),e.prototype.toString=function(){return"NavigationError(id: "+this.id+", url: '"+this.url+"', error: "+this.error+")"},e}(C),E=function(t){function e(e,n,r,i){var o=t.call(this,e,n)||this;return o.urlAfterRedirects=r,o.state=i,o}return Object(r.b)(e,t),e.prototype.toString=function(){return"RoutesRecognized(id: "+this.id+", url: '"+this.url+"', urlAfterRedirects: '"+this.urlAfterRedirects+"', state: "+this.state+")"},e}(C),T=function(t){function e(e,n,r,i){var o=t.call(this,e,n)||this;return o.urlAfterRedirects=r,o.state=i,o}return Object(r.b)(e,t),e.prototype.toString=function(){return"GuardsCheckStart(id: "+this.id+", url: '"+this.url+"', urlAfterRedirects: '"+this.urlAfterRedirects+"', state: "+this.state+")"},e}(C),P=function(t){function e(e,n,r,i,o){var l=t.call(this,e,n)||this;return l.urlAfterRedirects=r,l.state=i,l.shouldActivate=o,l}return Object(r.b)(e,t),e.prototype.toString=function(){return"GuardsCheckEnd(id: "+this.id+", url: '"+this.url+"', urlAfterRedirects: '"+this.urlAfterRedirects+"', state: "+this.state+", shouldActivate: "+this.shouldActivate+")"},e}(C),I=function(t){function e(e,n,r,i){var o=t.call(this,e,n)||this;return o.urlAfterRedirects=r,o.state=i,o}return Object(r.b)(e,t),e.prototype.toString=function(){return"ResolveStart(id: "+this.id+", url: '"+this.url+"', urlAfterRedirects: '"+this.urlAfterRedirects+"', state: "+this.state+")"},e}(C),A=function(t){function e(e,n,r,i){var o=t.call(this,e,n)||this;return o.urlAfterRedirects=r,o.state=i,o}return Object(r.b)(e,t),e.prototype.toString=function(){return"ResolveEnd(id: "+this.id+", url: '"+this.url+"', urlAfterRedirects: '"+this.urlAfterRedirects+"', state: "+this.state+")"},e}(C),M=function(){function t(t){this.route=t}return t.prototype.toString=function(){return"RouteConfigLoadStart(path: "+this.route.path+")"},t}(),D=function(){function t(t){this.route=t}return t.prototype.toString=function(){return"RouteConfigLoadEnd(path: "+this.route.path+")"},t}(),N=function(){function t(t){this.snapshot=t}return t.prototype.toString=function(){return"ChildActivationStart(path: '"+(this.snapshot.routeConfig&&this.snapshot.routeConfig.path||"")+"')"},t}(),L=function(){function t(t){this.snapshot=t}return t.prototype.toString=function(){return"ChildActivationEnd(path: '"+(this.snapshot.routeConfig&&this.snapshot.routeConfig.path||"")+"')"},t}(),F=function(){function t(t){this.snapshot=t}return t.prototype.toString=function(){return"ActivationStart(path: '"+(this.snapshot.routeConfig&&this.snapshot.routeConfig.path||"")+"')"},t}(),z=function(){function t(t){this.snapshot=t}return t.prototype.toString=function(){return"ActivationEnd(path: '"+(this.snapshot.routeConfig&&this.snapshot.routeConfig.path||"")+"')"},t}(),V=function(){function t(t,e,n){this.routerEvent=t,this.position=e,this.anchor=n}return t.prototype.toString=function(){return"Scroll(anchor: '"+this.anchor+"', position: '"+(this.position?this.position[0]+", "+this.position[1]:null)+"')"},t}(),B=function(){},H="primary",G=function(){function t(t){this.params=t||{}}return t.prototype.has=function(t){return this.params.hasOwnProperty(t)},t.prototype.get=function(t){if(this.has(t)){var e=this.params[t];return Array.isArray(e)?e[0]:e}return null},t.prototype.getAll=function(t){if(this.has(t)){var e=this.params[t];return Array.isArray(e)?e:[e]}return[]},Object.defineProperty(t.prototype,"keys",{get:function(){return Object.keys(this.params)},enumerable:!0,configurable:!0}),t}();function U(t){return new G(t)}function q(t,e,n){var r=n.path.split("/");if(r.length>t.length)return null;if("full"===n.pathMatch&&(e.hasChildren()||r.length<t.length))return null;for(var i={},o=0;o<r.length;o++){var l=r[o],a=t[o];if(l.startsWith(":"))i[l.substring(1)]=a;else if(l!==a.path)return null}return{consumed:t.slice(0,r.length),posParams:i}}var Q=function(t,e){this.routes=t,this.module=e};function W(t,e){void 0===e&&(e="");for(var n=0;n<t.length;n++){var r=t[n];Y(r,Z(e,r))}}function Y(t,e){if(!t)throw new Error("\n      Invalid configuration of route '"+e+"': Encountered undefined route.\n      The reason might be an extra comma.\n\n      Example:\n      const routes: Routes = [\n        { path: '', redirectTo: '/dashboard', pathMatch: 'full' },\n        { path: 'dashboard',  component: DashboardComponent },, << two commas\n        { path: 'detail/:id', component: HeroDetailComponent }\n      ];\n    ");if(Array.isArray(t))throw new Error("Invalid configuration of route '"+e+"': Array cannot be specified");if(!t.component&&!t.children&&!t.loadChildren&&t.outlet&&t.outlet!==H)throw new Error("Invalid configuration of route '"+e+"': a componentless route without children or loadChildren cannot have a named outlet set");if(t.redirectTo&&t.children)throw new Error("Invalid configuration of route '"+e+"': redirectTo and children cannot be used together");if(t.redirectTo&&t.loadChildren)throw new Error("Invalid configuration of route '"+e+"': redirectTo and loadChildren cannot be used together");if(t.children&&t.loadChildren)throw new Error("Invalid configuration of route '"+e+"': children and loadChildren cannot be used together");if(t.redirectTo&&t.component)throw new Error("Invalid configuration of route '"+e+"': redirectTo and component cannot be used together");if(t.path&&t.matcher)throw new Error("Invalid configuration of route '"+e+"': path and matcher cannot be used together");if(void 0===t.redirectTo&&!t.component&&!t.children&&!t.loadChildren)throw new Error("Invalid configuration of route '"+e+"'. One of the following must be provided: component, redirectTo, children or loadChildren");if(void 0===t.path&&void 0===t.matcher)throw new Error("Invalid configuration of route '"+e+"': routes must have either a path or a matcher specified");if("string"==typeof t.path&&"/"===t.path.charAt(0))throw new Error("Invalid configuration of route '"+e+"': path cannot start with a slash");if(""===t.path&&void 0!==t.redirectTo&&void 0===t.pathMatch)throw new Error("Invalid configuration of route '{path: \""+e+'", redirectTo: "'+t.redirectTo+"\"}': please provide 'pathMatch'. The default value of 'pathMatch' is 'prefix', but often the intent is to use 'full'.");if(void 0!==t.pathMatch&&"full"!==t.pathMatch&&"prefix"!==t.pathMatch)throw new Error("Invalid configuration of route '"+e+"': pathMatch can only be set to 'prefix' or 'full'");t.children&&W(t.children,e)}function Z(t,e){return e?t||e.path?t&&!e.path?t+"/":!t&&e.path?e.path:t+"/"+e.path:"":t}function K(t){var e=t.children&&t.children.map(K),n=e?Object(r.a)({},t,{children:e}):Object(r.a)({},t);return!n.component&&(e||n.loadChildren)&&n.outlet&&n.outlet!==H&&(n.component=B),n}function X(t,e){var n,r=Object.keys(t),i=Object.keys(e);if(r.length!=i.length)return!1;for(var o=0;o<r.length;o++)if(t[n=r[o]]!==e[n])return!1;return!0}function $(t){return Array.prototype.concat.apply([],t)}function J(t){return t.length>0?t[t.length-1]:null}function tt(t,e){for(var n in t)t.hasOwnProperty(n)&&e(t[n],n)}function et(t){return t.pipe(Object(p.a)(),Object(m.a)(function(t){return!0===t}))}function nt(t){return Object(i.Va)(t)?t:Object(i.Wa)(t)?Object(l.a)(Promise.resolve(t)):Object(o.a)(t)}function rt(t,e,n){return n?function(t,e){return X(t,e)}(t.queryParams,e.queryParams)&&function t(e,n){if(!at(e.segments,n.segments))return!1;if(e.numberOfChildren!==n.numberOfChildren)return!1;for(var r in n.children){if(!e.children[r])return!1;if(!t(e.children[r],n.children[r]))return!1}return!0}(t.root,e.root):function(t,e){return Object.keys(e).length<=Object.keys(t).length&&Object.keys(e).every(function(n){return e[n]===t[n]})}(t.queryParams,e.queryParams)&&function t(e,n){return function e(n,r,i){if(n.segments.length>i.length)return!!at(l=n.segments.slice(0,i.length),i)&&!r.hasChildren();if(n.segments.length===i.length){if(!at(n.segments,i))return!1;for(var o in r.children){if(!n.children[o])return!1;if(!t(n.children[o],r.children[o]))return!1}return!0}var l=i.slice(0,n.segments.length),a=i.slice(n.segments.length);return!!at(n.segments,l)&&!!n.children[H]&&e(n.children[H],r,a)}(e,n,n.segments)}(t.root,e.root)}var it=function(){function t(t,e,n){this.root=t,this.queryParams=e,this.fragment=n}return Object.defineProperty(t.prototype,"queryParamMap",{get:function(){return this._queryParamMap||(this._queryParamMap=U(this.queryParams)),this._queryParamMap},enumerable:!0,configurable:!0}),t.prototype.toString=function(){return ht.serialize(this)},t}(),ot=function(){function t(t,e){var n=this;this.segments=t,this.children=e,this.parent=null,tt(e,function(t,e){return t.parent=n})}return t.prototype.hasChildren=function(){return this.numberOfChildren>0},Object.defineProperty(t.prototype,"numberOfChildren",{get:function(){return Object.keys(this.children).length},enumerable:!0,configurable:!0}),t.prototype.toString=function(){return ft(this)},t}(),lt=function(){function t(t,e){this.path=t,this.parameters=e}return Object.defineProperty(t.prototype,"parameterMap",{get:function(){return this._parameterMap||(this._parameterMap=U(this.parameters)),this._parameterMap},enumerable:!0,configurable:!0}),t.prototype.toString=function(){return yt(this)},t}();function at(t,e){return t.length===e.length&&t.every(function(t,n){return t.path===e[n].path})}function ut(t,e){var n=[];return tt(t.children,function(t,r){r===H&&(n=n.concat(e(t,r)))}),tt(t.children,function(t,r){r!==H&&(n=n.concat(e(t,r)))}),n}var st=function(){},ct=function(){function t(){}return t.prototype.parse=function(t){var e=new St(t);return new it(e.parseRootSegment(),e.parseQueryParams(),e.parseFragment())},t.prototype.serialize=function(t){var e,n;return"/"+function t(e,n){if(!e.hasChildren())return ft(e);if(n){var r=e.children[H]?t(e.children[H],!1):"",i=[];return tt(e.children,function(e,n){n!==H&&i.push(n+":"+t(e,!1))}),i.length>0?r+"("+i.join("//")+")":r}var o=ut(e,function(n,r){return r===H?[t(e.children[H],!1)]:[r+":"+t(n,!1)]});return ft(e)+"/("+o.join("//")+")"}(t.root,!0)+(e=t.queryParams,(n=Object.keys(e).map(function(t){var n=e[t];return Array.isArray(n)?n.map(function(e){return pt(t)+"="+pt(e)}).join("&"):pt(t)+"="+pt(n)})).length?"?"+n.join("&"):"")+("string"==typeof t.fragment?"#"+encodeURI(t.fragment):"")},t}(),ht=new ct;function ft(t){return t.segments.map(function(t){return yt(t)}).join("/")}function dt(t){return encodeURIComponent(t).replace(/%40/g,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",")}function pt(t){return dt(t).replace(/%3B/gi,";")}function mt(t){return dt(t).replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/%26/gi,"&")}function gt(t){return decodeURIComponent(t)}function bt(t){return gt(t.replace(/\+/g,"%20"))}function yt(t){return""+mt(t.path)+(e=t.parameters,Object.keys(e).map(function(t){return";"+mt(t)+"="+mt(e[t])}).join(""));var e}var vt=/^[^\/()?;=#]+/;function _t(t){var e=t.match(vt);return e?e[0]:""}var wt=/^[^=?&#]+/,xt=/^[^?&#]+/,St=function(){function t(t){this.url=t,this.remaining=t}return t.prototype.parseRootSegment=function(){return this.consumeOptional("/"),""===this.remaining||this.peekStartsWith("?")||this.peekStartsWith("#")?new ot([],{}):new ot([],this.parseChildren())},t.prototype.parseQueryParams=function(){var t={};if(this.consumeOptional("?"))do{this.parseQueryParam(t)}while(this.consumeOptional("&"));return t},t.prototype.parseFragment=function(){return this.consumeOptional("#")?decodeURIComponent(this.remaining):null},t.prototype.parseChildren=function(){if(""===this.remaining)return{};this.consumeOptional("/");var t=[];for(this.peekStartsWith("(")||t.push(this.parseSegment());this.peekStartsWith("/")&&!this.peekStartsWith("//")&&!this.peekStartsWith("/(");)this.capture("/"),t.push(this.parseSegment());var e={};this.peekStartsWith("/(")&&(this.capture("/"),e=this.parseParens(!0));var n={};return this.peekStartsWith("(")&&(n=this.parseParens(!1)),(t.length>0||Object.keys(e).length>0)&&(n[H]=new ot(t,e)),n},t.prototype.parseSegment=function(){var t=_t(this.remaining);if(""===t&&this.peekStartsWith(";"))throw new Error("Empty path url segment cannot have parameters: '"+this.remaining+"'.");return this.capture(t),new lt(gt(t),this.parseMatrixParams())},t.prototype.parseMatrixParams=function(){for(var t={};this.consumeOptional(";");)this.parseParam(t);return t},t.prototype.parseParam=function(t){var e=_t(this.remaining);if(e){this.capture(e);var n="";if(this.consumeOptional("=")){var r=_t(this.remaining);r&&this.capture(n=r)}t[gt(e)]=gt(n)}},t.prototype.parseQueryParam=function(t){var e,n=(e=this.remaining.match(wt))?e[0]:"";if(n){this.capture(n);var r="";if(this.consumeOptional("=")){var i=function(t){var e=t.match(xt);return e?e[0]:""}(this.remaining);i&&this.capture(r=i)}var o=bt(n),l=bt(r);if(t.hasOwnProperty(o)){var a=t[o];Array.isArray(a)||(t[o]=a=[a]),a.push(l)}else t[o]=l}},t.prototype.parseParens=function(t){var e={};for(this.capture("(");!this.consumeOptional(")")&&this.remaining.length>0;){var n=_t(this.remaining),r=this.remaining[n.length];if("/"!==r&&")"!==r&&";"!==r)throw new Error("Cannot parse url '"+this.url+"'");var i=void 0;n.indexOf(":")>-1?(i=n.substr(0,n.indexOf(":")),this.capture(i),this.capture(":")):t&&(i=H);var o=this.parseChildren();e[i]=1===Object.keys(o).length?o[H]:new ot([],o),this.consumeOptional("//")}return e},t.prototype.peekStartsWith=function(t){return this.remaining.startsWith(t)},t.prototype.consumeOptional=function(t){return!!this.peekStartsWith(t)&&(this.remaining=this.remaining.substring(t.length),!0)},t.prototype.capture=function(t){if(!this.consumeOptional(t))throw new Error('Expected "'+t+'".')},t}(),Ct=function(t){this.segmentGroup=t||null},kt=function(t){this.urlTree=t};function Rt(t){return new a.a(function(e){return e.error(new Ct(t))})}function jt(t){return new a.a(function(e){return e.error(new kt(t))})}function Ot(t){return new a.a(function(e){return e.error(new Error("Only absolute redirects can have named outlets. redirectTo: '"+t+"'"))})}var Et=function(){function t(t,e,n,r,o){this.configLoader=e,this.urlSerializer=n,this.urlTree=r,this.config=o,this.allowRedirects=!0,this.ngModule=t.get(i.x)}return t.prototype.apply=function(){var t=this;return this.expandSegmentGroup(this.ngModule,this.config,this.urlTree.root,H).pipe(Object(h.a)(function(e){return t.createUrlTree(e,t.urlTree.queryParams,t.urlTree.fragment)})).pipe(Object(g.a)(function(e){if(e instanceof kt)return t.allowRedirects=!1,t.match(e.urlTree);if(e instanceof Ct)throw t.noMatchError(e);throw e}))},t.prototype.match=function(t){var e=this;return this.expandSegmentGroup(this.ngModule,this.config,t.root,H).pipe(Object(h.a)(function(n){return e.createUrlTree(n,t.queryParams,t.fragment)})).pipe(Object(g.a)(function(t){if(t instanceof Ct)throw e.noMatchError(t);throw t}))},t.prototype.noMatchError=function(t){return new Error("Cannot match any routes. URL Segment: '"+t.segmentGroup+"'")},t.prototype.createUrlTree=function(t,e,n){var r,i=t.segments.length>0?new ot([],((r={})[H]=t,r)):t;return new it(i,e,n)},t.prototype.expandSegmentGroup=function(t,e,n,r){return 0===n.segments.length&&n.hasChildren()?this.expandChildren(t,e,n).pipe(Object(h.a)(function(t){return new ot([],t)})):this.expandSegment(t,n,e,n.segments,r,!0)},t.prototype.expandChildren=function(t,e,n){var r=this;return function(n,i){if(0===Object.keys(n).length)return Object(o.a)({});var l=[],a=[],u={};return tt(n,function(n,i){var o,s,c=(o=i,s=n,r.expandSegmentGroup(t,e,s,o)).pipe(Object(h.a)(function(t){return u[i]=t}));i===H?l.push(c):a.push(c)}),o.a.apply(null,l.concat(a)).pipe(Object(f.a)(),Object(d.a)(),Object(h.a)(function(){return u}))}(n.children)},t.prototype.expandSegment=function(t,e,n,i,l,a){var s=this;return o.a.apply(void 0,Object(r.d)(n)).pipe(Object(h.a)(function(r){return s.expandSegmentAgainstRoute(t,e,n,r,i,l,a).pipe(Object(g.a)(function(t){if(t instanceof Ct)return Object(o.a)(null);throw t}))}),Object(f.a)(),Object(b.a)(function(t){return!!t}),Object(g.a)(function(t,n){if(t instanceof u.a||"EmptyError"===t.name){if(s.noLeftoversInUrl(e,i,l))return Object(o.a)(new ot([],{}));throw new Ct(e)}throw t}))},t.prototype.noLeftoversInUrl=function(t,e,n){return 0===e.length&&!t.children[n]},t.prototype.expandSegmentAgainstRoute=function(t,e,n,r,i,o,l){return At(r)!==o?Rt(e):void 0===r.redirectTo?this.matchSegmentAgainstRoute(t,e,r,i):l&&this.allowRedirects?this.expandSegmentAgainstRouteUsingRedirect(t,e,n,r,i,o):Rt(e)},t.prototype.expandSegmentAgainstRouteUsingRedirect=function(t,e,n,r,i,o){return"**"===r.path?this.expandWildCardWithParamsAgainstRouteUsingRedirect(t,n,r,o):this.expandRegularSegmentAgainstRouteUsingRedirect(t,e,n,r,i,o)},t.prototype.expandWildCardWithParamsAgainstRouteUsingRedirect=function(t,e,n,r){var i=this,o=this.applyRedirectCommands([],n.redirectTo,{});return n.redirectTo.startsWith("/")?jt(o):this.lineralizeSegments(n,o).pipe(Object(y.a)(function(n){var o=new ot(n,{});return i.expandSegment(t,o,e,n,r,!1)}))},t.prototype.expandRegularSegmentAgainstRouteUsingRedirect=function(t,e,n,r,i,o){var l=this,a=Tt(e,r,i),u=a.consumedSegments,s=a.lastChild,c=a.positionalParamSegments;if(!a.matched)return Rt(e);var h=this.applyRedirectCommands(u,r.redirectTo,c);return r.redirectTo.startsWith("/")?jt(h):this.lineralizeSegments(r,h).pipe(Object(y.a)(function(r){return l.expandSegment(t,e,n,r.concat(i.slice(s)),o,!1)}))},t.prototype.matchSegmentAgainstRoute=function(t,e,n,i){var l=this;if("**"===n.path)return n.loadChildren?this.configLoader.load(t.injector,n).pipe(Object(h.a)(function(t){return n._loadedConfig=t,new ot(i,{})})):Object(o.a)(new ot(i,{}));var a=Tt(e,n,i),u=a.consumedSegments,s=a.lastChild;if(!a.matched)return Rt(e);var c=i.slice(s);return this.getChildConfig(t,n).pipe(Object(y.a)(function(t){var n=t.module,i=t.routes,a=function(t,e,n,i){return n.length>0&&function(t,e,n){return i.some(function(n){return It(t,e,n)&&At(n)!==H})}(t,n)?{segmentGroup:Pt(new ot(e,function(t,e){var n,i,o={};o[H]=e;try{for(var l=Object(r.e)(t),a=l.next();!a.done;a=l.next()){var u=a.value;""===u.path&&At(u)!==H&&(o[At(u)]=new ot([],{}))}}catch(t){n={error:t}}finally{try{a&&!a.done&&(i=l.return)&&i.call(l)}finally{if(n)throw n.error}}return o}(i,new ot(n,t.children)))),slicedSegments:[]}:0===n.length&&function(t,e,n){return i.some(function(n){return It(t,e,n)})}(t,n)?{segmentGroup:Pt(new ot(t.segments,function(t,e,n,i){var o,l,a={};try{for(var u=Object(r.e)(n),s=u.next();!s.done;s=u.next()){var c=s.value;It(t,e,c)&&!i[At(c)]&&(a[At(c)]=new ot([],{}))}}catch(t){o={error:t}}finally{try{s&&!s.done&&(l=u.return)&&l.call(u)}finally{if(o)throw o.error}}return Object(r.a)({},i,a)}(t,n,i,t.children))),slicedSegments:n}:{segmentGroup:t,slicedSegments:n}}(e,u,c,i),s=a.segmentGroup,f=a.slicedSegments;return 0===f.length&&s.hasChildren()?l.expandChildren(n,i,s).pipe(Object(h.a)(function(t){return new ot(u,t)})):0===i.length&&0===f.length?Object(o.a)(new ot(u,{})):l.expandSegment(n,s,i,f,H,!0).pipe(Object(h.a)(function(t){return new ot(u.concat(t.segments),t.children)}))}))},t.prototype.getChildConfig=function(t,e){var n=this;return e.children?Object(o.a)(new Q(e.children,t)):e.loadChildren?void 0!==e._loadedConfig?Object(o.a)(e._loadedConfig):function(t,e){var n=e.canLoad;return n&&0!==n.length?et(Object(l.a)(n).pipe(Object(h.a)(function(n){var r=t.get(n);return nt(r.canLoad?r.canLoad(e):r(e))}))):Object(o.a)(!0)}(t.injector,e).pipe(Object(y.a)(function(r){return r?n.configLoader.load(t.injector,e).pipe(Object(h.a)(function(t){return e._loadedConfig=t,t})):function(t){return new a.a(function(e){return e.error(((n=Error("NavigationCancelingError: Cannot load children because the guard of the route \"path: '"+t.path+"'\" returned false")).ngNavigationCancelingError=!0,n));var n})}(e)})):Object(o.a)(new Q([],t))},t.prototype.lineralizeSegments=function(t,e){for(var n=[],r=e.root;;){if(n=n.concat(r.segments),0===r.numberOfChildren)return Object(o.a)(n);if(r.numberOfChildren>1||!r.children[H])return Ot(t.redirectTo);r=r.children[H]}},t.prototype.applyRedirectCommands=function(t,e,n){return this.applyRedirectCreatreUrlTree(e,this.urlSerializer.parse(e),t,n)},t.prototype.applyRedirectCreatreUrlTree=function(t,e,n,r){var i=this.createSegmentGroup(t,e.root,n,r);return new it(i,this.createQueryParams(e.queryParams,this.urlTree.queryParams),e.fragment)},t.prototype.createQueryParams=function(t,e){var n={};return tt(t,function(t,r){if("string"==typeof t&&t.startsWith(":")){var i=t.substring(1);n[r]=e[i]}else n[r]=t}),n},t.prototype.createSegmentGroup=function(t,e,n,r){var i=this,o=this.createSegments(t,e.segments,n,r),l={};return tt(e.children,function(e,o){l[o]=i.createSegmentGroup(t,e,n,r)}),new ot(o,l)},t.prototype.createSegments=function(t,e,n,r){var i=this;return e.map(function(e){return e.path.startsWith(":")?i.findPosParam(t,e,r):i.findOrReturn(e,n)})},t.prototype.findPosParam=function(t,e,n){var r=n[e.path.substring(1)];if(!r)throw new Error("Cannot redirect to '"+t+"'. Cannot find '"+e.path+"'.");return r},t.prototype.findOrReturn=function(t,e){var n,i,o=0;try{for(var l=Object(r.e)(e),a=l.next();!a.done;a=l.next()){var u=a.value;if(u.path===t.path)return e.splice(o),u;o++}}catch(t){n={error:t}}finally{try{a&&!a.done&&(i=l.return)&&i.call(l)}finally{if(n)throw n.error}}return t},t}();function Tt(t,e,n){if(""===e.path)return"full"===e.pathMatch&&(t.hasChildren()||n.length>0)?{matched:!1,consumedSegments:[],lastChild:0,positionalParamSegments:{}}:{matched:!0,consumedSegments:[],lastChild:0,positionalParamSegments:{}};var r=(e.matcher||q)(n,t,e);return r?{matched:!0,consumedSegments:r.consumed,lastChild:r.consumed.length,positionalParamSegments:r.posParams}:{matched:!1,consumedSegments:[],lastChild:0,positionalParamSegments:{}}}function Pt(t){if(1===t.numberOfChildren&&t.children[H]){var e=t.children[H];return new ot(t.segments.concat(e.segments),e.children)}return t}function It(t,e,n){return(!(t.hasChildren()||e.length>0)||"full"!==n.pathMatch)&&""===n.path&&void 0!==n.redirectTo}function At(t){return t.outlet||H}var Mt=function(){function t(t){this._root=t}return Object.defineProperty(t.prototype,"root",{get:function(){return this._root.value},enumerable:!0,configurable:!0}),t.prototype.parent=function(t){var e=this.pathFromRoot(t);return e.length>1?e[e.length-2]:null},t.prototype.children=function(t){var e=Dt(t,this._root);return e?e.children.map(function(t){return t.value}):[]},t.prototype.firstChild=function(t){var e=Dt(t,this._root);return e&&e.children.length>0?e.children[0].value:null},t.prototype.siblings=function(t){var e=Nt(t,this._root);return e.length<2?[]:e[e.length-2].children.map(function(t){return t.value}).filter(function(e){return e!==t})},t.prototype.pathFromRoot=function(t){return Nt(t,this._root).map(function(t){return t.value})},t}();function Dt(t,e){var n,i;if(t===e.value)return e;try{for(var o=Object(r.e)(e.children),l=o.next();!l.done;l=o.next()){var a=Dt(t,l.value);if(a)return a}}catch(t){n={error:t}}finally{try{l&&!l.done&&(i=o.return)&&i.call(o)}finally{if(n)throw n.error}}return null}function Nt(t,e){var n,i;if(t===e.value)return[e];try{for(var o=Object(r.e)(e.children),l=o.next();!l.done;l=o.next()){var a=Nt(t,l.value);if(a.length)return a.unshift(e),a}}catch(t){n={error:t}}finally{try{l&&!l.done&&(i=o.return)&&i.call(o)}finally{if(n)throw n.error}}return[]}var Lt=function(){function t(t,e){this.value=t,this.children=e}return t.prototype.toString=function(){return"TreeNode("+this.value+")"},t}();function Ft(t){var e={};return t&&t.children.forEach(function(t){return e[t.value.outlet]=t}),e}var zt=function(t){function e(e,n){var r=t.call(this,e)||this;return r.snapshot=n,qt(r,e),r}return Object(r.b)(e,t),e.prototype.toString=function(){return this.snapshot.toString()},e}(Mt);function Vt(t,e){var n=function(t,e){var n=new Gt([],{},{},"",{},H,e,null,t.root,-1,{});return new Ut("",new Lt(n,[]))}(t,e),r=new s.a([new lt("",{})]),i=new s.a({}),o=new s.a({}),l=new s.a({}),a=new s.a(""),u=new Bt(r,i,l,a,o,H,e,n.root);return u.snapshot=n.root,new zt(new Lt(u,[]),n)}var Bt=function(){function t(t,e,n,r,i,o,l,a){this.url=t,this.params=e,this.queryParams=n,this.fragment=r,this.data=i,this.outlet=o,this.component=l,this._futureSnapshot=a}return Object.defineProperty(t.prototype,"routeConfig",{get:function(){return this._futureSnapshot.routeConfig},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"root",{get:function(){return this._routerState.root},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"parent",{get:function(){return this._routerState.parent(this)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"firstChild",{get:function(){return this._routerState.firstChild(this)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"children",{get:function(){return this._routerState.children(this)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"pathFromRoot",{get:function(){return this._routerState.pathFromRoot(this)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"paramMap",{get:function(){return this._paramMap||(this._paramMap=this.params.pipe(Object(h.a)(function(t){return U(t)}))),this._paramMap},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"queryParamMap",{get:function(){return this._queryParamMap||(this._queryParamMap=this.queryParams.pipe(Object(h.a)(function(t){return U(t)}))),this._queryParamMap},enumerable:!0,configurable:!0}),t.prototype.toString=function(){return this.snapshot?this.snapshot.toString():"Future("+this._futureSnapshot+")"},t}();function Ht(t,e){void 0===e&&(e="emptyOnly");var n=t.pathFromRoot,i=0;if("always"!==e)for(i=n.length-1;i>=1;){var o=n[i],l=n[i-1];if(o.routeConfig&&""===o.routeConfig.path)i--;else{if(l.component)break;i--}}return function(t){return t.reduce(function(t,e){return{params:Object(r.a)({},t.params,e.params),data:Object(r.a)({},t.data,e.data),resolve:Object(r.a)({},t.resolve,e._resolvedData)}},{params:{},data:{},resolve:{}})}(n.slice(i))}var Gt=function(){function t(t,e,n,r,i,o,l,a,u,s,c){this.url=t,this.params=e,this.queryParams=n,this.fragment=r,this.data=i,this.outlet=o,this.component=l,this.routeConfig=a,this._urlSegment=u,this._lastPathIndex=s,this._resolve=c}return Object.defineProperty(t.prototype,"root",{get:function(){return this._routerState.root},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"parent",{get:function(){return this._routerState.parent(this)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"firstChild",{get:function(){return this._routerState.firstChild(this)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"children",{get:function(){return this._routerState.children(this)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"pathFromRoot",{get:function(){return this._routerState.pathFromRoot(this)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"paramMap",{get:function(){return this._paramMap||(this._paramMap=U(this.params)),this._paramMap},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"queryParamMap",{get:function(){return this._queryParamMap||(this._queryParamMap=U(this.queryParams)),this._queryParamMap},enumerable:!0,configurable:!0}),t.prototype.toString=function(){return"Route(url:'"+this.url.map(function(t){return t.toString()}).join("/")+"', path:'"+(this.routeConfig?this.routeConfig.path:"")+"')"},t}(),Ut=function(t){function e(e,n){var r=t.call(this,n)||this;return r.url=e,qt(r,n),r}return Object(r.b)(e,t),e.prototype.toString=function(){return Qt(this._root)},e}(Mt);function qt(t,e){e.value._routerState=t,e.children.forEach(function(e){return qt(t,e)})}function Qt(t){var e=t.children.length>0?" { "+t.children.map(Qt).join(", ")+" } ":"";return""+t.value+e}function Wt(t){if(t.snapshot){var e=t.snapshot,n=t._futureSnapshot;t.snapshot=n,X(e.queryParams,n.queryParams)||t.queryParams.next(n.queryParams),e.fragment!==n.fragment&&t.fragment.next(n.fragment),X(e.params,n.params)||t.params.next(n.params),function(t,e){if(t.length!==e.length)return!1;for(var n=0;n<t.length;++n)if(!X(t[n],e[n]))return!1;return!0}(e.url,n.url)||t.url.next(n.url),X(e.data,n.data)||t.data.next(n.data)}else t.snapshot=t._futureSnapshot,t.data.next(t._futureSnapshot.data)}function Yt(t,e){var n,r;return X(t.params,e.params)&&at(n=t.url,r=e.url)&&n.every(function(t,e){return X(t.parameters,r[e].parameters)})&&!(!t.parent!=!e.parent)&&(!t.parent||Yt(t.parent,e.parent))}function Zt(t){return"object"==typeof t&&null!=t&&!t.outlets&&!t.segmentPath}function Kt(t,e,n,r,i){var o={};return r&&tt(r,function(t,e){o[e]=Array.isArray(t)?t.map(function(t){return""+t}):""+t}),new it(n.root===t?e:function t(e,n,r){var i={};return tt(e.children,function(e,o){i[o]=e===n?r:t(e,n,r)}),new ot(e.segments,i)}(n.root,t,e),o,i)}var Xt=function(){function t(t,e,n){if(this.isAbsolute=t,this.numberOfDoubleDots=e,this.commands=n,t&&n.length>0&&Zt(n[0]))throw new Error("Root segment cannot have matrix parameters");var r=n.find(function(t){return"object"==typeof t&&null!=t&&t.outlets});if(r&&r!==J(n))throw new Error("{outlets:{}} has to be the last command")}return t.prototype.toRoot=function(){return this.isAbsolute&&1===this.commands.length&&"/"==this.commands[0]},t}(),$t=function(t,e,n){this.segmentGroup=t,this.processChildren=e,this.index=n};function Jt(t){return"object"==typeof t&&null!=t&&t.outlets?t.outlets[H]:""+t}function te(t,e,n){if(t||(t=new ot([],{})),0===t.segments.length&&t.hasChildren())return ee(t,e,n);var r=function(t,e,n){for(var r=0,i=e,o={match:!1,pathIndex:0,commandIndex:0};i<t.segments.length;){if(r>=n.length)return o;var l=t.segments[i],a=Jt(n[r]),u=r<n.length-1?n[r+1]:null;if(i>0&&void 0===a)break;if(a&&u&&"object"==typeof u&&void 0===u.outlets){if(!oe(a,u,l))return o;r+=2}else{if(!oe(a,{},l))return o;r++}i++}return{match:!0,pathIndex:i,commandIndex:r}}(t,e,n),i=n.slice(r.commandIndex);if(r.match&&r.pathIndex<t.segments.length){var o=new ot(t.segments.slice(0,r.pathIndex),{});return o.children[H]=new ot(t.segments.slice(r.pathIndex),t.children),ee(o,0,i)}return r.match&&0===i.length?new ot(t.segments,{}):r.match&&!t.hasChildren()?ne(t,e,n):r.match?ee(t,0,i):ne(t,e,n)}function ee(t,e,n){if(0===n.length)return new ot(t.segments,{});var r=function(t){var e,n;return"object"!=typeof t[0]?((e={})[H]=t,e):void 0===t[0].outlets?((n={})[H]=t,n):t[0].outlets}(n),i={};return tt(r,function(n,r){null!==n&&(i[r]=te(t.children[r],e,n))}),tt(t.children,function(t,e){void 0===r[e]&&(i[e]=t)}),new ot(t.segments,i)}function ne(t,e,n){for(var r=t.segments.slice(0,e),i=0;i<n.length;){if("object"==typeof n[i]&&void 0!==n[i].outlets){var o=re(n[i].outlets);return new ot(r,o)}if(0===i&&Zt(n[0]))r.push(new lt(t.segments[e].path,n[0])),i++;else{var l=Jt(n[i]),a=i<n.length-1?n[i+1]:null;l&&a&&Zt(a)?(r.push(new lt(l,ie(a))),i+=2):(r.push(new lt(l,{})),i++)}}return new ot(r,{})}function re(t){var e={};return tt(t,function(t,n){null!==t&&(e[n]=ne(new ot([],{}),0,t))}),e}function ie(t){var e={};return tt(t,function(t,n){return e[n]=""+t}),e}function oe(t,e,n){return t==n.path&&X(e,n.parameters)}var le=function(t){this.path=t,this.route=this.path[this.path.length-1]},ae=function(t,e){this.component=t,this.route=e},ue=function(){function t(t,e,n,r){this.future=t,this.curr=e,this.moduleInjector=n,this.forwardEvent=r,this.canActivateChecks=[],this.canDeactivateChecks=[]}return t.prototype.initialize=function(t){var e=this.future._root;this.setupChildRouteGuards(e,this.curr?this.curr._root:null,t,[e.value])},t.prototype.checkGuards=function(){var t=this;return this.isDeactivating()||this.isActivating()?this.runCanDeactivateChecks().pipe(Object(y.a)(function(e){return e?t.runCanActivateChecks():Object(o.a)(!1)})):Object(o.a)(!0)},t.prototype.resolveData=function(t){var e=this;return this.isActivating()?Object(l.a)(this.canActivateChecks).pipe(Object(v.a)(function(n){return e.runResolve(n.route,t)}),Object(_.a)(function(t,e){return t})):Object(o.a)(null)},t.prototype.isDeactivating=function(){return 0!==this.canDeactivateChecks.length},t.prototype.isActivating=function(){return 0!==this.canActivateChecks.length},t.prototype.setupChildRouteGuards=function(t,e,n,r){var i=this,o=Ft(e);t.children.forEach(function(t){i.setupRouteGuards(t,o[t.value.outlet],n,r.concat([t.value])),delete o[t.value.outlet]}),tt(o,function(t,e){return i.deactivateRouteAndItsChildren(t,n.getContext(e))})},t.prototype.setupRouteGuards=function(t,e,n,r){var i=t.value,o=e?e.value:null,l=n?n.getContext(t.value.outlet):null;if(o&&i.routeConfig===o.routeConfig){var a=this.shouldRunGuardsAndResolvers(o,i,i.routeConfig.runGuardsAndResolvers);a?this.canActivateChecks.push(new le(r)):(i.data=o.data,i._resolvedData=o._resolvedData),this.setupChildRouteGuards(t,e,i.component?l?l.children:null:n,r),a&&this.canDeactivateChecks.push(new ae(l.outlet.component,o))}else o&&this.deactivateRouteAndItsChildren(e,l),this.canActivateChecks.push(new le(r)),this.setupChildRouteGuards(t,null,i.component?l?l.children:null:n,r)},t.prototype.shouldRunGuardsAndResolvers=function(t,e,n){switch(n){case"always":return!0;case"paramsOrQueryParamsChange":return!Yt(t,e)||!X(t.queryParams,e.queryParams);case"paramsChange":default:return!Yt(t,e)}},t.prototype.deactivateRouteAndItsChildren=function(t,e){var n=this,r=Ft(t),i=t.value;tt(r,function(t,r){n.deactivateRouteAndItsChildren(t,i.component?e?e.children.getContext(r):null:e)}),this.canDeactivateChecks.push(new ae(i.component&&e&&e.outlet&&e.outlet.isActivated?e.outlet.component:null,i))},t.prototype.runCanDeactivateChecks=function(){var t=this;return Object(l.a)(this.canDeactivateChecks).pipe(Object(y.a)(function(e){return t.runCanDeactivate(e.component,e.route)}),Object(m.a)(function(t){return!0===t}))},t.prototype.runCanActivateChecks=function(){var t=this;return Object(l.a)(this.canActivateChecks).pipe(Object(v.a)(function(e){return et(Object(l.a)([t.fireChildActivationStart(e.route.parent),t.fireActivationStart(e.route),t.runCanActivateChild(e.path),t.runCanActivate(e.route)]))}),Object(m.a)(function(t){return!0===t}))},t.prototype.fireActivationStart=function(t){return null!==t&&this.forwardEvent&&this.forwardEvent(new F(t)),Object(o.a)(!0)},t.prototype.fireChildActivationStart=function(t){return null!==t&&this.forwardEvent&&this.forwardEvent(new N(t)),Object(o.a)(!0)},t.prototype.runCanActivate=function(t){var e=this,n=t.routeConfig?t.routeConfig.canActivate:null;return n&&0!==n.length?et(Object(l.a)(n).pipe(Object(h.a)(function(n){var r=e.getToken(n,t);return nt(r.canActivate?r.canActivate(t,e.future):r(t,e.future)).pipe(Object(b.a)())}))):Object(o.a)(!0)},t.prototype.runCanActivateChild=function(t){var e=this,n=t[t.length-1],r=t.slice(0,t.length-1).reverse().map(function(t){return e.extractCanActivateChild(t)}).filter(function(t){return null!==t});return et(Object(l.a)(r).pipe(Object(h.a)(function(t){return et(Object(l.a)(t.guards).pipe(Object(h.a)(function(r){var i=e.getToken(r,t.node);return nt(i.canActivateChild?i.canActivateChild(n,e.future):i(n,e.future)).pipe(Object(b.a)())})))})))},t.prototype.extractCanActivateChild=function(t){var e=t.routeConfig?t.routeConfig.canActivateChild:null;return e&&0!==e.length?{node:t,guards:e}:null},t.prototype.runCanDeactivate=function(t,e){var n=this,r=e&&e.routeConfig?e.routeConfig.canDeactivate:null;return r&&0!==r.length?Object(l.a)(r).pipe(Object(y.a)(function(r){var i=n.getToken(r,e);return nt(i.canDeactivate?i.canDeactivate(t,e,n.curr,n.future):i(t,e,n.curr,n.future)).pipe(Object(b.a)())})).pipe(Object(m.a)(function(t){return!0===t})):Object(o.a)(!0)},t.prototype.runResolve=function(t,e){return this.resolveNode(t._resolve,t).pipe(Object(h.a)(function(n){return t._resolvedData=n,t.data=Object(r.a)({},t.data,Ht(t,e).resolve),null}))},t.prototype.resolveNode=function(t,e){var n=this,r=Object.keys(t);if(0===r.length)return Object(o.a)({});if(1===r.length){var i=r[0];return this.getResolver(t[i],e).pipe(Object(h.a)(function(t){var e;return(e={})[i]=t,e}))}var a={};return Object(l.a)(r).pipe(Object(y.a)(function(r){return n.getResolver(t[r],e).pipe(Object(h.a)(function(t){return a[r]=t,t}))})).pipe(Object(d.a)(),Object(h.a)(function(){return a}))},t.prototype.getResolver=function(t,e){var n=this.getToken(t,e);return nt(n.resolve?n.resolve(e,this.future):n(e,this.future))},t.prototype.getToken=function(t,e){var n=function(t){if(!t)return null;for(var e=t.parent;e;e=e.parent){var n=e.routeConfig;if(n&&n._loadedConfig)return n._loadedConfig}return null}(e);return(n?n.module.injector:this.moduleInjector).get(t)},t}(),se=function(){},ce=function(){function t(t,e,n,r,i,o){this.rootComponentType=t,this.config=e,this.urlTree=n,this.url=r,this.paramsInheritanceStrategy=i,this.relativeLinkResolution=o}return t.prototype.recognize=function(){try{var t=de(this.urlTree.root,[],[],this.config,this.relativeLinkResolution).segmentGroup,e=this.processSegmentGroup(this.config,t,H),n=new Gt([],Object.freeze({}),Object.freeze(Object(r.a)({},this.urlTree.queryParams)),this.urlTree.fragment,{},H,this.rootComponentType,null,this.urlTree.root,-1,{}),i=new Lt(n,e),l=new Ut(this.url,i);return this.inheritParamsAndData(l._root),Object(o.a)(l)}catch(t){return new a.a(function(e){return e.error(t)})}},t.prototype.inheritParamsAndData=function(t){var e=this,n=t.value,r=Ht(n,this.paramsInheritanceStrategy);n.params=Object.freeze(r.params),n.data=Object.freeze(r.data),t.children.forEach(function(t){return e.inheritParamsAndData(t)})},t.prototype.processSegmentGroup=function(t,e,n){return 0===e.segments.length&&e.hasChildren()?this.processChildren(t,e):this.processSegment(t,e,e.segments,n)},t.prototype.processChildren=function(t,e){var n,r=this,i=ut(e,function(e,n){return r.processSegmentGroup(t,e,n)});return n={},i.forEach(function(t){var e=n[t.value.outlet];if(e){var r=e.url.map(function(t){return t.toString()}).join("/"),i=t.value.url.map(function(t){return t.toString()}).join("/");throw new Error("Two segments cannot have the same outlet name: '"+r+"' and '"+i+"'.")}n[t.value.outlet]=t.value}),i.sort(function(t,e){return t.value.outlet===H?-1:e.value.outlet===H?1:t.value.outlet.localeCompare(e.value.outlet)}),i},t.prototype.processSegment=function(t,e,n,i){var o,l;try{for(var a=Object(r.e)(t),u=a.next();!u.done;u=a.next()){var s=u.value;try{return this.processSegmentAgainstRoute(s,e,n,i)}catch(t){if(!(t instanceof se))throw t}}}catch(t){o={error:t}}finally{try{u&&!u.done&&(l=a.return)&&l.call(a)}finally{if(o)throw o.error}}if(this.noLeftoversInUrl(e,n,i))return[];throw new se},t.prototype.noLeftoversInUrl=function(t,e,n){return 0===e.length&&!t.children[n]},t.prototype.processSegmentAgainstRoute=function(t,e,n,i){if(t.redirectTo)throw new se;if((t.outlet||H)!==i)throw new se;var o,l=[],a=[];if("**"===t.path){var u=n.length>0?J(n).parameters:{};o=new Gt(n,u,Object.freeze(Object(r.a)({},this.urlTree.queryParams)),this.urlTree.fragment,ge(t),i,t.component,t,he(e),fe(e)+n.length,be(t))}else{var s=function(t,e,n){if(""===e.path){if("full"===e.pathMatch&&(t.hasChildren()||n.length>0))throw new se;return{consumedSegments:[],lastChild:0,parameters:{}}}var i=(e.matcher||q)(n,t,e);if(!i)throw new se;var o={};tt(i.posParams,function(t,e){o[e]=t.path});var l=i.consumed.length>0?Object(r.a)({},o,i.consumed[i.consumed.length-1].parameters):o;return{consumedSegments:i.consumed,lastChild:i.consumed.length,parameters:l}}(e,t,n);l=s.consumedSegments,a=n.slice(s.lastChild),o=new Gt(l,s.parameters,Object.freeze(Object(r.a)({},this.urlTree.queryParams)),this.urlTree.fragment,ge(t),i,t.component,t,he(e),fe(e)+l.length,be(t))}var c=function(t){return t.children?t.children:t.loadChildren?t._loadedConfig.routes:[]}(t),h=de(e,l,a,c,this.relativeLinkResolution),f=h.segmentGroup,d=h.slicedSegments;if(0===d.length&&f.hasChildren()){var p=this.processChildren(c,f);return[new Lt(o,p)]}if(0===c.length&&0===d.length)return[new Lt(o,[])];var m=this.processSegment(c,f,d,H);return[new Lt(o,m)]},t}();function he(t){for(var e=t;e._sourceSegment;)e=e._sourceSegment;return e}function fe(t){for(var e=t,n=e._segmentIndexShift?e._segmentIndexShift:0;e._sourceSegment;)n+=(e=e._sourceSegment)._segmentIndexShift?e._segmentIndexShift:0;return n-1}function de(t,e,n,i,o){if(n.length>0&&function(t,e,n){return i.some(function(n){return pe(t,e,n)&&me(n)!==H})}(t,n)){var l=new ot(e,function(t,e,n,i){var o,l,a={};a[H]=i,i._sourceSegment=t,i._segmentIndexShift=e.length;try{for(var u=Object(r.e)(n),s=u.next();!s.done;s=u.next()){var c=s.value;if(""===c.path&&me(c)!==H){var h=new ot([],{});h._sourceSegment=t,h._segmentIndexShift=e.length,a[me(c)]=h}}}catch(t){o={error:t}}finally{try{s&&!s.done&&(l=u.return)&&l.call(u)}finally{if(o)throw o.error}}return a}(t,e,i,new ot(n,t.children)));return l._sourceSegment=t,l._segmentIndexShift=e.length,{segmentGroup:l,slicedSegments:[]}}if(0===n.length&&function(t,e,n){return i.some(function(n){return pe(t,e,n)})}(t,n)){var a=new ot(t.segments,function(t,e,n,i,o,l){var a,u,s={};try{for(var c=Object(r.e)(i),h=c.next();!h.done;h=c.next()){var f=h.value;if(pe(t,n,f)&&!o[me(f)]){var d=new ot([],{});d._sourceSegment=t,d._segmentIndexShift="legacy"===l?t.segments.length:e.length,s[me(f)]=d}}}catch(t){a={error:t}}finally{try{h&&!h.done&&(u=c.return)&&u.call(c)}finally{if(a)throw a.error}}return Object(r.a)({},o,s)}(t,e,n,i,t.children,o));return a._sourceSegment=t,a._segmentIndexShift=e.length,{segmentGroup:a,slicedSegments:n}}var u=new ot(t.segments,t.children);return u._sourceSegment=t,u._segmentIndexShift=e.length,{segmentGroup:u,slicedSegments:n}}function pe(t,e,n){return(!(t.hasChildren()||e.length>0)||"full"!==n.pathMatch)&&""===n.path&&void 0===n.redirectTo}function me(t){return t.outlet||H}function ge(t){return t.data||{}}function be(t){return t.resolve||{}}var ye=function(){},ve=function(){function t(){}return t.prototype.shouldDetach=function(t){return!1},t.prototype.store=function(t,e){},t.prototype.shouldAttach=function(t){return!1},t.prototype.retrieve=function(t){return null},t.prototype.shouldReuseRoute=function(t,e){return t.routeConfig===e.routeConfig},t}(),_e=new i.q("ROUTES"),we=function(){function t(t,e,n,r){this.loader=t,this.compiler=e,this.onLoadStartListener=n,this.onLoadEndListener=r}return t.prototype.load=function(t,e){var n=this;return this.onLoadStartListener&&this.onLoadStartListener(e),this.loadModuleFactory(e.loadChildren).pipe(Object(h.a)(function(r){n.onLoadEndListener&&n.onLoadEndListener(e);var i=r.create(t);return new Q($(i.injector.get(_e)).map(K),i)}))},t.prototype.loadModuleFactory=function(t){var e=this;return"string"==typeof t?Object(l.a)(this.loader.load(t)):nt(t()).pipe(Object(y.a)(function(t){return t instanceof i.v?Object(o.a)(t):Object(l.a)(e.compiler.compileModuleAsync(t))}))},t}(),xe=function(){},Se=function(){function t(){}return t.prototype.shouldProcessUrl=function(t){return!0},t.prototype.extract=function(t){return t},t.prototype.merge=function(t,e){return t},t}();function Ce(t){throw t}function ke(t,e,n){return e.parse("/")}function Re(t,e){return Object(o.a)(null)}var je=function(){function t(t,e,n,r,o,l,a,u){var h=this;this.rootComponentType=t,this.urlSerializer=e,this.rootContexts=n,this.location=r,this.config=u,this.navigations=new s.a(null),this.navigationId=0,this.events=new c.a,this.errorHandler=Ce,this.malformedUriErrorHandler=ke,this.navigated=!1,this.lastSuccessfulId=-1,this.hooks={beforePreactivation:Re,afterPreactivation:Re},this.urlHandlingStrategy=new Se,this.routeReuseStrategy=new ve,this.onSameUrlNavigation="ignore",this.paramsInheritanceStrategy="emptyOnly",this.urlUpdateStrategy="deferred",this.relativeLinkResolution="legacy",this.ngModule=o.get(i.x),this.resetConfig(u),this.currentUrlTree=new it(new ot([],{}),{},null),this.rawUrlTree=this.currentUrlTree,this.configLoader=new we(l,a,function(t){return h.triggerEvent(new M(t))},function(t){return h.triggerEvent(new D(t))}),this.routerState=Vt(this.currentUrlTree,this.rootComponentType),this.processNavigations()}return t.prototype.resetRootComponentType=function(t){this.rootComponentType=t,this.routerState.root.component=this.rootComponentType},t.prototype.initialNavigation=function(){this.setUpLocationChangeListener(),0===this.navigationId&&this.navigateByUrl(this.location.path(!0),{replaceUrl:!0})},t.prototype.setUpLocationChangeListener=function(){var t=this;this.locationSubscription||(this.locationSubscription=this.location.subscribe(function(e){var n=t.parseUrl(e.url),r="popstate"===e.type?"popstate":"hashchange",i=e.state&&e.state.navigationId?{navigationId:e.state.navigationId}:null;setTimeout(function(){t.scheduleNavigation(n,r,i,{replaceUrl:!0})},0)}))},Object.defineProperty(t.prototype,"url",{get:function(){return this.serializeUrl(this.currentUrlTree)},enumerable:!0,configurable:!0}),t.prototype.triggerEvent=function(t){this.events.next(t)},t.prototype.resetConfig=function(t){W(t),this.config=t.map(K),this.navigated=!1,this.lastSuccessfulId=-1},t.prototype.ngOnDestroy=function(){this.dispose()},t.prototype.dispose=function(){this.locationSubscription&&(this.locationSubscription.unsubscribe(),this.locationSubscription=null)},t.prototype.createUrlTree=function(t,e){void 0===e&&(e={});var n=e.relativeTo,o=e.queryParams,l=e.fragment,a=e.preserveQueryParams,u=e.queryParamsHandling,s=e.preserveFragment;Object(i.Z)()&&a&&console&&console.warn&&console.warn("preserveQueryParams is deprecated, use queryParamsHandling instead.");var c=n||this.routerState.root,h=s?this.currentUrlTree.fragment:l,f=null;if(u)switch(u){case"merge":f=Object(r.a)({},this.currentUrlTree.queryParams,o);break;case"preserve":f=this.currentUrlTree.queryParams;break;default:f=o||null}else f=a?this.currentUrlTree.queryParams:o||null;return null!==f&&(f=this.removeEmptyProps(f)),function(t,e,n,i,o){if(0===n.length)return Kt(e.root,e.root,e,i,o);var l=function(t){if("string"==typeof t[0]&&1===t.length&&"/"===t[0])return new Xt(!0,0,t);var e=0,n=!1,i=t.reduce(function(t,i,o){if("object"==typeof i&&null!=i){if(i.outlets){var l={};return tt(i.outlets,function(t,e){l[e]="string"==typeof t?t.split("/"):t}),Object(r.d)(t,[{outlets:l}])}if(i.segmentPath)return Object(r.d)(t,[i.segmentPath])}return"string"!=typeof i?Object(r.d)(t,[i]):0===o?(i.split("/").forEach(function(r,i){0==i&&"."===r||(0==i&&""===r?n=!0:".."===r?e++:""!=r&&t.push(r))}),t):Object(r.d)(t,[i])},[]);return new Xt(n,e,i)}(n);if(l.toRoot())return Kt(e.root,new ot([],{}),e,i,o);var a=function(t,n,r){if(t.isAbsolute)return new $t(e.root,!0,0);if(-1===r.snapshot._lastPathIndex)return new $t(r.snapshot._urlSegment,!0,0);var i=Zt(t.commands[0])?0:1;return function(e,n,o){for(var l=r.snapshot._urlSegment,a=r.snapshot._lastPathIndex+i,u=t.numberOfDoubleDots;u>a;){if(u-=a,!(l=l.parent))throw new Error("Invalid number of '../'");a=l.segments.length}return new $t(l,!1,a-u)}()}(l,0,t),u=a.processChildren?ee(a.segmentGroup,a.index,l.commands):te(a.segmentGroup,a.index,l.commands);return Kt(a.segmentGroup,u,e,i,o)}(c,this.currentUrlTree,t,f,h)},t.prototype.navigateByUrl=function(t,e){void 0===e&&(e={skipLocationChange:!1});var n=t instanceof it?t:this.parseUrl(t),r=this.urlHandlingStrategy.merge(n,this.rawUrlTree);return this.scheduleNavigation(r,"imperative",null,e)},t.prototype.navigate=function(t,e){return void 0===e&&(e={skipLocationChange:!1}),function(t){for(var e=0;e<t.length;e++){var n=t[e];if(null==n)throw new Error("The requested path contains "+n+" segment at index "+e)}}(t),this.navigateByUrl(this.createUrlTree(t,e),e)},t.prototype.serializeUrl=function(t){return this.urlSerializer.serialize(t)},t.prototype.parseUrl=function(t){var e;try{e=this.urlSerializer.parse(t)}catch(n){e=this.malformedUriErrorHandler(n,this.urlSerializer,t)}return e},t.prototype.isActive=function(t,e){if(t instanceof it)return rt(this.currentUrlTree,t,e);var n=this.parseUrl(t);return rt(this.currentUrlTree,n,e)},t.prototype.removeEmptyProps=function(t){return Object.keys(t).reduce(function(e,n){var r=t[n];return null!==r&&void 0!==r&&(e[n]=r),e},{})},t.prototype.processNavigations=function(){var t=this;this.navigations.pipe(Object(v.a)(function(e){return e?(t.executeScheduledNavigation(e),e.promise.catch(function(){})):Object(o.a)(null)})).subscribe(function(){})},t.prototype.scheduleNavigation=function(t,e,n,r){var i=this.navigations.value;if(i&&"imperative"!==e&&"imperative"===i.source&&i.rawUrl.toString()===t.toString())return Promise.resolve(!0);if(i&&"hashchange"==e&&"popstate"===i.source&&i.rawUrl.toString()===t.toString())return Promise.resolve(!0);if(i&&"popstate"==e&&"hashchange"===i.source&&i.rawUrl.toString()===t.toString())return Promise.resolve(!0);var o=null,l=null,a=new Promise(function(t,e){o=t,l=e}),u=++this.navigationId;return this.navigations.next({id:u,source:e,state:n,rawUrl:t,extras:r,resolve:o,reject:l,promise:a}),a.catch(function(t){return Promise.reject(t)})},t.prototype.executeScheduledNavigation=function(t){var e=this,n=t.id,r=t.rawUrl,i=t.extras,o=t.resolve,l=t.reject,a=t.source,u=t.state,s=this.urlHandlingStrategy.extract(r),c=!this.navigated||s.toString()!==this.currentUrlTree.toString();("reload"===this.onSameUrlNavigation||c)&&this.urlHandlingStrategy.shouldProcessUrl(r)?("eager"!==this.urlUpdateStrategy||i.skipLocationChange||this.setBrowserUrl(r,!!i.replaceUrl,n),this.events.next(new k(n,this.serializeUrl(s),a,u)),Promise.resolve().then(function(t){return e.runNavigate(s,r,!!i.skipLocationChange,!!i.replaceUrl,n,null)}).then(o,l)):c&&this.rawUrlTree&&this.urlHandlingStrategy.shouldProcessUrl(this.rawUrlTree)?(this.events.next(new k(n,this.serializeUrl(s),a,u)),Promise.resolve().then(function(t){return e.runNavigate(s,r,!1,!1,n,Vt(s,e.rootComponentType).snapshot)}).then(o,l)):(this.rawUrlTree=r,o(null))},t.prototype.runNavigate=function(t,e,n,i,l,a){var u=this;return l!==this.navigationId?(this.events.next(new j(l,this.serializeUrl(t),"Navigation ID "+l+" is not equal to the current navigation id "+this.navigationId)),Promise.resolve(!1)):new Promise(function(c,f){var d,p=(a?Object(o.a)({appliedUrl:t,snapshot:a}):new Et(u.ngModule.injector,u.configLoader,u.urlSerializer,t,u.config).apply().pipe(Object(y.a)(function(e){return function(t,e,n,r,i,o){return void 0===i&&(i="emptyOnly"),void 0===o&&(o="legacy"),new ce(t,e,n,r,i,o).recognize()}(u.rootComponentType,u.config,e,u.serializeUrl(e),u.paramsInheritanceStrategy,u.relativeLinkResolution).pipe(Object(h.a)(function(n){return u.events.next(new E(l,u.serializeUrl(t),u.serializeUrl(e),n)),{appliedUrl:e,snapshot:n}}))}))).pipe(Object(y.a)(function(r){return"boolean"==typeof r?Object(o.a)(r):u.hooks.beforePreactivation(r.snapshot,{navigationId:l,appliedUrlTree:t,rawUrlTree:e,skipLocationChange:n,replaceUrl:i}).pipe(Object(h.a)(function(){return r}))})).pipe(Object(h.a)(function(t){if("boolean"==typeof t)return t;var e=t.appliedUrl,n=t.snapshot;return(d=new ue(n,u.routerState.snapshot,u.ngModule.injector,function(t){return u.triggerEvent(t)})).initialize(u.rootContexts),{appliedUrl:e,snapshot:n}})).pipe(Object(y.a)(function(e){if("boolean"==typeof e||u.navigationId!==l)return Object(o.a)(!1);var n=e.appliedUrl,r=e.snapshot;return u.triggerEvent(new T(l,u.serializeUrl(t),u.serializeUrl(n),r)),d.checkGuards().pipe(Object(h.a)(function(e){return u.triggerEvent(new P(l,u.serializeUrl(t),u.serializeUrl(n),r,e)),{appliedUrl:n,snapshot:r,shouldActivate:e}}))})).pipe(Object(y.a)(function(e){return"boolean"==typeof e||u.navigationId!==l?Object(o.a)(!1):e.shouldActivate&&d.isActivating()?(u.triggerEvent(new I(l,u.serializeUrl(t),u.serializeUrl(e.appliedUrl),e.snapshot)),d.resolveData(u.paramsInheritanceStrategy).pipe(Object(h.a)(function(){return u.triggerEvent(new A(l,u.serializeUrl(t),u.serializeUrl(e.appliedUrl),e.snapshot)),e}))):Object(o.a)(e)})).pipe(Object(y.a)(function(r){return"boolean"==typeof r||u.navigationId!==l?Object(o.a)(!1):u.hooks.afterPreactivation(r.snapshot,{navigationId:l,appliedUrlTree:t,rawUrlTree:e,skipLocationChange:n,replaceUrl:i}).pipe(Object(h.a)(function(){return r}))})).pipe(Object(h.a)(function(t){if("boolean"==typeof t||u.navigationId!==l)return!1;var e,n,i,o=t.appliedUrl,a=t.shouldActivate;return a?{appliedUrl:o,state:(i=function t(e,n,i){if(i&&e.shouldReuseRoute(n.value,i.value.snapshot)){(c=i.value)._futureSnapshot=n.value;var o=function(e,n,i){return n.children.map(function(n){var o,l;try{for(var a=Object(r.e)(i.children),u=a.next();!u.done;u=a.next()){var s=u.value;if(e.shouldReuseRoute(s.value.snapshot,n.value))return t(e,n,s)}}catch(t){o={error:t}}finally{try{u&&!u.done&&(l=a.return)&&l.call(a)}finally{if(o)throw o.error}}return t(e,n)})}(e,n,i);return new Lt(c,o)}var l=e.retrieve(n.value);if(l){var a=l.route;return function t(e,n){if(e.value.routeConfig!==n.value.routeConfig)throw new Error("Cannot reattach ActivatedRouteSnapshot created from a different route");if(e.children.length!==n.children.length)throw new Error("Cannot reattach ActivatedRouteSnapshot with a different number of children");n.value._futureSnapshot=e.value;for(var r=0;r<e.children.length;++r)t(e.children[r],n.children[r])}(n,a),a}var u,c=new Bt(new s.a((u=n.value).url),new s.a(u.params),new s.a(u.queryParams),new s.a(u.fragment),new s.a(u.data),u.outlet,u.component,u);return o=n.children.map(function(n){return t(e,n)}),new Lt(c,o)}(u.routeReuseStrategy,(e=t.snapshot)._root,(n=u.routerState)?n._root:void 0),new zt(i,e)),shouldActivate:a}:{appliedUrl:o,state:null,shouldActivate:a}}));u.activateRoutes(p,u.routerState,u.currentUrlTree,l,t,e,n,i,c,f)})},t.prototype.activateRoutes=function(t,e,n,r,i,o,l,a,u,s){var c,h=this;t.forEach(function(t){if("boolean"!=typeof t&&t.shouldActivate&&r===h.navigationId&&t.state){var n=t.state;h.currentUrlTree=t.appliedUrl,h.rawUrlTree=h.urlHandlingStrategy.merge(h.currentUrlTree,o),h.routerState=n,"deferred"!==h.urlUpdateStrategy||l||h.setBrowserUrl(h.rawUrlTree,a,r),new Oe(h.routeReuseStrategy,n,e,function(t){return h.triggerEvent(t)}).activate(h.rootContexts),c=!0}else c=!1}).then(function(){c?(h.navigated=!0,h.lastSuccessfulId=r,h.events.next(new R(r,h.serializeUrl(i),h.serializeUrl(h.currentUrlTree))),u(!0)):(h.resetUrlToCurrentUrlTree(),h.events.next(new j(r,h.serializeUrl(i),"")),u(!1))},function(t){if((l=t)&&l.ngNavigationCancelingError)h.navigated=!0,h.resetStateAndUrl(e,n,o),h.events.next(new j(r,h.serializeUrl(i),t.message)),u(!1);else{h.resetStateAndUrl(e,n,o),h.events.next(new O(r,h.serializeUrl(i),t));try{u(h.errorHandler(t))}catch(t){s(t)}}var l})},t.prototype.setBrowserUrl=function(t,e,n){var r=this.urlSerializer.serialize(t);this.location.isCurrentPathEqualTo(r)||e?this.location.replaceState(r,"",{navigationId:n}):this.location.go(r,"",{navigationId:n})},t.prototype.resetStateAndUrl=function(t,e,n){this.routerState=t,this.currentUrlTree=e,this.rawUrlTree=this.urlHandlingStrategy.merge(this.currentUrlTree,n),this.resetUrlToCurrentUrlTree()},t.prototype.resetUrlToCurrentUrlTree=function(){this.location.replaceState(this.urlSerializer.serialize(this.rawUrlTree),"",{navigationId:this.lastSuccessfulId})},t}(),Oe=function(){function t(t,e,n,r){this.routeReuseStrategy=t,this.futureState=e,this.currState=n,this.forwardEvent=r}return t.prototype.activate=function(t){var e=this.futureState._root,n=this.currState?this.currState._root:null;this.deactivateChildRoutes(e,n,t),Wt(this.futureState.root),this.activateChildRoutes(e,n,t)},t.prototype.deactivateChildRoutes=function(t,e,n){var r=this,i=Ft(e);t.children.forEach(function(t){var e=t.value.outlet;r.deactivateRoutes(t,i[e],n),delete i[e]}),tt(i,function(t,e){r.deactivateRouteAndItsChildren(t,n)})},t.prototype.deactivateRoutes=function(t,e,n){var r=t.value,i=e?e.value:null;if(r===i)if(r.component){var o=n.getContext(r.outlet);o&&this.deactivateChildRoutes(t,e,o.children)}else this.deactivateChildRoutes(t,e,n);else i&&this.deactivateRouteAndItsChildren(e,n)},t.prototype.deactivateRouteAndItsChildren=function(t,e){this.routeReuseStrategy.shouldDetach(t.value.snapshot)?this.detachAndStoreRouteSubtree(t,e):this.deactivateRouteAndOutlet(t,e)},t.prototype.detachAndStoreRouteSubtree=function(t,e){var n=e.getContext(t.value.outlet);if(n&&n.outlet){var r=n.outlet.detach(),i=n.children.onOutletDeactivated();this.routeReuseStrategy.store(t.value.snapshot,{componentRef:r,route:t,contexts:i})}},t.prototype.deactivateRouteAndOutlet=function(t,e){var n=this,r=e.getContext(t.value.outlet);if(r){var i=Ft(t),o=t.value.component?r.children:e;tt(i,function(t,e){return n.deactivateRouteAndItsChildren(t,o)}),r.outlet&&(r.outlet.deactivate(),r.children.onOutletDeactivated())}},t.prototype.activateChildRoutes=function(t,e,n){var r=this,i=Ft(e);t.children.forEach(function(t){r.activateRoutes(t,i[t.value.outlet],n),r.forwardEvent(new z(t.value.snapshot))}),t.children.length&&this.forwardEvent(new L(t.value.snapshot))},t.prototype.activateRoutes=function(t,e,n){var r=t.value,i=e?e.value:null;if(Wt(r),r===i)if(r.component){var o=n.getOrCreateContext(r.outlet);this.activateChildRoutes(t,e,o.children)}else this.activateChildRoutes(t,e,n);else if(r.component)if(o=n.getOrCreateContext(r.outlet),this.routeReuseStrategy.shouldAttach(r.snapshot)){var l=this.routeReuseStrategy.retrieve(r.snapshot);this.routeReuseStrategy.store(r.snapshot,null),o.children.onOutletReAttached(l.contexts),o.attachRef=l.componentRef,o.route=l.route.value,o.outlet&&o.outlet.attach(l.componentRef,l.route.value),Ee(l.route)}else{var a=function(t){for(var e=r.snapshot.parent;e;e=e.parent){var n=e.routeConfig;if(n&&n._loadedConfig)return n._loadedConfig;if(n&&n.component)return null}return null}(),u=a?a.module.componentFactoryResolver:null;o.route=r,o.resolver=u,o.outlet&&o.outlet.activateWith(r,u),this.activateChildRoutes(t,null,o.children)}else this.activateChildRoutes(t,null,n)},t}();function Ee(t){Wt(t.value),t.children.forEach(Ee)}var Te=function(){function t(t,e,n,r,i){this.router=t,this.route=e,this.commands=[],null==n&&r.setAttribute(i.nativeElement,"tabindex","0")}return Object.defineProperty(t.prototype,"routerLink",{set:function(t){this.commands=null!=t?Array.isArray(t)?t:[t]:[]},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"preserveQueryParams",{set:function(t){Object(i.Z)()&&console&&console.warn&&console.warn("preserveQueryParams is deprecated!, use queryParamsHandling instead."),this.preserve=t},enumerable:!0,configurable:!0}),t.prototype.onClick=function(){var t={skipLocationChange:Pe(this.skipLocationChange),replaceUrl:Pe(this.replaceUrl)};return this.router.navigateByUrl(this.urlTree,t),!0},Object.defineProperty(t.prototype,"urlTree",{get:function(){return this.router.createUrlTree(this.commands,{relativeTo:this.route,queryParams:this.queryParams,fragment:this.fragment,preserveQueryParams:Pe(this.preserve),queryParamsHandling:this.queryParamsHandling,preserveFragment:Pe(this.preserveFragment)})},enumerable:!0,configurable:!0}),t}();function Pe(t){return""===t||!!t}var Ie=function(){return function(){this.outlet=null,this.route=null,this.resolver=null,this.children=new Ae,this.attachRef=null}}(),Ae=function(){function t(){this.contexts=new Map}return t.prototype.onChildOutletCreated=function(t,e){var n=this.getOrCreateContext(t);n.outlet=e,this.contexts.set(t,n)},t.prototype.onChildOutletDestroyed=function(t){var e=this.getContext(t);e&&(e.outlet=null)},t.prototype.onOutletDeactivated=function(){var t=this.contexts;return this.contexts=new Map,t},t.prototype.onOutletReAttached=function(t){this.contexts=t},t.prototype.getOrCreateContext=function(t){var e=this.getContext(t);return e||(e=new Ie,this.contexts.set(t,e)),e},t.prototype.getContext=function(t){return this.contexts.get(t)||null},t}(),Me=function(){function t(t,e,n,r,o){this.parentContexts=t,this.location=e,this.resolver=n,this.changeDetector=o,this.activated=null,this._activatedRoute=null,this.activateEvents=new i.n,this.deactivateEvents=new i.n,this.name=r||H,t.onChildOutletCreated(this.name,this)}return t.prototype.ngOnDestroy=function(){this.parentContexts.onChildOutletDestroyed(this.name)},t.prototype.ngOnInit=function(){if(!this.activated){var t=this.parentContexts.getContext(this.name);t&&t.route&&(t.attachRef?this.attach(t.attachRef,t.route):this.activateWith(t.route,t.resolver||null))}},Object.defineProperty(t.prototype,"isActivated",{get:function(){return!!this.activated},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"component",{get:function(){if(!this.activated)throw new Error("Outlet is not activated");return this.activated.instance},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"activatedRoute",{get:function(){if(!this.activated)throw new Error("Outlet is not activated");return this._activatedRoute},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"activatedRouteData",{get:function(){return this._activatedRoute?this._activatedRoute.snapshot.data:{}},enumerable:!0,configurable:!0}),t.prototype.detach=function(){if(!this.activated)throw new Error("Outlet is not activated");this.location.detach();var t=this.activated;return this.activated=null,this._activatedRoute=null,t},t.prototype.attach=function(t,e){this.activated=t,this._activatedRoute=e,this.location.insert(t.hostView)},t.prototype.deactivate=function(){if(this.activated){var t=this.component;this.activated.destroy(),this.activated=null,this._activatedRoute=null,this.deactivateEvents.emit(t)}},t.prototype.activateWith=function(t,e){if(this.isActivated)throw new Error("Cannot activate an already activated outlet");this._activatedRoute=t;var n=(e=e||this.resolver).resolveComponentFactory(t._futureSnapshot.routeConfig.component),r=this.parentContexts.getOrCreateContext(this.name).children,i=new De(t,r,this.location.injector);this.activated=this.location.createComponent(n,this.location.length,i),this.changeDetector.markForCheck(),this.activateEvents.emit(this.activated.instance)},t}(),De=function(){function t(t,e,n){this.route=t,this.childContexts=e,this.parent=n}return t.prototype.get=function(t,e){return t===Bt?this.route:t===Ae?this.childContexts:this.parent.get(t,e)},t}(),Ne=function(){},Le=function(){function t(){}return t.prototype.preload=function(t,e){return e().pipe(Object(g.a)(function(){return Object(o.a)(null)}))},t}(),Fe=function(){function t(){}return t.prototype.preload=function(t,e){return Object(o.a)(null)},t}(),ze=function(){function t(t,e,n,r,i){this.router=t,this.injector=r,this.preloadingStrategy=i,this.loader=new we(e,n,function(e){return t.triggerEvent(new M(e))},function(e){return t.triggerEvent(new D(e))})}return t.prototype.setUpPreloading=function(){var t=this;this.subscription=this.router.events.pipe(Object(w.a)(function(t){return t instanceof R}),Object(v.a)(function(){return t.preload()})).subscribe(function(){})},t.prototype.preload=function(){var t=this.injector.get(i.x);return this.processRoutes(t,this.router.config)},t.prototype.ngOnDestroy=function(){this.subscription.unsubscribe()},t.prototype.processRoutes=function(t,e){var n,i,o=[];try{for(var a=Object(r.e)(e),u=a.next();!u.done;u=a.next()){var s=u.value;if(s.loadChildren&&!s.canLoad&&s._loadedConfig){var c=s._loadedConfig;o.push(this.processRoutes(c.module,c.routes))}else s.loadChildren&&!s.canLoad?o.push(this.preloadConfig(t,s)):s.children&&o.push(this.processRoutes(t,s.children))}}catch(t){n={error:t}}finally{try{u&&!u.done&&(i=a.return)&&i.call(a)}finally{if(n)throw n.error}}return Object(l.a)(o).pipe(Object(p.a)(),Object(h.a)(function(t){}))},t.prototype.preloadConfig=function(t,e){var n=this;return this.preloadingStrategy.preload(e,function(){return n.loader.load(t.injector,e).pipe(Object(y.a)(function(t){return e._loadedConfig=t,n.processRoutes(t.module,t.routes)}))})},t}(),Ve=function(){function t(t,e,n){void 0===n&&(n={}),this.router=t,this.viewportScroller=e,this.options=n,this.lastId=0,this.lastSource="imperative",this.restoredId=0,this.store={},n.scrollPositionRestoration=n.scrollPositionRestoration||"disabled",n.anchorScrolling=n.anchorScrolling||"disabled"}return t.prototype.init=function(){"disabled"!==this.options.scrollPositionRestoration&&this.viewportScroller.setHistoryScrollRestoration("manual"),this.routerEventsSubscription=this.createScrollEvents(),this.scrollEventsSubscription=this.consumeScrollEvents()},t.prototype.createScrollEvents=function(){var t=this;return this.router.events.subscribe(function(e){e instanceof k?(t.store[t.lastId]=t.viewportScroller.getScrollPosition(),t.lastSource=e.navigationTrigger,t.restoredId=e.restoredState?e.restoredState.navigationId:0):e instanceof R&&(t.lastId=e.id,t.scheduleScrollEvent(e,t.router.parseUrl(e.urlAfterRedirects).fragment))})},t.prototype.consumeScrollEvents=function(){var t=this;return this.router.events.subscribe(function(e){e instanceof V&&(e.position?"top"===t.options.scrollPositionRestoration?t.viewportScroller.scrollToPosition([0,0]):"enabled"===t.options.scrollPositionRestoration&&t.viewportScroller.scrollToPosition(e.position):e.anchor&&"enabled"===t.options.anchorScrolling?t.viewportScroller.scrollToAnchor(e.anchor):"disabled"!==t.options.scrollPositionRestoration&&t.viewportScroller.scrollToPosition([0,0]))})},t.prototype.scheduleScrollEvent=function(t,e){this.router.triggerEvent(new V(t,"popstate"===this.lastSource?this.store[this.restoredId]:null,e))},t.prototype.ngOnDestroy=function(){this.routerEventsSubscription&&this.routerEventsSubscription.unsubscribe(),this.scrollEventsSubscription&&this.scrollEventsSubscription.unsubscribe()},t}(),Be=new i.q("ROUTER_CONFIGURATION"),He=new i.q("ROUTER_FORROOT_GUARD"),Ge=[x.g,{provide:st,useClass:ct},{provide:je,useFactory:Ke,deps:[i.g,st,Ae,x.g,i.r,i.w,i.i,_e,Be,[xe,new i.A],[ye,new i.A]]},Ae,{provide:Bt,useFactory:Xe,deps:[je]},{provide:i.w,useClass:i.L},ze,Fe,Le,{provide:Be,useValue:{enableTracing:!1}}];function Ue(){return new i.y("Router",je)}var qe=function(){function t(t,e){}return t.forRoot=function(e,n){return{ngModule:t,providers:[Ge,Ze(e),{provide:He,useFactory:Ye,deps:[[je,new i.A,new i.K]]},{provide:Be,useValue:n||{}},{provide:x.h,useFactory:We,deps:[x.t,[new i.p(x.a),new i.A],Be]},{provide:Ve,useFactory:Qe,deps:[je,x.v,Be]},{provide:Ne,useExisting:n&&n.preloadingStrategy?n.preloadingStrategy:Fe},{provide:i.y,multi:!0,useFactory:Ue},[$e,{provide:i.d,multi:!0,useFactory:Je,deps:[$e]},{provide:en,useFactory:tn,deps:[$e]},{provide:i.b,multi:!0,useExisting:en}]]}},t.forChild=function(e){return{ngModule:t,providers:[Ze(e)]}},t}();function Qe(t,e,n){return n.scrollOffset&&e.setOffset(n.scrollOffset),new Ve(t,e,n)}function We(t,e,n){return void 0===n&&(n={}),n.useHash?new x.e(t,e):new x.s(t,e)}function Ye(t){if(t)throw new Error("RouterModule.forRoot() called twice. Lazy loaded modules should use RouterModule.forChild() instead.");return"guarded"}function Ze(t){return[{provide:i.a,multi:!0,useValue:t},{provide:_e,multi:!0,useValue:t}]}function Ke(t,e,n,r,i,o,l,a,u,s,c){void 0===u&&(u={});var h=new je(null,e,n,r,i,o,l,$(a));if(s&&(h.urlHandlingStrategy=s),c&&(h.routeReuseStrategy=c),u.errorHandler&&(h.errorHandler=u.errorHandler),u.malformedUriErrorHandler&&(h.malformedUriErrorHandler=u.malformedUriErrorHandler),u.enableTracing){var f=Object(S.s)();h.events.subscribe(function(t){f.logGroup("Router Event: "+t.constructor.name),f.log(t.toString()),f.log(t),f.logGroupEnd()})}return u.onSameUrlNavigation&&(h.onSameUrlNavigation=u.onSameUrlNavigation),u.paramsInheritanceStrategy&&(h.paramsInheritanceStrategy=u.paramsInheritanceStrategy),u.urlUpdateStrategy&&(h.urlUpdateStrategy=u.urlUpdateStrategy),u.relativeLinkResolution&&(h.relativeLinkResolution=u.relativeLinkResolution),h}function Xe(t){return t.routerState.root}var $e=function(){function t(t){this.injector=t,this.initNavigation=!1,this.resultOfPreactivationDone=new c.a}return t.prototype.appInitializer=function(){var t=this;return this.injector.get(x.f,Promise.resolve(null)).then(function(){var e=null,n=new Promise(function(t){return e=t}),r=t.injector.get(je),i=t.injector.get(Be);if(t.isLegacyDisabled(i)||t.isLegacyEnabled(i))e(!0);else if("disabled"===i.initialNavigation)r.setUpLocationChangeListener(),e(!0);else{if("enabled"!==i.initialNavigation)throw new Error("Invalid initialNavigation options: '"+i.initialNavigation+"'");r.hooks.afterPreactivation=function(){return t.initNavigation?Object(o.a)(null):(t.initNavigation=!0,e(!0),t.resultOfPreactivationDone)},r.initialNavigation()}return n})},t.prototype.bootstrapListener=function(t){var e=this.injector.get(Be),n=this.injector.get(ze),r=this.injector.get(Ve),o=this.injector.get(je),l=this.injector.get(i.g);t===l.components[0]&&(this.isLegacyEnabled(e)?o.initialNavigation():this.isLegacyDisabled(e)&&o.setUpLocationChangeListener(),n.setUpPreloading(),r.init(),o.resetRootComponentType(l.componentTypes[0]),this.resultOfPreactivationDone.next(null),this.resultOfPreactivationDone.complete())},t.prototype.isLegacyEnabled=function(t){return"legacy_enabled"===t.initialNavigation||!0===t.initialNavigation||void 0===t.initialNavigation},t.prototype.isLegacyDisabled=function(t){return"legacy_disabled"===t.initialNavigation||!1===t.initialNavigation},t}();function Je(t){return t.appInitializer.bind(t)}function tn(t){return t.bootstrapListener.bind(t)}var en=new i.q("Router Initializer")},ZYjt:function(t,e,n){"use strict";n.d(e,"q",function(){return bt}),n.d(e,"r",function(){return R}),n.d(e,"a",function(){return yt}),n.d(e,"i",function(){return gt}),n.d(e,"b",function(){return m}),n.d(e,"d",function(){return j}),n.d(e,"e",function(){return O}),n.d(e,"f",function(){return tt}),n.d(e,"g",function(){return et}),n.d(e,"h",function(){return nt}),n.d(e,"c",function(){return at}),n.d(e,"s",function(){return a}),n.d(e,"k",function(){return F}),n.d(e,"j",function(){return $}),n.d(e,"n",function(){return rt}),n.d(e,"o",function(){return lt}),n.d(e,"m",function(){return P}),n.d(e,"p",function(){return T}),n.d(e,"l",function(){return ut});var r=n("mrSG"),i=n("Ip0R"),o=n("CcnG"),l=null;function a(){return l}var u,s={class:"className",innerHtml:"innerHTML",readonly:"readOnly",tabindex:"tabIndex"},c={"\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"},h={A:"1",B:"2",C:"3",D:"4",E:"5",F:"6",G:"7",H:"8",I:"9",J:"*",K:"+",M:"-",N:".",O:"/","`":"0","\x90":"NumLock"};o.Sa.Node&&(u=o.Sa.Node.prototype.contains||function(t){return!!(16&this.compareDocumentPosition(t))});var f,d=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Object(r.b)(e,t),e.prototype.parse=function(t){throw new Error("parse not implemented")},e.makeCurrent=function(){var t;t=new e,l||(l=t)},e.prototype.hasProperty=function(t,e){return e in t},e.prototype.setProperty=function(t,e,n){t[e]=n},e.prototype.getProperty=function(t,e){return t[e]},e.prototype.invoke=function(t,e,n){var i;(i=t)[e].apply(i,Object(r.d)(n))},e.prototype.logError=function(t){window.console&&(console.error?console.error(t):console.log(t))},e.prototype.log=function(t){window.console&&window.console.log&&window.console.log(t)},e.prototype.logGroup=function(t){window.console&&window.console.group&&window.console.group(t)},e.prototype.logGroupEnd=function(){window.console&&window.console.groupEnd&&window.console.groupEnd()},Object.defineProperty(e.prototype,"attrToPropMap",{get:function(){return s},enumerable:!0,configurable:!0}),e.prototype.contains=function(t,e){return u.call(t,e)},e.prototype.querySelector=function(t,e){return t.querySelector(e)},e.prototype.querySelectorAll=function(t,e){return t.querySelectorAll(e)},e.prototype.on=function(t,e,n){t.addEventListener(e,n,!1)},e.prototype.onAndCancel=function(t,e,n){return t.addEventListener(e,n,!1),function(){t.removeEventListener(e,n,!1)}},e.prototype.dispatchEvent=function(t,e){t.dispatchEvent(e)},e.prototype.createMouseEvent=function(t){var e=this.getDefaultDocument().createEvent("MouseEvent");return e.initEvent(t,!0,!0),e},e.prototype.createEvent=function(t){var e=this.getDefaultDocument().createEvent("Event");return e.initEvent(t,!0,!0),e},e.prototype.preventDefault=function(t){t.preventDefault(),t.returnValue=!1},e.prototype.isPrevented=function(t){return t.defaultPrevented||null!=t.returnValue&&!t.returnValue},e.prototype.getInnerHTML=function(t){return t.innerHTML},e.prototype.getTemplateContent=function(t){return"content"in t&&this.isTemplateElement(t)?t.content:null},e.prototype.getOuterHTML=function(t){return t.outerHTML},e.prototype.nodeName=function(t){return t.nodeName},e.prototype.nodeValue=function(t){return t.nodeValue},e.prototype.type=function(t){return t.type},e.prototype.content=function(t){return this.hasProperty(t,"content")?t.content:t},e.prototype.firstChild=function(t){return t.firstChild},e.prototype.nextSibling=function(t){return t.nextSibling},e.prototype.parentElement=function(t){return t.parentNode},e.prototype.childNodes=function(t){return t.childNodes},e.prototype.childNodesAsList=function(t){for(var e=t.childNodes,n=new Array(e.length),r=0;r<e.length;r++)n[r]=e[r];return n},e.prototype.clearNodes=function(t){for(;t.firstChild;)t.removeChild(t.firstChild)},e.prototype.appendChild=function(t,e){t.appendChild(e)},e.prototype.removeChild=function(t,e){t.removeChild(e)},e.prototype.replaceChild=function(t,e,n){t.replaceChild(e,n)},e.prototype.remove=function(t){return t.parentNode&&t.parentNode.removeChild(t),t},e.prototype.insertBefore=function(t,e,n){t.insertBefore(n,e)},e.prototype.insertAllBefore=function(t,e,n){n.forEach(function(n){return t.insertBefore(n,e)})},e.prototype.insertAfter=function(t,e,n){t.insertBefore(n,e.nextSibling)},e.prototype.setInnerHTML=function(t,e){t.innerHTML=e},e.prototype.getText=function(t){return t.textContent},e.prototype.setText=function(t,e){t.textContent=e},e.prototype.getValue=function(t){return t.value},e.prototype.setValue=function(t,e){t.value=e},e.prototype.getChecked=function(t){return t.checked},e.prototype.setChecked=function(t,e){t.checked=e},e.prototype.createComment=function(t){return this.getDefaultDocument().createComment(t)},e.prototype.createTemplate=function(t){var e=this.getDefaultDocument().createElement("template");return e.innerHTML=t,e},e.prototype.createElement=function(t,e){return(e=e||this.getDefaultDocument()).createElement(t)},e.prototype.createElementNS=function(t,e,n){return(n=n||this.getDefaultDocument()).createElementNS(t,e)},e.prototype.createTextNode=function(t,e){return(e=e||this.getDefaultDocument()).createTextNode(t)},e.prototype.createScriptTag=function(t,e,n){var r=(n=n||this.getDefaultDocument()).createElement("SCRIPT");return r.setAttribute(t,e),r},e.prototype.createStyleElement=function(t,e){var n=(e=e||this.getDefaultDocument()).createElement("style");return this.appendChild(n,this.createTextNode(t,e)),n},e.prototype.createShadowRoot=function(t){return t.createShadowRoot()},e.prototype.getShadowRoot=function(t){return t.shadowRoot},e.prototype.getHost=function(t){return t.host},e.prototype.clone=function(t){return t.cloneNode(!0)},e.prototype.getElementsByClassName=function(t,e){return t.getElementsByClassName(e)},e.prototype.getElementsByTagName=function(t,e){return t.getElementsByTagName(e)},e.prototype.classList=function(t){return Array.prototype.slice.call(t.classList,0)},e.prototype.addClass=function(t,e){t.classList.add(e)},e.prototype.removeClass=function(t,e){t.classList.remove(e)},e.prototype.hasClass=function(t,e){return t.classList.contains(e)},e.prototype.setStyle=function(t,e,n){t.style[e]=n},e.prototype.removeStyle=function(t,e){t.style[e]=""},e.prototype.getStyle=function(t,e){return t.style[e]},e.prototype.hasStyle=function(t,e,n){var r=this.getStyle(t,e)||"";return n?r==n:r.length>0},e.prototype.tagName=function(t){return t.tagName},e.prototype.attributeMap=function(t){for(var e=new Map,n=t.attributes,r=0;r<n.length;r++){var i=n.item(r);e.set(i.name,i.value)}return e},e.prototype.hasAttribute=function(t,e){return t.hasAttribute(e)},e.prototype.hasAttributeNS=function(t,e,n){return t.hasAttributeNS(e,n)},e.prototype.getAttribute=function(t,e){return t.getAttribute(e)},e.prototype.getAttributeNS=function(t,e,n){return t.getAttributeNS(e,n)},e.prototype.setAttribute=function(t,e,n){t.setAttribute(e,n)},e.prototype.setAttributeNS=function(t,e,n,r){t.setAttributeNS(e,n,r)},e.prototype.removeAttribute=function(t,e){t.removeAttribute(e)},e.prototype.removeAttributeNS=function(t,e,n){t.removeAttributeNS(e,n)},e.prototype.templateAwareRoot=function(t){return this.isTemplateElement(t)?this.content(t):t},e.prototype.createHtmlDocument=function(){return document.implementation.createHTMLDocument("fakeTitle")},e.prototype.getDefaultDocument=function(){return document},e.prototype.getBoundingClientRect=function(t){try{return t.getBoundingClientRect()}catch(t){return{top:0,bottom:0,left:0,right:0,width:0,height:0}}},e.prototype.getTitle=function(t){return t.title},e.prototype.setTitle=function(t,e){t.title=e||""},e.prototype.elementMatches=function(t,e){return!!this.isElementNode(t)&&(t.matches&&t.matches(e)||t.msMatchesSelector&&t.msMatchesSelector(e)||t.webkitMatchesSelector&&t.webkitMatchesSelector(e))},e.prototype.isTemplateElement=function(t){return this.isElementNode(t)&&"TEMPLATE"===t.nodeName},e.prototype.isTextNode=function(t){return t.nodeType===Node.TEXT_NODE},e.prototype.isCommentNode=function(t){return t.nodeType===Node.COMMENT_NODE},e.prototype.isElementNode=function(t){return t.nodeType===Node.ELEMENT_NODE},e.prototype.hasShadowRoot=function(t){return null!=t.shadowRoot&&t instanceof HTMLElement},e.prototype.isShadowRoot=function(t){return t instanceof DocumentFragment},e.prototype.importIntoDoc=function(t){return document.importNode(this.templateAwareRoot(t),!0)},e.prototype.adoptNode=function(t){return document.adoptNode(t)},e.prototype.getHref=function(t){return t.getAttribute("href")},e.prototype.getEventKey=function(t){var e=t.key;if(null==e){if(null==(e=t.keyIdentifier))return"Unidentified";e.startsWith("U+")&&(e=String.fromCharCode(parseInt(e.substring(2),16)),3===t.location&&h.hasOwnProperty(e)&&(e=h[e]))}return c[e]||e},e.prototype.getGlobalEventTarget=function(t,e){return"window"===e?window:"document"===e?t:"body"===e?t.body:null},e.prototype.getHistory=function(){return window.history},e.prototype.getLocation=function(){return window.location},e.prototype.getBaseHref=function(t){var e,n=p||(p=document.querySelector("base"))?p.getAttribute("href"):null;return null==n?null:(e=n,f||(f=document.createElement("a")),f.setAttribute("href",e),"/"===f.pathname.charAt(0)?f.pathname:"/"+f.pathname)},e.prototype.resetBaseElement=function(){p=null},e.prototype.getUserAgent=function(){return window.navigator.userAgent},e.prototype.setData=function(t,e,n){this.setAttribute(t,"data-"+e,n)},e.prototype.getData=function(t,e){return this.getAttribute(t,"data-"+e)},e.prototype.getComputedStyle=function(t){return getComputedStyle(t)},e.prototype.supportsWebAnimation=function(){return"function"==typeof Element.prototype.animate},e.prototype.performanceNow=function(){return window.performance&&window.performance.now?window.performance.now():(new Date).getTime()},e.prototype.supportsCookies=function(){return!0},e.prototype.getCookie=function(t){return Object(i.A)(document.cookie,t)},e.prototype.setCookie=function(t,e){document.cookie=encodeURIComponent(t)+"="+encodeURIComponent(e)},e}(function(t){function e(){var e=t.call(this)||this;e._animationPrefix=null,e._transitionEnd=null;try{var n=e.createElement("div",document);if(null!=e.getStyle(n,"animationName"))e._animationPrefix="";else for(var r=["Webkit","Moz","O","ms"],i=0;i<r.length;i++)if(null!=e.getStyle(n,r[i]+"AnimationName")){e._animationPrefix="-"+r[i].toLowerCase()+"-";break}var o={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};Object.keys(o).forEach(function(t){null!=e.getStyle(n,t)&&(e._transitionEnd=o[t])})}catch(t){e._animationPrefix=null,e._transitionEnd=null}return e}return Object(r.b)(e,t),e.prototype.getDistributedNodes=function(t){return t.getDistributedNodes()},e.prototype.resolveAndSetHref=function(t,e,n){t.href=null==n?e:e+"/../"+n},e.prototype.supportsDOMEvents=function(){return!0},e.prototype.supportsNativeShadowDOM=function(){return"function"==typeof document.body.createShadowRoot},e.prototype.getAnimationPrefix=function(){return this._animationPrefix?this._animationPrefix:""},e.prototype.getTransitionEnd=function(){return this._transitionEnd?this._transitionEnd:""},e.prototype.supportsAnimation=function(){return null!=this._animationPrefix&&null!=this._transitionEnd},e}(function(){function t(){this.resourceLoaderType=null}return Object.defineProperty(t.prototype,"attrToPropMap",{get:function(){return this._attrToPropMap},set:function(t){this._attrToPropMap=t},enumerable:!0,configurable:!0}),t}())),p=null,m=i.c;function g(){return!!window.history.pushState}var b=function(t){function e(e){var n=t.call(this)||this;return n._doc=e,n._init(),n}return Object(r.b)(e,t),e.prototype._init=function(){this.location=a().getLocation(),this._history=a().getHistory()},e.prototype.getBaseHrefFromDOM=function(){return a().getBaseHref(this._doc)},e.prototype.onPopState=function(t){a().getGlobalEventTarget(this._doc,"window").addEventListener("popstate",t,!1)},e.prototype.onHashChange=function(t){a().getGlobalEventTarget(this._doc,"window").addEventListener("hashchange",t,!1)},Object.defineProperty(e.prototype,"pathname",{get:function(){return this.location.pathname},set:function(t){this.location.pathname=t},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"search",{get:function(){return this.location.search},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"hash",{get:function(){return this.location.hash},enumerable:!0,configurable:!0}),e.prototype.pushState=function(t,e,n){g()?this._history.pushState(t,e,n):this.location.hash=n},e.prototype.replaceState=function(t,e,n){g()?this._history.replaceState(t,e,n):this.location.hash=n},e.prototype.forward=function(){this._history.forward()},e.prototype.back=function(){this._history.back()},e.ctorParameters=function(){return[{type:void 0,decorators:[{type:o.p,args:[m]}]}]},e}(i.t),y=new o.q("TRANSITION_ID"),v=[{provide:o.d,useFactory:function(t,e,n){return function(){n.get(o.e).donePromise.then(function(){var n=a();Array.prototype.slice.apply(n.querySelectorAll(e,"style[ng-transition]")).filter(function(e){return n.getAttribute(e,"ng-transition")===t}).forEach(function(t){return n.remove(t)})})}},deps:[y,m,o.r],multi:!0}],_=function(){function t(){}return t.init=function(){Object(o.Ba)(new t)},t.prototype.addToWindow=function(t){o.Sa.getAngularTestability=function(e,n){void 0===n&&(n=!0);var r=t.findTestabilityInTree(e,n);if(null==r)throw new Error("Could not find testability for element.");return r},o.Sa.getAllAngularTestabilities=function(){return t.getAllTestabilities()},o.Sa.getAllAngularRootElements=function(){return t.getAllRootElements()},o.Sa.frameworkStabilizers||(o.Sa.frameworkStabilizers=[]),o.Sa.frameworkStabilizers.push(function(t){var e=o.Sa.getAllAngularTestabilities(),n=e.length,r=!1,i=function(e){r=r||e,0==--n&&t(r)};e.forEach(function(t){t.whenStable(i)})})},t.prototype.findTestabilityInTree=function(t,e,n){if(null==e)return null;var r=t.getTestability(e);return null!=r?r:n?a().isShadowRoot(e)?this.findTestabilityInTree(t,a().getHost(e),!0):this.findTestabilityInTree(t,a().parentElement(e),!0):null},t}();function w(t,e){"undefined"!=typeof COMPILED&&COMPILED||((o.Sa.ng=o.Sa.ng||{})[t]=e)}var x={ApplicationRef:o.g,NgZone:o.z},S="probe",C="coreTokens";function k(t){return Object(o.X)(t)}function R(t){return w(S,k),w(C,Object(r.a)({},x,(t||[]).reduce(function(t,e){return t[e.name]=e.token,t},{}))),function(){return k}}var j=new o.q("EventManagerPlugins"),O=function(){function t(t,e){var n=this;this._zone=e,this._eventNameToPlugin=new Map,t.forEach(function(t){return t.manager=n}),this._plugins=t.slice().reverse()}return t.prototype.addEventListener=function(t,e,n){return this._findPluginFor(e).addEventListener(t,e,n)},t.prototype.addGlobalEventListener=function(t,e,n){return this._findPluginFor(e).addGlobalEventListener(t,e,n)},t.prototype.getZone=function(){return this._zone},t.prototype._findPluginFor=function(t){var e=this._eventNameToPlugin.get(t);if(e)return e;for(var n=this._plugins,r=0;r<n.length;r++){var i=n[r];if(i.supports(t))return this._eventNameToPlugin.set(t,i),i}throw new Error("No event manager plugin found for event "+t)},t}(),E=function(){function t(t){this._doc=t}return t.prototype.addGlobalEventListener=function(t,e,n){var r=a().getGlobalEventTarget(this._doc,t);if(!r)throw new Error("Unsupported event target "+r+" for event "+e);return this.addEventListener(r,e,n)},t}(),T=function(){function t(){this._stylesSet=new Set}return t.prototype.addStyles=function(t){var e=this,n=new Set;t.forEach(function(t){e._stylesSet.has(t)||(e._stylesSet.add(t),n.add(t))}),this.onStylesAdded(n)},t.prototype.onStylesAdded=function(t){},t.prototype.getAllStyles=function(){return Array.from(this._stylesSet)},t}(),P=function(t){function e(e){var n=t.call(this)||this;return n._doc=e,n._hostNodes=new Set,n._styleNodes=new Set,n._hostNodes.add(e.head),n}return Object(r.b)(e,t),e.prototype._addStylesToHost=function(t,e){var n=this;t.forEach(function(t){var r=n._doc.createElement("style");r.textContent=t,n._styleNodes.add(e.appendChild(r))})},e.prototype.addHost=function(t){this._addStylesToHost(this._stylesSet,t),this._hostNodes.add(t)},e.prototype.removeHost=function(t){this._hostNodes.delete(t)},e.prototype.onStylesAdded=function(t){var e=this;this._hostNodes.forEach(function(n){return e._addStylesToHost(t,n)})},e.prototype.ngOnDestroy=function(){this._styleNodes.forEach(function(t){return a().remove(t)})},e}(T),I={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/"},A=/%COMP%/g,M="_nghost-%COMP%",D="_ngcontent-%COMP%";function N(t,e,n){for(var r=0;r<e.length;r++){var i=e[r];Array.isArray(i)?N(t,i,n):(i=i.replace(A,t),n.push(i))}return n}function L(t){return function(e){!1===t(e)&&(e.preventDefault(),e.returnValue=!1)}}var F=function(){function t(t,e){this.eventManager=t,this.sharedStylesHost=e,this.rendererByCompId=new Map,this.defaultRenderer=new z(t)}return t.prototype.createRenderer=function(t,e){if(!t||!e)return this.defaultRenderer;switch(e.encapsulation){case o.R.Emulated:var n=this.rendererByCompId.get(e.id);return n||(n=new G(this.eventManager,this.sharedStylesHost,e),this.rendererByCompId.set(e.id,n)),n.applyToHost(t),n;case o.R.Native:case o.R.ShadowDom:return new U(this.eventManager,this.sharedStylesHost,t,e);default:if(!this.rendererByCompId.has(e.id)){var r=N(e.id,e.styles,[]);this.sharedStylesHost.addStyles(r),this.rendererByCompId.set(e.id,this.defaultRenderer)}return this.defaultRenderer}},t.prototype.begin=function(){},t.prototype.end=function(){},t}(),z=function(){function t(t){this.eventManager=t,this.data=Object.create(null)}return t.prototype.destroy=function(){},t.prototype.createElement=function(t,e){return e?document.createElementNS(I[e],t):document.createElement(t)},t.prototype.createComment=function(t){return document.createComment(t)},t.prototype.createText=function(t){return document.createTextNode(t)},t.prototype.appendChild=function(t,e){t.appendChild(e)},t.prototype.insertBefore=function(t,e,n){t&&t.insertBefore(e,n)},t.prototype.removeChild=function(t,e){t&&t.removeChild(e)},t.prototype.selectRootElement=function(t){var e="string"==typeof t?document.querySelector(t):t;if(!e)throw new Error('The selector "'+t+'" did not match any elements');return e.textContent="",e},t.prototype.parentNode=function(t){return t.parentNode},t.prototype.nextSibling=function(t){return t.nextSibling},t.prototype.setAttribute=function(t,e,n,r){if(r){e=r+":"+e;var i=I[r];i?t.setAttributeNS(i,e,n):t.setAttribute(e,n)}else t.setAttribute(e,n)},t.prototype.removeAttribute=function(t,e,n){if(n){var r=I[n];r?t.removeAttributeNS(r,e):t.removeAttribute(n+":"+e)}else t.removeAttribute(e)},t.prototype.addClass=function(t,e){t.classList.add(e)},t.prototype.removeClass=function(t,e){t.classList.remove(e)},t.prototype.setStyle=function(t,e,n,r){r&o.G.DashCase?t.style.setProperty(e,n,r&o.G.Important?"important":""):t.style[e]=n},t.prototype.removeStyle=function(t,e,n){n&o.G.DashCase?t.style.removeProperty(e):t.style[e]=""},t.prototype.setProperty=function(t,e,n){B(e,"property"),t[e]=n},t.prototype.setValue=function(t,e){t.nodeValue=e},t.prototype.listen=function(t,e,n){return B(e,"listener"),"string"==typeof t?this.eventManager.addGlobalEventListener(t,e,L(n)):this.eventManager.addEventListener(t,e,L(n))},t}(),V="@".charCodeAt(0);function B(t,e){if(t.charCodeAt(0)===V)throw new Error("Found the synthetic "+e+" "+t+'. Please include either "BrowserAnimationsModule" or "NoopAnimationsModule" in your application.')}var H,G=function(t){function e(e,n,r){var i=t.call(this,e)||this;i.component=r;var o=N(r.id,r.styles,[]);return n.addStyles(o),i.contentAttr=D.replace(A,r.id),i.hostAttr=M.replace(A,r.id),i}return Object(r.b)(e,t),e.prototype.applyToHost=function(e){t.prototype.setAttribute.call(this,e,this.hostAttr,"")},e.prototype.createElement=function(e,n){var r=t.prototype.createElement.call(this,e,n);return t.prototype.setAttribute.call(this,r,this.contentAttr,""),r},e}(z),U=function(t){function e(e,n,r,i){var l=t.call(this,e)||this;l.sharedStylesHost=n,l.hostEl=r,l.component=i,l.shadowRoot=i.encapsulation===o.R.ShadowDom?r.attachShadow({mode:"open"}):r.createShadowRoot(),l.sharedStylesHost.addHost(l.shadowRoot);for(var a=N(i.id,i.styles,[]),u=0;u<a.length;u++){var s=document.createElement("style");s.textContent=a[u],l.shadowRoot.appendChild(s)}return l}return Object(r.b)(e,t),e.prototype.nodeOrShadowRoot=function(t){return t===this.hostEl?this.shadowRoot:t},e.prototype.destroy=function(){this.sharedStylesHost.removeHost(this.shadowRoot)},e.prototype.appendChild=function(e,n){return t.prototype.appendChild.call(this,this.nodeOrShadowRoot(e),n)},e.prototype.insertBefore=function(e,n,r){return t.prototype.insertBefore.call(this,this.nodeOrShadowRoot(e),n,r)},e.prototype.removeChild=function(e,n){return t.prototype.removeChild.call(this,this.nodeOrShadowRoot(e),n)},e.prototype.parentNode=function(e){return this.nodeOrShadowRoot(t.prototype.parentNode.call(this,this.nodeOrShadowRoot(e)))},e}(z),q="undefined"!=typeof Zone&&Zone.__symbol__||function(t){return"__zone_symbol__"+t},Q=q("addEventListener"),W=q("removeEventListener"),Y={},Z="__zone_symbol__propagationStopped";"undefined"!=typeof Zone&&Zone[q("BLACK_LISTED_EVENTS")]&&(H={});var K=function(t){return!!H&&H.hasOwnProperty(t)},X=function(t){var e=Y[t.type];if(e){var n=this[e];if(n){var r=[t];if(1===n.length)return(l=n[0]).zone!==Zone.current?l.zone.run(l.handler,this,r):l.handler.apply(this,r);for(var i=n.slice(),o=0;o<i.length&&!0!==t[Z];o++){var l;(l=i[o]).zone!==Zone.current?l.zone.run(l.handler,this,r):l.handler.apply(this,r)}}}},$=function(t){function e(e,n,r){var o=t.call(this,e)||this;return o.ngZone=n,r&&Object(i.x)(r)||o.patchEvent(),o}return Object(r.b)(e,t),e.prototype.patchEvent=function(){if("undefined"!=typeof Event&&Event&&Event.prototype&&!Event.prototype.__zone_symbol__stopImmediatePropagation){var t=Event.prototype.__zone_symbol__stopImmediatePropagation=Event.prototype.stopImmediatePropagation;Event.prototype.stopImmediatePropagation=function(){this&&(this[Z]=!0),t&&t.apply(this,arguments)}}},e.prototype.supports=function(t){return!0},e.prototype.addEventListener=function(t,e,n){var r=this,i=n;if(!t[Q]||o.z.isInAngularZone()&&!K(e))t.addEventListener(e,i,!1);else{var l=Y[e];l||(l=Y[e]=q("ANGULAR"+e+"FALSE"));var a=t[l],u=a&&a.length>0;a||(a=t[l]=[]);var s=K(e)?Zone.root:Zone.current;if(0===a.length)a.push({zone:s,handler:i});else{for(var c=!1,h=0;h<a.length;h++)if(a[h].handler===i){c=!0;break}c||a.push({zone:s,handler:i})}u||t[Q](e,X,!1)}return function(){return r.removeEventListener(t,e,i)}},e.prototype.removeEventListener=function(t,e,n){var r=t[W];if(!r)return t.removeEventListener.apply(t,[e,n,!1]);var i=Y[e],o=i&&t[i];if(!o)return t.removeEventListener.apply(t,[e,n,!1]);for(var l=!1,a=0;a<o.length;a++)if(o[a].handler===n){l=!0,o.splice(a,1);break}l?0===o.length&&r.apply(t,[e,X,!1]):t.removeEventListener.apply(t,[e,n,!1])},e}(E),J={pan:!0,panstart:!0,panmove:!0,panend:!0,pancancel:!0,panleft:!0,panright:!0,panup:!0,pandown:!0,pinch:!0,pinchstart:!0,pinchmove:!0,pinchend:!0,pinchcancel:!0,pinchin:!0,pinchout:!0,press:!0,pressup:!0,rotate:!0,rotatestart:!0,rotatemove:!0,rotateend:!0,rotatecancel:!0,swipe:!0,swipeleft:!0,swiperight:!0,swipeup:!0,swipedown:!0,tap:!0},tt=new o.q("HammerGestureConfig"),et=new o.q("HammerLoader"),nt=function(){function t(){this.events=[],this.overrides={}}return t.prototype.buildHammer=function(t){var e=new Hammer(t,this.options);for(var n in e.get("pinch").set({enable:!0}),e.get("rotate").set({enable:!0}),this.overrides)e.get(n).set(this.overrides[n]);return e},t}(),rt=function(t){function e(e,n,r,i){var o=t.call(this,e)||this;return o._config=n,o.console=r,o.loader=i,o}return Object(r.b)(e,t),e.prototype.supports=function(t){return!(!J.hasOwnProperty(t.toLowerCase())&&!this.isCustomEvent(t)||!window.Hammer&&!this.loader&&(this.console.warn('The "'+t+'" event cannot be bound because Hammer.JS is not loaded and no custom loader has been specified.'),1))},e.prototype.addEventListener=function(t,e,n){var r=this,i=this.manager.getZone();if(e=e.toLowerCase(),!window.Hammer&&this.loader){var o=!1,l=function(){o=!0};return this.loader().then(function(){if(!window.Hammer)return r.console.warn("The custom HAMMER_LOADER completed, but Hammer.JS is not present."),void(l=function(){});o||(l=r.addEventListener(t,e,n))}).catch(function(){r.console.warn('The "'+e+'" event cannot be bound because the custom Hammer.JS loader failed.'),l=function(){}}),function(){l()}}return i.runOutsideAngular(function(){var o=r._config.buildHammer(t),l=function(t){i.runGuarded(function(){n(t)})};return o.on(e,l),function(){return o.off(e,l)}})},e.prototype.isCustomEvent=function(t){return this._config.events.indexOf(t)>-1},e}(E),it=["alt","control","meta","shift"],ot={alt:function(t){return t.altKey},control:function(t){return t.ctrlKey},meta:function(t){return t.metaKey},shift:function(t){return t.shiftKey}},lt=function(t){function e(e){return t.call(this,e)||this}return Object(r.b)(e,t),e.prototype.supports=function(t){return null!=e.parseEventName(t)},e.prototype.addEventListener=function(t,n,r){var i=e.parseEventName(n),o=e.eventCallback(i.fullKey,r,this.manager.getZone());return this.manager.getZone().runOutsideAngular(function(){return a().onAndCancel(t,i.domEventName,o)})},e.parseEventName=function(t){var n=t.toLowerCase().split("."),r=n.shift();if(0===n.length||"keydown"!==r&&"keyup"!==r)return null;var i=e._normalizeKey(n.pop()),o="";if(it.forEach(function(t){var e=n.indexOf(t);e>-1&&(n.splice(e,1),o+=t+".")}),o+=i,0!=n.length||0===i.length)return null;var l={};return l.domEventName=r,l.fullKey=o,l},e.getEventFullKey=function(t){var e="",n=a().getEventKey(t);return" "===(n=n.toLowerCase())?n="space":"."===n&&(n="dot"),it.forEach(function(r){r!=n&&(0,ot[r])(t)&&(e+=r+".")}),e+=n},e.eventCallback=function(t,n,r){return function(i){e.getEventFullKey(i)===t&&r.runGuarded(function(){return n(i)})}},e._normalizeKey=function(t){switch(t){case"esc":return"escape";default:return t}},e}(E),at=function(){},ut=function(t){function e(e){var n=t.call(this)||this;return n._doc=e,n}return Object(r.b)(e,t),e.prototype.sanitize=function(t,e){if(null==e)return null;switch(t){case o.I.NONE:return e;case o.I.HTML:return e instanceof ct?e.changingThisBreaksApplicationSecurity:(this.checkNotSafeValue(e,"HTML"),Object(o.Fa)(this._doc,String(e)));case o.I.STYLE:return e instanceof ht?e.changingThisBreaksApplicationSecurity:(this.checkNotSafeValue(e,"Style"),Object(o.Ga)(e));case o.I.SCRIPT:if(e instanceof ft)return e.changingThisBreaksApplicationSecurity;throw this.checkNotSafeValue(e,"Script"),new Error("unsafe value used in a script context");case o.I.URL:return e instanceof pt||e instanceof dt?e.changingThisBreaksApplicationSecurity:(this.checkNotSafeValue(e,"URL"),Object(o.Ha)(String(e)));case o.I.RESOURCE_URL:if(e instanceof pt)return e.changingThisBreaksApplicationSecurity;throw this.checkNotSafeValue(e,"ResourceURL"),new Error("unsafe value used in a resource URL context (see http://g.co/ng/security#xss)");default:throw new Error("Unexpected SecurityContext "+t+" (see http://g.co/ng/security#xss)")}},e.prototype.checkNotSafeValue=function(t,e){if(t instanceof st)throw new Error("Required a safe "+e+", got a "+t.getTypeName()+" (see http://g.co/ng/security#xss)")},e.prototype.bypassSecurityTrustHtml=function(t){return new ct(t)},e.prototype.bypassSecurityTrustStyle=function(t){return new ht(t)},e.prototype.bypassSecurityTrustScript=function(t){return new ft(t)},e.prototype.bypassSecurityTrustUrl=function(t){return new dt(t)},e.prototype.bypassSecurityTrustResourceUrl=function(t){return new pt(t)},e}(at),st=function(){function t(t){this.changingThisBreaksApplicationSecurity=t}return t.prototype.toString=function(){return"SafeValue must use [property]=binding: "+this.changingThisBreaksApplicationSecurity+" (see http://g.co/ng/security#xss)"},t}(),ct=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Object(r.b)(e,t),e.prototype.getTypeName=function(){return"HTML"},e}(st),ht=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Object(r.b)(e,t),e.prototype.getTypeName=function(){return"Style"},e}(st),ft=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Object(r.b)(e,t),e.prototype.getTypeName=function(){return"Script"},e}(st),dt=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Object(r.b)(e,t),e.prototype.getTypeName=function(){return"URL"},e}(st),pt=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Object(r.b)(e,t),e.prototype.getTypeName=function(){return"ResourceURL"},e}(st),mt=[{provide:o.B,useValue:i.y},{provide:o.C,useValue:function(){d.makeCurrent(),_.init()},multi:!0},{provide:i.t,useClass:b,deps:[m]},{provide:m,useFactory:function(){return document},deps:[]}],gt=Object(o.T)(o.Aa,"browser",mt);function bt(){return new o.m}var yt=function(){function t(t){if(t)throw new Error("BrowserModule has already been loaded. If you need access to common directives such as NgIf and NgFor from a lazy loaded module, import CommonModule instead.")}return t.withServerTransition=function(e){return{ngModule:t,providers:[{provide:o.c,useValue:e.appId},{provide:y,useExisting:o.c},v]}},t}();"undefined"!=typeof window&&window},Zn8D:function(t,e,n){"use strict";n.d(e,"a",function(){return o});var r=n("psW0"),i=n("mChF");function o(t){return void 0===t&&(t=Number.POSITIVE_INFINITY),Object(r.a)(i.a,t)}},ad02:function(t,e,n){"use strict";n.d(e,"a",function(){return a});var r=n("mrSG"),i=n("FFOo"),o=n("Ehmk"),l=n("eihs");function a(t,e){return function(n){return n.lift(new u(t,e))}}var u=function(){function t(t,e){this.compare=t,this.keySelector=e}return t.prototype.call=function(t,e){return e.subscribe(new s(t,this.compare,this.keySelector))},t}(),s=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.keySelector=r,i.hasKey=!1,"function"==typeof n&&(i.compare=n),i}return r.b(e,t),e.prototype.compare=function(t,e){return t===e},e.prototype._next=function(t){var e=t;if(this.keySelector&&(e=Object(o.a)(this.keySelector)(t))===l.a)return this.destination.error(l.a.e);var n=!1;if(this.hasKey){if((n=Object(o.a)(this.compare)(this.key,e))===l.a)return this.destination.error(l.a.e)}else this.hasKey=!0;!1===Boolean(n)&&(this.key=e,this.destination.next(t))},e}(i.a)},aecd:function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",function(){return PreInitLoaderService});var _page_chunk_record__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("rf30"),_environments_environment__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("AytR"),_angular_core__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("CcnG"),_angular_common_http__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("t/Na"),PreInitLoaderService=function(){function PreInitLoaderService(t){this.http=t}return PreInitLoaderService.prototype.loadPageAtInit=function(){if(0!=_environments_environment__WEBPACK_IMPORTED_MODULE_1__.a.production){console.log("PreInitLoaderService : Initial page loader [APP_INITIALIZER]");var currUrl=window.location.href;console.log("URL : "+currUrl);var sp_regex=new RegExp("Team:GO_Paris-Saclay\\/.*"),sp_matchArray=currUrl.match(sp_regex);if(Array.isArray(sp_matchArray)&&sp_matchArray.length){var sp_currPath_1=sp_matchArray[0].slice(20);console.log("Special Page Path : "+sp_currPath_1);var sp_record=_page_chunk_record__WEBPACK_IMPORTED_MODULE_0__.c.find(function(t){return t.specialPageName==sp_currPath_1});if(void 0==sp_record)return void console.log("PreInitLoaderService : No redirection record found for special page, page can't be loaded initially.\nIPL : This may be an error if the path is not part of the main chunk that is embedded in the html page");if(console.log("PreInitLoaderService : Corresponding record found : "+sp_record.specialPageName+" ("+sp_record.chunkRecordPageName+")"),"#MAIN#"==sp_record.chunkRecordPageName)return void console.log("PreInitLoaderService : Record indicates this page is bundled with main, nothing to do.");var ch_record=_page_chunk_record__WEBPACK_IMPORTED_MODULE_0__.b.find(function(t){return t.pageName==sp_record.chunkRecordPageName});if(void 0==ch_record)return void console.log("PreInitLoaderService : No record found for given special page, after performing redirection lookup successfully.");if(0==ch_record.chunkLoaded){var req=new XMLHttpRequest;if(req.open("GET",ch_record.chunkURL,!1),req.send(null),200===req.status){var decodedData=atob(req.responseText);eval(decodedData),ch_record.chunkLoaded=!0,console.log("PreInitLoaderService : Loaded : "+ch_record.pageName+" ("+ch_record.chunkURL+")")}else console.log("PreInitLoaderService : Error while getting data: %d (%s)",req.status,req.statusText)}}else{var regex=new RegExp("#\\/.*"),matchArray=currUrl.match(regex);if(Array.isArray(matchArray)&&matchArray.length){var currPath_1=matchArray[0].slice(1);console.log("PreInitLoaderService : Path = "+currPath_1);var record=_page_chunk_record__WEBPACK_IMPORTED_MODULE_0__.b.find(function(t){return-1!=currPath_1.indexOf(t.pageName)});if(void 0==record)return void console.log("PreInitLoaderService : No record found, page can't be loaded initially.\nIPL : This may be an error if the path is not part of the main chunk that is embedded in the html page");if(console.log("PreInitLoaderService : Corresponding record found : "+record.pageName+" ("+record.chunkURL+")"),0==record.chunkLoaded){var req=new XMLHttpRequest;if(req.open("GET",record.chunkURL,!1),req.send(null),200===req.status){var decodedData=atob(req.responseText);eval(decodedData),record.chunkLoaded=!0,console.log("PreInitLoaderService : Loaded : "+record.pageName+" ("+record.chunkURL+")")}else console.log("PreInitLoaderService : Error while getting data: %d (%s)",req.status,req.statusText)}}else console.log("PreInitLoaderService : Main page, or uncaught error.")}}else console.log("PreInitLoaderService::loadPageAtInit prod = false, preload disabled")},PreInitLoaderService.ngInjectableDef=_angular_core__WEBPACK_IMPORTED_MODULE_2__.U({factory:function(){return new PreInitLoaderService(_angular_core__WEBPACK_IMPORTED_MODULE_2__.Y(_angular_common_http__WEBPACK_IMPORTED_MODULE_3__.c))},token:PreInitLoaderService,providedIn:"root"}),PreInitLoaderService}()},ahDk:function(t,e,n){"use strict";n.r(e);var r=n("MpAI"),i=n("Rney"),o=n("mrSG"),l=n("MGBS"),a=n("zotm");function u(t){return function(e){return e.lift(new s(t))}}var s=function(){function t(t){this.closingNotifier=t}return t.prototype.call=function(t,e){return e.subscribe(new c(t,this.closingNotifier))},t}(),c=function(t){function e(e,n){var r=t.call(this,e)||this;return r.buffer=[],r.add(Object(a.a)(r,n)),r}return o.b(e,t),e.prototype._next=function(t){this.buffer.push(t)},e.prototype.notifyNext=function(t,e,n,r,i){var o=this.buffer;this.buffer=[],this.destination.next(o)},e}(l.a),h=n("FFOo");function f(t,e){return void 0===e&&(e=null),function(n){return n.lift(new d(t,e))}}var d=function(){function t(t,e){this.bufferSize=t,this.startBufferEvery=e,this.subscriberClass=e&&t!==e?m:p}return t.prototype.call=function(t,e){return e.subscribe(new this.subscriberClass(t,this.bufferSize,this.startBufferEvery))},t}(),p=function(t){function e(e,n){var r=t.call(this,e)||this;return r.bufferSize=n,r.buffer=[],r}return o.b(e,t),e.prototype._next=function(t){var e=this.buffer;e.push(t),e.length==this.bufferSize&&(this.destination.next(e),this.buffer=[])},e.prototype._complete=function(){var e=this.buffer;e.length>0&&this.destination.next(e),t.prototype._complete.call(this)},e}(h.a),m=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.bufferSize=n,i.startBufferEvery=r,i.buffers=[],i.count=0,i}return o.b(e,t),e.prototype._next=function(t){var e=this.bufferSize,n=this.startBufferEvery,r=this.buffers,i=this.count;this.count++,i%n==0&&r.push([]);for(var o=r.length;o--;){var l=r[o];l.push(t),l.length===e&&(r.splice(o,1),this.destination.next(l))}},e.prototype._complete=function(){for(var e=this.buffers,n=this.destination;e.length>0;){var r=e.shift();r.length>0&&n.next(r)}t.prototype._complete.call(this)},e}(h.a),g=n("T1DM"),b=n("nkY7");function y(t){var e=arguments.length,n=g.a;Object(b.a)(arguments[arguments.length-1])&&(n=arguments[arguments.length-1],e--);var r=null;e>=2&&(r=arguments[1]);var i=Number.POSITIVE_INFINITY;return e>=3&&(i=arguments[2]),function(e){return e.lift(new v(t,r,i,n))}}var v=function(){function t(t,e,n,r){this.bufferTimeSpan=t,this.bufferCreationInterval=e,this.maxBufferSize=n,this.scheduler=r}return t.prototype.call=function(t,e){return e.subscribe(new _(t,this.bufferTimeSpan,this.bufferCreationInterval,this.maxBufferSize,this.scheduler))},t}(),_=function(t){function e(e,n,r,i,o){var l=t.call(this,e)||this;l.bufferTimeSpan=n,l.bufferCreationInterval=r,l.maxBufferSize=i,l.scheduler=o,l.contexts=[];var a=l.openContext();if(l.timespanOnly=null==r||r<0,l.timespanOnly)l.add(a.closeAction=o.schedule(w,n,{subscriber:l,context:a,bufferTimeSpan:n}));else{var u={bufferTimeSpan:n,bufferCreationInterval:r,subscriber:l,scheduler:o};l.add(a.closeAction=o.schedule(S,n,{subscriber:l,context:a})),l.add(o.schedule(x,r,u))}return l}return o.b(e,t),e.prototype._next=function(t){for(var e,n=this.contexts,r=n.length,i=0;i<r;i++){var o=n[i],l=o.buffer;l.push(t),l.length==this.maxBufferSize&&(e=o)}e&&this.onBufferFull(e)},e.prototype._error=function(e){this.contexts.length=0,t.prototype._error.call(this,e)},e.prototype._complete=function(){for(var e=this.contexts,n=this.destination;e.length>0;){var r=e.shift();n.next(r.buffer)}t.prototype._complete.call(this)},e.prototype._unsubscribe=function(){this.contexts=null},e.prototype.onBufferFull=function(t){this.closeContext(t);var e=t.closeAction;if(e.unsubscribe(),this.remove(e),!this.closed&&this.timespanOnly){t=this.openContext();var n=this.bufferTimeSpan;this.add(t.closeAction=this.scheduler.schedule(w,n,{subscriber:this,context:t,bufferTimeSpan:n}))}},e.prototype.openContext=function(){var t=new function(){this.buffer=[]};return this.contexts.push(t),t},e.prototype.closeContext=function(t){this.destination.next(t.buffer);var e=this.contexts;(e?e.indexOf(t):-1)>=0&&e.splice(e.indexOf(t),1)},e}(h.a);function w(t){var e=t.subscriber,n=t.context;n&&e.closeContext(n),e.closed||(t.context=e.openContext(),t.context.closeAction=this.schedule(t,t.bufferTimeSpan))}function x(t){var e=t.bufferCreationInterval,n=t.bufferTimeSpan,r=t.subscriber,i=t.scheduler,o=r.openContext();r.closed||(r.add(o.closeAction=i.schedule(S,n,{subscriber:r,context:o})),this.schedule(t,e))}function S(t){t.subscriber.closeContext(t.context)}var C=n("pugT");function k(t,e){return function(n){return n.lift(new R(t,e))}}var R=function(){function t(t,e){this.openings=t,this.closingSelector=e}return t.prototype.call=function(t,e){return e.subscribe(new j(t,this.openings,this.closingSelector))},t}(),j=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.openings=n,i.closingSelector=r,i.contexts=[],i.add(Object(a.a)(i,n)),i}return o.b(e,t),e.prototype._next=function(t){for(var e=this.contexts,n=e.length,r=0;r<n;r++)e[r].buffer.push(t)},e.prototype._error=function(e){for(var n=this.contexts;n.length>0;){var r=n.shift();r.subscription.unsubscribe(),r.buffer=null,r.subscription=null}this.contexts=null,t.prototype._error.call(this,e)},e.prototype._complete=function(){for(var e=this.contexts;e.length>0;){var n=e.shift();this.destination.next(n.buffer),n.subscription.unsubscribe(),n.buffer=null,n.subscription=null}this.contexts=null,t.prototype._complete.call(this)},e.prototype.notifyNext=function(t,e,n,r,i){t?this.closeBuffer(t):this.openBuffer(e)},e.prototype.notifyComplete=function(t){this.closeBuffer(t.context)},e.prototype.openBuffer=function(t){try{var e=this.closingSelector.call(this,t);e&&this.trySubscribe(e)}catch(t){this._error(t)}},e.prototype.closeBuffer=function(t){var e=this.contexts;if(e&&t){var n=t.subscription;this.destination.next(t.buffer),e.splice(e.indexOf(t),1),this.remove(n),n.unsubscribe()}},e.prototype.trySubscribe=function(t){var e=this.contexts,n=new C.a,r={buffer:[],subscription:n};e.push(r);var i=Object(a.a)(this,t,r);!i||i.closed?this.closeBuffer(r):(i.context=r,this.add(i),n.add(i))},e}(l.a),O=n("Ehmk"),E=n("eihs");function T(t){return function(e){return e.lift(new P(t))}}var P=function(){function t(t){this.closingSelector=t}return t.prototype.call=function(t,e){return e.subscribe(new I(t,this.closingSelector))},t}(),I=function(t){function e(e,n){var r=t.call(this,e)||this;return r.closingSelector=n,r.subscribing=!1,r.openBuffer(),r}return o.b(e,t),e.prototype._next=function(t){this.buffer.push(t)},e.prototype._complete=function(){var e=this.buffer;e&&this.destination.next(e),t.prototype._complete.call(this)},e.prototype._unsubscribe=function(){this.buffer=null,this.subscribing=!1},e.prototype.notifyNext=function(t,e,n,r,i){this.openBuffer()},e.prototype.notifyComplete=function(){this.subscribing?this.complete():this.openBuffer()},e.prototype.openBuffer=function(){var t=this.closingSubscription;t&&(this.remove(t),t.unsubscribe()),this.buffer&&this.destination.next(this.buffer),this.buffer=[];var e=Object(O.a)(this.closingSelector)();e===E.a?this.error(E.a.e):(t=new C.a,this.closingSubscription=t,this.add(t),this.subscribing=!0,t.add(Object(a.a)(this,e)),this.subscribing=!1)},e}(l.a),A=n("9Z1F"),M=n("dzgT");function D(t){return function(e){return e.lift(new M.a(t))}}var N=n("isby"),L=n("0/uQ");function F(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var n=null;return"function"==typeof t[t.length-1]&&(n=t.pop()),1===t.length&&Object(N.a)(t[0])&&(t=t[0].slice()),function(e){return e.lift.call(Object(L.a)([e].concat(t)),new M.a(n))}}var z=n("dEwP");function V(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return function(e){return e.lift.call(z.a.apply(void 0,[e].concat(t)))}}var B=n("Txjg"),H=n("Phjn");function G(t,e){return Object(H.a)(function(){return t},e)}function U(t){return function(e){return e.lift(new q(t,e))}}var q=function(){function t(t,e){this.predicate=t,this.source=e}return t.prototype.call=function(t,e){return e.subscribe(new Q(t,this.predicate,this.source))},t}(),Q=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.predicate=n,i.source=r,i.count=0,i.index=0,i}return o.b(e,t),e.prototype._next=function(t){this.predicate?this._tryPredicate(t):this.count++},e.prototype._tryPredicate=function(t){var e;try{e=this.predicate(t,this.index++,this.source)}catch(t){return void this.destination.error(t)}e&&this.count++},e.prototype._complete=function(){this.destination.next(this.count),this.destination.complete()},e}(h.a);function W(t){return function(e){return e.lift(new Y(t))}}var Y=function(){function t(t){this.durationSelector=t}return t.prototype.call=function(t,e){return e.subscribe(new Z(t,this.durationSelector))},t}(),Z=function(t){function e(e,n){var r=t.call(this,e)||this;return r.durationSelector=n,r.hasValue=!1,r.durationSubscription=null,r}return o.b(e,t),e.prototype._next=function(t){try{var e=this.durationSelector.call(this,t);e&&this._tryNext(t,e)}catch(t){this.destination.error(t)}},e.prototype._complete=function(){this.emitValue(),this.destination.complete()},e.prototype._tryNext=function(t,e){var n=this.durationSubscription;this.value=t,this.hasValue=!0,n&&(n.unsubscribe(),this.remove(n)),(n=Object(a.a)(this,e))&&!n.closed&&this.add(this.durationSubscription=n)},e.prototype.notifyNext=function(t,e,n,r,i){this.emitValue()},e.prototype.notifyComplete=function(){this.emitValue()},e.prototype.emitValue=function(){if(this.hasValue){var e=this.value,n=this.durationSubscription;n&&(this.durationSubscription=null,n.unsubscribe(),this.remove(n)),this.value=null,this.hasValue=!1,t.prototype._next.call(this,e)}},e}(l.a),K=n("Gi3i"),X=n("HJBe"),$=n("vubp"),J=n("6blF");function tt(t,e){return e?function(n){return new rt(n,e).lift(new et(t))}:function(e){return e.lift(new et(t))}}var et=function(){function t(t){this.delayDurationSelector=t}return t.prototype.call=function(t,e){return e.subscribe(new nt(t,this.delayDurationSelector))},t}(),nt=function(t){function e(e,n){var r=t.call(this,e)||this;return r.delayDurationSelector=n,r.completed=!1,r.delayNotifierSubscriptions=[],r}return o.b(e,t),e.prototype.notifyNext=function(t,e,n,r,i){this.destination.next(t),this.removeSubscription(i),this.tryComplete()},e.prototype.notifyError=function(t,e){this._error(t)},e.prototype.notifyComplete=function(t){var e=this.removeSubscription(t);e&&this.destination.next(e),this.tryComplete()},e.prototype._next=function(t){try{var e=this.delayDurationSelector(t);e&&this.tryDelay(e,t)}catch(t){this.destination.error(t)}},e.prototype._complete=function(){this.completed=!0,this.tryComplete()},e.prototype.removeSubscription=function(t){t.unsubscribe();var e=this.delayNotifierSubscriptions.indexOf(t);return-1!==e&&this.delayNotifierSubscriptions.splice(e,1),t.outerValue},e.prototype.tryDelay=function(t,e){var n=Object(a.a)(this,t,e);n&&!n.closed&&(this.add(n),this.delayNotifierSubscriptions.push(n))},e.prototype.tryComplete=function(){this.completed&&0===this.delayNotifierSubscriptions.length&&this.destination.complete()},e}(l.a),rt=function(t){function e(e,n){var r=t.call(this)||this;return r.source=e,r.subscriptionDelay=n,r}return o.b(e,t),e.prototype._subscribe=function(t){this.subscriptionDelay.subscribe(new it(t,this.source))},e}(J.a),it=function(t){function e(e,n){var r=t.call(this)||this;return r.parent=e,r.source=n,r.sourceSubscribed=!1,r}return o.b(e,t),e.prototype._next=function(t){this.subscribeToSource()},e.prototype._error=function(t){this.unsubscribe(),this.parent.error(t)},e.prototype._complete=function(){this.subscribeToSource()},e.prototype.subscribeToSource=function(){this.sourceSubscribed||(this.sourceSubscribed=!0,this.unsubscribe(),this.source.subscribe(this.parent))},e}(h.a);function ot(){return function(t){return t.lift(new lt)}}var lt=function(){function t(){}return t.prototype.call=function(t,e){return e.subscribe(new at(t))},t}(),at=function(t){function e(e){return t.call(this,e)||this}return o.b(e,t),e.prototype._next=function(t){t.observe(this.destination)},e}(h.a);function ut(t,e){return function(n){return n.lift(new st(t,e))}}var st=function(){function t(t,e){this.keySelector=t,this.flushes=e}return t.prototype.call=function(t,e){return e.subscribe(new ct(t,this.keySelector,this.flushes))},t}(),ct=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.keySelector=n,i.values=new Set,r&&i.add(Object(a.a)(i,r)),i}return o.b(e,t),e.prototype.notifyNext=function(t,e,n,r,i){this.values.clear()},e.prototype.notifyError=function(t,e){this._error(t)},e.prototype._next=function(t){this.keySelector?this._useKeySelector(t):this._finalizeNext(t,t)},e.prototype._useKeySelector=function(t){var e,n=this.destination;try{e=this.keySelector(t)}catch(t){return void n.error(t)}this._finalizeNext(e,t)},e.prototype._finalizeNext=function(t,e){var n=this.values;n.has(t)||(n.add(t),this.destination.next(e))},e}(l.a),ht=n("ad02");function ft(t,e){return Object(ht.a)(function(n,r){return e?e(n[t],r[t]):n[t]===r[t]})}var dt=n("b7mW"),pt=n("VnD/"),mt=n("tNVB"),gt=n("t9fZ");function bt(t,e){if(t<0)throw new dt.a;var n=arguments.length>=2;return function(r){return r.pipe(Object(pt.a)(function(e,n){return n===t}),Object(gt.a)(1),n?Object(X.a)(e):Object(mt.a)(function(){return new dt.a}))}}var yt=n("IUTb"),vt=n("PU8L"),_t=n("G5J1");function wt(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return function(e){var n=t[t.length-1];Object(b.a)(n)?t.pop():n=null;var r=t.length;return 1!==r||n?r>0?Object(z.a)(e,Object(yt.a)(t,n)):Object(z.a)(e,Object(_t.b)(n)):Object(z.a)(e,Object(vt.a)(t[0]))}}var xt=n("zAZS");function St(){return function(t){return t.lift(new Ct)}}var Ct=function(){function t(){}return t.prototype.call=function(t,e){return e.subscribe(new kt(t))},t}(),kt=function(t){function e(e){var n=t.call(this,e)||this;return n.hasCompleted=!1,n.hasSubscription=!1,n}return o.b(e,t),e.prototype._next=function(t){this.hasSubscription||(this.hasSubscription=!0,this.add(Object(a.a)(this,t)))},e.prototype._complete=function(){this.hasCompleted=!0,this.hasSubscription||this.destination.complete()},e.prototype.notifyComplete=function(t){this.remove(t),this.hasSubscription=!1,this.hasCompleted&&this.destination.complete()},e}(l.a),Rt=n("67Y/");function jt(t,e){return e?function(n){return n.pipe(jt(function(n,r){return Object(L.a)(t(n,r)).pipe(Object(Rt.a)(function(t,i){return e(n,t,r,i)}))}))}:function(e){return e.lift(new Ot(t))}}var Ot=function(){function t(t){this.project=t}return t.prototype.call=function(t,e){return e.subscribe(new Et(t,this.project))},t}(),Et=function(t){function e(e,n){var r=t.call(this,e)||this;return r.project=n,r.hasSubscription=!1,r.hasCompleted=!1,r.index=0,r}return o.b(e,t),e.prototype._next=function(t){this.hasSubscription||this.tryNext(t)},e.prototype.tryNext=function(t){var e=this.index++,n=this.destination;try{var r=this.project(t,e);this.hasSubscription=!0,this.add(Object(a.a)(this,r,t,e))}catch(t){n.error(t)}},e.prototype._complete=function(){this.hasCompleted=!0,this.hasSubscription||this.destination.complete()},e.prototype.notifyNext=function(t,e,n,r,i){this.destination.next(e)},e.prototype.notifyError=function(t){this.destination.error(t)},e.prototype.notifyComplete=function(t){this.remove(t),this.hasSubscription=!1,this.hasCompleted&&this.destination.complete()},e}(l.a);function Tt(t,e,n){return void 0===e&&(e=Number.POSITIVE_INFINITY),void 0===n&&(n=void 0),e=(e||0)<1?Number.POSITIVE_INFINITY:e,function(r){return r.lift(new Pt(t,e,n))}}var Pt=function(){function t(t,e,n){this.project=t,this.concurrent=e,this.scheduler=n}return t.prototype.call=function(t,e){return e.subscribe(new It(t,this.project,this.concurrent,this.scheduler))},t}(),It=function(t){function e(e,n,r,i){var o=t.call(this,e)||this;return o.project=n,o.concurrent=r,o.scheduler=i,o.index=0,o.active=0,o.hasCompleted=!1,r<Number.POSITIVE_INFINITY&&(o.buffer=[]),o}return o.b(e,t),e.dispatch=function(t){t.subscriber.subscribeToProjection(t.result,t.value,t.index)},e.prototype._next=function(t){var n=this.destination;if(n.closed)this._complete();else{var r=this.index++;if(this.active<this.concurrent){n.next(t);var i=Object(O.a)(this.project)(t,r);i===E.a?n.error(E.a.e):this.scheduler?this.add(this.scheduler.schedule(e.dispatch,0,{subscriber:this,result:i,value:t,index:r})):this.subscribeToProjection(i,t,r)}else this.buffer.push(t)}},e.prototype.subscribeToProjection=function(t,e,n){this.active++,this.add(Object(a.a)(this,t,e,n))},e.prototype._complete=function(){this.hasCompleted=!0,this.hasCompleted&&0===this.active&&this.destination.complete()},e.prototype.notifyNext=function(t,e,n,r,i){this._next(e)},e.prototype.notifyComplete=function(t){var e=this.buffer;this.remove(t),this.active--,e&&e.length>0&&this._next(e.shift()),this.hasCompleted&&0===this.active&&this.destination.complete()},e}(l.a),At=n("2WpN");function Mt(t,e){if("function"!=typeof t)throw new TypeError("predicate is not a function");return function(n){return n.lift(new Dt(t,n,!1,e))}}var Dt=function(){function t(t,e,n,r){this.predicate=t,this.source=e,this.yieldIndex=n,this.thisArg=r}return t.prototype.call=function(t,e){return e.subscribe(new Nt(t,this.predicate,this.source,this.yieldIndex,this.thisArg))},t}(),Nt=function(t){function e(e,n,r,i,o){var l=t.call(this,e)||this;return l.predicate=n,l.source=r,l.yieldIndex=i,l.thisArg=o,l.index=0,l}return o.b(e,t),e.prototype.notifyComplete=function(t){var e=this.destination;e.next(t),e.complete()},e.prototype._next=function(t){var e=this.predicate,n=this.thisArg,r=this.index++;try{e.call(n||this,t,r,this.source)&&this.notifyComplete(this.yieldIndex?r:t)}catch(t){this.destination.error(t)}},e.prototype._complete=function(){this.notifyComplete(this.yieldIndex?-1:void 0)},e}(h.a);function Lt(t,e){return function(n){return n.lift(new Dt(t,n,!0,e))}}var Ft=n("P6uZ"),zt=n("IxPp");function Vt(){return function(t){return t.lift(new Bt)}}var Bt=function(){function t(){}return t.prototype.call=function(t,e){return e.subscribe(new Ht(t))},t}(),Ht=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o.b(e,t),e.prototype._next=function(t){},e}(h.a);function Gt(){return function(t){return t.lift(new Ut)}}var Ut=function(){function t(){}return t.prototype.call=function(t,e){return e.subscribe(new qt(t))},t}(),qt=function(t){function e(e){return t.call(this,e)||this}return o.b(e,t),e.prototype.notifyComplete=function(t){var e=this.destination;e.next(t),e.complete()},e.prototype._next=function(t){this.notifyComplete(!1)},e.prototype._complete=function(){this.notifyComplete(!0)},e}(h.a),Qt=n("w1EH");function Wt(t){return function(e){return e.lift(new Yt(t))}}var Yt=function(){function t(t){this.value=t}return t.prototype.call=function(t,e){return e.subscribe(new Zt(t,this.value))},t}(),Zt=function(t){function e(e,n){var r=t.call(this,e)||this;return r.value=n,r}return o.b(e,t),e.prototype._next=function(t){this.destination.next(this.value)},e}(h.a),Kt=n("60iU");function Xt(){return function(t){return t.lift(new $t)}}var $t=function(){function t(){}return t.prototype.call=function(t,e){return e.subscribe(new Jt(t))},t}(),Jt=function(t){function e(e){return t.call(this,e)||this}return o.b(e,t),e.prototype._next=function(t){this.destination.next(Kt.a.createNext(t))},e.prototype._error=function(t){var e=this.destination;e.next(Kt.a.createError(t)),e.complete()},e.prototype._complete=function(){var t=this.destination;t.next(Kt.a.createComplete()),t.complete()},e}(h.a),te=n("Qgas");function ee(t){var e="function"==typeof t?function(e,n){return t(e,n)>0?e:n}:function(t,e){return t>e?t:e};return Object(te.a)(e)}var ne=n("p0ib");function re(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return function(e){return e.lift.call(ne.a.apply(void 0,[e].concat(t)))}}var ie=n("Zn8D"),oe=n("psW0");function le(t,e,n){return void 0===n&&(n=Number.POSITIVE_INFINITY),"function"==typeof e?Object(oe.a)(function(){return t},e,n):("number"==typeof e&&(n=e),Object(oe.a)(function(){return t},n))}function ae(t,e,n){return void 0===n&&(n=Number.POSITIVE_INFINITY),function(r){return r.lift(new ue(t,e,n))}}var ue=function(){function t(t,e,n){this.accumulator=t,this.seed=e,this.concurrent=n}return t.prototype.call=function(t,e){return e.subscribe(new se(t,this.accumulator,this.seed,this.concurrent))},t}(),se=function(t){function e(e,n,r,i){var o=t.call(this,e)||this;return o.accumulator=n,o.acc=r,o.concurrent=i,o.hasValue=!1,o.hasCompleted=!1,o.buffer=[],o.active=0,o.index=0,o}return o.b(e,t),e.prototype._next=function(t){if(this.active<this.concurrent){var e=this.index++,n=Object(O.a)(this.accumulator)(this.acc,t);n===E.a?this.destination.error(E.a.e):(this.active++,this._innerSub(n,t,e))}else this.buffer.push(t)},e.prototype._innerSub=function(t,e,n){this.add(Object(a.a)(this,t,e,n))},e.prototype._complete=function(){this.hasCompleted=!0,0===this.active&&0===this.buffer.length&&(!1===this.hasValue&&this.destination.next(this.acc),this.destination.complete())},e.prototype.notifyNext=function(t,e,n,r,i){var o=this.destination;this.acc=e,this.hasValue=!0,o.next(e)},e.prototype.notifyComplete=function(t){var e=this.buffer;this.remove(t),this.active--,e.length>0?this._next(e.shift()):0===this.active&&this.hasCompleted&&(!1===this.hasValue&&this.destination.next(this.acc),this.destination.complete())},e}(l.a);function ce(t){var e="function"==typeof t?function(e,n){return t(e,n)<0?e:n}:function(t,e){return t<e?t:e};return Object(te.a)(e)}var he=n("xlPZ"),fe=n("mZXl");function de(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return 1===t.length&&Object(N.a)(t[0])&&(t=t[0]),function(e){return e.lift(new pe(t))}}var pe=function(){function t(t){this.nextSources=t}return t.prototype.call=function(t,e){return e.subscribe(new me(t,this.nextSources))},t}(),me=function(t){function e(e,n){var r=t.call(this,e)||this;return r.destination=e,r.nextSources=n,r}return o.b(e,t),e.prototype.notifyError=function(t,e){this.subscribeToNextSource()},e.prototype.notifyComplete=function(t){this.subscribeToNextSource()},e.prototype._error=function(t){this.subscribeToNextSource()},e.prototype._complete=function(){this.subscribeToNextSource()},e.prototype.subscribeToNextSource=function(){var t=this.nextSources.shift();t?this.add(Object(a.a)(this,t)):this.destination.complete()},e}(l.a),ge=n("qyHS");function be(t,e){return function(n){return[Object(pt.a)(t,e)(n),Object(pt.a)(function(e,n){function r(){return!r.pred.apply(r.thisArg,arguments)}return r.pred=t,r.thisArg=n,r}(0,e))(n)]}}function ye(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var n=t.length;if(0===n)throw new Error("list of properties cannot be empty.");return function(e){return Object(Rt.a)(function(t,e){return function(n){for(var r=n,i=0;i<e;i++){var o=r[t[i]];if(void 0===o)return;r=o}return r}}(t,n))(e)}}var ve=n("K9Ia");function _e(t){return t?Object(he.a)(function(){return new ve.a},t):Object(he.a)(new ve.a)}var we=n("26FU");function xe(t){return function(e){return Object(he.a)(new we.a(t))(e)}}var Se=n("svcd");function Ce(){return function(t){return Object(he.a)(new Se.a)(t)}}var ke=n("S5bw");function Re(t,e,n,r){n&&"function"!=typeof n&&(r=n);var i="function"==typeof n?n:void 0,o=new ke.a(t,e,r);return function(t){return Object(he.a)(function(){return o},i)(t)}}var je=n("W0Ae");function Oe(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return function(e){return 1===t.length&&Object(N.a)(t[0])&&(t=t[0]),e.lift.call(je.a.apply(void 0,[e].concat(t)))}}function Ee(t){return void 0===t&&(t=-1),function(e){return 0===t?Object(_t.b)():e.lift(new Te(t<0?-1:t-1,e))}}var Te=function(){function t(t,e){this.count=t,this.source=e}return t.prototype.call=function(t,e){return e.subscribe(new Pe(t,this.count,this.source))},t}(),Pe=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.count=n,i.source=r,i}return o.b(e,t),e.prototype.complete=function(){if(!this.isStopped){var e=this.source,n=this.count;if(0===n)return t.prototype.complete.call(this);n>-1&&(this.count=n-1),e.subscribe(this._unsubscribeAndRecycle())}},e}(h.a);function Ie(t){return function(e){return e.lift(new Ae(t))}}var Ae=function(){function t(t){this.notifier=t}return t.prototype.call=function(t,e){return e.subscribe(new Me(t,this.notifier,e))},t}(),Me=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.notifier=n,i.source=r,i.sourceIsBeingSubscribedTo=!0,i}return o.b(e,t),e.prototype.notifyNext=function(t,e,n,r,i){this.sourceIsBeingSubscribedTo=!0,this.source.subscribe(this)},e.prototype.notifyComplete=function(e){if(!1===this.sourceIsBeingSubscribedTo)return t.prototype.complete.call(this)},e.prototype.complete=function(){if(this.sourceIsBeingSubscribedTo=!1,!this.isStopped){if(this.retries||this.subscribeToRetries(),!this.retriesSubscription||this.retriesSubscription.closed)return t.prototype.complete.call(this);this._unsubscribeAndRecycle(),this.notifications.next()}},e.prototype._unsubscribe=function(){var t=this.notifications,e=this.retriesSubscription;t&&(t.unsubscribe(),this.notifications=null),e&&(e.unsubscribe(),this.retriesSubscription=null),this.retries=null},e.prototype._unsubscribeAndRecycle=function(){var e=this._unsubscribe;return this._unsubscribe=null,t.prototype._unsubscribeAndRecycle.call(this),this._unsubscribe=e,this},e.prototype.subscribeToRetries=function(){this.notifications=new ve.a;var e=Object(O.a)(this.notifier)(this.notifications);if(e===E.a)return t.prototype.complete.call(this);this.retries=e,this.retriesSubscription=Object(a.a)(this,e)},e}(l.a);function De(t){return void 0===t&&(t=-1),function(e){return e.lift(new Ne(t,e))}}var Ne=function(){function t(t,e){this.count=t,this.source=e}return t.prototype.call=function(t,e){return e.subscribe(new Le(t,this.count,this.source))},t}(),Le=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.count=n,i.source=r,i}return o.b(e,t),e.prototype.error=function(e){if(!this.isStopped){var n=this.source,r=this.count;if(0===r)return t.prototype.error.call(this,e);r>-1&&(this.count=r-1),n.subscribe(this._unsubscribeAndRecycle())}},e}(h.a);function Fe(t){return function(e){return e.lift(new ze(t,e))}}var ze=function(){function t(t,e){this.notifier=t,this.source=e}return t.prototype.call=function(t,e){return e.subscribe(new Ve(t,this.notifier,this.source))},t}(),Ve=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.notifier=n,i.source=r,i}return o.b(e,t),e.prototype.error=function(e){if(!this.isStopped){var n=this.errors,r=this.retries,i=this.retriesSubscription;if(r)this.errors=null,this.retriesSubscription=null;else{if(n=new ve.a,(r=Object(O.a)(this.notifier)(n))===E.a)return t.prototype.error.call(this,E.a.e);i=Object(a.a)(this,r)}this._unsubscribeAndRecycle(),this.errors=n,this.retries=r,this.retriesSubscription=i,n.next(e)}},e.prototype._unsubscribe=function(){var t=this.errors,e=this.retriesSubscription;t&&(t.unsubscribe(),this.errors=null),e&&(e.unsubscribe(),this.retriesSubscription=null),this.retries=null},e.prototype.notifyNext=function(t,e,n,r,i){var o=this._unsubscribe;this._unsubscribe=null,this._unsubscribeAndRecycle(),this._unsubscribe=o,this.source.subscribe(this)},e}(l.a),Be=n("yGWI");function He(t){return function(e){return e.lift(new Ge(t))}}var Ge=function(){function t(t){this.notifier=t}return t.prototype.call=function(t,e){var n=new Ue(t),r=e.subscribe(n);return r.add(Object(a.a)(n,this.notifier)),r},t}(),Ue=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.hasValue=!1,e}return o.b(e,t),e.prototype._next=function(t){this.value=t,this.hasValue=!0},e.prototype.notifyNext=function(t,e,n,r,i){this.emitValue()},e.prototype.notifyComplete=function(){this.emitValue()},e.prototype.emitValue=function(){this.hasValue&&(this.hasValue=!1,this.destination.next(this.value))},e}(l.a);function qe(t,e){return void 0===e&&(e=g.a),function(n){return n.lift(new Qe(t,e))}}var Qe=function(){function t(t,e){this.period=t,this.scheduler=e}return t.prototype.call=function(t,e){return e.subscribe(new We(t,this.period,this.scheduler))},t}(),We=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.period=n,i.scheduler=r,i.hasValue=!1,i.add(r.schedule(Ye,n,{subscriber:i,period:n})),i}return o.b(e,t),e.prototype._next=function(t){this.lastValue=t,this.hasValue=!0},e.prototype.notifyNext=function(){this.hasValue&&(this.hasValue=!1,this.destination.next(this.lastValue))},e}(h.a);function Ye(t){var e=t.period;t.subscriber.notifyNext(),this.schedule(t,e)}var Ze=n("dC0D");function Ke(t,e){return function(n){return n.lift(new Xe(t,e))}}var Xe=function(){function t(t,e){this.compareTo=t,this.comparor=e}return t.prototype.call=function(t,e){return e.subscribe(new $e(t,this.compareTo,this.comparor))},t}(),$e=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.compareTo=n,i.comparor=r,i._a=[],i._b=[],i._oneComplete=!1,i.add(n.subscribe(new Je(e,i))),i}return o.b(e,t),e.prototype._next=function(t){this._oneComplete&&0===this._b.length?this.emit(!1):(this._a.push(t),this.checkValues())},e.prototype._complete=function(){this._oneComplete?this.emit(0===this._a.length&&0===this._b.length):this._oneComplete=!0},e.prototype.checkValues=function(){for(var t=this._a,e=this._b,n=this.comparor;t.length>0&&e.length>0;){var r=t.shift(),i=e.shift(),o=!1;n?(o=Object(O.a)(n)(r,i))===E.a&&this.destination.error(E.a.e):o=r===i,o||this.emit(!1)}},e.prototype.emit=function(t){var e=this.destination;e.next(t),e.complete()},e.prototype.nextB=function(t){this._oneComplete&&0===this._a.length?this.emit(!1):(this._b.push(t),this.checkValues())},e}(h.a),Je=function(t){function e(e,n){var r=t.call(this,e)||this;return r.parent=n,r}return o.b(e,t),e.prototype._next=function(t){this.parent.nextB(t)},e.prototype._error=function(t){this.parent.error(t)},e.prototype._complete=function(){this.parent._complete()},e}(h.a),tn=n("S1nX");function en(t,e,n){return function(r){return r.lift(function(t,e,n){var r,i,o=0,l=!1,a=!1;return function(u){o++,r&&!l||(l=!1,r=new ke.a(t,e,n),i=u.subscribe({next:function(t){r.next(t)},error:function(t){l=!0,r.error(t)},complete:function(){a=!0,r.complete()}}));var s=r.subscribe(this);return function(){o--,s.unsubscribe(),i&&0===o&&a&&i.unsubscribe()}}}(t,e,n))}}var nn=n("3fWJ");function rn(t){return function(e){return e.lift(new on(t,e))}}var on=function(){function t(t,e){this.predicate=t,this.source=e}return t.prototype.call=function(t,e){return e.subscribe(new ln(t,this.predicate,this.source))},t}(),ln=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.predicate=n,i.source=r,i.seenValue=!1,i.index=0,i}return o.b(e,t),e.prototype.applySingleValue=function(t){this.seenValue?this.destination.error("Sequence contains more than one element"):(this.seenValue=!0,this.singleValue=t)},e.prototype._next=function(t){var e=this.index++;this.predicate?this.tryNext(t,e):this.applySingleValue(t)},e.prototype.tryNext=function(t,e){try{this.predicate(t,e,this.source)&&this.applySingleValue(t)}catch(t){this.destination.error(t)}},e.prototype._complete=function(){var t=this.destination;this.index>0?(t.next(this.seenValue?this.singleValue:void 0),t.complete()):t.error(new nn.a)},e}(h.a);function an(t){return function(e){return e.lift(new un(t))}}var un=function(){function t(t){this.total=t}return t.prototype.call=function(t,e){return e.subscribe(new sn(t,this.total))},t}(),sn=function(t){function e(e,n){var r=t.call(this,e)||this;return r.total=n,r.count=0,r}return o.b(e,t),e.prototype._next=function(t){++this.count>this.total&&this.destination.next(t)},e}(h.a);function cn(t){return function(e){return e.lift(new hn(t))}}var hn=function(){function t(t){if(this._skipCount=t,this._skipCount<0)throw new dt.a}return t.prototype.call=function(t,e){return e.subscribe(0===this._skipCount?new h.a(t):new fn(t,this._skipCount))},t}(),fn=function(t){function e(e,n){var r=t.call(this,e)||this;return r._skipCount=n,r._count=0,r._ring=new Array(n),r}return o.b(e,t),e.prototype._next=function(t){var e=this._skipCount,n=this._count++;if(n<e)this._ring[n]=t;else{var r=n%e,i=this._ring,o=i[r];i[r]=t,this.destination.next(o)}},e}(h.a);function dn(t){return function(e){return e.lift(new pn(t))}}var pn=function(){function t(t){this.notifier=t}return t.prototype.call=function(t,e){return e.subscribe(new mn(t,this.notifier))},t}(),mn=function(t){function e(e,n){var r=t.call(this,e)||this;return r.hasValue=!1,r.add(r.innerSubscription=Object(a.a)(r,n)),r}return o.b(e,t),e.prototype._next=function(e){this.hasValue&&t.prototype._next.call(this,e)},e.prototype.notifyNext=function(t,e,n,r,i){this.hasValue=!0,this.innerSubscription&&this.innerSubscription.unsubscribe()},e.prototype.notifyComplete=function(){},e}(l.a);function gn(t){return function(e){return e.lift(new bn(t))}}var bn=function(){function t(t){this.predicate=t}return t.prototype.call=function(t,e){return e.subscribe(new yn(t,this.predicate))},t}(),yn=function(t){function e(e,n){var r=t.call(this,e)||this;return r.predicate=n,r.skipping=!0,r.index=0,r}return o.b(e,t),e.prototype._next=function(t){var e=this.destination;this.skipping&&this.tryCallPredicate(t),this.skipping||e.next(t)},e.prototype.tryCallPredicate=function(t){try{var e=this.predicate(t,this.index++);this.skipping=Boolean(e)}catch(t){this.destination.error(t)}},e}(h.a),vn=n("p0Sj"),_n=n("KQya"),wn=n("/21U"),xn=function(t){function e(e,n,r){void 0===n&&(n=0),void 0===r&&(r=_n.a);var i=t.call(this)||this;return i.source=e,i.delayTime=n,i.scheduler=r,(!Object(wn.a)(n)||n<0)&&(i.delayTime=0),r&&"function"==typeof r.schedule||(i.scheduler=_n.a),i}return o.b(e,t),e.create=function(t,n,r){return void 0===n&&(n=0),void 0===r&&(r=_n.a),new e(t,n,r)},e.dispatch=function(t){return this.add(t.source.subscribe(t.subscriber))},e.prototype._subscribe=function(t){return this.scheduler.schedule(e.dispatch,this.delayTime,{source:this.source,subscriber:t})},e}(J.a);function Sn(t,e){return void 0===e&&(e=0),function(n){return n.lift(new Cn(t,e))}}var Cn=function(){function t(t,e){this.scheduler=t,this.delay=e}return t.prototype.call=function(t,e){return new xn(e,this.delay,this.scheduler).subscribe(t)},t}(),kn=n("15JJ"),Rn=n("mChF");function jn(){return Object(kn.a)(Rn.a)}function On(t,e){return e?Object(kn.a)(function(){return t},e):Object(kn.a)(function(){return t})}var En=n("AxiF"),Tn=n("ny24");function Pn(t){return function(e){return e.lift(new In(t))}}var In=function(){function t(t){this.predicate=t}return t.prototype.call=function(t,e){return e.subscribe(new An(t,this.predicate))},t}(),An=function(t){function e(e,n){var r=t.call(this,e)||this;return r.predicate=n,r.index=0,r}return o.b(e,t),e.prototype._next=function(t){var e,n=this.destination;try{e=this.predicate(t,this.index++)}catch(t){return void n.error(t)}this.nextOrComplete(t,e)},e.prototype.nextOrComplete=function(t,e){var n=this.destination;Boolean(e)?n.next(t):n.complete()},e}(h.a),Mn=n("xMyE"),Dn={leading:!0,trailing:!1};function Nn(t,e){return void 0===e&&(e=Dn),function(n){return n.lift(new Ln(t,e.leading,e.trailing))}}var Ln=function(){function t(t,e,n){this.durationSelector=t,this.leading=e,this.trailing=n}return t.prototype.call=function(t,e){return e.subscribe(new Fn(t,this.durationSelector,this.leading,this.trailing))},t}(),Fn=function(t){function e(e,n,r,i){var o=t.call(this,e)||this;return o.destination=e,o.durationSelector=n,o._leading=r,o._trailing=i,o._hasValue=!1,o}return o.b(e,t),e.prototype._next=function(t){this._hasValue=!0,this._sendValue=t,this._throttled||(this._leading?this.send():this.throttle(t))},e.prototype.send=function(){var t=this._sendValue;this._hasValue&&(this.destination.next(t),this.throttle(t)),this._hasValue=!1,this._sendValue=null},e.prototype.throttle=function(t){var e=this.tryDurationSelector(t);e&&this.add(this._throttled=Object(a.a)(this,e))},e.prototype.tryDurationSelector=function(t){try{return this.durationSelector(t)}catch(t){return this.destination.error(t),null}},e.prototype.throttlingDone=function(){var t=this._throttled,e=this._trailing;t&&t.unsubscribe(),this._throttled=null,e&&this.send()},e.prototype.notifyNext=function(t,e,n,r,i){this.throttlingDone()},e.prototype.notifyComplete=function(){this.throttlingDone()},e}(l.a);function zn(t,e,n){return void 0===e&&(e=g.a),void 0===n&&(n=Dn),function(r){return r.lift(new Vn(t,e,n.leading,n.trailing))}}var Vn=function(){function t(t,e,n,r){this.duration=t,this.scheduler=e,this.leading=n,this.trailing=r}return t.prototype.call=function(t,e){return e.subscribe(new Bn(t,this.duration,this.scheduler,this.leading,this.trailing))},t}(),Bn=function(t){function e(e,n,r,i,o){var l=t.call(this,e)||this;return l.duration=n,l.scheduler=r,l.leading=i,l.trailing=o,l._hasTrailingValue=!1,l._trailingValue=null,l}return o.b(e,t),e.prototype._next=function(t){this.throttled?this.trailing&&(this._trailingValue=t,this._hasTrailingValue=!0):(this.add(this.throttled=this.scheduler.schedule(Hn,this.duration,{subscriber:this})),this.leading&&this.destination.next(t))},e.prototype._complete=function(){this._hasTrailingValue?(this.destination.next(this._trailingValue),this.destination.complete()):this.destination.complete()},e.prototype.clearThrottle=function(){var t=this.throttled;t&&(this.trailing&&this._hasTrailingValue&&(this.destination.next(this._trailingValue),this._trailingValue=null,this._hasTrailingValue=!1),t.unsubscribe(),this.remove(t),this.throttled=null)},e}(h.a);function Hn(t){t.subscriber.clearThrottle()}var Gn=n("lYZG");function Un(t){return void 0===t&&(t=g.a),function(e){return Object(Gn.a)(function(){return e.pipe(Object(Ze.a)(function(e,n){var r=e.current;return{value:n,current:t.now(),last:r}},{current:t.now(),value:void 0,last:void 0}),Object(Rt.a)(function(t){return new qn(t.value,t.current-t.last)}))})}}var qn=function(t,e){this.value=t,this.interval=e},Qn=n("3U0i"),Wn=n("VGuC");function Yn(t,e,n){return void 0===n&&(n=g.a),function(r){var i=Object(Wn.a)(t),o=i?+t-n.now():Math.abs(t);return r.lift(new Zn(o,i,e,n))}}var Zn=function(){function t(t,e,n,r){this.waitFor=t,this.absoluteTimeout=e,this.withObservable=n,this.scheduler=r}return t.prototype.call=function(t,e){return e.subscribe(new Kn(t,this.absoluteTimeout,this.waitFor,this.withObservable,this.scheduler))},t}(),Kn=function(t){function e(e,n,r,i,o){var l=t.call(this,e)||this;return l.absoluteTimeout=n,l.waitFor=r,l.withObservable=i,l.scheduler=o,l.action=null,l.scheduleTimeout(),l}return o.b(e,t),e.dispatchTimeout=function(t){var e=t.withObservable;t._unsubscribeAndRecycle(),t.add(Object(a.a)(t,e))},e.prototype.scheduleTimeout=function(){var t=this.action;t?this.action=t.schedule(this,this.waitFor):this.add(this.action=this.scheduler.schedule(e.dispatchTimeout,this.waitFor,this))},e.prototype._next=function(e){this.absoluteTimeout||this.scheduleTimeout(),t.prototype._next.call(this,e)},e.prototype._unsubscribe=function(){this.action=null,this.scheduler=null,this.withObservable=null},e}(l.a),Xn=n("XlPw");function $n(t,e){return void 0===e&&(e=g.a),Yn(t,Object(Xn.a)(new Qn.a),e)}function Jn(t){return void 0===t&&(t=g.a),Object(Rt.a)(function(e){return new tr(e,t.now())})}var tr=function(t,e){this.value=t,this.timestamp=e};function er(t,e,n){return 0===n?[e]:(t.push(e),t)}function nr(){return Object(te.a)(er,[])}function rr(t){return function(e){return e.lift(new ir(t))}}var ir=function(){function t(t){this.windowBoundaries=t}return t.prototype.call=function(t,e){var n=new or(t),r=e.subscribe(n);return r.closed||n.add(Object(a.a)(n,this.windowBoundaries)),r},t}(),or=function(t){function e(e){var n=t.call(this,e)||this;return n.window=new ve.a,e.next(n.window),n}return o.b(e,t),e.prototype.notifyNext=function(t,e,n,r,i){this.openWindow()},e.prototype.notifyError=function(t,e){this._error(t)},e.prototype.notifyComplete=function(t){this._complete()},e.prototype._next=function(t){this.window.next(t)},e.prototype._error=function(t){this.window.error(t),this.destination.error(t)},e.prototype._complete=function(){this.window.complete(),this.destination.complete()},e.prototype._unsubscribe=function(){this.window=null},e.prototype.openWindow=function(){var t=this.window;t&&t.complete();var e=this.destination,n=this.window=new ve.a;e.next(n)},e}(l.a);function lr(t,e){return void 0===e&&(e=0),function(n){return n.lift(new ar(t,e))}}var ar=function(){function t(t,e){this.windowSize=t,this.startWindowEvery=e}return t.prototype.call=function(t,e){return e.subscribe(new ur(t,this.windowSize,this.startWindowEvery))},t}(),ur=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.destination=e,i.windowSize=n,i.startWindowEvery=r,i.windows=[new ve.a],i.count=0,e.next(i.windows[0]),i}return o.b(e,t),e.prototype._next=function(t){for(var e=this.startWindowEvery>0?this.startWindowEvery:this.windowSize,n=this.destination,r=this.windowSize,i=this.windows,o=i.length,l=0;l<o&&!this.closed;l++)i[l].next(t);var a=this.count-r+1;if(a>=0&&a%e==0&&!this.closed&&i.shift().complete(),++this.count%e==0&&!this.closed){var u=new ve.a;i.push(u),n.next(u)}},e.prototype._error=function(t){var e=this.windows;if(e)for(;e.length>0&&!this.closed;)e.shift().error(t);this.destination.error(t)},e.prototype._complete=function(){var t=this.windows;if(t)for(;t.length>0&&!this.closed;)t.shift().complete();this.destination.complete()},e.prototype._unsubscribe=function(){this.count=0,this.windows=null},e}(h.a);function sr(t){var e=g.a,n=null,r=Number.POSITIVE_INFINITY;return Object(b.a)(arguments[3])&&(e=arguments[3]),Object(b.a)(arguments[2])?e=arguments[2]:Object(wn.a)(arguments[2])&&(r=arguments[2]),Object(b.a)(arguments[1])?e=arguments[1]:Object(wn.a)(arguments[1])&&(n=arguments[1]),function(i){return i.lift(new cr(t,n,r,e))}}var cr=function(){function t(t,e,n,r){this.windowTimeSpan=t,this.windowCreationInterval=e,this.maxWindowSize=n,this.scheduler=r}return t.prototype.call=function(t,e){return e.subscribe(new fr(t,this.windowTimeSpan,this.windowCreationInterval,this.maxWindowSize,this.scheduler))},t}(),hr=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._numberOfNextedValues=0,e}return o.b(e,t),e.prototype.next=function(e){this._numberOfNextedValues++,t.prototype.next.call(this,e)},Object.defineProperty(e.prototype,"numberOfNextedValues",{get:function(){return this._numberOfNextedValues},enumerable:!0,configurable:!0}),e}(ve.a),fr=function(t){function e(e,n,r,i,o){var l=t.call(this,e)||this;l.destination=e,l.windowTimeSpan=n,l.windowCreationInterval=r,l.maxWindowSize=i,l.scheduler=o,l.windows=[];var a=l.openWindow();if(null!==r&&r>=0){var u={windowTimeSpan:n,windowCreationInterval:r,subscriber:l,scheduler:o};l.add(o.schedule(mr,n,{subscriber:l,window:a,context:null})),l.add(o.schedule(pr,r,u))}else l.add(o.schedule(dr,n,{subscriber:l,window:a,windowTimeSpan:n}));return l}return o.b(e,t),e.prototype._next=function(t){for(var e=this.windows,n=e.length,r=0;r<n;r++){var i=e[r];i.closed||(i.next(t),i.numberOfNextedValues>=this.maxWindowSize&&this.closeWindow(i))}},e.prototype._error=function(t){for(var e=this.windows;e.length>0;)e.shift().error(t);this.destination.error(t)},e.prototype._complete=function(){for(var t=this.windows;t.length>0;){var e=t.shift();e.closed||e.complete()}this.destination.complete()},e.prototype.openWindow=function(){var t=new hr;return this.windows.push(t),this.destination.next(t),t},e.prototype.closeWindow=function(t){t.complete();var e=this.windows;e.splice(e.indexOf(t),1)},e}(h.a);function dr(t){var e=t.subscriber,n=t.windowTimeSpan,r=t.window;r&&e.closeWindow(r),t.window=e.openWindow(),this.schedule(t,n)}function pr(t){var e=t.windowTimeSpan,n=t.subscriber,r=t.scheduler,i=t.windowCreationInterval,o=n.openWindow(),l={action:this,subscription:null};l.subscription=r.schedule(mr,e,{subscriber:n,window:o,context:l}),this.add(l.subscription),this.schedule(t,i)}function mr(t){var e=t.subscriber,n=t.window,r=t.context;r&&r.action&&r.subscription&&r.action.remove(r.subscription),e.closeWindow(n)}function gr(t,e){return function(n){return n.lift(new br(t,e))}}var br=function(){function t(t,e){this.openings=t,this.closingSelector=e}return t.prototype.call=function(t,e){return e.subscribe(new yr(t,this.openings,this.closingSelector))},t}(),yr=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.openings=n,i.closingSelector=r,i.contexts=[],i.add(i.openSubscription=Object(a.a)(i,n,n)),i}return o.b(e,t),e.prototype._next=function(t){var e=this.contexts;if(e)for(var n=e.length,r=0;r<n;r++)e[r].window.next(t)},e.prototype._error=function(e){var n=this.contexts;if(this.contexts=null,n)for(var r=n.length,i=-1;++i<r;){var o=n[i];o.window.error(e),o.subscription.unsubscribe()}t.prototype._error.call(this,e)},e.prototype._complete=function(){var e=this.contexts;if(this.contexts=null,e)for(var n=e.length,r=-1;++r<n;){var i=e[r];i.window.complete(),i.subscription.unsubscribe()}t.prototype._complete.call(this)},e.prototype._unsubscribe=function(){var t=this.contexts;if(this.contexts=null,t)for(var e=t.length,n=-1;++n<e;){var r=t[n];r.window.unsubscribe(),r.subscription.unsubscribe()}},e.prototype.notifyNext=function(t,e,n,r,i){if(t===this.openings){var o=this.closingSelector,l=Object(O.a)(o)(e);if(l===E.a)return this.error(E.a.e);var u=new ve.a,s=new C.a,c={window:u,subscription:s};this.contexts.push(c);var h=Object(a.a)(this,l,c);h.closed?this.closeWindow(this.contexts.length-1):(h.context=c,s.add(h)),this.destination.next(u)}else this.closeWindow(this.contexts.indexOf(t))},e.prototype.notifyError=function(t){this.error(t)},e.prototype.notifyComplete=function(t){t!==this.openSubscription&&this.closeWindow(this.contexts.indexOf(t.context))},e.prototype.closeWindow=function(t){if(-1!==t){var e=this.contexts,n=e[t],r=n.window,i=n.subscription;e.splice(t,1),r.complete(),i.unsubscribe()}},e}(l.a);function vr(t){return function(e){return e.lift(new _r(t))}}var _r=function(){function t(t){this.closingSelector=t}return t.prototype.call=function(t,e){return e.subscribe(new wr(t,this.closingSelector))},t}(),wr=function(t){function e(e,n){var r=t.call(this,e)||this;return r.destination=e,r.closingSelector=n,r.openWindow(),r}return o.b(e,t),e.prototype.notifyNext=function(t,e,n,r,i){this.openWindow(i)},e.prototype.notifyError=function(t,e){this._error(t)},e.prototype.notifyComplete=function(t){this.openWindow(t)},e.prototype._next=function(t){this.window.next(t)},e.prototype._error=function(t){this.window.error(t),this.destination.error(t),this.unsubscribeClosingNotification()},e.prototype._complete=function(){this.window.complete(),this.destination.complete(),this.unsubscribeClosingNotification()},e.prototype.unsubscribeClosingNotification=function(){this.closingNotification&&this.closingNotification.unsubscribe()},e.prototype.openWindow=function(t){void 0===t&&(t=null),t&&(this.remove(t),t.unsubscribe());var e=this.window;e&&e.complete();var n=this.window=new ve.a;this.destination.next(n);var r=Object(O.a)(this.closingSelector)();if(r===E.a){var i=E.a.e;this.destination.error(i),this.window.error(i)}else this.add(this.closingNotification=Object(a.a)(this,r))},e}(l.a);function xr(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return function(e){var n;return"function"==typeof t[t.length-1]&&(n=t.pop()),e.lift(new Sr(t,n))}}var Sr=function(){function t(t,e){this.observables=t,this.project=e}return t.prototype.call=function(t,e){return e.subscribe(new Cr(t,this.observables,this.project))},t}(),Cr=function(t){function e(e,n,r){var i=t.call(this,e)||this;i.observables=n,i.project=r,i.toRespond=[];var o=n.length;i.values=new Array(o);for(var l=0;l<o;l++)i.toRespond.push(l);for(l=0;l<o;l++){var u=n[l];i.add(Object(a.a)(i,u,u,l))}return i}return o.b(e,t),e.prototype.notifyNext=function(t,e,n,r,i){this.values[n]=e;var o=this.toRespond;if(o.length>0){var l=o.indexOf(n);-1!==l&&o.splice(l,1)}},e.prototype.notifyComplete=function(){},e.prototype._next=function(t){if(0===this.toRespond.length){var e=[t].concat(this.values);this.project?this._tryProject(e):this.destination.next(e)}},e.prototype._tryProject=function(t){var e;try{e=this.project.apply(this,t)}catch(t){return void this.destination.error(t)}this.destination.next(e)},e}(l.a),kr=n("909l");function Rr(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return function(e){return e.lift.call(kr.b.apply(void 0,[e].concat(t)))}}function jr(t){return function(e){return e.lift(new kr.a(t))}}n.d(e,"audit",function(){return r.a}),n.d(e,"auditTime",function(){return i.a}),n.d(e,"buffer",function(){return u}),n.d(e,"bufferCount",function(){return f}),n.d(e,"bufferTime",function(){return y}),n.d(e,"bufferToggle",function(){return k}),n.d(e,"bufferWhen",function(){return T}),n.d(e,"catchError",function(){return A.a}),n.d(e,"combineAll",function(){return D}),n.d(e,"combineLatest",function(){return F}),n.d(e,"concat",function(){return V}),n.d(e,"concatAll",function(){return B.a}),n.d(e,"concatMap",function(){return H.a}),n.d(e,"concatMapTo",function(){return G}),n.d(e,"count",function(){return U}),n.d(e,"debounce",function(){return W}),n.d(e,"debounceTime",function(){return K.a}),n.d(e,"defaultIfEmpty",function(){return X.a}),n.d(e,"delay",function(){return $.a}),n.d(e,"delayWhen",function(){return tt}),n.d(e,"dematerialize",function(){return ot}),n.d(e,"distinct",function(){return ut}),n.d(e,"distinctUntilChanged",function(){return ht.a}),n.d(e,"distinctUntilKeyChanged",function(){return ft}),n.d(e,"elementAt",function(){return bt}),n.d(e,"endWith",function(){return wt}),n.d(e,"every",function(){return xt.a}),n.d(e,"exhaust",function(){return St}),n.d(e,"exhaustMap",function(){return jt}),n.d(e,"expand",function(){return Tt}),n.d(e,"filter",function(){return pt.a}),n.d(e,"finalize",function(){return At.a}),n.d(e,"find",function(){return Mt}),n.d(e,"findIndex",function(){return Lt}),n.d(e,"first",function(){return Ft.a}),n.d(e,"groupBy",function(){return zt.b}),n.d(e,"ignoreElements",function(){return Vt}),n.d(e,"isEmpty",function(){return Gt}),n.d(e,"last",function(){return Qt.a}),n.d(e,"map",function(){return Rt.a}),n.d(e,"mapTo",function(){return Wt}),n.d(e,"materialize",function(){return Xt}),n.d(e,"max",function(){return ee}),n.d(e,"merge",function(){return re}),n.d(e,"mergeAll",function(){return ie.a}),n.d(e,"mergeMap",function(){return oe.a}),n.d(e,"flatMap",function(){return oe.a}),n.d(e,"mergeMapTo",function(){return le}),n.d(e,"mergeScan",function(){return ae}),n.d(e,"min",function(){return ce}),n.d(e,"multicast",function(){return he.a}),n.d(e,"observeOn",function(){return fe.b}),n.d(e,"onErrorResumeNext",function(){return de}),n.d(e,"pairwise",function(){return ge.a}),n.d(e,"partition",function(){return be}),n.d(e,"pluck",function(){return ye}),n.d(e,"publish",function(){return _e}),n.d(e,"publishBehavior",function(){return xe}),n.d(e,"publishLast",function(){return Ce}),n.d(e,"publishReplay",function(){return Re}),n.d(e,"race",function(){return Oe}),n.d(e,"reduce",function(){return te.a}),n.d(e,"repeat",function(){return Ee}),n.d(e,"repeatWhen",function(){return Ie}),n.d(e,"retry",function(){return De}),n.d(e,"retryWhen",function(){return Fe}),n.d(e,"refCount",function(){return Be.a}),n.d(e,"sample",function(){return He}),n.d(e,"sampleTime",function(){return qe}),n.d(e,"scan",function(){return Ze.a}),n.d(e,"sequenceEqual",function(){return Ke}),n.d(e,"share",function(){return tn.a}),n.d(e,"shareReplay",function(){return en}),n.d(e,"single",function(){return rn}),n.d(e,"skip",function(){return an}),n.d(e,"skipLast",function(){return cn}),n.d(e,"skipUntil",function(){return dn}),n.d(e,"skipWhile",function(){return gn}),n.d(e,"startWith",function(){return vn.a}),n.d(e,"subscribeOn",function(){return Sn}),n.d(e,"switchAll",function(){return jn}),n.d(e,"switchMap",function(){return kn.a}),n.d(e,"switchMapTo",function(){return On}),n.d(e,"take",function(){return gt.a}),n.d(e,"takeLast",function(){return En.a}),n.d(e,"takeUntil",function(){return Tn.a}),n.d(e,"takeWhile",function(){return Pn}),n.d(e,"tap",function(){return Mn.a}),n.d(e,"throttle",function(){return Nn}),n.d(e,"throttleTime",function(){return zn}),n.d(e,"throwIfEmpty",function(){return mt.a}),n.d(e,"timeInterval",function(){return Un}),n.d(e,"timeout",function(){return $n}),n.d(e,"timeoutWith",function(){return Yn}),n.d(e,"timestamp",function(){return Jn}),n.d(e,"toArray",function(){return nr}),n.d(e,"window",function(){return rr}),n.d(e,"windowCount",function(){return lr}),n.d(e,"windowTime",function(){return sr}),n.d(e,"windowToggle",function(){return gr}),n.d(e,"windowWhen",function(){return vr}),n.d(e,"withLatestFrom",function(){return xr}),n.d(e,"zip",function(){return Rr}),n.d(e,"zipAll",function(){return jr})},awvh:function(t,e,n){"use strict";n.d(e,"a",function(){return i});var r=n("mrSG"),i=function(t){function e(n){var r=t.call(this,n?n.length+" errors occurred during unsubscription:\n  "+n.map(function(t,e){return e+1+") "+t.toString()}).join("\n  "):"")||this;return r.errors=n,r.name="UnsubscriptionError",Object.setPrototypeOf(r,e.prototype),r}return r.b(e,t),e}(Error)},b7mW:function(t,e,n){"use strict";n.d(e,"a",function(){return i});var r=n("mrSG"),i=function(t){function e(){var n=t.call(this,"argument out of range")||this;return n.name="ArgumentOutOfRangeError",Object.setPrototypeOf(n,e.prototype),n}return r.b(e,t),e}(Error)},bne5:function(t,e,n){"use strict";n.d(e,"a",function(){return a});var r=n("6blF"),i=n("isby"),o=n("2Bdj"),l=n("67Y/");function a(t,e,n,u){return Object(o.a)(n)&&(u=n,n=void 0),u?a(t,e,n).pipe(Object(l.a)(function(t){return Object(i.a)(t)?u.apply(void 0,t):u(t)})):new r.a(function(r){!function t(e,n,r,i,o){var l;if(function(t){return t&&"function"==typeof t.addEventListener&&"function"==typeof t.removeEventListener}(e)){var a=e;e.addEventListener(n,r,o),l=function(){return a.removeEventListener(n,r,o)}}else if(function(t){return t&&"function"==typeof t.on&&"function"==typeof t.off}(e)){var u=e;e.on(n,r),l=function(){return u.off(n,r)}}else if(function(t){return t&&"function"==typeof t.addListener&&"function"==typeof t.removeListener}(e)){var s=e;e.addListener(n,r),l=function(){return s.removeListener(n,r)}}else{if(!e||!e.length)throw new TypeError("Invalid event target");for(var c=0,h=e.length;c<h;c++)t(e[c],n,r,i,o)}i.add(l)}(t,e,function(t){r.next(arguments.length>1?Array.prototype.slice.call(arguments):t)},r,n)})}Object},bujt:function(t,e,n){"use strict";n.d(e,"b",function(){return a}),n.d(e,"d",function(){return u}),n.d(e,"a",function(){return s}),n.d(e,"c",function(){return c});var r=n("CcnG"),i=(n("UodH"),n("Ip0R"),n("Fzqc"),n("Wf4p")),o=n("dWZg"),l=n("wFw1"),a=(n("lLAP"),r.Pa({encapsulation:2,styles:[".mat-button,.mat-flat-button,.mat-icon-button,.mat-stroked-button{box-sizing:border-box;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:0;border:none;-webkit-tap-highlight-color:transparent;display:inline-block;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;margin:0;min-width:88px;line-height:36px;padding:0 16px;border-radius:2px;overflow:visible}.mat-button::-moz-focus-inner,.mat-flat-button::-moz-focus-inner,.mat-icon-button::-moz-focus-inner,.mat-stroked-button::-moz-focus-inner{border:0}.mat-button[disabled],.mat-flat-button[disabled],.mat-icon-button[disabled],.mat-stroked-button[disabled]{cursor:default}.mat-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-button.cdk-program-focused .mat-button-focus-overlay,.mat-flat-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-flat-button.cdk-program-focused .mat-button-focus-overlay,.mat-icon-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-icon-button.cdk-program-focused .mat-button-focus-overlay,.mat-stroked-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-stroked-button.cdk-program-focused .mat-button-focus-overlay{opacity:1}.mat-button::-moz-focus-inner,.mat-flat-button::-moz-focus-inner,.mat-icon-button::-moz-focus-inner,.mat-stroked-button::-moz-focus-inner{border:0}.mat-button .mat-button-focus-overlay,.mat-icon-button .mat-button-focus-overlay{opacity:0}.mat-button:hover .mat-button-focus-overlay,.mat-stroked-button:hover .mat-button-focus-overlay{opacity:1}@media (hover:none){.mat-button:hover .mat-button-focus-overlay,.mat-stroked-button:hover .mat-button-focus-overlay{opacity:0}}.mat-raised-button{box-sizing:border-box;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:0;border:none;-webkit-tap-highlight-color:transparent;display:inline-block;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;margin:0;min-width:88px;line-height:36px;padding:0 16px;border-radius:2px;overflow:visible;transform:translate3d(0,0,0);transition:background .4s cubic-bezier(.25,.8,.25,1),box-shadow 280ms cubic-bezier(.4,0,.2,1)}.mat-raised-button::-moz-focus-inner{border:0}.mat-raised-button[disabled]{cursor:default}.mat-raised-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-raised-button.cdk-program-focused .mat-button-focus-overlay{opacity:1}.mat-raised-button::-moz-focus-inner{border:0}.mat-raised-button:not([class*=mat-elevation-z]){box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}._mat-animation-noopable.mat-raised-button{transition:none;animation:none}.mat-raised-button:not([disabled]):active:not([class*=mat-elevation-z]){box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.mat-raised-button[disabled]{box-shadow:none}.mat-stroked-button{border:1px solid currentColor;padding:0 15px;line-height:34px}.mat-stroked-button:not([class*=mat-elevation-z]){box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.mat-flat-button:not([class*=mat-elevation-z]){box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.mat-fab{box-sizing:border-box;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:0;border:none;-webkit-tap-highlight-color:transparent;display:inline-block;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;margin:0;min-width:88px;line-height:36px;padding:0 16px;border-radius:2px;overflow:visible;transform:translate3d(0,0,0);transition:background .4s cubic-bezier(.25,.8,.25,1),box-shadow 280ms cubic-bezier(.4,0,.2,1);min-width:0;border-radius:50%;width:56px;height:56px;padding:0;flex-shrink:0}.mat-fab::-moz-focus-inner{border:0}.mat-fab[disabled]{cursor:default}.mat-fab.cdk-keyboard-focused .mat-button-focus-overlay,.mat-fab.cdk-program-focused .mat-button-focus-overlay{opacity:1}.mat-fab::-moz-focus-inner{border:0}.mat-fab:not([class*=mat-elevation-z]){box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}._mat-animation-noopable.mat-fab{transition:none;animation:none}.mat-fab:not([disabled]):active:not([class*=mat-elevation-z]){box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.mat-fab[disabled]{box-shadow:none}.mat-fab:not([class*=mat-elevation-z]){box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12)}.mat-fab:not([disabled]):active:not([class*=mat-elevation-z]){box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 12px 17px 2px rgba(0,0,0,.14),0 5px 22px 4px rgba(0,0,0,.12)}.mat-fab .mat-button-wrapper{padding:16px 0;display:inline-block;line-height:24px}.mat-mini-fab{box-sizing:border-box;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:0;border:none;-webkit-tap-highlight-color:transparent;display:inline-block;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;margin:0;min-width:88px;line-height:36px;padding:0 16px;border-radius:2px;overflow:visible;transform:translate3d(0,0,0);transition:background .4s cubic-bezier(.25,.8,.25,1),box-shadow 280ms cubic-bezier(.4,0,.2,1);min-width:0;border-radius:50%;width:40px;height:40px;padding:0;flex-shrink:0}.mat-mini-fab::-moz-focus-inner{border:0}.mat-mini-fab[disabled]{cursor:default}.mat-mini-fab.cdk-keyboard-focused .mat-button-focus-overlay,.mat-mini-fab.cdk-program-focused .mat-button-focus-overlay{opacity:1}.mat-mini-fab::-moz-focus-inner{border:0}.mat-mini-fab:not([class*=mat-elevation-z]){box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}._mat-animation-noopable.mat-mini-fab{transition:none;animation:none}.mat-mini-fab:not([disabled]):active:not([class*=mat-elevation-z]){box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.mat-mini-fab[disabled]{box-shadow:none}.mat-mini-fab:not([class*=mat-elevation-z]){box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12)}.mat-mini-fab:not([disabled]):active:not([class*=mat-elevation-z]){box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 12px 17px 2px rgba(0,0,0,.14),0 5px 22px 4px rgba(0,0,0,.12)}.mat-mini-fab .mat-button-wrapper{padding:8px 0;display:inline-block;line-height:24px}.mat-icon-button{padding:0;min-width:0;width:40px;height:40px;flex-shrink:0;line-height:40px;border-radius:50%}.mat-icon-button .mat-icon,.mat-icon-button i{line-height:24px}.mat-button-focus-overlay,.mat-button-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:inherit}.mat-button-focus-overlay{background-color:rgba(0,0,0,.12);border-radius:inherit;opacity:0;transition:opacity .2s cubic-bezier(.35,0,.25,1),background-color .2s cubic-bezier(.35,0,.25,1)}._mat-animation-noopable .mat-button-focus-overlay{transition:none}@media screen and (-ms-high-contrast:active){.mat-button-focus-overlay{background-color:rgba(255,255,255,.5)}}.mat-button-ripple-round{border-radius:50%;z-index:1}.mat-button .mat-button-wrapper>*,.mat-fab .mat-button-wrapper>*,.mat-flat-button .mat-button-wrapper>*,.mat-icon-button .mat-button-wrapper>*,.mat-mini-fab .mat-button-wrapper>*,.mat-raised-button .mat-button-wrapper>*,.mat-stroked-button .mat-button-wrapper>*{vertical-align:middle}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon-button,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon-button{display:block;font-size:inherit;width:2.5em;height:2.5em}@media screen and (-ms-high-contrast:active){.mat-button,.mat-fab,.mat-flat-button,.mat-icon-button,.mat-mini-fab,.mat-raised-button{outline:solid 1px}}"],data:{}}));function u(t){return r.lb(2,[r.hb(402653184,1,{ripple:0}),(t()(),r.Ra(1,0,null,null,1,"span",[["class","mat-button-wrapper"]],null,null,null,null,null)),r.ab(null,0),(t()(),r.Ra(3,0,null,null,1,"div",[["class","mat-button-ripple mat-ripple"],["matRipple",""]],[[2,"mat-button-ripple-round",null],[2,"mat-ripple-unbounded",null]],null,null,null,null)),r.Qa(4,212992,[[1,4]],0,i.v,[r.k,r.z,o.a,[2,i.k],[2,l.a]],{centered:[0,"centered"],disabled:[1,"disabled"],trigger:[2,"trigger"]},null),(t()(),r.Ra(5,0,null,null,0,"div",[["class","mat-button-focus-overlay"]],null,null,null,null,null))],function(t,e){var n=e.component;t(e,4,0,n.isIconButton,n._isRippleDisabled(),n._getHostElement())},function(t,e){var n=e.component;t(e,3,0,n.isRoundButton||n.isIconButton,r.bb(e,4).unbounded)})}var s=r.Pa({encapsulation:2,styles:[".mat-button,.mat-flat-button,.mat-icon-button,.mat-stroked-button{box-sizing:border-box;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:0;border:none;-webkit-tap-highlight-color:transparent;display:inline-block;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;margin:0;min-width:88px;line-height:36px;padding:0 16px;border-radius:2px;overflow:visible}.mat-button::-moz-focus-inner,.mat-flat-button::-moz-focus-inner,.mat-icon-button::-moz-focus-inner,.mat-stroked-button::-moz-focus-inner{border:0}.mat-button[disabled],.mat-flat-button[disabled],.mat-icon-button[disabled],.mat-stroked-button[disabled]{cursor:default}.mat-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-button.cdk-program-focused .mat-button-focus-overlay,.mat-flat-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-flat-button.cdk-program-focused .mat-button-focus-overlay,.mat-icon-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-icon-button.cdk-program-focused .mat-button-focus-overlay,.mat-stroked-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-stroked-button.cdk-program-focused .mat-button-focus-overlay{opacity:1}.mat-button::-moz-focus-inner,.mat-flat-button::-moz-focus-inner,.mat-icon-button::-moz-focus-inner,.mat-stroked-button::-moz-focus-inner{border:0}.mat-button .mat-button-focus-overlay,.mat-icon-button .mat-button-focus-overlay{opacity:0}.mat-button:hover .mat-button-focus-overlay,.mat-stroked-button:hover .mat-button-focus-overlay{opacity:1}@media (hover:none){.mat-button:hover .mat-button-focus-overlay,.mat-stroked-button:hover .mat-button-focus-overlay{opacity:0}}.mat-raised-button{box-sizing:border-box;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:0;border:none;-webkit-tap-highlight-color:transparent;display:inline-block;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;margin:0;min-width:88px;line-height:36px;padding:0 16px;border-radius:2px;overflow:visible;transform:translate3d(0,0,0);transition:background .4s cubic-bezier(.25,.8,.25,1),box-shadow 280ms cubic-bezier(.4,0,.2,1)}.mat-raised-button::-moz-focus-inner{border:0}.mat-raised-button[disabled]{cursor:default}.mat-raised-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-raised-button.cdk-program-focused .mat-button-focus-overlay{opacity:1}.mat-raised-button::-moz-focus-inner{border:0}.mat-raised-button:not([class*=mat-elevation-z]){box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}._mat-animation-noopable.mat-raised-button{transition:none;animation:none}.mat-raised-button:not([disabled]):active:not([class*=mat-elevation-z]){box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.mat-raised-button[disabled]{box-shadow:none}.mat-stroked-button{border:1px solid currentColor;padding:0 15px;line-height:34px}.mat-stroked-button:not([class*=mat-elevation-z]){box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.mat-flat-button:not([class*=mat-elevation-z]){box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.mat-fab{box-sizing:border-box;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:0;border:none;-webkit-tap-highlight-color:transparent;display:inline-block;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;margin:0;min-width:88px;line-height:36px;padding:0 16px;border-radius:2px;overflow:visible;transform:translate3d(0,0,0);transition:background .4s cubic-bezier(.25,.8,.25,1),box-shadow 280ms cubic-bezier(.4,0,.2,1);min-width:0;border-radius:50%;width:56px;height:56px;padding:0;flex-shrink:0}.mat-fab::-moz-focus-inner{border:0}.mat-fab[disabled]{cursor:default}.mat-fab.cdk-keyboard-focused .mat-button-focus-overlay,.mat-fab.cdk-program-focused .mat-button-focus-overlay{opacity:1}.mat-fab::-moz-focus-inner{border:0}.mat-fab:not([class*=mat-elevation-z]){box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}._mat-animation-noopable.mat-fab{transition:none;animation:none}.mat-fab:not([disabled]):active:not([class*=mat-elevation-z]){box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.mat-fab[disabled]{box-shadow:none}.mat-fab:not([class*=mat-elevation-z]){box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12)}.mat-fab:not([disabled]):active:not([class*=mat-elevation-z]){box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 12px 17px 2px rgba(0,0,0,.14),0 5px 22px 4px rgba(0,0,0,.12)}.mat-fab .mat-button-wrapper{padding:16px 0;display:inline-block;line-height:24px}.mat-mini-fab{box-sizing:border-box;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:0;border:none;-webkit-tap-highlight-color:transparent;display:inline-block;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;margin:0;min-width:88px;line-height:36px;padding:0 16px;border-radius:2px;overflow:visible;transform:translate3d(0,0,0);transition:background .4s cubic-bezier(.25,.8,.25,1),box-shadow 280ms cubic-bezier(.4,0,.2,1);min-width:0;border-radius:50%;width:40px;height:40px;padding:0;flex-shrink:0}.mat-mini-fab::-moz-focus-inner{border:0}.mat-mini-fab[disabled]{cursor:default}.mat-mini-fab.cdk-keyboard-focused .mat-button-focus-overlay,.mat-mini-fab.cdk-program-focused .mat-button-focus-overlay{opacity:1}.mat-mini-fab::-moz-focus-inner{border:0}.mat-mini-fab:not([class*=mat-elevation-z]){box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}._mat-animation-noopable.mat-mini-fab{transition:none;animation:none}.mat-mini-fab:not([disabled]):active:not([class*=mat-elevation-z]){box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.mat-mini-fab[disabled]{box-shadow:none}.mat-mini-fab:not([class*=mat-elevation-z]){box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12)}.mat-mini-fab:not([disabled]):active:not([class*=mat-elevation-z]){box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 12px 17px 2px rgba(0,0,0,.14),0 5px 22px 4px rgba(0,0,0,.12)}.mat-mini-fab .mat-button-wrapper{padding:8px 0;display:inline-block;line-height:24px}.mat-icon-button{padding:0;min-width:0;width:40px;height:40px;flex-shrink:0;line-height:40px;border-radius:50%}.mat-icon-button .mat-icon,.mat-icon-button i{line-height:24px}.mat-button-focus-overlay,.mat-button-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:inherit}.mat-button-focus-overlay{background-color:rgba(0,0,0,.12);border-radius:inherit;opacity:0;transition:opacity .2s cubic-bezier(.35,0,.25,1),background-color .2s cubic-bezier(.35,0,.25,1)}._mat-animation-noopable .mat-button-focus-overlay{transition:none}@media screen and (-ms-high-contrast:active){.mat-button-focus-overlay{background-color:rgba(255,255,255,.5)}}.mat-button-ripple-round{border-radius:50%;z-index:1}.mat-button .mat-button-wrapper>*,.mat-fab .mat-button-wrapper>*,.mat-flat-button .mat-button-wrapper>*,.mat-icon-button .mat-button-wrapper>*,.mat-mini-fab .mat-button-wrapper>*,.mat-raised-button .mat-button-wrapper>*,.mat-stroked-button .mat-button-wrapper>*{vertical-align:middle}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon-button,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon-button{display:block;font-size:inherit;width:2.5em;height:2.5em}@media screen and (-ms-high-contrast:active){.mat-button,.mat-fab,.mat-flat-button,.mat-icon-button,.mat-mini-fab,.mat-raised-button{outline:solid 1px}}"],data:{}});function c(t){return r.lb(2,[r.hb(402653184,1,{ripple:0}),(t()(),r.Ra(1,0,null,null,1,"span",[["class","mat-button-wrapper"]],null,null,null,null,null)),r.ab(null,0),(t()(),r.Ra(3,0,null,null,1,"div",[["class","mat-button-ripple mat-ripple"],["matRipple",""]],[[2,"mat-button-ripple-round",null],[2,"mat-ripple-unbounded",null]],null,null,null,null)),r.Qa(4,212992,[[1,4]],0,i.v,[r.k,r.z,o.a,[2,i.k],[2,l.a]],{centered:[0,"centered"],disabled:[1,"disabled"],trigger:[2,"trigger"]},null),(t()(),r.Ra(5,0,null,null,0,"div",[["class","mat-button-focus-overlay"]],null,null,null,null,null))],function(t,e){var n=e.component;t(e,4,0,n.isIconButton,n._isRippleDisabled(),n._getHostElement())},function(t,e){var n=e.component;t(e,3,0,n.isRoundButton||n.isIconButton,r.bb(e,4).unbounded)})}},crnd:function(t,e,n){var r={"./attribution/attribution-layer.module.ngfactory":["nrlq",2],"./biology-section/biology-section-layer.module.ngfactory":["aAKD",1],"./support-section/support-section-layer.module.ngfactory":["N4lp",0],"./team-roster/team-roster-layer.module.ngfactory":["TkYk",3],"./wiki-lightproxy/wiki-lightproxy-layer.module.ngfactory":["gDjc",4]};function i(t){var e=r[t];return e?n.e(e[1]).then(function(){return n(e[0])}):Promise.resolve().then(function(){var e=new Error('Cannot find module "'+t+'".');throw e.code="MODULE_NOT_FOUND",e})}i.keys=function(){return Object.keys(r)},i.id="crnd",t.exports=i},dC0D:function(t,e,n){"use strict";n.d(e,"a",function(){return o});var r=n("mrSG"),i=n("FFOo");function o(t,e){var n=!1;return arguments.length>=2&&(n=!0),function(r){return r.lift(new l(t,e,n))}}var l=function(){function t(t,e,n){void 0===n&&(n=!1),this.accumulator=t,this.seed=e,this.hasSeed=n}return t.prototype.call=function(t,e){return e.subscribe(new a(t,this.accumulator,this.seed,this.hasSeed))},t}(),a=function(t){function e(e,n,r,i){var o=t.call(this,e)||this;return o.accumulator=n,o._seed=r,o.hasSeed=i,o.index=0,o}return r.b(e,t),Object.defineProperty(e.prototype,"seed",{get:function(){return this._seed},set:function(t){this.hasSeed=!0,this._seed=t},enumerable:!0,configurable:!0}),e.prototype._next=function(t){if(this.hasSeed)return this._tryNext(t);this.seed=t,this.destination.next(t)},e.prototype._tryNext=function(t){var e,n=this.index++;try{e=this.accumulator(this.seed,t,n)}catch(t){this.destination.error(t)}this.seed=e,this.destination.next(e)},e}(i.a)},dEwP:function(t,e,n){"use strict";n.d(e,"a",function(){return a});var r=n("nkY7"),i=n("F/XL"),o=n("0/uQ"),l=n("Txjg");function a(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return 1===t.length||2===t.length&&Object(r.a)(t[1])?Object(o.a)(t[0]):Object(l.a)()(i.a.apply(void 0,t))}},dJrM:function(t,e,n){"use strict";n.d(e,"a",function(){return l}),n.d(e,"b",function(){return y});var r=n("CcnG"),i=(n("seP3"),n("Ip0R")),o=n("M2Lx"),l=(n("Wf4p"),n("Fzqc"),n("dWZg"),n("wFw1"),r.Pa({encapsulation:2,styles:[".mat-form-field{display:inline-block;position:relative;text-align:left}[dir=rtl] .mat-form-field{text-align:right}.mat-form-field-wrapper{position:relative}.mat-form-field-flex{display:inline-flex;align-items:baseline;box-sizing:border-box;width:100%}.mat-form-field-prefix,.mat-form-field-suffix{white-space:nowrap;flex:none;position:relative}.mat-form-field-infix{display:block;position:relative;flex:auto;min-width:0;width:180px}@media screen and (-ms-high-contrast:active){.mat-form-field-infix{border-image:linear-gradient(transparent,transparent)}}.mat-form-field-label-wrapper{position:absolute;left:0;box-sizing:content-box;width:100%;height:100%;overflow:hidden;pointer-events:none}.mat-form-field-label{position:absolute;left:0;font:inherit;pointer-events:none;width:100%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;transform-origin:0 0;transition:transform .4s cubic-bezier(.25,.8,.25,1),color .4s cubic-bezier(.25,.8,.25,1),width .4s cubic-bezier(.25,.8,.25,1);display:none}[dir=rtl] .mat-form-field-label{transform-origin:100% 0;left:auto;right:0}.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-empty.mat-form-field-label{display:block}.mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{display:none}.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{display:block;transition:none}.mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label,.mat-input-server[placeholder]:not(:placeholder-shown)+.mat-form-field-label-wrapper .mat-form-field-label{display:none}.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label,.mat-form-field-can-float .mat-input-server[placeholder]:not(:placeholder-shown)+.mat-form-field-label-wrapper .mat-form-field-label{display:block}.mat-form-field-label:not(.mat-form-field-empty){transition:none}.mat-form-field-underline{position:absolute;width:100%;pointer-events:none;transform:scaleY(1.0001)}.mat-form-field-ripple{position:absolute;left:0;width:100%;transform-origin:50%;transform:scaleX(.5);opacity:0;transition:background-color .3s cubic-bezier(.55,0,.55,.2)}.mat-form-field.mat-focused .mat-form-field-ripple,.mat-form-field.mat-form-field-invalid .mat-form-field-ripple{opacity:1;transform:scaleX(1);transition:transform .3s cubic-bezier(.25,.8,.25,1),opacity .1s cubic-bezier(.25,.8,.25,1),background-color .3s cubic-bezier(.25,.8,.25,1)}.mat-form-field-subscript-wrapper{position:absolute;box-sizing:border-box;width:100%;overflow:hidden}.mat-form-field-label-wrapper .mat-icon,.mat-form-field-subscript-wrapper .mat-icon{width:1em;height:1em;font-size:inherit;vertical-align:baseline}.mat-form-field-hint-wrapper{display:flex}.mat-form-field-hint-spacer{flex:1 0 1em}.mat-error{display:block}.mat-form-field._mat-animation-noopable .mat-form-field-label,.mat-form-field._mat-animation-noopable .mat-form-field-ripple{transition:none}",".mat-form-field-appearance-fill .mat-form-field-flex{border-radius:4px 4px 0 0;padding:.75em .75em 0 .75em}@media screen and (-ms-high-contrast:active){.mat-form-field-appearance-fill .mat-form-field-flex{outline:solid 1px}}.mat-form-field-appearance-fill .mat-form-field-underline::before{content:'';display:block;position:absolute;bottom:0;height:1px;width:100%}.mat-form-field-appearance-fill .mat-form-field-ripple{bottom:0;height:2px}@media screen and (-ms-high-contrast:active){.mat-form-field-appearance-fill .mat-form-field-ripple{height:0;border-top:solid 2px}}.mat-form-field-appearance-fill:not(.mat-form-field-disabled) .mat-form-field-flex:hover~.mat-form-field-underline .mat-form-field-ripple{opacity:1;transform:none;transition:opacity .6s cubic-bezier(.25,.8,.25,1)}.mat-form-field-appearance-fill._mat-animation-noopable:not(.mat-form-field-disabled) .mat-form-field-flex:hover~.mat-form-field-underline .mat-form-field-ripple{transition:none}.mat-form-field-appearance-fill .mat-form-field-subscript-wrapper{padding:0 1em}",".mat-form-field-appearance-legacy .mat-form-field-label{transform:perspective(100px);-ms-transform:none}.mat-form-field-appearance-legacy .mat-form-field-prefix .mat-icon,.mat-form-field-appearance-legacy .mat-form-field-suffix .mat-icon{width:1em}.mat-form-field-appearance-legacy .mat-form-field-prefix .mat-icon-button,.mat-form-field-appearance-legacy .mat-form-field-suffix .mat-icon-button{font:inherit;vertical-align:baseline}.mat-form-field-appearance-legacy .mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field-appearance-legacy .mat-form-field-suffix .mat-icon-button .mat-icon{font-size:inherit}.mat-form-field-appearance-legacy .mat-form-field-underline{height:1px}@media screen and (-ms-high-contrast:active){.mat-form-field-appearance-legacy .mat-form-field-underline{height:0;border-top:solid 1px}}.mat-form-field-appearance-legacy .mat-form-field-ripple{top:0;height:2px}@media screen and (-ms-high-contrast:active){.mat-form-field-appearance-legacy .mat-form-field-ripple{height:0;border-top:solid 2px}}.mat-form-field-appearance-legacy.mat-form-field-disabled .mat-form-field-underline{background-position:0;background-color:transparent}@media screen and (-ms-high-contrast:active){.mat-form-field-appearance-legacy.mat-form-field-disabled .mat-form-field-underline{border-top-style:dotted;border-top-width:2px}}.mat-form-field-appearance-legacy.mat-form-field-invalid:not(.mat-focused) .mat-form-field-ripple{height:1px}",".mat-form-field-appearance-outline .mat-form-field-wrapper{margin:.25em 0}.mat-form-field-appearance-outline .mat-form-field-flex{padding:0 .75em 0 .75em;margin-top:-.25em;position:relative}.mat-form-field-appearance-outline .mat-form-field-prefix,.mat-form-field-appearance-outline .mat-form-field-suffix{top:.25em}.mat-form-field-appearance-outline .mat-form-field-outline{display:flex;position:absolute;top:.25em;left:0;right:0;bottom:0;pointer-events:none}.mat-form-field-appearance-outline .mat-form-field-outline-end,.mat-form-field-appearance-outline .mat-form-field-outline-start{border:1px solid currentColor;min-width:5px}.mat-form-field-appearance-outline .mat-form-field-outline-start{border-radius:5px 0 0 5px;border-right-style:none}[dir=rtl] .mat-form-field-appearance-outline .mat-form-field-outline-start{border-right-style:solid;border-left-style:none;border-radius:0 5px 5px 0}.mat-form-field-appearance-outline .mat-form-field-outline-end{border-radius:0 5px 5px 0;border-left-style:none;flex-grow:1}[dir=rtl] .mat-form-field-appearance-outline .mat-form-field-outline-end{border-left-style:solid;border-right-style:none;border-radius:5px 0 0 5px}.mat-form-field-appearance-outline .mat-form-field-outline-gap{border-radius:.000001px;border:1px solid currentColor;border-left-style:none;border-right-style:none}.mat-form-field-appearance-outline.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-outline-gap{border-top-color:transparent}.mat-form-field-appearance-outline .mat-form-field-outline-thick{opacity:0}.mat-form-field-appearance-outline .mat-form-field-outline-thick .mat-form-field-outline-end,.mat-form-field-appearance-outline .mat-form-field-outline-thick .mat-form-field-outline-gap,.mat-form-field-appearance-outline .mat-form-field-outline-thick .mat-form-field-outline-start{border-width:2px;transition:border-color .3s cubic-bezier(.25,.8,.25,1)}.mat-form-field-appearance-outline.mat-focused .mat-form-field-outline,.mat-form-field-appearance-outline.mat-form-field-invalid .mat-form-field-outline{opacity:0;transition:opacity .1s cubic-bezier(.25,.8,.25,1)}.mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick,.mat-form-field-appearance-outline.mat-form-field-invalid .mat-form-field-outline-thick{opacity:1}.mat-form-field-appearance-outline:not(.mat-form-field-disabled) .mat-form-field-flex:hover .mat-form-field-outline{opacity:0;transition:opacity .6s cubic-bezier(.25,.8,.25,1)}.mat-form-field-appearance-outline:not(.mat-form-field-disabled) .mat-form-field-flex:hover .mat-form-field-outline-thick{opacity:1}.mat-form-field-appearance-outline .mat-form-field-subscript-wrapper{padding:0 1em}.mat-form-field-appearance-outline._mat-animation-noopable .mat-form-field-outline,.mat-form-field-appearance-outline._mat-animation-noopable .mat-form-field-outline-end,.mat-form-field-appearance-outline._mat-animation-noopable .mat-form-field-outline-gap,.mat-form-field-appearance-outline._mat-animation-noopable .mat-form-field-outline-start,.mat-form-field-appearance-outline._mat-animation-noopable:not(.mat-form-field-disabled) .mat-form-field-flex:hover~.mat-form-field-outline{transition:none}",".mat-form-field-appearance-standard .mat-form-field-flex{padding-top:.75em}.mat-form-field-appearance-standard .mat-form-field-underline{height:1px}@media screen and (-ms-high-contrast:active){.mat-form-field-appearance-standard .mat-form-field-underline{height:0;border-top:solid 1px}}.mat-form-field-appearance-standard .mat-form-field-ripple{bottom:0;height:2px}@media screen and (-ms-high-contrast:active){.mat-form-field-appearance-standard .mat-form-field-ripple{height:0;border-top:2px}}.mat-form-field-appearance-standard.mat-form-field-disabled .mat-form-field-underline{background-position:0;background-color:transparent}@media screen and (-ms-high-contrast:active){.mat-form-field-appearance-standard.mat-form-field-disabled .mat-form-field-underline{border-top-style:dotted;border-top-width:2px}}.mat-form-field-appearance-standard:not(.mat-form-field-disabled) .mat-form-field-flex:hover~.mat-form-field-underline .mat-form-field-ripple{opacity:1;transform:none;transition:opacity .6s cubic-bezier(.25,.8,.25,1)}.mat-form-field-appearance-standard._mat-animation-noopable:not(.mat-form-field-disabled) .mat-form-field-flex:hover~.mat-form-field-underline .mat-form-field-ripple{transition:none}",".mat-input-element{font:inherit;background:0 0;color:currentColor;border:none;outline:0;padding:0;margin:0;width:100%;max-width:100%;vertical-align:bottom;text-align:inherit}.mat-input-element:-moz-ui-invalid{box-shadow:none}.mat-input-element::-ms-clear,.mat-input-element::-ms-reveal{display:none}.mat-input-element,.mat-input-element::-webkit-search-cancel-button,.mat-input-element::-webkit-search-decoration,.mat-input-element::-webkit-search-results-button,.mat-input-element::-webkit-search-results-decoration{-webkit-appearance:none}.mat-input-element::-webkit-caps-lock-indicator,.mat-input-element::-webkit-contacts-auto-fill-button,.mat-input-element::-webkit-credentials-auto-fill-button{visibility:hidden}.mat-input-element[type=date]::after,.mat-input-element[type=datetime-local]::after,.mat-input-element[type=datetime]::after,.mat-input-element[type=month]::after,.mat-input-element[type=time]::after,.mat-input-element[type=week]::after{content:' ';white-space:pre;width:1px}.mat-input-element::placeholder{transition:color .4s .133s cubic-bezier(.25,.8,.25,1)}.mat-input-element::-moz-placeholder{transition:color .4s .133s cubic-bezier(.25,.8,.25,1)}.mat-input-element::-webkit-input-placeholder{transition:color .4s .133s cubic-bezier(.25,.8,.25,1)}.mat-input-element:-ms-input-placeholder{transition:color .4s .133s cubic-bezier(.25,.8,.25,1)}.mat-form-field-hide-placeholder .mat-input-element::placeholder{color:transparent!important;-webkit-text-fill-color:transparent;transition:none}.mat-form-field-hide-placeholder .mat-input-element::-moz-placeholder{color:transparent!important;-webkit-text-fill-color:transparent;transition:none}.mat-form-field-hide-placeholder .mat-input-element::-webkit-input-placeholder{color:transparent!important;-webkit-text-fill-color:transparent;transition:none}.mat-form-field-hide-placeholder .mat-input-element:-ms-input-placeholder{color:transparent!important;-webkit-text-fill-color:transparent;transition:none}textarea.mat-input-element{resize:vertical;overflow:auto}textarea.mat-input-element.cdk-textarea-autosize{resize:none}textarea.mat-input-element{padding:2px 0;margin:-2px 0}"],data:{animation:[{type:7,name:"transitionMessages",definitions:[{type:0,name:"enter",styles:{type:6,styles:{opacity:1,transform:"translateY(0%)"},offset:null},options:void 0},{type:1,expr:"void => enter",animation:[{type:6,styles:{opacity:0,transform:"translateY(-100%)"},offset:null},{type:4,styles:null,timings:"300ms cubic-bezier(0.55, 0, 0.55, 0.2)"}],options:null}],options:{}}]}}));function a(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,8,null,null,null,null,null,null,null)),(t()(),r.Ra(1,0,null,null,3,"div",[["class","mat-form-field-outline"]],null,null,null,null,null)),(t()(),r.Ra(2,0,null,null,0,"div",[["class","mat-form-field-outline-start"]],null,null,null,null,null)),(t()(),r.Ra(3,0,null,null,0,"div",[["class","mat-form-field-outline-gap"]],null,null,null,null,null)),(t()(),r.Ra(4,0,null,null,0,"div",[["class","mat-form-field-outline-end"]],null,null,null,null,null)),(t()(),r.Ra(5,0,null,null,3,"div",[["class","mat-form-field-outline mat-form-field-outline-thick"]],null,null,null,null,null)),(t()(),r.Ra(6,0,null,null,0,"div",[["class","mat-form-field-outline-start"]],null,null,null,null,null)),(t()(),r.Ra(7,0,null,null,0,"div",[["class","mat-form-field-outline-gap"]],null,null,null,null,null)),(t()(),r.Ra(8,0,null,null,0,"div",[["class","mat-form-field-outline-end"]],null,null,null,null,null))],null,null)}function u(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,1,"div",[["class","mat-form-field-prefix"]],null,null,null,null,null)),r.ab(null,0)],null,null)}function s(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,2,null,null,null,null,null,null,null)),r.ab(null,2),(t()(),r.jb(2,null,["",""]))],null,function(t,e){t(e,2,0,e.component._control.placeholder)})}function c(t){return r.lb(0,[r.ab(null,3),(t()(),r.Ia(0,null,null,0))],null,null)}function h(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,1,"span",[["aria-hidden","true"],["class","mat-placeholder-required mat-form-field-required-marker"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["\xa0*"]))],null,null)}function f(t){return r.lb(0,[(t()(),r.Ra(0,0,[[4,0],["label",1]],null,8,"label",[["class","mat-form-field-label"]],[[8,"id",0],[1,"for",0],[1,"aria-owns",0],[2,"mat-empty",null],[2,"mat-form-field-empty",null],[2,"mat-accent",null],[2,"mat-warn",null]],[[null,"cdkObserveContent"]],function(t,e,n){var r=!0;return"cdkObserveContent"===e&&(r=!1!==t.component.updateOutlineGap()&&r),r},null,null)),r.Qa(1,16384,null,0,i.o,[],{ngSwitch:[0,"ngSwitch"]},null),r.Qa(2,1196032,null,0,o.a,[o.b,r.k,r.z],null,{event:"cdkObserveContent"}),(t()(),r.Ia(16777216,null,null,1,null,s)),r.Qa(4,278528,null,0,i.p,[r.Q,r.N,i.o],{ngSwitchCase:[0,"ngSwitchCase"]},null),(t()(),r.Ia(16777216,null,null,1,null,c)),r.Qa(6,278528,null,0,i.p,[r.Q,r.N,i.o],{ngSwitchCase:[0,"ngSwitchCase"]},null),(t()(),r.Ia(16777216,null,null,1,null,h)),r.Qa(8,16384,null,0,i.k,[r.Q,r.N],{ngIf:[0,"ngIf"]},null)],function(t,e){var n=e.component;t(e,1,0,n._hasLabel()),t(e,4,0,!1),t(e,6,0,!0),t(e,8,0,!n.hideRequiredMarker&&n._control.required&&!n._control.disabled)},function(t,e){var n=e.component;t(e,0,0,n._labelId,n._control.id,n._control.id,n._control.empty&&!n._shouldAlwaysFloat,n._control.empty&&!n._shouldAlwaysFloat,"accent"==n.color,"warn"==n.color)})}function d(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,1,"div",[["class","mat-form-field-suffix"]],null,null,null,null,null)),r.ab(null,4)],null,null)}function p(t){return r.lb(0,[(t()(),r.Ra(0,0,[[1,0],["underline",1]],null,1,"div",[["class","mat-form-field-underline"]],null,null,null,null,null)),(t()(),r.Ra(1,0,null,null,0,"span",[["class","mat-form-field-ripple"]],[[2,"mat-accent",null],[2,"mat-warn",null]],null,null,null,null))],null,function(t,e){var n=e.component;t(e,1,0,"accent"==n.color,"warn"==n.color)})}function m(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,1,"div",[],[[24,"@transitionMessages",0]],null,null,null,null)),r.ab(null,5)],null,function(t,e){t(e,0,0,e.component._subscriptAnimationState)})}function g(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,1,"div",[["class","mat-hint"]],[[8,"id",0]],null,null,null,null)),(t()(),r.jb(1,null,["",""]))],null,function(t,e){var n=e.component;t(e,0,0,n._hintLabelId),t(e,1,0,n.hintLabel)})}function b(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,5,"div",[["class","mat-form-field-hint-wrapper"]],[[24,"@transitionMessages",0]],null,null,null,null)),(t()(),r.Ia(16777216,null,null,1,null,g)),r.Qa(2,16384,null,0,i.k,[r.Q,r.N],{ngIf:[0,"ngIf"]},null),r.ab(null,6),(t()(),r.Ra(4,0,null,null,0,"div",[["class","mat-form-field-hint-spacer"]],null,null,null,null,null)),r.ab(null,7)],function(t,e){t(e,2,0,e.component.hintLabel)},function(t,e){t(e,0,0,e.component._subscriptAnimationState)})}function y(t){return r.lb(2,[r.hb(671088640,1,{underlineRef:0}),r.hb(402653184,2,{_connectionContainerRef:0}),r.hb(402653184,3,{_inputContainerRef:0}),r.hb(671088640,4,{_label:0}),(t()(),r.Ra(4,0,null,null,20,"div",[["class","mat-form-field-wrapper"]],null,null,null,null,null)),(t()(),r.Ra(5,0,[[2,0],["connectionContainer",1]],null,11,"div",[["class","mat-form-field-flex"]],null,[[null,"click"]],function(t,e,n){var r=!0,i=t.component;return"click"===e&&(r=!1!==(i._control.onContainerClick&&i._control.onContainerClick(n))&&r),r},null,null)),(t()(),r.Ia(16777216,null,null,1,null,a)),r.Qa(7,16384,null,0,i.k,[r.Q,r.N],{ngIf:[0,"ngIf"]},null),(t()(),r.Ia(16777216,null,null,1,null,u)),r.Qa(9,16384,null,0,i.k,[r.Q,r.N],{ngIf:[0,"ngIf"]},null),(t()(),r.Ra(10,0,[[3,0],["inputContainer",1]],null,4,"div",[["class","mat-form-field-infix"]],null,null,null,null,null)),r.ab(null,1),(t()(),r.Ra(12,0,null,null,2,"span",[["class","mat-form-field-label-wrapper"]],null,null,null,null,null)),(t()(),r.Ia(16777216,null,null,1,null,f)),r.Qa(14,16384,null,0,i.k,[r.Q,r.N],{ngIf:[0,"ngIf"]},null),(t()(),r.Ia(16777216,null,null,1,null,d)),r.Qa(16,16384,null,0,i.k,[r.Q,r.N],{ngIf:[0,"ngIf"]},null),(t()(),r.Ia(16777216,null,null,1,null,p)),r.Qa(18,16384,null,0,i.k,[r.Q,r.N],{ngIf:[0,"ngIf"]},null),(t()(),r.Ra(19,0,null,null,5,"div",[["class","mat-form-field-subscript-wrapper"]],null,null,null,null,null)),r.Qa(20,16384,null,0,i.o,[],{ngSwitch:[0,"ngSwitch"]},null),(t()(),r.Ia(16777216,null,null,1,null,m)),r.Qa(22,278528,null,0,i.p,[r.Q,r.N,i.o],{ngSwitchCase:[0,"ngSwitchCase"]},null),(t()(),r.Ia(16777216,null,null,1,null,b)),r.Qa(24,278528,null,0,i.p,[r.Q,r.N,i.o],{ngSwitchCase:[0,"ngSwitchCase"]},null)],function(t,e){var n=e.component;t(e,7,0,"outline"==n.appearance),t(e,9,0,n._prefixChildren.length),t(e,14,0,n._hasFloatingLabel()),t(e,16,0,n._suffixChildren.length),t(e,18,0,"outline"!=n.appearance),t(e,20,0,n._getDisplayedMessages()),t(e,22,0,"error"),t(e,24,0,"hint")},null)}},dWZg:function(t,e,n){"use strict";n.d(e,"a",function(){return u}),n.d(e,"d",function(){return s}),n.d(e,"c",function(){return h}),n.d(e,"b",function(){return f});var r,i,o=n("CcnG"),l=n("Ip0R"),a="undefined"!=typeof Intl&&Intl.v8BreakIterator,u=function(){function t(t){this._platformId=t,this.isBrowser=this._platformId?Object(l.w)(this._platformId):"object"==typeof document&&!!document,this.EDGE=this.isBrowser&&/(edge)/i.test(navigator.userAgent),this.TRIDENT=this.isBrowser&&/(msie|trident)/i.test(navigator.userAgent),this.BLINK=this.isBrowser&&!(!window.chrome&&!a)&&"undefined"!=typeof CSS&&!this.EDGE&&!this.TRIDENT,this.WEBKIT=this.isBrowser&&/AppleWebKit/i.test(navigator.userAgent)&&!this.BLINK&&!this.EDGE&&!this.TRIDENT,this.IOS=this.isBrowser&&/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream,this.FIREFOX=this.isBrowser&&/(firefox|minefield)/i.test(navigator.userAgent),this.ANDROID=this.isBrowser&&/android/i.test(navigator.userAgent)&&!this.TRIDENT,this.SAFARI=this.isBrowser&&/safari/i.test(navigator.userAgent)&&this.WEBKIT}return t.ngInjectableDef=Object(o.U)({factory:function(){return new t(Object(o.Y)(o.B,8))},token:t,providedIn:"root"}),t}();function s(){if(null==r&&"undefined"!=typeof window)try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){return r=!0}}))}finally{r=r||!1}return r}var c=["color","button","checkbox","date","datetime-local","email","file","hidden","image","month","number","password","radio","range","reset","search","submit","tel","text","time","url","week"];function h(){if(i)return i;if("object"!=typeof document||!document)return i=new Set(c);var t=document.createElement("input");return i=new Set(c.filter(function(e){return t.setAttribute("type",e),t.type===e}))}var f=function(){}},dzgT:function(t,e,n){"use strict";n.d(e,"b",function(){return c}),n.d(e,"a",function(){return h});var r=n("mrSG"),i=n("nkY7"),o=n("isby"),l=n("MGBS"),a=n("zotm"),u=n("IUTb"),s={};function c(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var n=null,r=null;return Object(i.a)(t[t.length-1])&&(r=t.pop()),"function"==typeof t[t.length-1]&&(n=t.pop()),1===t.length&&Object(o.a)(t[0])&&(t=t[0]),Object(u.a)(t,r).lift(new h(n))}var h=function(){function t(t){this.resultSelector=t}return t.prototype.call=function(t,e){return e.subscribe(new f(t,this.resultSelector))},t}(),f=function(t){function e(e,n){var r=t.call(this,e)||this;return r.resultSelector=n,r.active=0,r.values=[],r.observables=[],r}return r.b(e,t),e.prototype._next=function(t){this.values.push(s),this.observables.push(t)},e.prototype._complete=function(){var t=this.observables,e=t.length;if(0===e)this.destination.complete();else{this.active=e,this.toRespond=e;for(var n=0;n<e;n++){var r=t[n];this.add(Object(a.a)(this,r,r,n))}}},e.prototype.notifyComplete=function(t){0==(this.active-=1)&&this.destination.complete()},e.prototype.notifyNext=function(t,e,n,r,i){var o=this.values,l=this.toRespond?o[n]===s?--this.toRespond:this.toRespond:0;o[n]=e,0===l&&(this.resultSelector?this._tryResultSelector(o):this.destination.next(o.slice()))},e.prototype._tryResultSelector=function(t){var e;try{e=this.resultSelector.apply(this,t)}catch(t){return void this.destination.error(t)}this.destination.next(e)},e}(l.a)},eDkP:function(t,e,n){"use strict";n.d(e,"c",function(){return L}),n.d(e,"e",function(){return E}),n.d(e,"b",function(){return V}),n.d(e,"a",function(){return B}),n.d(e,"f",function(){return O}),n.d(e,"h",function(){return D}),n.d(e,"d",function(){return y}),n.d(e,"i",function(){return j}),n.d(e,"g",function(){return G}),n.d(e,"j",function(){return z}),n.d(e,"k",function(){return H});var r=n("CcnG"),i=n("n6gG"),o=n("qAlS"),l=n("Ip0R"),a=n("mrSG"),u=n("K9Ia"),s=n("6blF"),c=n("p0ib"),h=n("pugT"),f=n("t9fZ"),d=n("ny24"),p=n("dWZg"),m=n("4c35"),g=n("YSh2"),b=function(){function t(){}return t.prototype.enable=function(){},t.prototype.disable=function(){},t.prototype.attach=function(){},t}(),y=function(){return function(t){var e=this;this.scrollStrategy=new b,this.panelClass="",this.hasBackdrop=!1,this.backdropClass="cdk-overlay-dark-backdrop",t&&Object.keys(t).filter(function(e){return void 0!==t[e]}).forEach(function(n){return e[n]=t[n]})}}();function v(t,e){if("top"!==e&&"bottom"!==e&&"center"!==e)throw Error("ConnectedPosition: Invalid "+t+' "'+e+'". Expected "top", "bottom" or "center".')}function _(t,e){if("start"!==e&&"end"!==e&&"center"!==e)throw Error("ConnectedPosition: Invalid "+t+' "'+e+'". Expected "start", "end" or "center".')}var w=function(){function t(t,e){this._viewportRuler=t,this._previousHTMLStyles={top:"",left:""},this._isEnabled=!1,this._document=e}return t.prototype.attach=function(){},t.prototype.enable=function(){if(this._canBeEnabled()){var t=this._document.documentElement;this._previousScrollPosition=this._viewportRuler.getViewportScrollPosition(),this._previousHTMLStyles.left=t.style.left||"",this._previousHTMLStyles.top=t.style.top||"",t.style.left=Object(i.d)(-this._previousScrollPosition.left),t.style.top=Object(i.d)(-this._previousScrollPosition.top),t.classList.add("cdk-global-scrollblock"),this._isEnabled=!0}},t.prototype.disable=function(){if(this._isEnabled){var t=this._document.documentElement,e=this._document.body,n=t.style.scrollBehavior||"",r=e.style.scrollBehavior||"";this._isEnabled=!1,t.style.left=this._previousHTMLStyles.left,t.style.top=this._previousHTMLStyles.top,t.classList.remove("cdk-global-scrollblock"),t.style.scrollBehavior=e.style.scrollBehavior="auto",window.scroll(this._previousScrollPosition.left,this._previousScrollPosition.top),t.style.scrollBehavior=n,e.style.scrollBehavior=r}},t.prototype._canBeEnabled=function(){if(this._document.documentElement.classList.contains("cdk-global-scrollblock")||this._isEnabled)return!1;var t=this._document.body,e=this._viewportRuler.getViewportSize();return t.scrollHeight>e.height||t.scrollWidth>e.width},t}();function x(){return Error("Scroll strategy has already been attached.")}var S=function(){function t(t,e,n,r){var i=this;this._scrollDispatcher=t,this._ngZone=e,this._viewportRuler=n,this._config=r,this._scrollSubscription=null,this._detach=function(){i.disable(),i._overlayRef.hasAttached()&&i._ngZone.run(function(){return i._overlayRef.detach()})}}return t.prototype.attach=function(t){if(this._overlayRef)throw x();this._overlayRef=t},t.prototype.enable=function(){var t=this;if(!this._scrollSubscription){var e=this._scrollDispatcher.scrolled(0);this._config&&this._config.threshold&&this._config.threshold>1?(this._initialScrollPosition=this._viewportRuler.getViewportScrollPosition().top,this._scrollSubscription=e.subscribe(function(){var e=t._viewportRuler.getViewportScrollPosition().top;Math.abs(e-t._initialScrollPosition)>t._config.threshold?t._detach():t._overlayRef.updatePosition()})):this._scrollSubscription=e.subscribe(this._detach)}},t.prototype.disable=function(){this._scrollSubscription&&(this._scrollSubscription.unsubscribe(),this._scrollSubscription=null)},t}();function C(t,e){return e.some(function(e){return t.bottom<e.top||t.top>e.bottom||t.right<e.left||t.left>e.right})}function k(t,e){return e.some(function(e){return t.top<e.top||t.bottom>e.bottom||t.left<e.left||t.right>e.right})}var R=function(){function t(t,e,n,r){this._scrollDispatcher=t,this._viewportRuler=e,this._ngZone=n,this._config=r,this._scrollSubscription=null}return t.prototype.attach=function(t){if(this._overlayRef)throw x();this._overlayRef=t},t.prototype.enable=function(){var t=this;this._scrollSubscription||(this._scrollSubscription=this._scrollDispatcher.scrolled(this._config?this._config.scrollThrottle:0).subscribe(function(){if(t._overlayRef.updatePosition(),t._config&&t._config.autoClose){var e=t._overlayRef.overlayElement.getBoundingClientRect(),n=t._viewportRuler.getViewportSize(),r=n.width,i=n.height;C(e,[{width:r,height:i,bottom:i,right:r,top:0,left:0}])&&(t.disable(),t._ngZone.run(function(){return t._overlayRef.detach()}))}}))},t.prototype.disable=function(){this._scrollSubscription&&(this._scrollSubscription.unsubscribe(),this._scrollSubscription=null)},t}(),j=function(){function t(t,e,n,r){var i=this;this._scrollDispatcher=t,this._viewportRuler=e,this._ngZone=n,this.noop=function(){return new b},this.close=function(t){return new S(i._scrollDispatcher,i._ngZone,i._viewportRuler,t)},this.block=function(){return new w(i._viewportRuler,i._document)},this.reposition=function(t){return new R(i._scrollDispatcher,i._viewportRuler,i._ngZone,t)},this._document=r}return t.ngInjectableDef=Object(r.U)({factory:function(){return new t(Object(r.Y)(o.b),Object(r.Y)(o.d),Object(r.Y)(r.z),Object(r.Y)(l.c))},token:t,providedIn:"root"}),t}(),O=function(){function t(t){var e=this;this._attachedOverlays=[],this._keydownListener=function(t){for(var n=e._attachedOverlays,r=n.length-1;r>-1;r--)if(n[r]._keydownEventSubscriptions>0){n[r]._keydownEvents.next(t);break}},this._document=t}return t.prototype.ngOnDestroy=function(){this._detach()},t.prototype.add=function(t){this.remove(t),this._isAttached||(this._document.body.addEventListener("keydown",this._keydownListener,!0),this._isAttached=!0),this._attachedOverlays.push(t)},t.prototype.remove=function(t){var e=this._attachedOverlays.indexOf(t);e>-1&&this._attachedOverlays.splice(e,1),0===this._attachedOverlays.length&&this._detach()},t.prototype._detach=function(){this._isAttached&&(this._document.body.removeEventListener("keydown",this._keydownListener,!0),this._isAttached=!1)},t.ngInjectableDef=Object(r.U)({factory:function(){return new t(Object(r.Y)(l.c))},token:t,providedIn:"root"}),t}(),E=function(){function t(t){this._document=t}return t.prototype.ngOnDestroy=function(){this._containerElement&&this._containerElement.parentNode&&this._containerElement.parentNode.removeChild(this._containerElement)},t.prototype.getContainerElement=function(){return this._containerElement||this._createContainer(),this._containerElement},t.prototype._createContainer=function(){var t=this._document.createElement("div");t.classList.add("cdk-overlay-container"),this._document.body.appendChild(t),this._containerElement=t},t.ngInjectableDef=Object(r.U)({factory:function(){return new t(Object(r.Y)(l.c))},token:t,providedIn:"root"}),t}(),T=function(){function t(t,e,n,r,i,o,l){var a=this;this._portalOutlet=t,this._host=e,this._pane=n,this._config=r,this._ngZone=i,this._keyboardDispatcher=o,this._document=l,this._backdropElement=null,this._backdropClick=new u.a,this._attachments=new u.a,this._detachments=new u.a,this._keydownEventsObservable=s.a.create(function(t){var e=a._keydownEvents.subscribe(t);return a._keydownEventSubscriptions++,function(){e.unsubscribe(),a._keydownEventSubscriptions--}}),this._keydownEvents=new u.a,this._keydownEventSubscriptions=0,r.scrollStrategy&&r.scrollStrategy.attach(this)}return Object.defineProperty(t.prototype,"overlayElement",{get:function(){return this._pane},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"backdropElement",{get:function(){return this._backdropElement},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"hostElement",{get:function(){return this._host},enumerable:!0,configurable:!0}),t.prototype.attach=function(t){var e=this,n=this._portalOutlet.attach(t);return this._config.positionStrategy&&this._config.positionStrategy.attach(this),!this._host.parentElement&&this._previousHostParent&&this._previousHostParent.appendChild(this._host),this._updateStackingOrder(),this._updateElementSize(),this._updateElementDirection(),this._config.scrollStrategy&&this._config.scrollStrategy.enable(),this._ngZone.onStable.asObservable().pipe(Object(f.a)(1)).subscribe(function(){e.hasAttached()&&e.updatePosition()}),this._togglePointerEvents(!0),this._config.hasBackdrop&&this._attachBackdrop(),this._config.panelClass&&this._toggleClasses(this._pane,this._config.panelClass,!0),this._attachments.next(),this._keyboardDispatcher.add(this),n},t.prototype.detach=function(){var t=this;if(this.hasAttached()){this.detachBackdrop(),this._togglePointerEvents(!1),this._config.positionStrategy&&this._config.positionStrategy.detach&&this._config.positionStrategy.detach(),this._config.scrollStrategy&&this._config.scrollStrategy.disable(),this._config.panelClass&&this._toggleClasses(this._pane,this._config.panelClass,!1);var e=this._portalOutlet.detach();this._detachments.next(),this._keyboardDispatcher.remove(this);var n=this._ngZone.onStable.asObservable().pipe(Object(d.a)(Object(c.a)(this._attachments,this._detachments))).subscribe(function(){t._pane&&t._host&&0!==t._pane.children.length||(t._host&&t._host.parentElement&&(t._previousHostParent=t._host.parentElement,t._previousHostParent.removeChild(t._host)),n.unsubscribe())});return e}},t.prototype.dispose=function(){var t=this.hasAttached();this._config.positionStrategy&&this._config.positionStrategy.dispose(),this._config.scrollStrategy&&this._config.scrollStrategy.disable(),this.detachBackdrop(),this._keyboardDispatcher.remove(this),this._portalOutlet.dispose(),this._attachments.complete(),this._backdropClick.complete(),this._keydownEvents.complete(),this._host&&this._host.parentNode&&(this._host.parentNode.removeChild(this._host),this._host=null),this._previousHostParent=this._pane=null,t&&this._detachments.next(),this._detachments.complete()},t.prototype.hasAttached=function(){return this._portalOutlet.hasAttached()},t.prototype.backdropClick=function(){return this._backdropClick.asObservable()},t.prototype.attachments=function(){return this._attachments.asObservable()},t.prototype.detachments=function(){return this._detachments.asObservable()},t.prototype.keydownEvents=function(){return this._keydownEventsObservable},t.prototype.getConfig=function(){return this._config},t.prototype.updatePosition=function(){this._config.positionStrategy&&this._config.positionStrategy.apply()},t.prototype.updateSize=function(t){this._config=Object(a.a)({},this._config,t),this._updateElementSize()},t.prototype.setDirection=function(t){this._config=Object(a.a)({},this._config,{direction:t}),this._updateElementDirection()},t.prototype.getDirection=function(){var t=this._config.direction;return t?"string"==typeof t?t:t.value:"ltr"},t.prototype._updateElementDirection=function(){this._host.setAttribute("dir",this.getDirection())},t.prototype._updateElementSize=function(){var t=this._pane.style;t.width=Object(i.d)(this._config.width),t.height=Object(i.d)(this._config.height),t.minWidth=Object(i.d)(this._config.minWidth),t.minHeight=Object(i.d)(this._config.minHeight),t.maxWidth=Object(i.d)(this._config.maxWidth),t.maxHeight=Object(i.d)(this._config.maxHeight)},t.prototype._togglePointerEvents=function(t){this._pane.style.pointerEvents=t?"auto":"none"},t.prototype._attachBackdrop=function(){var t=this;this._backdropElement=this._document.createElement("div"),this._backdropElement.classList.add("cdk-overlay-backdrop"),this._config.backdropClass&&this._toggleClasses(this._backdropElement,this._config.backdropClass,!0),this._host.parentElement.insertBefore(this._backdropElement,this._host),this._backdropElement.addEventListener("click",function(e){return t._backdropClick.next(e)}),"undefined"!=typeof requestAnimationFrame?this._ngZone.runOutsideAngular(function(){requestAnimationFrame(function(){t._backdropElement&&t._backdropElement.classList.add("cdk-overlay-backdrop-showing")})}):this._backdropElement.classList.add("cdk-overlay-backdrop-showing")},t.prototype._updateStackingOrder=function(){this._host.nextSibling&&this._host.parentNode.appendChild(this._host)},t.prototype.detachBackdrop=function(){var t=this,e=this._backdropElement;if(e){var n,r=function(){e&&e.parentNode&&e.parentNode.removeChild(e),t._backdropElement==e&&(t._backdropElement=null),clearTimeout(n)};e.classList.remove("cdk-overlay-backdrop-showing"),this._config.backdropClass&&this._toggleClasses(e,this._config.backdropClass,!1),this._ngZone.runOutsideAngular(function(){e.addEventListener("transitionend",r)}),e.style.pointerEvents="none",n=this._ngZone.runOutsideAngular(function(){return setTimeout(r,500)})}},t.prototype._toggleClasses=function(t,e,n){var r=t.classList;Object(i.b)(e).forEach(function(t){n?r.add(t):r.remove(t)})},t}(),P=function(){function t(t,e,n,r,i){var o=this;this._viewportRuler=e,this._document=n,this._platform=r,this._overlayContainer=i,this._isInitialRender=!0,this._lastBoundingBoxSize={width:0,height:0},this._isPushed=!1,this._canPush=!0,this._growAfterOpen=!1,this._hasFlexibleDimensions=!0,this._positionLocked=!1,this._viewportMargin=0,this.scrollables=[],this._preferredPositions=[],this._positionChanges=new u.a,this._resizeSubscription=h.a.EMPTY,this._offsetX=0,this._offsetY=0,this._positionChangeSubscriptions=0,this.positionChanges=s.a.create(function(t){var e=o._positionChanges.subscribe(t);return o._positionChangeSubscriptions++,function(){e.unsubscribe(),o._positionChangeSubscriptions--}}),this.setOrigin(t)}return Object.defineProperty(t.prototype,"positions",{get:function(){return this._preferredPositions},enumerable:!0,configurable:!0}),t.prototype.attach=function(t){var e=this;if(this._overlayRef&&t!==this._overlayRef)throw Error("This position strategy is already attached to an overlay");this._validatePositions(),t.hostElement.classList.add("cdk-overlay-connected-position-bounding-box"),this._overlayRef=t,this._boundingBox=t.hostElement,this._pane=t.overlayElement,this._resizeSubscription.unsubscribe(),this._resizeSubscription=this._viewportRuler.change().subscribe(function(){return e.apply()})},t.prototype.apply=function(){if(!(this._isDisposed||this._platform&&!this._platform.isBrowser))if(!this._isInitialRender&&this._positionLocked&&this._lastPosition)this.reapplyLastPosition();else{this._resetOverlayElementStyles(),this._resetBoundingBoxStyles(),this._viewportRect=this._getNarrowedViewportRect(),this._originRect=this._origin.getBoundingClientRect(),this._overlayRect=this._pane.getBoundingClientRect();for(var t,e=this._originRect,n=this._overlayRect,r=this._viewportRect,i=[],o=0,l=this._preferredPositions;o<l.length;o++){var a=l[o],u=this._getOriginPoint(e,a),s=this._getOverlayPoint(u,n,a),c=this._getOverlayFit(s,n,r,a);if(c.isCompletelyWithinViewport)return this._isPushed=!1,void this._applyPosition(a,u);this._canFitWithFlexibleDimensions(c,s,r)?i.push({position:a,origin:u,overlayRect:n,boundingBoxRect:this._calculateBoundingBoxRect(u,a)}):(!t||t.overlayFit.visibleArea<c.visibleArea)&&(t={overlayFit:c,overlayPoint:s,originPoint:u,position:a,overlayRect:n})}if(i.length){for(var h=null,f=-1,d=0,p=i;d<p.length;d++){var m=p[d],g=m.boundingBoxRect.width*m.boundingBoxRect.height*(m.position.weight||1);g>f&&(f=g,h=m)}return this._isPushed=!1,void this._applyPosition(h.position,h.origin)}if(this._canPush)return this._isPushed=!0,void this._applyPosition(t.position,t.originPoint);this._applyPosition(t.position,t.originPoint)}},t.prototype.detach=function(){this._resizeSubscription.unsubscribe()},t.prototype.dispose=function(){this._isDisposed||(this.detach(),this._boundingBox=null,this._positionChanges.complete(),this._isDisposed=!0)},t.prototype.reapplyLastPosition=function(){if(!this._isDisposed&&(!this._platform||this._platform.isBrowser)){this._originRect=this._origin.getBoundingClientRect(),this._overlayRect=this._pane.getBoundingClientRect(),this._viewportRect=this._getNarrowedViewportRect();var t=this._lastPosition||this._preferredPositions[0],e=this._getOriginPoint(this._originRect,t);this._applyPosition(t,e)}},t.prototype.withScrollableContainers=function(t){this.scrollables=t},t.prototype.withPositions=function(t){return this._preferredPositions=t,-1===t.indexOf(this._lastPosition)&&(this._lastPosition=null),this._validatePositions(),this},t.prototype.withViewportMargin=function(t){return this._viewportMargin=t,this},t.prototype.withFlexibleDimensions=function(t){return void 0===t&&(t=!0),this._hasFlexibleDimensions=t,this},t.prototype.withGrowAfterOpen=function(t){return void 0===t&&(t=!0),this._growAfterOpen=t,this},t.prototype.withPush=function(t){return void 0===t&&(t=!0),this._canPush=t,this},t.prototype.withLockedPosition=function(t){return void 0===t&&(t=!0),this._positionLocked=t,this},t.prototype.setOrigin=function(t){return this._origin=t instanceof r.k?t.nativeElement:t,this},t.prototype.withDefaultOffsetX=function(t){return this._offsetX=t,this},t.prototype.withDefaultOffsetY=function(t){return this._offsetY=t,this},t.prototype.withTransformOriginOn=function(t){return this._transformOriginSelector=t,this},t.prototype._getOriginPoint=function(t,e){var n;if("center"==e.originX)n=t.left+t.width/2;else{var r=this._isRtl()?t.right:t.left,i=this._isRtl()?t.left:t.right;n="start"==e.originX?r:i}return{x:n,y:"center"==e.originY?t.top+t.height/2:"top"==e.originY?t.top:t.bottom}},t.prototype._getOverlayPoint=function(t,e,n){var r;return r="center"==n.overlayX?-e.width/2:"start"===n.overlayX?this._isRtl()?-e.width:0:this._isRtl()?0:-e.width,{x:t.x+r,y:t.y+("center"==n.overlayY?-e.height/2:"top"==n.overlayY?0:-e.height)}},t.prototype._getOverlayFit=function(t,e,n,r){var i=t.x,o=t.y,l=this._getOffset(r,"x"),a=this._getOffset(r,"y");l&&(i+=l),a&&(o+=a);var u=0-o,s=o+e.height-n.height,c=this._subtractOverflows(e.width,0-i,i+e.width-n.width),h=this._subtractOverflows(e.height,u,s),f=c*h;return{visibleArea:f,isCompletelyWithinViewport:e.width*e.height===f,fitsInViewportVertically:h===e.height,fitsInViewportHorizontally:c==e.width}},t.prototype._canFitWithFlexibleDimensions=function(t,e,n){if(this._hasFlexibleDimensions){var r=n.bottom-e.y,i=n.right-e.x,o=this._overlayRef.getConfig().minHeight,l=this._overlayRef.getConfig().minWidth;return(t.fitsInViewportVertically||null!=o&&o<=r)&&(t.fitsInViewportHorizontally||null!=l&&l<=i)}},t.prototype._pushOverlayOnScreen=function(t,e){var n=this._viewportRect,r=Math.max(t.x+e.width-n.right,0),i=Math.max(t.y+e.height-n.bottom,0),o=Math.max(n.top-t.y,0),l=Math.max(n.left-t.x,0);return{x:t.x+(e.width<=n.width?l||-r:n.left-t.x),y:t.y+(e.height<=n.height?o||-i:n.top-t.y)}},t.prototype._applyPosition=function(t,e){if(this._setTransformOrigin(t),this._setOverlayElementStyles(e,t),this._setBoundingBoxStyles(e,t),this._lastPosition=t,this._positionChangeSubscriptions>0){var n=new function(t,e){this.connectionPair=t,this.scrollableViewProperties=e}(t,this._getScrollVisibility());this._positionChanges.next(n)}this._isInitialRender=!1},t.prototype._setTransformOrigin=function(t){if(this._transformOriginSelector){var e,n=this._boundingBox.querySelectorAll(this._transformOriginSelector),r=t.overlayY;e="center"===t.overlayX?"center":this._isRtl()?"start"===t.overlayX?"right":"left":"start"===t.overlayX?"left":"right";for(var i=0;i<n.length;i++)n[i].style.transformOrigin=e+" "+r}},t.prototype._calculateBoundingBoxRect=function(t,e){var n,r,i,o,l,a,u=this._viewportRect,s=this._isRtl();if("top"===e.overlayY)r=t.y,n=u.bottom-t.y;else if("bottom"===e.overlayY)n=u.height-(i=u.height-t.y+2*this._viewportMargin)+this._viewportMargin;else{var c=Math.min(u.bottom-t.y,t.y-u.left),h=this._lastBoundingBoxSize.height;r=t.y-c,(n=2*c)>h&&!this._isInitialRender&&!this._growAfterOpen&&(r=t.y-h/2)}if("end"===e.overlayX&&!s||"start"===e.overlayX&&s)a=u.right-t.x+this._viewportMargin,o=t.x-u.left;else if("start"===e.overlayX&&!s||"end"===e.overlayX&&s)l=t.x,o=u.right-t.x;else{c=Math.min(u.right-t.x,t.x-u.top);var f=this._lastBoundingBoxSize.width;l=t.x-c,(o=2*c)>f&&!this._isInitialRender&&!this._growAfterOpen&&(l=t.x-f/2)}return{top:r,left:l,bottom:i,right:a,width:o,height:n}},t.prototype._setBoundingBoxStyles=function(t,e){var n=this._calculateBoundingBoxRect(t,e);this._isInitialRender||this._growAfterOpen||(n.height=Math.min(n.height,this._lastBoundingBoxSize.height),n.width=Math.min(n.width,this._lastBoundingBoxSize.width));var r={};if(this._hasExactPosition())r.top=r.left="0",r.bottom=r.right="",r.width=r.height="100%";else{var o=this._overlayRef.getConfig().maxHeight,l=this._overlayRef.getConfig().maxWidth;r.height=Object(i.d)(n.height),r.top=Object(i.d)(n.top),r.bottom=Object(i.d)(n.bottom),r.width=Object(i.d)(n.width),r.left=Object(i.d)(n.left),r.right=Object(i.d)(n.right),r.alignItems="center"===e.overlayX?"center":"end"===e.overlayX?"flex-end":"flex-start",r.justifyContent="center"===e.overlayY?"center":"bottom"===e.overlayY?"flex-end":"flex-start",o&&(r.maxHeight=Object(i.d)(o)),l&&(r.maxWidth=Object(i.d)(l))}this._lastBoundingBoxSize=n,I(this._boundingBox.style,r)},t.prototype._resetBoundingBoxStyles=function(){I(this._boundingBox.style,{top:"0",left:"0",right:"0",bottom:"0",height:"",width:"",alignItems:"",justifyContent:""})},t.prototype._resetOverlayElementStyles=function(){I(this._pane.style,{top:"",left:"",bottom:"",right:"",position:""})},t.prototype._setOverlayElementStyles=function(t,e){var n={};this._hasExactPosition()?(I(n,this._getExactOverlayY(e,t)),I(n,this._getExactOverlayX(e,t))):n.position="static";var r="",i=this._getOffset(e,"x"),o=this._getOffset(e,"y");i&&(r+="translateX("+i+"px) "),o&&(r+="translateY("+o+"px)"),n.transform=r.trim(),this._hasFlexibleDimensions&&this._overlayRef.getConfig().maxHeight&&(n.maxHeight=""),this._hasFlexibleDimensions&&this._overlayRef.getConfig().maxWidth&&(n.maxWidth=""),I(this._pane.style,n)},t.prototype._getExactOverlayY=function(t,e){var n={top:null,bottom:null},r=this._getOverlayPoint(e,this._overlayRect,t);this._isPushed&&(r=this._pushOverlayOnScreen(r,this._overlayRect));var o=this._overlayContainer?this._overlayContainer.getContainerElement().getBoundingClientRect().top:0;return r.y-=o,"bottom"===t.overlayY?n.bottom=this._document.documentElement.clientHeight-(r.y+this._overlayRect.height)+"px":n.top=Object(i.d)(r.y),n},t.prototype._getExactOverlayX=function(t,e){var n={left:null,right:null},r=this._getOverlayPoint(e,this._overlayRect,t);return this._isPushed&&(r=this._pushOverlayOnScreen(r,this._overlayRect)),"right"==(this._isRtl()?"end"===t.overlayX?"left":"right":"end"===t.overlayX?"right":"left")?n.right=this._document.documentElement.clientWidth-(r.x+this._overlayRect.width)+"px":n.left=Object(i.d)(r.x),n},t.prototype._getScrollVisibility=function(){var t=this._origin.getBoundingClientRect(),e=this._pane.getBoundingClientRect(),n=this.scrollables.map(function(t){return t.getElementRef().nativeElement.getBoundingClientRect()});return{isOriginClipped:k(t,n),isOriginOutsideView:C(t,n),isOverlayClipped:k(e,n),isOverlayOutsideView:C(e,n)}},t.prototype._subtractOverflows=function(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n];return e.reduce(function(t,e){return t-Math.max(e,0)},t)},t.prototype._getNarrowedViewportRect=function(){var t=this._document.documentElement.clientWidth,e=this._document.documentElement.clientHeight,n=this._viewportRuler.getViewportScrollPosition();return{top:n.top+this._viewportMargin,left:n.left+this._viewportMargin,right:n.left+t-this._viewportMargin,bottom:n.top+e-this._viewportMargin,width:t-2*this._viewportMargin,height:e-2*this._viewportMargin}},t.prototype._isRtl=function(){return"rtl"===this._overlayRef.getDirection()},t.prototype._hasExactPosition=function(){return!this._hasFlexibleDimensions||this._isPushed},t.prototype._getOffset=function(t,e){return"x"===e?null==t.offsetX?this._offsetX:t.offsetX:null==t.offsetY?this._offsetY:t.offsetY},t.prototype._validatePositions=function(){if(!this._preferredPositions.length)throw Error("FlexibleConnectedPositionStrategy: At least one position is required.");this._preferredPositions.forEach(function(t){_("originX",t.originX),v("originY",t.originY),_("overlayX",t.overlayX),v("overlayY",t.overlayY)})},t}();function I(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var A=function(){function t(t,e,n,r,i,o){this._preferredPositions=[],this._positionStrategy=new P(n,r,i,o).withFlexibleDimensions(!1).withPush(!1).withViewportMargin(0),this.withFallbackPosition(t,e)}return Object.defineProperty(t.prototype,"_isRtl",{get:function(){return"rtl"===this._overlayRef.getDirection()},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"onPositionChange",{get:function(){return this._positionStrategy.positionChanges},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"positions",{get:function(){return this._preferredPositions},enumerable:!0,configurable:!0}),t.prototype.attach=function(t){this._overlayRef=t,this._positionStrategy.attach(t),this._direction&&(t.setDirection(this._direction),this._direction=null)},t.prototype.dispose=function(){this._positionStrategy.dispose()},t.prototype.detach=function(){this._positionStrategy.detach()},t.prototype.apply=function(){this._positionStrategy.apply()},t.prototype.recalculateLastPosition=function(){this._positionStrategy.reapplyLastPosition()},t.prototype.withScrollableContainers=function(t){this._positionStrategy.withScrollableContainers(t)},t.prototype.withFallbackPosition=function(t,e,n,r){var i=new function(t,e,n,r){this.offsetX=n,this.offsetY=r,this.originX=t.originX,this.originY=t.originY,this.overlayX=e.overlayX,this.overlayY=e.overlayY}(t,e,n,r);return this._preferredPositions.push(i),this._positionStrategy.withPositions(this._preferredPositions),this},t.prototype.withDirection=function(t){return this._overlayRef?this._overlayRef.setDirection(t):this._direction=t,this},t.prototype.withOffsetX=function(t){return this._positionStrategy.withDefaultOffsetX(t),this},t.prototype.withOffsetY=function(t){return this._positionStrategy.withDefaultOffsetY(t),this},t.prototype.withLockedPosition=function(t){return this._positionStrategy.withLockedPosition(t),this},t.prototype.withPositions=function(t){return this._preferredPositions=t.slice(),this._positionStrategy.withPositions(this._preferredPositions),this},t.prototype.setOrigin=function(t){return this._positionStrategy.setOrigin(t),this},t}(),M=function(){function t(){this._cssPosition="static",this._topOffset="",this._bottomOffset="",this._leftOffset="",this._rightOffset="",this._alignItems="",this._justifyContent="",this._width="",this._height=""}return t.prototype.attach=function(t){var e=t.getConfig();this._overlayRef=t,this._width&&!e.width&&t.updateSize({width:this._width}),this._height&&!e.height&&t.updateSize({height:this._height}),t.hostElement.classList.add("cdk-global-overlay-wrapper")},t.prototype.top=function(t){return void 0===t&&(t=""),this._bottomOffset="",this._topOffset=t,this._alignItems="flex-start",this},t.prototype.left=function(t){return void 0===t&&(t=""),this._rightOffset="",this._leftOffset=t,this._justifyContent="flex-start",this},t.prototype.bottom=function(t){return void 0===t&&(t=""),this._topOffset="",this._bottomOffset=t,this._alignItems="flex-end",this},t.prototype.right=function(t){return void 0===t&&(t=""),this._leftOffset="",this._rightOffset=t,this._justifyContent="flex-end",this},t.prototype.width=function(t){return void 0===t&&(t=""),this._overlayRef?this._overlayRef.updateSize({width:t}):this._width=t,this},t.prototype.height=function(t){return void 0===t&&(t=""),this._overlayRef?this._overlayRef.updateSize({height:t}):this._height=t,this},t.prototype.centerHorizontally=function(t){return void 0===t&&(t=""),this.left(t),this._justifyContent="center",this},t.prototype.centerVertically=function(t){return void 0===t&&(t=""),this.top(t),this._alignItems="center",this},t.prototype.apply=function(){if(this._overlayRef.hasAttached()){var t=this._overlayRef.overlayElement.style,e=this._overlayRef.hostElement.style,n=this._overlayRef.getConfig();t.position=this._cssPosition,t.marginLeft="100%"===n.width?"0":this._leftOffset,t.marginTop="100%"===n.height?"0":this._topOffset,t.marginBottom=this._bottomOffset,t.marginRight=this._rightOffset,"100%"===n.width?e.justifyContent="flex-start":"center"===this._justifyContent?e.justifyContent="center":"rtl"===this._overlayRef.getConfig().direction?"flex-start"===this._justifyContent?e.justifyContent="flex-end":"flex-end"===this._justifyContent&&(e.justifyContent="flex-start"):e.justifyContent=this._justifyContent,e.alignItems="100%"===n.height?"flex-start":this._alignItems}},t.prototype.dispose=function(){},t}(),D=function(){function t(t,e,n,r){this._viewportRuler=t,this._document=e,this._platform=n,this._overlayContainer=r}return t.prototype.global=function(){return new M},t.prototype.connectedTo=function(t,e,n){return new A(e,n,t,this._viewportRuler,this._document)},t.prototype.flexibleConnectedTo=function(t){return new P(t,this._viewportRuler,this._document,this._platform,this._overlayContainer)},t.ngInjectableDef=Object(r.U)({factory:function(){return new t(Object(r.Y)(o.d),Object(r.Y)(l.c),Object(r.Y)(p.a,8),Object(r.Y)(E,8))},token:t,providedIn:"root"}),t}(),N=0,L=function(){function t(t,e,n,r,i,o,l,a,u){this.scrollStrategies=t,this._overlayContainer=e,this._componentFactoryResolver=n,this._positionBuilder=r,this._keyboardDispatcher=i,this._injector=o,this._ngZone=l,this._document=a,this._directionality=u}return t.prototype.create=function(t){var e=this._createHostElement(),n=this._createPaneElement(e),r=this._createPortalOutlet(n),i=new y(t);return i.direction=i.direction||this._directionality.value,new T(r,e,n,i,this._ngZone,this._keyboardDispatcher,this._document)},t.prototype.position=function(){return this._positionBuilder},t.prototype._createPaneElement=function(t){var e=this._document.createElement("div");return e.id="cdk-overlay-"+N++,e.classList.add("cdk-overlay-pane"),t.appendChild(e),e},t.prototype._createHostElement=function(){var t=this._document.createElement("div");return this._overlayContainer.getContainerElement().appendChild(t),t},t.prototype._createPortalOutlet=function(t){return this._appRef||(this._appRef=this._injector.get(r.g)),new m.e(t,this._componentFactoryResolver,this._appRef,this._injector)},t}(),F=[{originX:"start",originY:"bottom",overlayX:"start",overlayY:"top"},{originX:"start",originY:"top",overlayX:"start",overlayY:"bottom"},{originX:"end",originY:"top",overlayX:"end",overlayY:"bottom"},{originX:"end",originY:"bottom",overlayX:"end",overlayY:"top"}],z=new r.q("cdk-connected-overlay-scroll-strategy"),V=function(t){this.elementRef=t},B=function(){function t(t,e,n,i,o){this._overlay=t,this._scrollStrategy=i,this._dir=o,this._hasBackdrop=!1,this._lockPosition=!1,this._growAfterOpen=!1,this._flexibleDimensions=!1,this._push=!1,this._backdropSubscription=h.a.EMPTY,this.viewportMargin=0,this.scrollStrategy=this._scrollStrategy(),this.open=!1,this.backdropClick=new r.n,this.positionChange=new r.n,this.attach=new r.n,this.detach=new r.n,this.overlayKeydown=new r.n,this._templatePortal=new m.h(e,n)}return Object.defineProperty(t.prototype,"offsetX",{get:function(){return this._offsetX},set:function(t){this._offsetX=t,this._position&&this._setPositions(this._position)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"offsetY",{get:function(){return this._offsetY},set:function(t){this._offsetY=t,this._position&&this._setPositions(this._position)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"hasBackdrop",{get:function(){return this._hasBackdrop},set:function(t){this._hasBackdrop=Object(i.c)(t)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"lockPosition",{get:function(){return this._lockPosition},set:function(t){this._lockPosition=Object(i.c)(t)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"flexibleDiemsions",{get:function(){return this._flexibleDimensions},set:function(t){this._flexibleDimensions=Object(i.c)(t)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"growAfterOpen",{get:function(){return this._growAfterOpen},set:function(t){this._growAfterOpen=Object(i.c)(t)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"push",{get:function(){return this._push},set:function(t){this._push=Object(i.c)(t)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"overlayRef",{get:function(){return this._overlayRef},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"dir",{get:function(){return this._dir?this._dir.value:"ltr"},enumerable:!0,configurable:!0}),t.prototype.ngOnDestroy=function(){this._destroyOverlay()},t.prototype.ngOnChanges=function(t){this._position&&(t.positions&&this._position.withPositions(this.positions),t.lockPosition&&this._position.withLockedPosition(this.lockPosition),t.origin&&(this._position.setOrigin(this.origin.elementRef),this.open&&this._position.apply())),t.open&&(this.open?this._attachOverlay():this._detachOverlay())},t.prototype._createOverlay=function(){this.positions&&this.positions.length||(this.positions=F),this._overlayRef=this._overlay.create(this._buildConfig())},t.prototype._buildConfig=function(){var t=this._position=this._createPositionStrategy(),e=new y({direction:this._dir,positionStrategy:t,scrollStrategy:this.scrollStrategy,hasBackdrop:this.hasBackdrop});return(this.width||0===this.width)&&(e.width=this.width),(this.height||0===this.height)&&(e.height=this.height),(this.minWidth||0===this.minWidth)&&(e.minWidth=this.minWidth),(this.minHeight||0===this.minHeight)&&(e.minHeight=this.minHeight),this.backdropClass&&(e.backdropClass=this.backdropClass),e},t.prototype._createPositionStrategy=function(){var t=this,e=this._overlay.position().flexibleConnectedTo(this.origin.elementRef).withFlexibleDimensions(this.flexibleDiemsions).withPush(this.push).withGrowAfterOpen(this.growAfterOpen).withViewportMargin(this.viewportMargin).withLockedPosition(this.lockPosition);return this._setPositions(e),e.positionChanges.subscribe(function(e){return t.positionChange.emit(e)}),e},t.prototype._setPositions=function(t){var e=this,n=this.positions.map(function(t){return{originX:t.originX,originY:t.originY,overlayX:t.overlayX,overlayY:t.overlayY,offsetX:t.offsetX||e.offsetX,offsetY:t.offsetY||e.offsetY}});t.withPositions(n)},t.prototype._attachOverlay=function(){var t=this;this._overlayRef?this._overlayRef.updateSize({width:this.width,minWidth:this.minWidth,height:this.height,minHeight:this.minHeight}):(this._createOverlay(),this._overlayRef.keydownEvents().subscribe(function(e){t.overlayKeydown.next(e),e.keyCode===g.g&&t._detachOverlay()})),this._overlayRef.hasAttached()||(this._overlayRef.attach(this._templatePortal),this.attach.emit()),this.hasBackdrop&&(this._backdropSubscription=this._overlayRef.backdropClick().subscribe(function(e){t.backdropClick.emit(e)}))},t.prototype._detachOverlay=function(){this._overlayRef&&(this._overlayRef.detach(),this.detach.emit()),this._backdropSubscription.unsubscribe()},t.prototype._destroyOverlay=function(){this._overlayRef&&this._overlayRef.dispose(),this._backdropSubscription.unsubscribe()},t}();function H(t){return function(){return t.scrollStrategies.reposition()}}var G=function(){}},eihs:function(t,e,n){"use strict";n.d(e,"a",function(){return r});var r={e:{}}},gI3B:function(t,e,n){"use strict";n.d(e,"a",function(){return a});var r=n("6blF"),i=n("T1DM"),o=n("/21U"),l=n("nkY7");function a(t,e,n){void 0===t&&(t=0);var a=-1;return Object(o.a)(e)?a=Number(e)<1?1:Number(e):Object(l.a)(e)&&(n=e),Object(l.a)(n)||(n=i.a),new r.a(function(e){var r=Object(o.a)(t)?t:+t-n.now();return n.schedule(u,r,{index:0,period:a,subscriber:e})})}function u(t){var e=t.index,n=t.period,r=t.subscriber;if(r.next(e),!r.closed){if(-1===n)return r.complete();t.index=e+1,this.schedule(t,n)}}},gIcY:function(t,e,n){"use strict";n.d(e,"b",function(){return m}),n.d(e,"c",function(){return F}),n.d(e,"a",function(){return z});var r=n("mrSG"),i=n("CcnG"),o=n("VNr4"),l=n("0/uQ"),a=n("67Y/"),u=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Object(r.b)(e,t),Object.defineProperty(e.prototype,"formDirective",{get:function(){return null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"path",{get:function(){return null},enumerable:!0,configurable:!0}),e}((n("ZYjt"),function(){function t(){}return Object.defineProperty(t.prototype,"value",{get:function(){return this.control?this.control.value:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"valid",{get:function(){return this.control?this.control.valid:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"invalid",{get:function(){return this.control?this.control.invalid:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"pending",{get:function(){return this.control?this.control.pending:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"disabled",{get:function(){return this.control?this.control.disabled:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"enabled",{get:function(){return this.control?this.control.enabled:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"errors",{get:function(){return this.control?this.control.errors:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"pristine",{get:function(){return this.control?this.control.pristine:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"dirty",{get:function(){return this.control?this.control.dirty:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"touched",{get:function(){return this.control?this.control.touched:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"status",{get:function(){return this.control?this.control.status:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"untouched",{get:function(){return this.control?this.control.untouched:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"statusChanges",{get:function(){return this.control?this.control.statusChanges:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"valueChanges",{get:function(){return this.control?this.control.valueChanges:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"path",{get:function(){return null},enumerable:!0,configurable:!0}),t.prototype.reset=function(t){void 0===t&&(t=void 0),this.control&&this.control.reset(t)},t.prototype.hasError=function(t,e){return!!this.control&&this.control.hasError(t,e)},t.prototype.getError=function(t,e){return this.control?this.control.getError(t,e):null},t}()));function s(t){return null==t||0===t.length}var c=/^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/,h=function(){function t(){}return t.min=function(t){return function(e){if(s(e.value)||s(t))return null;var n=parseFloat(e.value);return!isNaN(n)&&n<t?{min:{min:t,actual:e.value}}:null}},t.max=function(t){return function(e){if(s(e.value)||s(t))return null;var n=parseFloat(e.value);return!isNaN(n)&&n>t?{max:{max:t,actual:e.value}}:null}},t.required=function(t){return s(t.value)?{required:!0}:null},t.requiredTrue=function(t){return!0===t.value?null:{required:!0}},t.email=function(t){return s(t.value)?null:c.test(t.value)?null:{email:!0}},t.minLength=function(t){return function(e){if(s(e.value))return null;var n=e.value?e.value.length:0;return n<t?{minlength:{requiredLength:t,actualLength:n}}:null}},t.maxLength=function(t){return function(e){var n=e.value?e.value.length:0;return n>t?{maxlength:{requiredLength:t,actualLength:n}}:null}},t.pattern=function(e){return e?("string"==typeof e?(r="","^"!==e.charAt(0)&&(r+="^"),r+=e,"$"!==e.charAt(e.length-1)&&(r+="$"),n=new RegExp(r)):(r=e.toString(),n=e),function(t){if(s(t.value))return null;var e=t.value;return n.test(e)?null:{pattern:{requiredPattern:r,actualValue:e}}}):t.nullValidator;var n,r},t.nullValidator=function(t){return null},t.compose=function(t){if(!t)return null;var e=t.filter(f);return 0==e.length?null:function(t){return p(function(t,n){return e.map(function(e){return e(t)})}(t))}},t.composeAsync=function(t){if(!t)return null;var e=t.filter(f);return 0==e.length?null:function(t){var n=function(t,n){return e.map(function(e){return e(t)})}(t).map(d);return Object(o.a)(n).pipe(Object(a.a)(p))}},t}();function f(t){return null!=t}function d(t){var e=Object(i.Wa)(t)?Object(l.a)(t):t;if(!Object(i.Va)(e))throw new Error("Expected validator to return Promise or Observable.");return e}function p(t){var e=t.reduce(function(t,e){return null!=e?Object(r.a)({},t,e):t},{});return 0===Object.keys(e).length?null:e}var m=new i.q("NgValueAccessor");function g(t){return t.validate?function(e){return t.validate(e)}:t}function b(t){return t.validate?function(e){return t.validate(e)}:t}var y='\n    <div [formGroup]="myGroup">\n      <input formControlName="firstName">\n    </div>\n\n    In your class:\n\n    this.myGroup = new FormGroup({\n       firstName: new FormControl()\n    });',v='\n    <div [formGroup]="myGroup">\n       <div formGroupName="person">\n          <input formControlName="firstName">\n       </div>\n    </div>\n\n    In your class:\n\n    this.myGroup = new FormGroup({\n       person: new FormGroup({ firstName: new FormControl() })\n    });',_=function(){function t(){}return t.controlParentException=function(){throw new Error("formControlName must be used with a parent formGroup directive.  You'll want to add a formGroup\n       directive and pass it an existing FormGroup instance (you can create one in your class).\n\n      Example:\n\n      "+y)},t.ngModelGroupException=function(){throw new Error('formControlName cannot be used with an ngModelGroup parent. It is only compatible with parents\n       that also have a "form" prefix: formGroupName, formArrayName, or formGroup.\n\n       Option 1:  Update the parent to be formGroupName (reactive form strategy)\n\n        '+v+'\n\n        Option 2: Use ngModel instead of formControlName (template-driven strategy)\n\n        \n    <form>\n       <div ngModelGroup="person">\n          <input [(ngModel)]="person.name" name="firstName">\n       </div>\n    </form>')},t.missingFormException=function(){throw new Error("formGroup expects a FormGroup instance. Please pass one in.\n\n       Example:\n\n       "+y)},t.groupParentException=function(){throw new Error("formGroupName must be used with a parent formGroup directive.  You'll want to add a formGroup\n      directive and pass it an existing FormGroup instance (you can create one in your class).\n\n      Example:\n\n      "+v)},t.arrayParentException=function(){throw new Error('formArrayName must be used with a parent formGroup directive.  You\'ll want to add a formGroup\n       directive and pass it an existing FormGroup instance (you can create one in your class).\n\n        Example:\n\n        \n    <div [formGroup]="myGroup">\n      <div formArrayName="cities">\n        <div *ngFor="let city of cityArray.controls; index as i">\n          <input [formControlName]="i">\n        </div>\n      </div>\n    </div>\n\n    In your class:\n\n    this.cityArray = new FormArray([new FormControl(\'SF\')]);\n    this.myGroup = new FormGroup({\n      cities: this.cityArray\n    });')},t.disabledAttrWarning=function(){console.warn("\n      It looks like you're using the disabled attribute with a reactive form directive. If you set disabled to true\n      when you set up this control in your component class, the disabled attribute will actually be set in the DOM for\n      you. We recommend using this approach to avoid 'changed after checked' errors.\n       \n      Example: \n      form = new FormGroup({\n        first: new FormControl({value: 'Nancy', disabled: true}, Validators.required),\n        last: new FormControl('Drew', Validators.required)\n      });\n    ")},t.ngModelWarning=function(t){console.warn("\n    It looks like you're using ngModel on the same form field as "+t+". \n    Support for using the ngModel input property and ngModelChange event with \n    reactive form directives has been deprecated in Angular v6 and will be removed \n    in Angular v7.\n    \n    For more information on this, see our API docs here:\n    https://angular.io/api/forms/"+("formControl"===t?"FormControlDirective":"FormControlName")+"#use-with-ngmodel\n    ")},t}();function w(t,e){t||k(e,"Cannot find control with"),e.valueAccessor||k(e,"No value accessor for form control with"),t.validator=h.compose([t.validator,e.validator]),t.asyncValidator=h.composeAsync([t.asyncValidator,e.asyncValidator]),e.valueAccessor.writeValue(t.value),function(t,e){e.valueAccessor.registerOnChange(function(n){t._pendingValue=n,t._pendingChange=!0,t._pendingDirty=!0,"change"===t.updateOn&&x(t,e)})}(t,e),function(t,e){t.registerOnChange(function(t,n){e.valueAccessor.writeValue(t),n&&e.viewToModelUpdate(t)})}(t,e),function(t,e){e.valueAccessor.registerOnTouched(function(){t._pendingTouched=!0,"blur"===t.updateOn&&t._pendingChange&&x(t,e),"submit"!==t.updateOn&&t.markAsTouched()})}(t,e),e.valueAccessor.setDisabledState&&t.registerOnDisabledChange(function(t){e.valueAccessor.setDisabledState(t)}),e._rawValidators.forEach(function(e){e.registerOnValidatorChange&&e.registerOnValidatorChange(function(){return t.updateValueAndValidity()})}),e._rawAsyncValidators.forEach(function(e){e.registerOnValidatorChange&&e.registerOnValidatorChange(function(){return t.updateValueAndValidity()})})}function x(t,e){t._pendingDirty&&t.markAsDirty(),t.setValue(t._pendingValue,{emitModelToViewChange:!1}),e.viewToModelUpdate(t._pendingValue),t._pendingChange=!1}function S(t,e){null==t&&k(e,"Cannot find control with"),t.validator=h.compose([t.validator,e.validator]),t.asyncValidator=h.composeAsync([t.asyncValidator,e.asyncValidator])}function C(t){return k(t,"There is no FormControl instance attached to form control element with")}function k(t,e){var n;throw n=t.path.length>1?"path: '"+t.path.join(" -> ")+"'":t.path[0]?"name: '"+t.path+"'":"unspecified name attribute",new Error(e+" "+n)}function R(t){return null!=t?h.compose(t.map(g)):null}function j(t){return null!=t?h.composeAsync(t.map(b)):null}function O(t,e){t._syncPendingControls(),e.forEach(function(t){var e=t.control;"submit"===e.updateOn&&e._pendingChange&&(t.viewToModelUpdate(e._pendingValue),e._pendingChange=!1)})}function E(t,e){var n=t.indexOf(e);n>-1&&t.splice(n,1)}function T(t){var e=I(t)?t.validators:t;return Array.isArray(e)?R(e):e||null}function P(t,e){var n=I(e)?e.asyncValidators:t;return Array.isArray(n)?j(n):n||null}function I(t){return null!=t&&!Array.isArray(t)&&"object"==typeof t}var A=function(){function t(t,e){this.validator=t,this.asyncValidator=e,this._onCollectionChange=function(){},this.pristine=!0,this.touched=!1,this._onDisabledChange=[]}return Object.defineProperty(t.prototype,"parent",{get:function(){return this._parent},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"valid",{get:function(){return"VALID"===this.status},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"invalid",{get:function(){return"INVALID"===this.status},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"pending",{get:function(){return"PENDING"==this.status},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"disabled",{get:function(){return"DISABLED"===this.status},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"enabled",{get:function(){return"DISABLED"!==this.status},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"dirty",{get:function(){return!this.pristine},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"untouched",{get:function(){return!this.touched},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"updateOn",{get:function(){return this._updateOn?this._updateOn:this.parent?this.parent.updateOn:"change"},enumerable:!0,configurable:!0}),t.prototype.setValidators=function(t){this.validator=T(t)},t.prototype.setAsyncValidators=function(t){this.asyncValidator=P(t)},t.prototype.clearValidators=function(){this.validator=null},t.prototype.clearAsyncValidators=function(){this.asyncValidator=null},t.prototype.markAsTouched=function(t){void 0===t&&(t={}),this.touched=!0,this._parent&&!t.onlySelf&&this._parent.markAsTouched(t)},t.prototype.markAsUntouched=function(t){void 0===t&&(t={}),this.touched=!1,this._pendingTouched=!1,this._forEachChild(function(t){t.markAsUntouched({onlySelf:!0})}),this._parent&&!t.onlySelf&&this._parent._updateTouched(t)},t.prototype.markAsDirty=function(t){void 0===t&&(t={}),this.pristine=!1,this._parent&&!t.onlySelf&&this._parent.markAsDirty(t)},t.prototype.markAsPristine=function(t){void 0===t&&(t={}),this.pristine=!0,this._pendingDirty=!1,this._forEachChild(function(t){t.markAsPristine({onlySelf:!0})}),this._parent&&!t.onlySelf&&this._parent._updatePristine(t)},t.prototype.markAsPending=function(t){void 0===t&&(t={}),this.status="PENDING",!1!==t.emitEvent&&this.statusChanges.emit(this.status),this._parent&&!t.onlySelf&&this._parent.markAsPending(t)},t.prototype.disable=function(t){void 0===t&&(t={}),this.status="DISABLED",this.errors=null,this._forEachChild(function(e){e.disable(Object(r.a)({},t,{onlySelf:!0}))}),this._updateValue(),!1!==t.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._updateAncestors(t),this._onDisabledChange.forEach(function(t){return t(!0)})},t.prototype.enable=function(t){void 0===t&&(t={}),this.status="VALID",this._forEachChild(function(e){e.enable(Object(r.a)({},t,{onlySelf:!0}))}),this.updateValueAndValidity({onlySelf:!0,emitEvent:t.emitEvent}),this._updateAncestors(t),this._onDisabledChange.forEach(function(t){return t(!1)})},t.prototype._updateAncestors=function(t){this._parent&&!t.onlySelf&&(this._parent.updateValueAndValidity(t),this._parent._updatePristine(),this._parent._updateTouched())},t.prototype.setParent=function(t){this._parent=t},t.prototype.updateValueAndValidity=function(t){void 0===t&&(t={}),this._setInitialStatus(),this._updateValue(),this.enabled&&(this._cancelExistingSubscription(),this.errors=this._runValidator(),this.status=this._calculateStatus(),"VALID"!==this.status&&"PENDING"!==this.status||this._runAsyncValidator(t.emitEvent)),!1!==t.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._parent&&!t.onlySelf&&this._parent.updateValueAndValidity(t)},t.prototype._updateTreeValidity=function(t){void 0===t&&(t={emitEvent:!0}),this._forEachChild(function(e){return e._updateTreeValidity(t)}),this.updateValueAndValidity({onlySelf:!0,emitEvent:t.emitEvent})},t.prototype._setInitialStatus=function(){this.status=this._allControlsDisabled()?"DISABLED":"VALID"},t.prototype._runValidator=function(){return this.validator?this.validator(this):null},t.prototype._runAsyncValidator=function(t){var e=this;if(this.asyncValidator){this.status="PENDING";var n=d(this.asyncValidator(this));this._asyncValidationSubscription=n.subscribe(function(n){return e.setErrors(n,{emitEvent:t})})}},t.prototype._cancelExistingSubscription=function(){this._asyncValidationSubscription&&this._asyncValidationSubscription.unsubscribe()},t.prototype.setErrors=function(t,e){void 0===e&&(e={}),this.errors=t,this._updateControlsErrors(!1!==e.emitEvent)},t.prototype.get=function(t){return function(t,e,n){return null==e?null:(e instanceof Array||(e=e.split(".")),e instanceof Array&&0===e.length?null:e.reduce(function(t,e){return t instanceof D?t.controls.hasOwnProperty(e)?t.controls[e]:null:t instanceof N&&t.at(e)||null},t))}(this,t)},t.prototype.getError=function(t,e){var n=e?this.get(e):this;return n&&n.errors?n.errors[t]:null},t.prototype.hasError=function(t,e){return!!this.getError(t,e)},Object.defineProperty(t.prototype,"root",{get:function(){for(var t=this;t._parent;)t=t._parent;return t},enumerable:!0,configurable:!0}),t.prototype._updateControlsErrors=function(t){this.status=this._calculateStatus(),t&&this.statusChanges.emit(this.status),this._parent&&this._parent._updateControlsErrors(t)},t.prototype._initObservables=function(){this.valueChanges=new i.n,this.statusChanges=new i.n},t.prototype._calculateStatus=function(){return this._allControlsDisabled()?"DISABLED":this.errors?"INVALID":this._anyControlsHaveStatus("PENDING")?"PENDING":this._anyControlsHaveStatus("INVALID")?"INVALID":"VALID"},t.prototype._anyControlsHaveStatus=function(t){return this._anyControls(function(e){return e.status===t})},t.prototype._anyControlsDirty=function(){return this._anyControls(function(t){return t.dirty})},t.prototype._anyControlsTouched=function(){return this._anyControls(function(t){return t.touched})},t.prototype._updatePristine=function(t){void 0===t&&(t={}),this.pristine=!this._anyControlsDirty(),this._parent&&!t.onlySelf&&this._parent._updatePristine(t)},t.prototype._updateTouched=function(t){void 0===t&&(t={}),this.touched=this._anyControlsTouched(),this._parent&&!t.onlySelf&&this._parent._updateTouched(t)},t.prototype._isBoxedValue=function(t){return"object"==typeof t&&null!==t&&2===Object.keys(t).length&&"value"in t&&"disabled"in t},t.prototype._registerOnCollectionChange=function(t){this._onCollectionChange=t},t.prototype._setUpdateStrategy=function(t){I(t)&&null!=t.updateOn&&(this._updateOn=t.updateOn)},t}(),M=function(t){function e(e,n,r){void 0===e&&(e=null);var i=t.call(this,T(n),P(r,n))||this;return i._onChange=[],i._applyFormState(e),i._setUpdateStrategy(n),i.updateValueAndValidity({onlySelf:!0,emitEvent:!1}),i._initObservables(),i}return Object(r.b)(e,t),e.prototype.setValue=function(t,e){var n=this;void 0===e&&(e={}),this.value=this._pendingValue=t,this._onChange.length&&!1!==e.emitModelToViewChange&&this._onChange.forEach(function(t){return t(n.value,!1!==e.emitViewToModelChange)}),this.updateValueAndValidity(e)},e.prototype.patchValue=function(t,e){void 0===e&&(e={}),this.setValue(t,e)},e.prototype.reset=function(t,e){void 0===t&&(t=null),void 0===e&&(e={}),this._applyFormState(t),this.markAsPristine(e),this.markAsUntouched(e),this.setValue(this.value,e),this._pendingChange=!1},e.prototype._updateValue=function(){},e.prototype._anyControls=function(t){return!1},e.prototype._allControlsDisabled=function(){return this.disabled},e.prototype.registerOnChange=function(t){this._onChange.push(t)},e.prototype._clearChangeFns=function(){this._onChange=[],this._onDisabledChange=[],this._onCollectionChange=function(){}},e.prototype.registerOnDisabledChange=function(t){this._onDisabledChange.push(t)},e.prototype._forEachChild=function(t){},e.prototype._syncPendingControls=function(){return!("submit"!==this.updateOn||(this._pendingDirty&&this.markAsDirty(),this._pendingTouched&&this.markAsTouched(),!this._pendingChange)||(this.setValue(this._pendingValue,{onlySelf:!0,emitModelToViewChange:!1}),0))},e.prototype._applyFormState=function(t){this._isBoxedValue(t)?(this.value=this._pendingValue=t.value,t.disabled?this.disable({onlySelf:!0,emitEvent:!1}):this.enable({onlySelf:!0,emitEvent:!1})):this.value=this._pendingValue=t},e}(A),D=function(t){function e(e,n,r){var i=t.call(this,T(n),P(r,n))||this;return i.controls=e,i._initObservables(),i._setUpdateStrategy(n),i._setUpControls(),i.updateValueAndValidity({onlySelf:!0,emitEvent:!1}),i}return Object(r.b)(e,t),e.prototype.registerControl=function(t,e){return this.controls[t]?this.controls[t]:(this.controls[t]=e,e.setParent(this),e._registerOnCollectionChange(this._onCollectionChange),e)},e.prototype.addControl=function(t,e){this.registerControl(t,e),this.updateValueAndValidity(),this._onCollectionChange()},e.prototype.removeControl=function(t){this.controls[t]&&this.controls[t]._registerOnCollectionChange(function(){}),delete this.controls[t],this.updateValueAndValidity(),this._onCollectionChange()},e.prototype.setControl=function(t,e){this.controls[t]&&this.controls[t]._registerOnCollectionChange(function(){}),delete this.controls[t],e&&this.registerControl(t,e),this.updateValueAndValidity(),this._onCollectionChange()},e.prototype.contains=function(t){return this.controls.hasOwnProperty(t)&&this.controls[t].enabled},e.prototype.setValue=function(t,e){var n=this;void 0===e&&(e={}),this._checkAllValuesPresent(t),Object.keys(t).forEach(function(r){n._throwIfControlMissing(r),n.controls[r].setValue(t[r],{onlySelf:!0,emitEvent:e.emitEvent})}),this.updateValueAndValidity(e)},e.prototype.patchValue=function(t,e){var n=this;void 0===e&&(e={}),Object.keys(t).forEach(function(r){n.controls[r]&&n.controls[r].patchValue(t[r],{onlySelf:!0,emitEvent:e.emitEvent})}),this.updateValueAndValidity(e)},e.prototype.reset=function(t,e){void 0===t&&(t={}),void 0===e&&(e={}),this._forEachChild(function(n,r){n.reset(t[r],{onlySelf:!0,emitEvent:e.emitEvent})}),this.updateValueAndValidity(e),this._updatePristine(e),this._updateTouched(e)},e.prototype.getRawValue=function(){return this._reduceChildren({},function(t,e,n){return t[n]=e instanceof M?e.value:e.getRawValue(),t})},e.prototype._syncPendingControls=function(){var t=this._reduceChildren(!1,function(t,e){return!!e._syncPendingControls()||t});return t&&this.updateValueAndValidity({onlySelf:!0}),t},e.prototype._throwIfControlMissing=function(t){if(!Object.keys(this.controls).length)throw new Error("\n        There are no form controls registered with this group yet.  If you're using ngModel,\n        you may want to check next tick (e.g. use setTimeout).\n      ");if(!this.controls[t])throw new Error("Cannot find form control with name: "+t+".")},e.prototype._forEachChild=function(t){var e=this;Object.keys(this.controls).forEach(function(n){return t(e.controls[n],n)})},e.prototype._setUpControls=function(){var t=this;this._forEachChild(function(e){e.setParent(t),e._registerOnCollectionChange(t._onCollectionChange)})},e.prototype._updateValue=function(){this.value=this._reduceValue()},e.prototype._anyControls=function(t){var e=this,n=!1;return this._forEachChild(function(r,i){n=n||e.contains(i)&&t(r)}),n},e.prototype._reduceValue=function(){var t=this;return this._reduceChildren({},function(e,n,r){return(n.enabled||t.disabled)&&(e[r]=n.value),e})},e.prototype._reduceChildren=function(t,e){var n=t;return this._forEachChild(function(t,r){n=e(n,t,r)}),n},e.prototype._allControlsDisabled=function(){var t,e;try{for(var n=Object(r.e)(Object.keys(this.controls)),i=n.next();!i.done;i=n.next())if(this.controls[i.value].enabled)return!1}catch(e){t={error:e}}finally{try{i&&!i.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}return Object.keys(this.controls).length>0||this.disabled},e.prototype._checkAllValuesPresent=function(t){this._forEachChild(function(e,n){if(void 0===t[n])throw new Error("Must supply a value for form control with name: '"+n+"'.")})},e}(A),N=function(t){function e(e,n,r){var i=t.call(this,T(n),P(r,n))||this;return i.controls=e,i._initObservables(),i._setUpdateStrategy(n),i._setUpControls(),i.updateValueAndValidity({onlySelf:!0,emitEvent:!1}),i}return Object(r.b)(e,t),e.prototype.at=function(t){return this.controls[t]},e.prototype.push=function(t){this.controls.push(t),this._registerControl(t),this.updateValueAndValidity(),this._onCollectionChange()},e.prototype.insert=function(t,e){this.controls.splice(t,0,e),this._registerControl(e),this.updateValueAndValidity()},e.prototype.removeAt=function(t){this.controls[t]&&this.controls[t]._registerOnCollectionChange(function(){}),this.controls.splice(t,1),this.updateValueAndValidity()},e.prototype.setControl=function(t,e){this.controls[t]&&this.controls[t]._registerOnCollectionChange(function(){}),this.controls.splice(t,1),e&&(this.controls.splice(t,0,e),this._registerControl(e)),this.updateValueAndValidity(),this._onCollectionChange()},Object.defineProperty(e.prototype,"length",{get:function(){return this.controls.length},enumerable:!0,configurable:!0}),e.prototype.setValue=function(t,e){var n=this;void 0===e&&(e={}),this._checkAllValuesPresent(t),t.forEach(function(t,r){n._throwIfControlMissing(r),n.at(r).setValue(t,{onlySelf:!0,emitEvent:e.emitEvent})}),this.updateValueAndValidity(e)},e.prototype.patchValue=function(t,e){var n=this;void 0===e&&(e={}),t.forEach(function(t,r){n.at(r)&&n.at(r).patchValue(t,{onlySelf:!0,emitEvent:e.emitEvent})}),this.updateValueAndValidity(e)},e.prototype.reset=function(t,e){void 0===t&&(t=[]),void 0===e&&(e={}),this._forEachChild(function(n,r){n.reset(t[r],{onlySelf:!0,emitEvent:e.emitEvent})}),this.updateValueAndValidity(e),this._updatePristine(e),this._updateTouched(e)},e.prototype.getRawValue=function(){return this.controls.map(function(t){return t instanceof M?t.value:t.getRawValue()})},e.prototype._syncPendingControls=function(){var t=this.controls.reduce(function(t,e){return!!e._syncPendingControls()||t},!1);return t&&this.updateValueAndValidity({onlySelf:!0}),t},e.prototype._throwIfControlMissing=function(t){if(!this.controls.length)throw new Error("\n        There are no form controls registered with this array yet.  If you're using ngModel,\n        you may want to check next tick (e.g. use setTimeout).\n      ");if(!this.at(t))throw new Error("Cannot find form control at index "+t)},e.prototype._forEachChild=function(t){this.controls.forEach(function(e,n){t(e,n)})},e.prototype._updateValue=function(){var t=this;this.value=this.controls.filter(function(e){return e.enabled||t.disabled}).map(function(t){return t.value})},e.prototype._anyControls=function(t){return this.controls.some(function(e){return e.enabled&&t(e)})},e.prototype._setUpControls=function(){var t=this;this._forEachChild(function(e){return t._registerControl(e)})},e.prototype._checkAllValuesPresent=function(t){this._forEachChild(function(e,n){if(void 0===t[n])throw new Error("Must supply a value for form control at index: "+n+".")})},e.prototype._allControlsDisabled=function(){var t,e;try{for(var n=Object(r.e)(this.controls),i=n.next();!i.done;i=n.next())if(i.value.enabled)return!1}catch(e){t={error:e}}finally{try{i&&!i.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}return this.controls.length>0||this.disabled},e.prototype._registerControl=function(t){t.setParent(this),t._registerOnCollectionChange(this._onCollectionChange)},e}(A),L=Promise.resolve(null),F=function(t){function e(e,n){var r=t.call(this)||this;return r.submitted=!1,r._directives=[],r.ngSubmit=new i.n,r.form=new D({},R(e),j(n)),r}return Object(r.b)(e,t),e.prototype.ngAfterViewInit=function(){this._setUpdateStrategy()},Object.defineProperty(e.prototype,"formDirective",{get:function(){return this},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"control",{get:function(){return this.form},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"path",{get:function(){return[]},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"controls",{get:function(){return this.form.controls},enumerable:!0,configurable:!0}),e.prototype.addControl=function(t){var e=this;L.then(function(){var n=e._findContainer(t.path);t.control=n.registerControl(t.name,t.control),w(t.control,t),t.control.updateValueAndValidity({emitEvent:!1}),e._directives.push(t)})},e.prototype.getControl=function(t){return this.form.get(t.path)},e.prototype.removeControl=function(t){var e=this;L.then(function(){var n=e._findContainer(t.path);n&&n.removeControl(t.name),E(e._directives,t)})},e.prototype.addFormGroup=function(t){var e=this;L.then(function(){var n=e._findContainer(t.path),r=new D({});S(r,t),n.registerControl(t.name,r),r.updateValueAndValidity({emitEvent:!1})})},e.prototype.removeFormGroup=function(t){var e=this;L.then(function(){var n=e._findContainer(t.path);n&&n.removeControl(t.name)})},e.prototype.getFormGroup=function(t){return this.form.get(t.path)},e.prototype.updateModel=function(t,e){var n=this;L.then(function(){n.form.get(t.path).setValue(e)})},e.prototype.setValue=function(t){this.control.setValue(t)},e.prototype.onSubmit=function(t){return this.submitted=!0,O(this.form,this._directives),this.ngSubmit.emit(t),!1},e.prototype.onReset=function(){this.resetForm()},e.prototype.resetForm=function(t){void 0===t&&(t=void 0),this.form.reset(t),this.submitted=!1},e.prototype._setUpdateStrategy=function(){this.options&&null!=this.options.updateOn&&(this.form._updateOn=this.options.updateOn)},e.prototype._findContainer=function(t){return t.pop(),t.length?this.form.get(t):this.form},e}(u),z=function(t){function e(e,n){var r=t.call(this)||this;return r._validators=e,r._asyncValidators=n,r.submitted=!1,r.directives=[],r.form=null,r.ngSubmit=new i.n,r}return Object(r.b)(e,t),e.prototype.ngOnChanges=function(t){this._checkFormPresent(),t.hasOwnProperty("form")&&(this._updateValidators(),this._updateDomValue(),this._updateRegistrations())},Object.defineProperty(e.prototype,"formDirective",{get:function(){return this},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"control",{get:function(){return this.form},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"path",{get:function(){return[]},enumerable:!0,configurable:!0}),e.prototype.addControl=function(t){var e=this.form.get(t.path);return w(e,t),e.updateValueAndValidity({emitEvent:!1}),this.directives.push(t),e},e.prototype.getControl=function(t){return this.form.get(t.path)},e.prototype.removeControl=function(t){E(this.directives,t)},e.prototype.addFormGroup=function(t){var e=this.form.get(t.path);S(e,t),e.updateValueAndValidity({emitEvent:!1})},e.prototype.removeFormGroup=function(t){},e.prototype.getFormGroup=function(t){return this.form.get(t.path)},e.prototype.addFormArray=function(t){var e=this.form.get(t.path);S(e,t),e.updateValueAndValidity({emitEvent:!1})},e.prototype.removeFormArray=function(t){},e.prototype.getFormArray=function(t){return this.form.get(t.path)},e.prototype.updateModel=function(t,e){this.form.get(t.path).setValue(e)},e.prototype.onSubmit=function(t){return this.submitted=!0,O(this.form,this.directives),this.ngSubmit.emit(t),!1},e.prototype.onReset=function(){this.resetForm()},e.prototype.resetForm=function(t){void 0===t&&(t=void 0),this.form.reset(t),this.submitted=!1},e.prototype._updateDomValue=function(){var t=this;this.directives.forEach(function(e){var n=t.form.get(e.path);e.control!==n&&(function(t,e){e.valueAccessor.registerOnChange(function(){return C(e)}),e.valueAccessor.registerOnTouched(function(){return C(e)}),e._rawValidators.forEach(function(t){t.registerOnValidatorChange&&t.registerOnValidatorChange(null)}),e._rawAsyncValidators.forEach(function(t){t.registerOnValidatorChange&&t.registerOnValidatorChange(null)}),t&&t._clearChangeFns()}(e.control,e),n&&w(n,e),e.control=n)}),this.form._updateTreeValidity({emitEvent:!1})},e.prototype._updateRegistrations=function(){var t=this;this.form._registerOnCollectionChange(function(){return t._updateDomValue()}),this._oldForm&&this._oldForm._registerOnCollectionChange(function(){}),this._oldForm=this.form},e.prototype._updateValidators=function(){var t=R(this._validators);this.form.validator=h.compose([this.form.validator,t]);var e=j(this._asyncValidators);this.form.asyncValidator=h.composeAsync([this.form.asyncValidator,e])},e.prototype._checkFormPresent=function(){this.form||_.missingFormException()},e}(u)},h9Dq:function(t,e,n){"use strict";var r=n("mrSG"),i=function(t){function e(e,n){return t.call(this)||this}return r.b(e,t),e.prototype.schedule=function(t,e){return void 0===e&&(e=0),this},e}(n("pugT").a);n.d(e,"a",function(){return o});var o=function(t){function e(e,n){var r=t.call(this,e,n)||this;return r.scheduler=e,r.work=n,r.pending=!1,r}return r.b(e,t),e.prototype.schedule=function(t,e){if(void 0===e&&(e=0),this.closed)return this;this.state=t;var n=this.id,r=this.scheduler;return null!=n&&(this.id=this.recycleAsyncId(r,n,e)),this.pending=!0,this.delay=e,this.id=this.id||this.requestAsyncId(r,this.id,e),this},e.prototype.requestAsyncId=function(t,e,n){return void 0===n&&(n=0),setInterval(t.flush.bind(t,this),n)},e.prototype.recycleAsyncId=function(t,e,n){if(void 0===n&&(n=0),null!==n&&this.delay===n&&!1===this.pending)return e;clearInterval(e)},e.prototype.execute=function(t,e){if(this.closed)return new Error("executing a cancelled action");this.pending=!1;var n=this._execute(t,e);if(n)return n;!1===this.pending&&null!=this.id&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))},e.prototype._execute=function(t,e){var n=!1,r=void 0;try{this.work(t)}catch(t){n=!0,r=!!t&&t||new Error(t)}if(n)return this.unsubscribe(),r},e.prototype._unsubscribe=function(){var t=this.id,e=this.scheduler,n=e.actions,r=n.indexOf(this);this.work=null,this.state=null,this.pending=!1,this.scheduler=null,-1!==r&&n.splice(r,1),null!=t&&(this.id=this.recycleAsyncId(e,t,null)),this.delay=null},e}(i)},hUWP:function(t,e,n){"use strict";n.d(e,"a",function(){return r}),n("mrSG"),n("CcnG"),n("Ip0R"),n("OzfB");var r=function(){}},iLxQ:function(t,e,n){"use strict";n.d(e,"a",function(){return i});var r=!1,i={Promise:void 0,set useDeprecatedSynchronousErrorHandling(t){r=t},get useDeprecatedSynchronousErrorHandling(){return r}}},ihYY:function(t,e,n){"use strict";n.d(e,"b",function(){return r}),n.d(e,"c",function(){return i}),n.d(e,"a",function(){return o}),n.d(e,"e",function(){return a}),n.d(e,"f",function(){return d}),n.d(e,"g",function(){return u}),n.d(e,"h",function(){return p}),n.d(e,"i",function(){return s}),n.d(e,"j",function(){return h}),n.d(e,"k",function(){return c}),n.d(e,"l",function(){return f}),n.d(e,"m",function(){return l}),n.d(e,"d",function(){return g}),n.d(e,"o",function(){return y}),n.d(e,"n",function(){return b});var r=function(){},i=function(){},o="*";function l(t,e){return{type:7,name:t,definitions:e,options:{}}}function a(t,e){return void 0===e&&(e=null),{type:4,styles:e,timings:t}}function u(t,e){return void 0===e&&(e=null),{type:3,steps:t,options:e}}function s(t,e){return void 0===e&&(e=null),{type:2,steps:t,options:e}}function c(t){return{type:6,styles:t,offset:null}}function h(t,e,n){return{type:0,name:t,styles:e,options:n}}function f(t,e,n){return void 0===n&&(n=null),{type:1,expr:t,animation:e,options:n}}function d(t){return void 0===t&&(t=null),{type:9,options:t}}function p(t,e,n){return void 0===n&&(n=null),{type:11,selector:t,animation:e,options:n}}function m(t){Promise.resolve(null).then(t)}var g=function(){function t(t,e){void 0===t&&(t=0),void 0===e&&(e=0),this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._started=!1,this._destroyed=!1,this._finished=!1,this.parentPlayer=null,this.totalTime=t+e}return t.prototype._onFinish=function(){this._finished||(this._finished=!0,this._onDoneFns.forEach(function(t){return t()}),this._onDoneFns=[])},t.prototype.onStart=function(t){this._onStartFns.push(t)},t.prototype.onDone=function(t){this._onDoneFns.push(t)},t.prototype.onDestroy=function(t){this._onDestroyFns.push(t)},t.prototype.hasStarted=function(){return this._started},t.prototype.init=function(){},t.prototype.play=function(){this.hasStarted()||(this._onStart(),this.triggerMicrotask()),this._started=!0},t.prototype.triggerMicrotask=function(){var t=this;m(function(){return t._onFinish()})},t.prototype._onStart=function(){this._onStartFns.forEach(function(t){return t()}),this._onStartFns=[]},t.prototype.pause=function(){},t.prototype.restart=function(){},t.prototype.finish=function(){this._onFinish()},t.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.hasStarted()||this._onStart(),this.finish(),this._onDestroyFns.forEach(function(t){return t()}),this._onDestroyFns=[])},t.prototype.reset=function(){},t.prototype.setPosition=function(t){},t.prototype.getPosition=function(){return 0},t.prototype.triggerCallback=function(t){var e="start"==t?this._onStartFns:this._onDoneFns;e.forEach(function(t){return t()}),e.length=0},t}(),b=function(){function t(t){var e=this;this._onDoneFns=[],this._onStartFns=[],this._finished=!1,this._started=!1,this._destroyed=!1,this._onDestroyFns=[],this.parentPlayer=null,this.totalTime=0,this.players=t;var n=0,r=0,i=0,o=this.players.length;0==o?m(function(){return e._onFinish()}):this.players.forEach(function(t){t.onDone(function(){++n==o&&e._onFinish()}),t.onDestroy(function(){++r==o&&e._onDestroy()}),t.onStart(function(){++i==o&&e._onStart()})}),this.totalTime=this.players.reduce(function(t,e){return Math.max(t,e.totalTime)},0)}return t.prototype._onFinish=function(){this._finished||(this._finished=!0,this._onDoneFns.forEach(function(t){return t()}),this._onDoneFns=[])},t.prototype.init=function(){this.players.forEach(function(t){return t.init()})},t.prototype.onStart=function(t){this._onStartFns.push(t)},t.prototype._onStart=function(){this.hasStarted()||(this._started=!0,this._onStartFns.forEach(function(t){return t()}),this._onStartFns=[])},t.prototype.onDone=function(t){this._onDoneFns.push(t)},t.prototype.onDestroy=function(t){this._onDestroyFns.push(t)},t.prototype.hasStarted=function(){return this._started},t.prototype.play=function(){this.parentPlayer||this.init(),this._onStart(),this.players.forEach(function(t){return t.play()})},t.prototype.pause=function(){this.players.forEach(function(t){return t.pause()})},t.prototype.restart=function(){this.players.forEach(function(t){return t.restart()})},t.prototype.finish=function(){this._onFinish(),this.players.forEach(function(t){return t.finish()})},t.prototype.destroy=function(){this._onDestroy()},t.prototype._onDestroy=function(){this._destroyed||(this._destroyed=!0,this._onFinish(),this.players.forEach(function(t){return t.destroy()}),this._onDestroyFns.forEach(function(t){return t()}),this._onDestroyFns=[])},t.prototype.reset=function(){this.players.forEach(function(t){return t.reset()}),this._destroyed=!1,this._finished=!1,this._started=!1},t.prototype.setPosition=function(t){var e=t*this.totalTime;this.players.forEach(function(t){var n=t.totalTime?Math.min(1,e/t.totalTime):1;t.setPosition(n)})},t.prototype.getPosition=function(){var t=0;return this.players.forEach(function(e){var n=e.getPosition();t=Math.min(n,t)}),t},t.prototype.beforeDestroy=function(){this.players.forEach(function(t){t.beforeDestroy&&t.beforeDestroy()})},t.prototype.triggerCallback=function(t){var e="start"==t?this._onStartFns:this._onDoneFns;e.forEach(function(t){return t()}),e.length=0},t}(),y="!"},isby:function(t,e,n){"use strict";n.d(e,"a",function(){return r});var r=Array.isArray||function(t){return t&&"number"==typeof t.length}},jlZm:function(t,e,n){"use strict";n.d(e,"b",function(){return _}),n.d(e,"a",function(){return p}),n.d(e,"c",function(){return g}),n.d(e,"e",function(){return b}),n.d(e,"d",function(){return y}),n.d(e,"f",function(){return v});var r=n("mrSG"),i=n("n6gG"),o=n("YhbO"),l=(n("ihYY"),n("4c35")),a=n("K9Ia"),u=n("pugT"),s=n("p0ib"),c=n("p0Sj"),h=n("VnD/"),f=n("t9fZ"),d=n("YSh2"),p=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._hideToggle=!1,e.displayMode="default",e}return Object(r.b)(e,t),Object.defineProperty(e.prototype,"hideToggle",{get:function(){return this._hideToggle},set:function(t){this._hideToggle=Object(i.c)(t)},enumerable:!0,configurable:!0}),e}(o.a),m=0,g=function(t){function e(e,n,r,i){var o=t.call(this,e,n,r)||this;return o._viewContainerRef=i,o._hideToggle=!1,o._inputChanges=new a.a,o._headerId="mat-expansion-panel-header-"+m++,o.accordion=e,o}return Object(r.b)(e,t),Object.defineProperty(e.prototype,"hideToggle",{get:function(){return this._hideToggle},set:function(t){this._hideToggle=Object(i.c)(t)},enumerable:!0,configurable:!0}),e.prototype._getHideToggle=function(){return this.accordion?this.accordion.hideToggle:this.hideToggle},e.prototype._hasSpacing=function(){return!!this.accordion&&"default"===(this.expanded?this.accordion.displayMode:this._getExpandedState())},e.prototype._getExpandedState=function(){return this.expanded?"expanded":"collapsed"},e.prototype.ngAfterContentInit=function(){var t=this;this._lazyContent&&this.opened.pipe(Object(c.a)(null),Object(h.a)(function(){return t.expanded&&!t._portal}),Object(f.a)(1)).subscribe(function(){t._portal=new l.h(t._lazyContent._template,t._viewContainerRef)})},e.prototype.ngOnChanges=function(t){this._inputChanges.next(t)},e.prototype.ngOnDestroy=function(){t.prototype.ngOnDestroy.call(this),this._inputChanges.complete()},e.prototype._bodyAnimation=function(t){var e=t.element.classList,n=t.phaseName,r=t.toState;"done"===n&&"expanded"===r?e.add("mat-expanded"):"start"===n&&"collapsed"===r&&e.remove("mat-expanded")},e}(o.b),b=function(){function t(t,e,n,r){var i=this;this.panel=t,this._element=e,this._focusMonitor=n,this._changeDetectorRef=r,this._parentChangeSubscription=u.a.EMPTY,this._parentChangeSubscription=Object(s.a)(t.opened,t.closed,t._inputChanges.pipe(Object(h.a)(function(t){return!(!t.hideToggle&&!t.disabled)}))).subscribe(function(){return i._changeDetectorRef.markForCheck()}),n.monitor(e.nativeElement)}return t.prototype._toggle=function(){this.panel.toggle()},t.prototype._isExpanded=function(){return this.panel.expanded},t.prototype._getExpandedState=function(){return this.panel._getExpandedState()},t.prototype._getPanelId=function(){return this.panel.id},t.prototype._showToggle=function(){return!this.panel.hideToggle&&!this.panel.disabled},t.prototype._keydown=function(t){switch(t.keyCode){case d.l:case d.f:t.preventDefault(),this._toggle();break;default:return}},t.prototype.ngOnDestroy=function(){this._parentChangeSubscription.unsubscribe(),this._focusMonitor.stopMonitoring(this._element.nativeElement)},t}(),y=function(){},v=function(){},_=function(){}},kERW:function(t,e,n){"use strict";n.d(e,"a",function(){return a});var r=n("6blF"),i=n("isby"),o=n("2Bdj"),l=n("67Y/");function a(t,e,n){return n?a(t,e).pipe(Object(l.a)(function(t){return Object(i.a)(t)?n.apply(void 0,t):n(t)})):new r.a(function(n){var r,i=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return n.next(1===t.length?t[0]:t)};try{r=t(i)}catch(t){return void n.error(t)}if(Object(o.a)(e))return function(){return e(i,r)}})}},lLAP:function(t,e,n){"use strict";n.d(e,"b",function(){return b}),n.d(e,"c",function(){return y}),n.d(e,"e",function(){return S}),n.d(e,"d",function(){return C}),n.d(e,"f",function(){return k}),n.d(e,"a",function(){return R});var r=n("Ip0R"),i=n("CcnG"),o=n("K9Ia"),l=n("pugT"),a=n("F/XL"),u=n("YSh2"),s=n("xMyE"),c=n("Gi3i"),h=n("VnD/"),f=n("67Y/"),d=n("t9fZ"),p=n("mrSG"),m=n("dWZg");n("n6gG");var g=function(){function t(t){var e=this;this._items=t,this._activeItemIndex=-1,this._wrap=!1,this._letterKeyStream=new o.a,this._typeaheadSubscription=l.a.EMPTY,this._vertical=!0,this._skipPredicateFn=function(t){return t.disabled},this._pressedLetters=[],this.tabOut=new o.a,this.change=new o.a,t instanceof i.D&&t.changes.subscribe(function(t){if(e._activeItem){var n=t.toArray().indexOf(e._activeItem);n>-1&&n!==e._activeItemIndex&&(e._activeItemIndex=n)}})}return t.prototype.skipPredicate=function(t){return this._skipPredicateFn=t,this},t.prototype.withWrap=function(t){return void 0===t&&(t=!0),this._wrap=t,this},t.prototype.withVerticalOrientation=function(t){return void 0===t&&(t=!0),this._vertical=t,this},t.prototype.withHorizontalOrientation=function(t){return this._horizontal=t,this},t.prototype.withTypeAhead=function(t){var e=this;if(void 0===t&&(t=200),this._items.length&&this._items.some(function(t){return"function"!=typeof t.getLabel}))throw Error("ListKeyManager items in typeahead mode must implement the `getLabel` method.");return this._typeaheadSubscription.unsubscribe(),this._typeaheadSubscription=this._letterKeyStream.pipe(Object(s.a)(function(t){return e._pressedLetters.push(t)}),Object(c.a)(t),Object(h.a)(function(){return e._pressedLetters.length>0}),Object(f.a)(function(){return e._pressedLetters.join("")})).subscribe(function(t){for(var n=e._getItemsArray(),r=1;r<n.length+1;r++){var i=(e._activeItemIndex+r)%n.length,o=n[i];if(!e._skipPredicateFn(o)&&0===o.getLabel().toUpperCase().trim().indexOf(t)){e.setActiveItem(i);break}}e._pressedLetters=[]}),this},t.prototype.setActiveItem=function(t){var e=this._activeItemIndex;this.updateActiveItem(t),this._activeItemIndex!==e&&this.change.next(this._activeItemIndex)},t.prototype.onKeydown=function(t){var e=t.keyCode;switch(e){case u.m:return void this.tabOut.next();case u.d:if(this._vertical){this.setNextItemActive();break}return;case u.n:if(this._vertical){this.setPreviousItemActive();break}return;case u.k:if("ltr"===this._horizontal){this.setNextItemActive();break}if("rtl"===this._horizontal){this.setPreviousItemActive();break}return;case u.i:if("ltr"===this._horizontal){this.setPreviousItemActive();break}if("rtl"===this._horizontal){this.setNextItemActive();break}return;default:return void(t.key&&1===t.key.length?this._letterKeyStream.next(t.key.toLocaleUpperCase()):(e>=u.a&&e<=u.o||e>=u.p&&e<=u.j)&&this._letterKeyStream.next(String.fromCharCode(e)))}this._pressedLetters=[],t.preventDefault()},Object.defineProperty(t.prototype,"activeItemIndex",{get:function(){return this._activeItemIndex},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"activeItem",{get:function(){return this._activeItem},enumerable:!0,configurable:!0}),t.prototype.setFirstItemActive=function(){this._setActiveItemByIndex(0,1)},t.prototype.setLastItemActive=function(){this._setActiveItemByIndex(this._items.length-1,-1)},t.prototype.setNextItemActive=function(){this._activeItemIndex<0?this.setFirstItemActive():this._setActiveItemByDelta(1)},t.prototype.setPreviousItemActive=function(){this._activeItemIndex<0&&this._wrap?this.setLastItemActive():this._setActiveItemByDelta(-1)},t.prototype.updateActiveItem=function(t){var e=this._getItemsArray(),n="number"==typeof t?t:e.indexOf(t);this._activeItemIndex=n,this._activeItem=e[n]},t.prototype.updateActiveItemIndex=function(t){this.updateActiveItem(t)},t.prototype._setActiveItemByDelta=function(t){this._wrap?this._setActiveInWrapMode(t):this._setActiveInDefaultMode(t)},t.prototype._setActiveInWrapMode=function(t){for(var e=this._getItemsArray(),n=1;n<=e.length;n++){var r=(this._activeItemIndex+t*n+e.length)%e.length;if(!this._skipPredicateFn(e[r]))return void this.setActiveItem(r)}},t.prototype._setActiveInDefaultMode=function(t){this._setActiveItemByIndex(this._activeItemIndex+t,t)},t.prototype._setActiveItemByIndex=function(t,e){var n=this._getItemsArray();if(n[t]){for(;this._skipPredicateFn(n[t]);)if(!n[t+=e])return;this.setActiveItem(t)}},t.prototype._getItemsArray=function(){return this._items instanceof i.D?this._items.toArray():this._items},t}(),b=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Object(p.b)(e,t),e.prototype.setActiveItem=function(e){this.activeItem&&this.activeItem.setInactiveStyles(),t.prototype.setActiveItem.call(this,e),this.activeItem&&this.activeItem.setActiveStyles()},e}(g),y=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._origin="program",e}return Object(p.b)(e,t),e.prototype.setFocusOrigin=function(t){return this._origin=t,this},e.prototype.setActiveItem=function(e){t.prototype.setActiveItem.call(this,e),this.activeItem&&this.activeItem.focus(this._origin)},e}(g),v=function(){function t(t){this._platform=t}return t.prototype.isDisabled=function(t){return t.hasAttribute("disabled")},t.prototype.isVisible=function(t){return function(t){return!!(t.offsetWidth||t.offsetHeight||"function"==typeof t.getClientRects&&t.getClientRects().length)}(t)&&"visible"===getComputedStyle(t).visibility},t.prototype.isTabbable=function(t){if(!this._platform.isBrowser)return!1;var e=function(t){try{return t.frameElement}catch(t){return null}}(t.ownerDocument.defaultView||window);if(e){var n=e&&e.nodeName.toLowerCase();if(-1===w(e))return!1;if((this._platform.BLINK||this._platform.WEBKIT)&&"object"===n)return!1;if((this._platform.BLINK||this._platform.WEBKIT)&&!this.isVisible(e))return!1}var r=t.nodeName.toLowerCase(),i=w(t);if(t.hasAttribute("contenteditable"))return-1!==i;if("iframe"===r)return!1;if("audio"===r){if(!t.hasAttribute("controls"))return!1;if(this._platform.BLINK)return!0}if("video"===r){if(!t.hasAttribute("controls")&&this._platform.TRIDENT)return!1;if(this._platform.BLINK||this._platform.FIREFOX)return!0}return("object"!==r||!this._platform.BLINK&&!this._platform.WEBKIT)&&!(this._platform.WEBKIT&&this._platform.IOS&&!function(t){var e=t.nodeName.toLowerCase(),n="input"===e&&t.type;return"text"===n||"password"===n||"select"===e||"textarea"===e}(t))&&t.tabIndex>=0},t.prototype.isFocusable=function(t){return function(t){return!function(t){return function(t){return"input"==t.nodeName.toLowerCase()}(t)&&"hidden"==t.type}(t)&&(function(t){var e=t.nodeName.toLowerCase();return"input"===e||"select"===e||"button"===e||"textarea"===e}(t)||function(t){return function(t){return"a"==t.nodeName.toLowerCase()}(t)&&t.hasAttribute("href")}(t)||t.hasAttribute("contenteditable")||_(t))}(t)&&!this.isDisabled(t)&&this.isVisible(t)},t.ngInjectableDef=Object(i.U)({factory:function(){return new t(Object(i.Y)(m.a))},token:t,providedIn:"root"}),t}();function _(t){if(!t.hasAttribute("tabindex")||void 0===t.tabIndex)return!1;var e=t.getAttribute("tabindex");return"-32768"!=e&&!(!e||isNaN(parseInt(e,10)))}function w(t){if(!_(t))return null;var e=parseInt(t.getAttribute("tabindex")||"",10);return isNaN(e)?-1:e}var x=function(){function t(t,e,n,r,i){void 0===i&&(i=!1),this._element=t,this._checker=e,this._ngZone=n,this._document=r,this._hasAttached=!1,this._enabled=!0,i||this.attachAnchors()}return Object.defineProperty(t.prototype,"enabled",{get:function(){return this._enabled},set:function(t){this._enabled=t,this._startAnchor&&this._endAnchor&&(this._startAnchor.tabIndex=this._endAnchor.tabIndex=this._enabled?0:-1)},enumerable:!0,configurable:!0}),t.prototype.destroy=function(){this._startAnchor&&this._startAnchor.parentNode&&this._startAnchor.parentNode.removeChild(this._startAnchor),this._endAnchor&&this._endAnchor.parentNode&&this._endAnchor.parentNode.removeChild(this._endAnchor),this._startAnchor=this._endAnchor=null},t.prototype.attachAnchors=function(){var t=this;return!!this._hasAttached||(this._ngZone.runOutsideAngular(function(){t._startAnchor||(t._startAnchor=t._createAnchor(),t._startAnchor.addEventListener("focus",function(){return t.focusLastTabbableElement()})),t._endAnchor||(t._endAnchor=t._createAnchor(),t._endAnchor.addEventListener("focus",function(){return t.focusFirstTabbableElement()}))}),this._element.parentNode&&(this._element.parentNode.insertBefore(this._startAnchor,this._element),this._element.parentNode.insertBefore(this._endAnchor,this._element.nextSibling),this._hasAttached=!0),this._hasAttached)},t.prototype.focusInitialElementWhenReady=function(){var t=this;return new Promise(function(e){t._executeOnStable(function(){return e(t.focusInitialElement())})})},t.prototype.focusFirstTabbableElementWhenReady=function(){var t=this;return new Promise(function(e){t._executeOnStable(function(){return e(t.focusFirstTabbableElement())})})},t.prototype.focusLastTabbableElementWhenReady=function(){var t=this;return new Promise(function(e){t._executeOnStable(function(){return e(t.focusLastTabbableElement())})})},t.prototype._getRegionBoundary=function(t){for(var e=this._element.querySelectorAll("[cdk-focus-region-"+t+"], [cdkFocusRegion"+t+"], [cdk-focus-"+t+"]"),n=0;n<e.length;n++)e[n].hasAttribute("cdk-focus-"+t)?console.warn("Found use of deprecated attribute 'cdk-focus-"+t+"', use 'cdkFocusRegion"+t+"' instead. The deprecated attribute will be removed in 7.0.0.",e[n]):e[n].hasAttribute("cdk-focus-region-"+t)&&console.warn("Found use of deprecated attribute 'cdk-focus-region-"+t+"', use 'cdkFocusRegion"+t+"' instead. The deprecated attribute will be removed in 7.0.0.",e[n]);return"start"==t?e.length?e[0]:this._getFirstTabbableElement(this._element):e.length?e[e.length-1]:this._getLastTabbableElement(this._element)},t.prototype.focusInitialElement=function(){var t=this._element.querySelector("[cdk-focus-initial], [cdkFocusInitial]");return t?(t.hasAttribute("cdk-focus-initial")&&console.warn("Found use of deprecated attribute 'cdk-focus-initial', use 'cdkFocusInitial' instead. The deprecated attribute will be removed in 7.0.0",t),t.focus(),!0):this.focusFirstTabbableElement()},t.prototype.focusFirstTabbableElement=function(){var t=this._getRegionBoundary("start");return t&&t.focus(),!!t},t.prototype.focusLastTabbableElement=function(){var t=this._getRegionBoundary("end");return t&&t.focus(),!!t},t.prototype.hasAttached=function(){return this._hasAttached},t.prototype._getFirstTabbableElement=function(t){if(this._checker.isFocusable(t)&&this._checker.isTabbable(t))return t;for(var e=t.children||t.childNodes,n=0;n<e.length;n++){var r=e[n].nodeType===this._document.ELEMENT_NODE?this._getFirstTabbableElement(e[n]):null;if(r)return r}return null},t.prototype._getLastTabbableElement=function(t){if(this._checker.isFocusable(t)&&this._checker.isTabbable(t))return t;for(var e=t.children||t.childNodes,n=e.length-1;n>=0;n--){var r=e[n].nodeType===this._document.ELEMENT_NODE?this._getLastTabbableElement(e[n]):null;if(r)return r}return null},t.prototype._createAnchor=function(){var t=this._document.createElement("div");return t.tabIndex=this._enabled?0:-1,t.classList.add("cdk-visually-hidden"),t.classList.add("cdk-focus-trap-anchor"),t},t.prototype._executeOnStable=function(t){this._ngZone.isStable?t():this._ngZone.onStable.asObservable().pipe(Object(d.a)(1)).subscribe(t)},t}(),S=function(){function t(t,e,n){this._checker=t,this._ngZone=e,this._document=n}return t.prototype.create=function(t,e){return void 0===e&&(e=!1),new x(t,this._checker,this._ngZone,this._document,e)},t.ngInjectableDef=Object(i.U)({factory:function(){return new t(Object(i.Y)(v),Object(i.Y)(i.z),Object(i.Y)(r.c))},token:t,providedIn:"root"}),t}(),C=function(){function t(t,e){this._ngZone=t,this._platform=e,this._origin=null,this._windowFocused=!1,this._elementInfo=new Map,this._unregisterGlobalListeners=function(){},this._monitoredElementCount=0}return t.prototype.monitor=function(t,e){var n=this;if(void 0===e&&(e=!1),!this._platform.isBrowser)return Object(a.a)(null);if(this._elementInfo.has(t)){var r=this._elementInfo.get(t);return r.checkChildren=e,r.subject.asObservable()}var i={unlisten:function(){},checkChildren:e,subject:new o.a};this._elementInfo.set(t,i),this._incrementMonitoredElementCount();var l=function(e){return n._onFocus(e,t)},u=function(e){return n._onBlur(e,t)};return this._ngZone.runOutsideAngular(function(){t.addEventListener("focus",l,!0),t.addEventListener("blur",u,!0)}),i.unlisten=function(){t.removeEventListener("focus",l,!0),t.removeEventListener("blur",u,!0)},i.subject.asObservable()},t.prototype.stopMonitoring=function(t){var e=this._elementInfo.get(t);e&&(e.unlisten(),e.subject.complete(),this._setClasses(t),this._elementInfo.delete(t),this._decrementMonitoredElementCount())},t.prototype.focusVia=function(t,e,n){this._setOriginForCurrentEventQueue(e),"function"==typeof t.focus&&t.focus(n)},t.prototype.ngOnDestroy=function(){var t=this;this._elementInfo.forEach(function(e,n){return t.stopMonitoring(n)})},t.prototype._registerGlobalListeners=function(){var t=this;if(this._platform.isBrowser){var e=function(){t._lastTouchTarget=null,t._setOriginForCurrentEventQueue("keyboard")},n=function(){t._lastTouchTarget||t._setOriginForCurrentEventQueue("mouse")},r=function(e){null!=t._touchTimeoutId&&clearTimeout(t._touchTimeoutId),t._lastTouchTarget=e.target,t._touchTimeoutId=setTimeout(function(){return t._lastTouchTarget=null},650)},i=function(){t._windowFocused=!0,t._windowFocusTimeoutId=setTimeout(function(){return t._windowFocused=!1})};this._ngZone.runOutsideAngular(function(){document.addEventListener("keydown",e,!0),document.addEventListener("mousedown",n,!0),document.addEventListener("touchstart",r,!Object(m.d)()||{passive:!0,capture:!0}),window.addEventListener("focus",i)}),this._unregisterGlobalListeners=function(){document.removeEventListener("keydown",e,!0),document.removeEventListener("mousedown",n,!0),document.removeEventListener("touchstart",r,!Object(m.d)()||{passive:!0,capture:!0}),window.removeEventListener("focus",i),clearTimeout(t._windowFocusTimeoutId),clearTimeout(t._touchTimeoutId),clearTimeout(t._originTimeoutId)}}},t.prototype._toggleClass=function(t,e,n){n?t.classList.add(e):t.classList.remove(e)},t.prototype._setClasses=function(t,e){this._elementInfo.get(t)&&(this._toggleClass(t,"cdk-focused",!!e),this._toggleClass(t,"cdk-touch-focused","touch"===e),this._toggleClass(t,"cdk-keyboard-focused","keyboard"===e),this._toggleClass(t,"cdk-mouse-focused","mouse"===e),this._toggleClass(t,"cdk-program-focused","program"===e))},t.prototype._setOriginForCurrentEventQueue=function(t){var e=this;this._ngZone.runOutsideAngular(function(){e._origin=t,e._originTimeoutId=setTimeout(function(){return e._origin=null},1)})},t.prototype._wasCausedByTouch=function(t){var e=t.target;return this._lastTouchTarget instanceof Node&&e instanceof Node&&(e===this._lastTouchTarget||e.contains(this._lastTouchTarget))},t.prototype._onFocus=function(t,e){var n=this._elementInfo.get(e);if(n&&(n.checkChildren||e===t.target)){var r=this._origin;r||(r=this._windowFocused&&this._lastFocusOrigin?this._lastFocusOrigin:this._wasCausedByTouch(t)?"touch":"program"),this._setClasses(e,r),this._emitOrigin(n.subject,r),this._lastFocusOrigin=r}},t.prototype._onBlur=function(t,e){var n=this._elementInfo.get(e);!n||n.checkChildren&&t.relatedTarget instanceof Node&&e.contains(t.relatedTarget)||(this._setClasses(e),this._emitOrigin(n.subject,null))},t.prototype._emitOrigin=function(t,e){this._ngZone.run(function(){return t.next(e)})},t.prototype._incrementMonitoredElementCount=function(){1==++this._monitoredElementCount&&this._registerGlobalListeners()},t.prototype._decrementMonitoredElementCount=function(){--this._monitoredElementCount||(this._unregisterGlobalListeners(),this._unregisterGlobalListeners=function(){})},t.ngInjectableDef=Object(i.U)({factory:function(){return new t(Object(i.Y)(i.z),Object(i.Y)(m.a))},token:t,providedIn:"root"}),t}();function k(t){return 0===t.buttons}var R=function(){}},lYZG:function(t,e,n){"use strict";n.d(e,"a",function(){return l});var r=n("6blF"),i=n("0/uQ"),o=n("G5J1");function l(t){return new r.a(function(e){var n;try{n=t()}catch(t){return void e.error(t)}return(n?Object(i.a)(n):Object(o.b)()).subscribe(e)})}},lzlj:function(t,e,n){"use strict";n.d(e,"a",function(){return i}),n.d(e,"d",function(){return o}),n.d(e,"b",function(){return l}),n.d(e,"c",function(){return a});var r=n("CcnG"),i=(n("FVSy"),n("Fzqc"),n("Wf4p"),r.Pa({encapsulation:2,styles:[".mat-card{transition:box-shadow 280ms cubic-bezier(.4,0,.2,1);display:block;position:relative;padding:24px;border-radius:2px}.mat-card:not([class*=mat-elevation-z]){box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.mat-card .mat-divider-horizontal{position:absolute;left:0;width:100%}[dir=rtl] .mat-card .mat-divider-horizontal{left:auto;right:0}.mat-card .mat-divider-horizontal.mat-divider-inset{position:static;margin:0}[dir=rtl] .mat-card .mat-divider-horizontal.mat-divider-inset{margin-right:0}.mat-card.mat-card-flat{box-shadow:none}@media screen and (-ms-high-contrast:active){.mat-card{outline:solid 1px}}.mat-card-actions,.mat-card-content,.mat-card-subtitle,.mat-card-title{display:block;margin-bottom:16px}.mat-card-actions{margin-left:-16px;margin-right:-16px;padding:8px 0}.mat-card-actions-align-end{display:flex;justify-content:flex-end}.mat-card-image{width:calc(100% + 48px);margin:0 -24px 16px -24px}.mat-card-xl-image{width:240px;height:240px;margin:-8px}.mat-card-footer{display:block;margin:0 -24px -24px -24px}.mat-card-actions .mat-button,.mat-card-actions .mat-raised-button{margin:0 4px}.mat-card-header{display:flex;flex-direction:row}.mat-card-header-text{margin:0 8px}.mat-card-avatar{height:40px;width:40px;border-radius:50%;flex-shrink:0}.mat-card-lg-image,.mat-card-md-image,.mat-card-sm-image{margin:-8px 0}.mat-card-title-group{display:flex;justify-content:space-between;margin:0 -8px}.mat-card-sm-image{width:80px;height:80px}.mat-card-md-image{width:112px;height:112px}.mat-card-lg-image{width:152px;height:152px}@media (max-width:599px){.mat-card{padding:24px 16px}.mat-card-actions{margin-left:-8px;margin-right:-8px}.mat-card-image{width:calc(100% + 32px);margin:16px -16px}.mat-card-title-group{margin:0}.mat-card-xl-image{margin-left:0;margin-right:0}.mat-card-header{margin:-8px 0 0 0}.mat-card-footer{margin-left:-16px;margin-right:-16px}}.mat-card-content>:first-child,.mat-card>:first-child{margin-top:0}.mat-card-content>:last-child:not(.mat-card-footer),.mat-card>:last-child:not(.mat-card-footer){margin-bottom:0}.mat-card-image:first-child{margin-top:-24px}.mat-card>.mat-card-actions:last-child{margin-bottom:-16px;padding-bottom:0}.mat-card-actions .mat-button:first-child,.mat-card-actions .mat-raised-button:first-child{margin-left:0;margin-right:0}.mat-card-subtitle:not(:first-child),.mat-card-title:not(:first-child){margin-top:-4px}.mat-card-header .mat-card-subtitle:not(:first-child){margin-top:-8px}.mat-card>.mat-card-xl-image:first-child{margin-top:-8px}.mat-card>.mat-card-xl-image:last-child{margin-bottom:-8px}"],data:{}}));function o(t){return r.lb(2,[r.ab(null,0),r.ab(null,1)],null,null)}var l=r.Pa({encapsulation:2,styles:[],data:{}});function a(t){return r.lb(2,[r.ab(null,0),(t()(),r.Ra(1,0,null,null,1,"div",[["class","mat-card-header-text"]],null,null,null,null,null)),r.ab(null,1),r.ab(null,2)],null,null)}},mChF:function(t,e,n){"use strict";function r(t){return t}n.d(e,"a",function(){return r})},mZXl:function(t,e,n){"use strict";n.d(e,"b",function(){return l}),n.d(e,"a",function(){return u});var r=n("mrSG"),i=n("FFOo"),o=n("60iU");function l(t,e){return void 0===e&&(e=0),function(n){return n.lift(new a(t,e))}}var a=function(){function t(t,e){void 0===e&&(e=0),this.scheduler=t,this.delay=e}return t.prototype.call=function(t,e){return e.subscribe(new u(t,this.scheduler,this.delay))},t}(),u=function(t){function e(e,n,r){void 0===r&&(r=0);var i=t.call(this,e)||this;return i.scheduler=n,i.delay=r,i}return r.b(e,t),e.dispatch=function(t){t.notification.observe(t.destination),this.unsubscribe()},e.prototype.scheduleMessage=function(t){this.add(this.scheduler.schedule(e.dispatch,this.delay,new s(t,this.destination)))},e.prototype._next=function(t){this.scheduleMessage(o.a.createNext(t))},e.prototype._error=function(t){this.scheduleMessage(o.a.createError(t))},e.prototype._complete=function(){this.scheduleMessage(o.a.createComplete())},e}(i.a),s=function(t,e){this.notification=t,this.destination=e}},mrSG:function(t,e,n){"use strict";n.d(e,"b",function(){return i}),n.d(e,"a",function(){return o}),n.d(e,"e",function(){return l}),n.d(e,"c",function(){return a}),n.d(e,"d",function(){return u});var r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};function i(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}var o=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t};function l(t){var e="function"==typeof Symbol&&t[Symbol.iterator],n=0;return e?e.call(t):{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}}}function a(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var r,i,o=n.call(t),l=[];try{for(;(void 0===e||e-- >0)&&!(r=o.next()).done;)l.push(r.value)}catch(t){i={error:t}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return l}function u(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(a(arguments[e]));return t}},n6gG:function(t,e,n){"use strict";function r(t){return null!=t&&""+t!="false"}function i(t,e){return void 0===e&&(e=0),o(t)?Number(t):e}function o(t){return!isNaN(parseFloat(t))&&!isNaN(Number(t))}function l(t){return Array.isArray(t)?t:[t]}function a(t){return null==t?"":"string"==typeof t?t:t+"px"}n.d(e,"c",function(){return r}),n.d(e,"e",function(){return i}),n.d(e,"a",function(){return o}),n.d(e,"b",function(){return l}),n.d(e,"d",function(){return a})},nkY7:function(t,e,n){"use strict";function r(t){return t&&"function"==typeof t.schedule}n.d(e,"a",function(){return r})},ny24:function(t,e,n){"use strict";n.d(e,"a",function(){return l});var r=n("mrSG"),i=n("MGBS"),o=n("zotm");function l(t){return function(e){return e.lift(new a(t))}}var a=function(){function t(t){this.notifier=t}return t.prototype.call=function(t,e){var n=new u(t),r=Object(o.a)(n,this.notifier);return r&&!r.closed?(n.add(r),e.subscribe(n)):n},t}(),u=function(t){function e(e){return t.call(this,e)||this}return r.b(e,t),e.prototype.notifyNext=function(t,e,n,r,i){this.complete()},e.prototype.notifyComplete=function(){},e}(i.a)},p0Sj:function(t,e,n){"use strict";n.d(e,"a",function(){return u});var r=n("IUTb"),i=n("PU8L"),o=n("G5J1"),l=n("dEwP"),a=n("nkY7");function u(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return function(e){var n=t[t.length-1];Object(a.a)(n)?t.pop():n=null;var u=t.length;return 1!==u||n?u>0?Object(l.a)(Object(r.a)(t,n),e):Object(l.a)(Object(o.b)(n),e):Object(l.a)(Object(i.a)(t[0]),e)}}},p0ib:function(t,e,n){"use strict";n.d(e,"a",function(){return a});var r=n("6blF"),i=n("nkY7"),o=n("Zn8D"),l=n("IUTb");function a(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var n=Number.POSITIVE_INFINITY,a=null,u=t[t.length-1];return Object(i.a)(u)?(a=t.pop(),t.length>1&&"number"==typeof t[t.length-1]&&(n=t.pop())):"number"==typeof u&&(n=t.pop()),null===a&&1===t.length&&t[0]instanceof r.a?t[0]:Object(o.a)(n)(Object(l.a)(t,a))}},pIm3:function(t,e,n){"use strict";n.d(e,"c",function(){return o}),n.d(e,"f",function(){return l}),n.d(e,"a",function(){return a}),n.d(e,"d",function(){return u}),n.d(e,"b",function(){return s}),n.d(e,"e",function(){return c});var r=n("CcnG"),i=(n("BHnd"),n("Ip0R"),n("y4qS")),o=(n("Fzqc"),n("Wf4p"),r.Pa({encapsulation:2,styles:["mat-table{display:block}mat-header-row{min-height:56px}mat-footer-row,mat-row{min-height:48px}mat-footer-row,mat-header-row,mat-row{display:flex;border-width:0;border-bottom-width:1px;border-style:solid;align-items:center;box-sizing:border-box}mat-footer-row::after,mat-header-row::after,mat-row::after{display:inline-block;min-height:inherit;content:''}mat-cell:first-child,mat-footer-cell:first-child,mat-header-cell:first-child{padding-left:24px}[dir=rtl] mat-cell:first-child,[dir=rtl] mat-footer-cell:first-child,[dir=rtl] mat-header-cell:first-child{padding-left:0;padding-right:24px}mat-cell:last-child,mat-footer-cell:last-child,mat-header-cell:last-child{padding-right:24px}[dir=rtl] mat-cell:last-child,[dir=rtl] mat-footer-cell:last-child,[dir=rtl] mat-header-cell:last-child{padding-right:0;padding-left:24px}mat-cell,mat-footer-cell,mat-header-cell{flex:1;display:flex;align-items:center;overflow:hidden;word-wrap:break-word;min-height:inherit}table.mat-table{border-spacing:0}tr.mat-header-row{height:56px}tr.mat-footer-row,tr.mat-row{height:48px}th.mat-header-cell{text-align:left}td.mat-cell,td.mat-footer-cell,th.mat-header-cell{padding:0;border-bottom-width:1px;border-bottom-style:solid}td.mat-cell:first-child,td.mat-footer-cell:first-child,th.mat-header-cell:first-child{padding-left:24px}td.mat-cell:last-child,td.mat-footer-cell:last-child,th.mat-header-cell:last-child{padding-right:24px}"],data:{}}));function l(t){return r.lb(2,[r.hb(402653184,1,{_rowOutlet:0}),r.hb(402653184,2,{_headerRowOutlet:0}),r.hb(402653184,3,{_footerRowOutlet:0}),(t()(),r.Ra(3,16777216,null,null,1,null,null,null,null,null,null,null)),r.Qa(4,16384,[[2,4]],0,i.s,[r.Q,r.k],null,null),(t()(),r.Ra(5,16777216,null,null,1,null,null,null,null,null,null,null)),r.Qa(6,16384,[[1,4]],0,i.q,[r.Q,r.k],null,null),(t()(),r.Ra(7,16777216,null,null,1,null,null,null,null,null,null,null)),r.Qa(8,16384,[[3,4]],0,i.r,[r.Q,r.k],null,null)],null,null)}var a=r.Pa({encapsulation:2,styles:[],data:{}});function u(t){return r.lb(2,[(t()(),r.Ra(0,16777216,null,null,1,null,null,null,null,null,null,null)),r.Qa(1,147456,null,0,i.c,[r.Q],null,null)],null,null)}var s=r.Pa({encapsulation:2,styles:[],data:{}});function c(t){return r.lb(2,[(t()(),r.Ra(0,16777216,null,null,1,null,null,null,null,null,null,null)),r.Qa(1,147456,null,0,i.c,[r.Q],null,null)],null,null)}},pMnS:function(t,e,n){"use strict";n.d(e,"a",function(){return a});var r=n("CcnG"),i=n("ZYCi"),o=r.Pa({encapsulation:2,styles:[],data:{}});function l(t){return r.lb(0,[(t()(),r.Ra(0,16777216,null,null,1,"router-outlet",[],null,null,null,null,null)),r.Qa(1,212992,null,0,i.q,[i.b,r.Q,r.j,[8,null],r.h],null,null)],function(t,e){t(e,1,0)},null)}var a=r.Na("ng-component",i.u,function(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,1,"ng-component",[],null,null,null,l,o)),r.Qa(1,49152,null,0,i.u,[],null,null)],null,null)},{},{},[])},pZhM:function(t,e,n){"use strict";n.d(e,"a",function(){return r});var r=function(){}},psW0:function(t,e,n){"use strict";n.d(e,"a",function(){return u});var r=n("mrSG"),i=n("zotm"),o=n("MGBS"),l=n("67Y/"),a=n("0/uQ");function u(t,e,n){return void 0===n&&(n=Number.POSITIVE_INFINITY),"function"==typeof e?function(r){return r.pipe(u(function(n,r){return Object(a.a)(t(n,r)).pipe(Object(l.a)(function(t,i){return e(n,t,r,i)}))},n))}:("number"==typeof e&&(n=e),function(e){return e.lift(new s(t,n))})}var s=function(){function t(t,e){void 0===e&&(e=Number.POSITIVE_INFINITY),this.project=t,this.concurrent=e}return t.prototype.call=function(t,e){return e.subscribe(new c(t,this.project,this.concurrent))},t}(),c=function(t){function e(e,n,r){void 0===r&&(r=Number.POSITIVE_INFINITY);var i=t.call(this,e)||this;return i.project=n,i.concurrent=r,i.hasCompleted=!1,i.buffer=[],i.active=0,i.index=0,i}return r.b(e,t),e.prototype._next=function(t){this.active<this.concurrent?this._tryNext(t):this.buffer.push(t)},e.prototype._tryNext=function(t){var e,n=this.index++;try{e=this.project(t,n)}catch(t){return void this.destination.error(t)}this.active++,this._innerSub(e,t,n)},e.prototype._innerSub=function(t,e,n){this.add(Object(i.a)(this,t,e,n))},e.prototype._complete=function(){this.hasCompleted=!0,0===this.active&&0===this.buffer.length&&this.destination.complete()},e.prototype.notifyNext=function(t,e,n,r,i){this.destination.next(e)},e.prototype.notifyComplete=function(t){var e=this.buffer;this.remove(t),this.active--,e.length>0?this._next(e.shift()):0===this.active&&this.hasCompleted&&this.destination.complete()},e}(o.a)},pugT:function(t,e,n){"use strict";n.d(e,"a",function(){return s});var r=n("isby"),i=n("McSo"),o=n("2Bdj"),l=n("Ehmk"),a=n("eihs"),u=n("awvh"),s=function(){function t(t){this.closed=!1,this._parent=null,this._parents=null,this._subscriptions=null,t&&(this._unsubscribe=t)}var e;return t.prototype.unsubscribe=function(){var t,e=!1;if(!this.closed){var n=this._parent,s=this._parents,h=this._unsubscribe,f=this._subscriptions;this.closed=!0,this._parent=null,this._parents=null,this._subscriptions=null;for(var d=-1,p=s?s.length:0;n;)n.remove(this),n=++d<p&&s[d]||null;if(Object(o.a)(h)&&Object(l.a)(h).call(this)===a.a&&(e=!0,t=t||(a.a.e instanceof u.a?c(a.a.e.errors):[a.a.e])),Object(r.a)(f))for(d=-1,p=f.length;++d<p;){var m=f[d];if(Object(i.a)(m)&&Object(l.a)(m.unsubscribe).call(m)===a.a){e=!0,t=t||[];var g=a.a.e;g instanceof u.a?t=t.concat(c(g.errors)):t.push(g)}}if(e)throw new u.a(t)}},t.prototype.add=function(e){if(!e||e===t.EMPTY)return t.EMPTY;if(e===this)return this;var n=e;switch(typeof e){case"function":n=new t(e);case"object":if(n.closed||"function"!=typeof n.unsubscribe)return n;if(this.closed)return n.unsubscribe(),n;if("function"!=typeof n._addParent){var r=n;(n=new t)._subscriptions=[r]}break;default:throw new Error("unrecognized teardown "+e+" added to Subscription.")}return(this._subscriptions||(this._subscriptions=[])).push(n),n._addParent(this),n},t.prototype.remove=function(t){var e=this._subscriptions;if(e){var n=e.indexOf(t);-1!==n&&e.splice(n,1)}},t.prototype._addParent=function(t){var e=this._parent,n=this._parents;e&&e!==t?n?-1===n.indexOf(t)&&n.push(t):this._parents=[t]:this._parent=t},t.EMPTY=((e=new t).closed=!0,e),t}();function c(t){return t.reduce(function(t,e){return t.concat(e instanceof u.a?e.errors:e)},[])}},qAlS:function(t,e,n){"use strict";n.d(e,"b",function(){return f}),n.d(e,"d",function(){return d}),n.d(e,"c",function(){return p}),n.d(e,"a",function(){return m});var r=n("dWZg"),i=n("CcnG"),o=n("K9Ia"),l=n("6blF"),a=n("F/XL"),u=n("bne5"),s=n("p0ib"),c=n("Rney"),h=n("VnD/"),f=function(){function t(t,e){this._ngZone=t,this._platform=e,this._scrolled=new o.a,this._globalSubscription=null,this._scrolledCount=0,this.scrollContainers=new Map}return t.prototype.register=function(t){var e=this,n=t.elementScrolled().subscribe(function(){return e._scrolled.next(t)});this.scrollContainers.set(t,n)},t.prototype.deregister=function(t){var e=this.scrollContainers.get(t);e&&(e.unsubscribe(),this.scrollContainers.delete(t))},t.prototype.scrolled=function(t){var e=this;return void 0===t&&(t=20),this._platform.isBrowser?l.a.create(function(n){e._globalSubscription||e._addGlobalListener();var r=t>0?e._scrolled.pipe(Object(c.a)(t)).subscribe(n):e._scrolled.subscribe(n);return e._scrolledCount++,function(){r.unsubscribe(),e._scrolledCount--,e._scrolledCount||e._removeGlobalListener()}}):Object(a.a)()},t.prototype.ngOnDestroy=function(){var t=this;this._removeGlobalListener(),this.scrollContainers.forEach(function(e,n){return t.deregister(n)}),this._scrolled.complete()},t.prototype.ancestorScrolled=function(t,e){var n=this.getAncestorScrollContainers(t);return this.scrolled(e).pipe(Object(h.a)(function(t){return!t||n.indexOf(t)>-1}))},t.prototype.getAncestorScrollContainers=function(t){var e=this,n=[];return this.scrollContainers.forEach(function(r,i){e._scrollableContainsElement(i,t)&&n.push(i)}),n},t.prototype._scrollableContainsElement=function(t,e){var n=e.nativeElement,r=t.getElementRef().nativeElement;do{if(n==r)return!0}while(n=n.parentElement);return!1},t.prototype._addGlobalListener=function(){var t=this;this._globalSubscription=this._ngZone.runOutsideAngular(function(){return Object(u.a)(window.document,"scroll").subscribe(function(){return t._scrolled.next()})})},t.prototype._removeGlobalListener=function(){this._globalSubscription&&(this._globalSubscription.unsubscribe(),this._globalSubscription=null)},t.ngInjectableDef=Object(i.U)({factory:function(){return new t(Object(i.Y)(i.z),Object(i.Y)(r.a))},token:t,providedIn:"root"}),t}(),d=function(){function t(t,e){var n=this;this._platform=t,this._change=t.isBrowser?e.runOutsideAngular(function(){return Object(s.a)(Object(u.a)(window,"resize"),Object(u.a)(window,"orientationchange"))}):Object(a.a)(),this._invalidateCache=this.change().subscribe(function(){return n._updateViewportSize()})}return t.prototype.ngOnDestroy=function(){this._invalidateCache.unsubscribe()},t.prototype.getViewportSize=function(){this._viewportSize||this._updateViewportSize();var t={width:this._viewportSize.width,height:this._viewportSize.height};return this._platform.isBrowser||(this._viewportSize=null),t},t.prototype.getViewportRect=function(){var t=this.getViewportScrollPosition(),e=this.getViewportSize(),n=e.width,r=e.height;return{top:t.top,left:t.left,bottom:t.top+r,right:t.left+n,height:r,width:n}},t.prototype.getViewportScrollPosition=function(){if(!this._platform.isBrowser)return{top:0,left:0};var t=document.documentElement.getBoundingClientRect();return{top:-t.top||document.body.scrollTop||window.scrollY||document.documentElement.scrollTop||0,left:-t.left||document.body.scrollLeft||window.scrollX||document.documentElement.scrollLeft||0}},t.prototype.change=function(t){return void 0===t&&(t=20),t>0?this._change.pipe(Object(c.a)(t)):this._change},t.prototype._updateViewportSize=function(){this._viewportSize=this._platform.isBrowser?{width:window.innerWidth,height:window.innerHeight}:{width:0,height:0}},t.ngInjectableDef=Object(i.U)({factory:function(){return new t(Object(i.Y)(r.a),Object(i.Y)(i.z))},token:t,providedIn:"root"}),t}(),p={provide:d,deps:[[new i.A,new i.K,d],r.a,i.z],useFactory:function(t,e,n){return t||new d(e,n)}},m=function(){}},qyHS:function(t,e,n){"use strict";n.d(e,"a",function(){return o});var r=n("mrSG"),i=n("FFOo");function o(){return function(t){return t.lift(new l)}}var l=function(){function t(){}return t.prototype.call=function(t,e){return e.subscribe(new a(t))},t}(),a=function(t){function e(e){var n=t.call(this,e)||this;return n.hasPrev=!1,n}return r.b(e,t),e.prototype._next=function(t){this.hasPrev?this.destination.next([this.prev,t]):this.hasPrev=!0,this.prev=t},e}(i.a)},rf30:function(t,e,n){"use strict";n.d(e,"b",function(){return l}),n.d(e,"c",function(){return a}),n.d(e,"a",function(){return u});var r=function(t,e){this.pageName=t,this.chunkURL=e,this.chunkLoaded=!1},i=function(t,e,n){this.specialPageName=t,this.chunkRecordPageName=e,this.navTo=n},o=function(t,e){this.url=t,this.mime=e},l=[new r("/support","http://2018.igem.org/wiki/images/9/91/T--GO_Paris-Saclay--support_chunk.base64.txt"),new r("/team","http://2018.igem.org/wiki/images/7/74/T--GO_Paris-Saclay--team_chunk.base64.txt"),new r("/labnotebook","http://2018.igem.org/wiki/images/0/02/T--GO_Paris-Saclay--labnotebook_chunk.base64.txt"),new r("/attribution","http://2018.igem.org/wiki/images/5/5a/T--GO_Paris-Saclay--attribution_chunk.base64.txt"),new r("/biology","http://2018.igem.org/wiki/images/1/15/T--GO_Paris-Saclay--biology_chunk.base64.txt")],a=[new i("/Attributions","/attribution","/attribution"),new i("/InterLab","/biology","/biology/interlab"),new i("/Collaborations","#MAIN#","/collaborations"),new i("/Software","#MAIN#","/software"),new i("/Human_Practices","#MAIN#","/human-practices"),new i("/Model","#MAIN#","/modeling"),new i("/Improve","/biology","/biology/J23108"),new i("/Demonstrate","#MAIN#","/demonstrate"),new i("/Team","/team","/team"),new i("/Design","#MAIN#","/project"),new i("/Description","#MAIN#","/project"),new i("/Applied_Design","#MAIN#","/project"),new i("/Part_Collection","/biology","/biology/parts-collection")],u=[new o("http://2018.igem.org/wiki/images/9/90/T--GO_Paris-Saclay--empty-banner.png","image/png"),new o("http://2018.igem.org/wiki/images/0/03/T--GO_Paris-Saclay--fond_groupe.png","image/png"),new o("http://2018.igem.org/wiki/images/1/1b/T--GO_Paris-Saclay--tableau_banner.png","image/png"),new o("http://2018.igem.org/wiki/images/d/dd/T--GO_Paris-Saclay--parts_underbanner.png","image/png"),new o("http://2018.igem.org/wiki/images/c/c8/T--GO_Paris-Saclay--stagedlab_underbanner.png","image/png"),new o("http://2018.igem.org/wiki/images/8/82/T--GO_Paris-Saclay--interlab_underbanner.png","image/png"),new o("http://2018.igem.org/wiki/images/0/08/T--GO_Paris-Saclay--software_underbanner.png","image/png"),new o("http://2018.igem.org/wiki/images/c/c6/T--GO_Paris-Saclay--team_underbanner.png","image/png"),new o("http://2018.igem.org/wiki/images/d/db/T--GO_Paris-Saclay--bacteria_anim.mp4","video/mp4")]},seP3:function(t,e,n){"use strict";n.d(e,"d",function(){return y}),n.d(e,"a",function(){return g}),n.d(e,"b",function(){return b}),n.d(e,"c",function(){return f});var r=n("CcnG"),i=(n("ihYY"),n("mrSG")),o=n("n6gG"),l=n("Wf4p"),a=n("G5J1"),u=n("p0ib"),s=n("bne5"),c=n("t9fZ"),h=n("p0Sj"),f=function(){};function d(t){return Error("A hint was already declared for 'align=\""+t+"\"'.")}var p=0,m=Object(l.C)(function(t){this._elementRef=t},"primary"),g=new r.q("MAT_FORM_FIELD_DEFAULT_OPTIONS"),b=function(t){function e(e,n,r,i,o,l,a,u){var s=t.call(this,e)||this;return s._elementRef=e,s._changeDetectorRef=n,s._dir=i,s._defaultOptions=o,s._platform=l,s._ngZone=a,s._showAlwaysAnimate=!1,s._subscriptAnimationState="",s._hintLabel="",s._hintLabelId="mat-hint-"+p++,s._labelId="mat-form-field-label-"+p++,s._labelOptions=r||{},s.floatLabel=s._labelOptions.float||"auto",s._animationsEnabled="NoopAnimations"!==u,s}return Object(i.b)(e,t),Object.defineProperty(e.prototype,"appearance",{get:function(){return this._appearance||this._defaultOptions&&this._defaultOptions.appearance||"legacy"},set:function(t){var e=this,n=this._appearance;this._appearance=t,"outline"===this._appearance&&n!==t&&(this._ngZone?this._ngZone.onStable.pipe(Object(c.a)(1)).subscribe(function(){e._ngZone.runOutsideAngular(function(){return e.updateOutlineGap()})}):Promise.resolve().then(function(){return e.updateOutlineGap()}))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"hideRequiredMarker",{get:function(){return this._hideRequiredMarker},set:function(t){this._hideRequiredMarker=Object(o.c)(t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"_shouldAlwaysFloat",{get:function(){return"always"===this.floatLabel&&!this._showAlwaysAnimate},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"_canLabelFloat",{get:function(){return"never"!==this.floatLabel},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"hintLabel",{get:function(){return this._hintLabel},set:function(t){this._hintLabel=t,this._processHints()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"floatLabel",{get:function(){return"legacy"!==this.appearance&&"never"===this._floatLabel?"auto":this._floatLabel},set:function(t){t!==this._floatLabel&&(this._floatLabel=t||this._labelOptions.float||"auto",this._changeDetectorRef.markForCheck())},enumerable:!0,configurable:!0}),e.prototype.getConnectedOverlayOrigin=function(){return this._connectionContainerRef||this._elementRef},e.prototype.ngAfterContentInit=function(){var t=this;this._validateControlChild(),this._control.controlType&&this._elementRef.nativeElement.classList.add("mat-form-field-type-"+this._control.controlType),this._control.stateChanges.pipe(Object(h.a)(null)).subscribe(function(){t._validatePlaceholders(),t._syncDescribedByIds(),t._changeDetectorRef.markForCheck()});var e=this._control.ngControl&&this._control.ngControl.valueChanges||a.a;Object(u.a)(e,this._prefixChildren.changes,this._suffixChildren.changes).subscribe(function(){return t._changeDetectorRef.markForCheck()}),this._hintChildren.changes.pipe(Object(h.a)(null)).subscribe(function(){t._processHints(),t._changeDetectorRef.markForCheck()}),this._errorChildren.changes.pipe(Object(h.a)(null)).subscribe(function(){t._syncDescribedByIds(),t._changeDetectorRef.markForCheck()})},e.prototype.ngAfterContentChecked=function(){this._validateControlChild()},e.prototype.ngAfterViewInit=function(){this._subscriptAnimationState="enter",this._changeDetectorRef.detectChanges()},e.prototype._shouldForward=function(t){var e=this._control?this._control.ngControl:null;return e&&e[t]},e.prototype._hasPlaceholder=function(){return!!(this._control&&this._control.placeholder||this._placeholderChild)},e.prototype._hasLabel=function(){return!!this._labelChild},e.prototype._shouldLabelFloat=function(){return this._canLabelFloat&&(this._control.shouldLabelFloat||this._shouldAlwaysFloat)},e.prototype._hideControlPlaceholder=function(){return"legacy"===this.appearance&&!this._hasLabel()||this._hasLabel()&&!this._shouldLabelFloat()},e.prototype._hasFloatingLabel=function(){return this._hasLabel()||"legacy"===this.appearance&&this._hasPlaceholder()},e.prototype._getDisplayedMessages=function(){return this._errorChildren&&this._errorChildren.length>0&&this._control.errorState?"error":"hint"},e.prototype._animateAndLockLabel=function(){var t=this;this._hasFloatingLabel()&&this._canLabelFloat&&(this._animationsEnabled&&(this._showAlwaysAnimate=!0,Object(s.a)(this._label.nativeElement,"transitionend").pipe(Object(c.a)(1)).subscribe(function(){t._showAlwaysAnimate=!1})),this.floatLabel="always",this._changeDetectorRef.markForCheck())},e.prototype._validatePlaceholders=function(){if(this._control.placeholder&&this._placeholderChild)throw Error("Placeholder attribute and child element were both specified.")},e.prototype._processHints=function(){this._validateHints(),this._syncDescribedByIds()},e.prototype._validateHints=function(){var t,e,n=this;this._hintChildren&&this._hintChildren.forEach(function(r){if("start"===r.align){if(t||n.hintLabel)throw d("start");t=r}else if("end"===r.align){if(e)throw d("end");e=r}})},e.prototype._syncDescribedByIds=function(){if(this._control){var t=[];if("hint"===this._getDisplayedMessages()){var e=this._hintChildren?this._hintChildren.find(function(t){return"start"===t.align}):null,n=this._hintChildren?this._hintChildren.find(function(t){return"end"===t.align}):null;e?t.push(e.id):this._hintLabel&&t.push(this._hintLabelId),n&&t.push(n.id)}else this._errorChildren&&(t=this._errorChildren.map(function(t){return t.id}));this._control.setDescribedByIds(t)}},e.prototype._validateControlChild=function(){if(!this._control)throw Error("mat-form-field must contain a MatFormFieldControl.")},e.prototype.updateOutlineGap=function(){if("outline"===this.appearance){var t=0,e=0,n=this._connectionContainerRef.nativeElement.querySelectorAll(".mat-form-field-outline-start"),r=this._connectionContainerRef.nativeElement.querySelectorAll(".mat-form-field-outline-gap");if(this._label&&this._label.nativeElement.children.length){if(this._platform&&!this._platform.isBrowser)return;if(!document.documentElement.contains(this._elementRef.nativeElement))return;for(var i=this._getStartEnd(this._connectionContainerRef.nativeElement.getBoundingClientRect()),o=this._getStartEnd(this._label.nativeElement.children[0].getBoundingClientRect()),l=0,a=0,u=this._label.nativeElement.children;a<u.length;a++)l+=u[a].offsetWidth;t=o-i-5,e=.75*l+10}for(var s=0;s<n.length;s++)n.item(s).style.width=t+"px";for(s=0;s<r.length;s++)r.item(s).style.width=e+"px"}},e.prototype._getStartEnd=function(t){return this._dir&&"rtl"===this._dir.value?t.right:t.left},e}(m),y=function(){}},siIJ:function(t,e,n){"use strict";n.d(e,"a",function(){return r});var r=function(){function t(e,n){void 0===n&&(n=t.now),this.SchedulerAction=e,this.now=n}return t.prototype.schedule=function(t,e,n){return void 0===e&&(e=0),new this.SchedulerAction(this,t).schedule(n,e)},t.now=function(){return Date.now()},t}()},svcd:function(t,e,n){"use strict";n.d(e,"a",function(){return l});var r=n("mrSG"),i=n("K9Ia"),o=n("pugT"),l=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.value=null,e.hasNext=!1,e.hasCompleted=!1,e}return r.b(e,t),e.prototype._subscribe=function(e){return this.hasError?(e.error(this.thrownError),o.a.EMPTY):this.hasCompleted&&this.hasNext?(e.next(this.value),e.complete(),o.a.EMPTY):t.prototype._subscribe.call(this,e)},e.prototype.next=function(t){this.hasCompleted||(this.value=t,this.hasNext=!0)},e.prototype.error=function(e){this.hasCompleted||t.prototype.error.call(this,e)},e.prototype.complete=function(){this.hasCompleted=!0,this.hasNext&&t.prototype.next.call(this,this.value),t.prototype.complete.call(this)},e}(i.a)},"t/Na":function(t,e,n){"use strict";n.d(e,"k",function(){return A}),n.d(e,"n",function(){return F}),n.d(e,"o",function(){return z}),n.d(e,"l",function(){return D}),n.d(e,"m",function(){return N}),n.d(e,"b",function(){return f}),n.d(e,"f",function(){return h}),n.d(e,"c",function(){return j}),n.d(e,"a",function(){return E}),n.d(e,"d",function(){return H}),n.d(e,"e",function(){return B}),n.d(e,"j",function(){return V}),n.d(e,"g",function(){return M}),n.d(e,"i",function(){return I}),n.d(e,"h",function(){return L});var r=n("mrSG"),i=n("CcnG"),o=n("F/XL"),l=n("6blF"),a=n("Phjn"),u=n("VnD/"),s=n("67Y/"),c=n("Ip0R"),h=function(){},f=function(){},d=function(){function t(t){var e=this;this.normalizedNames=new Map,this.lazyUpdate=null,t?this.lazyInit="string"==typeof t?function(){e.headers=new Map,t.split("\n").forEach(function(t){var n=t.indexOf(":");if(n>0){var r=t.slice(0,n),i=r.toLowerCase(),o=t.slice(n+1).trim();e.maybeSetNormalizedName(r,i),e.headers.has(i)?e.headers.get(i).push(o):e.headers.set(i,[o])}})}:function(){e.headers=new Map,Object.keys(t).forEach(function(n){var r=t[n],i=n.toLowerCase();"string"==typeof r&&(r=[r]),r.length>0&&(e.headers.set(i,r),e.maybeSetNormalizedName(n,i))})}:this.headers=new Map}return t.prototype.has=function(t){return this.init(),this.headers.has(t.toLowerCase())},t.prototype.get=function(t){this.init();var e=this.headers.get(t.toLowerCase());return e&&e.length>0?e[0]:null},t.prototype.keys=function(){return this.init(),Array.from(this.normalizedNames.values())},t.prototype.getAll=function(t){return this.init(),this.headers.get(t.toLowerCase())||null},t.prototype.append=function(t,e){return this.clone({name:t,value:e,op:"a"})},t.prototype.set=function(t,e){return this.clone({name:t,value:e,op:"s"})},t.prototype.delete=function(t,e){return this.clone({name:t,value:e,op:"d"})},t.prototype.maybeSetNormalizedName=function(t,e){this.normalizedNames.has(e)||this.normalizedNames.set(e,t)},t.prototype.init=function(){var e=this;this.lazyInit&&(this.lazyInit instanceof t?this.copyFrom(this.lazyInit):this.lazyInit(),this.lazyInit=null,this.lazyUpdate&&(this.lazyUpdate.forEach(function(t){return e.applyUpdate(t)}),this.lazyUpdate=null))},t.prototype.copyFrom=function(t){var e=this;t.init(),Array.from(t.headers.keys()).forEach(function(n){e.headers.set(n,t.headers.get(n)),e.normalizedNames.set(n,t.normalizedNames.get(n))})},t.prototype.clone=function(e){var n=new t;return n.lazyInit=this.lazyInit&&this.lazyInit instanceof t?this.lazyInit:this,n.lazyUpdate=(this.lazyUpdate||[]).concat([e]),n},t.prototype.applyUpdate=function(t){var e=t.name.toLowerCase();switch(t.op){case"a":case"s":var n=t.value;if("string"==typeof n&&(n=[n]),0===n.length)return;this.maybeSetNormalizedName(t.name,e);var i=("a"===t.op?this.headers.get(e):void 0)||[];i.push.apply(i,Object(r.d)(n)),this.headers.set(e,i);break;case"d":var o=t.value;if(o){var l=this.headers.get(e);if(!l)return;0===(l=l.filter(function(t){return-1===o.indexOf(t)})).length?(this.headers.delete(e),this.normalizedNames.delete(e)):this.headers.set(e,l)}else this.headers.delete(e),this.normalizedNames.delete(e)}},t.prototype.forEach=function(t){var e=this;this.init(),Array.from(this.normalizedNames.keys()).forEach(function(n){return t(e.normalizedNames.get(n),e.headers.get(n))})},t}(),p=function(){function t(){}return t.prototype.encodeKey=function(t){return m(t)},t.prototype.encodeValue=function(t){return m(t)},t.prototype.decodeKey=function(t){return decodeURIComponent(t)},t.prototype.decodeValue=function(t){return decodeURIComponent(t)},t}();function m(t){return encodeURIComponent(t).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/gi,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%2B/gi,"+").replace(/%3D/gi,"=").replace(/%3F/gi,"?").replace(/%2F/gi,"/")}var g=function(){function t(t){void 0===t&&(t={});var e,n,i,o=this;if(this.updates=null,this.cloneFrom=null,this.encoder=t.encoder||new p,t.fromString){if(t.fromObject)throw new Error("Cannot specify both fromString and fromObject.");this.map=(e=t.fromString,n=this.encoder,i=new Map,e.length>0&&e.split("&").forEach(function(t){var e=t.indexOf("="),o=Object(r.c)(-1==e?[n.decodeKey(t),""]:[n.decodeKey(t.slice(0,e)),n.decodeValue(t.slice(e+1))],2),l=o[0],a=o[1],u=i.get(l)||[];u.push(a),i.set(l,u)}),i)}else t.fromObject?(this.map=new Map,Object.keys(t.fromObject).forEach(function(e){var n=t.fromObject[e];o.map.set(e,Array.isArray(n)?n:[n])})):this.map=null}return t.prototype.has=function(t){return this.init(),this.map.has(t)},t.prototype.get=function(t){this.init();var e=this.map.get(t);return e?e[0]:null},t.prototype.getAll=function(t){return this.init(),this.map.get(t)||null},t.prototype.keys=function(){return this.init(),Array.from(this.map.keys())},t.prototype.append=function(t,e){return this.clone({param:t,value:e,op:"a"})},t.prototype.set=function(t,e){return this.clone({param:t,value:e,op:"s"})},t.prototype.delete=function(t,e){return this.clone({param:t,value:e,op:"d"})},t.prototype.toString=function(){var t=this;return this.init(),this.keys().map(function(e){var n=t.encoder.encodeKey(e);return t.map.get(e).map(function(e){return n+"="+t.encoder.encodeValue(e)}).join("&")}).join("&")},t.prototype.clone=function(e){var n=new t({encoder:this.encoder});return n.cloneFrom=this.cloneFrom||this,n.updates=(this.updates||[]).concat([e]),n},t.prototype.init=function(){var t=this;null===this.map&&(this.map=new Map),null!==this.cloneFrom&&(this.cloneFrom.init(),this.cloneFrom.keys().forEach(function(e){return t.map.set(e,t.cloneFrom.map.get(e))}),this.updates.forEach(function(e){switch(e.op){case"a":case"s":var n=("a"===e.op?t.map.get(e.param):void 0)||[];n.push(e.value),t.map.set(e.param,n);break;case"d":if(void 0===e.value){t.map.delete(e.param);break}var r=t.map.get(e.param)||[],i=r.indexOf(e.value);-1!==i&&r.splice(i,1),r.length>0?t.map.set(e.param,r):t.map.delete(e.param)}}),this.cloneFrom=null)},t}();function b(t){return"undefined"!=typeof ArrayBuffer&&t instanceof ArrayBuffer}function y(t){return"undefined"!=typeof Blob&&t instanceof Blob}function v(t){return"undefined"!=typeof FormData&&t instanceof FormData}var _=function(){function t(t,e,n,r){var i;if(this.url=e,this.body=null,this.reportProgress=!1,this.withCredentials=!1,this.responseType="json",this.method=t.toUpperCase(),function(t){switch(t){case"DELETE":case"GET":case"HEAD":case"OPTIONS":case"JSONP":return!1;default:return!0}}(this.method)||r?(this.body=void 0!==n?n:null,i=r):i=n,i&&(this.reportProgress=!!i.reportProgress,this.withCredentials=!!i.withCredentials,i.responseType&&(this.responseType=i.responseType),i.headers&&(this.headers=i.headers),i.params&&(this.params=i.params)),this.headers||(this.headers=new d),this.params){var o=this.params.toString();if(0===o.length)this.urlWithParams=e;else{var l=e.indexOf("?");this.urlWithParams=e+(-1===l?"?":l<e.length-1?"&":"")+o}}else this.params=new g,this.urlWithParams=e}return t.prototype.serializeBody=function(){return null===this.body?null:b(this.body)||y(this.body)||v(this.body)||"string"==typeof this.body?this.body:this.body instanceof g?this.body.toString():"object"==typeof this.body||"boolean"==typeof this.body||Array.isArray(this.body)?JSON.stringify(this.body):this.body.toString()},t.prototype.detectContentTypeHeader=function(){return null===this.body?null:v(this.body)?null:y(this.body)?this.body.type||null:b(this.body)?null:"string"==typeof this.body?"text/plain":this.body instanceof g?"application/x-www-form-urlencoded;charset=UTF-8":"object"==typeof this.body||"number"==typeof this.body||Array.isArray(this.body)?"application/json":null},t.prototype.clone=function(e){void 0===e&&(e={});var n=e.method||this.method,r=e.url||this.url,i=e.responseType||this.responseType,o=void 0!==e.body?e.body:this.body,l=void 0!==e.withCredentials?e.withCredentials:this.withCredentials,a=void 0!==e.reportProgress?e.reportProgress:this.reportProgress,u=e.headers||this.headers,s=e.params||this.params;return void 0!==e.setHeaders&&(u=Object.keys(e.setHeaders).reduce(function(t,n){return t.set(n,e.setHeaders[n])},u)),e.setParams&&(s=Object.keys(e.setParams).reduce(function(t,n){return t.set(n,e.setParams[n])},s)),new t(n,r,o,{params:s,headers:u,reportProgress:a,responseType:i,withCredentials:l})},t}(),w=function(t){return t[t.Sent=0]="Sent",t[t.UploadProgress=1]="UploadProgress",t[t.ResponseHeader=2]="ResponseHeader",t[t.DownloadProgress=3]="DownloadProgress",t[t.Response=4]="Response",t[t.User=5]="User",t}({}),x=function(){return function(t,e,n){void 0===e&&(e=200),void 0===n&&(n="OK"),this.headers=t.headers||new d,this.status=void 0!==t.status?t.status:e,this.statusText=t.statusText||n,this.url=t.url||null,this.ok=this.status>=200&&this.status<300}}(),S=function(t){function e(e){void 0===e&&(e={});var n=t.call(this,e)||this;return n.type=w.ResponseHeader,n}return Object(r.b)(e,t),e.prototype.clone=function(t){return void 0===t&&(t={}),new e({headers:t.headers||this.headers,status:void 0!==t.status?t.status:this.status,statusText:t.statusText||this.statusText,url:t.url||this.url||void 0})},e}(x),C=function(t){function e(e){void 0===e&&(e={});var n=t.call(this,e)||this;return n.type=w.Response,n.body=void 0!==e.body?e.body:null,n}return Object(r.b)(e,t),e.prototype.clone=function(t){return void 0===t&&(t={}),new e({body:void 0!==t.body?t.body:this.body,headers:t.headers||this.headers,status:void 0!==t.status?t.status:this.status,statusText:t.statusText||this.statusText,url:t.url||this.url||void 0})},e}(x),k=function(t){function e(e){var n=t.call(this,e,0,"Unknown Error")||this;return n.name="HttpErrorResponse",n.ok=!1,n.message=n.status>=200&&n.status<300?"Http failure during parsing for "+(e.url||"(unknown url)"):"Http failure response for "+(e.url||"(unknown url)")+": "+e.status+" "+e.statusText,n.error=e.error||null,n}return Object(r.b)(e,t),e}(x);function R(t,e){return{body:e,headers:t.headers,observe:t.observe,params:t.params,reportProgress:t.reportProgress,responseType:t.responseType,withCredentials:t.withCredentials}}var j=function(){function t(t){this.handler=t}return t.prototype.request=function(t,e,n){var r,i=this;if(void 0===n&&(n={}),t instanceof _)r=t;else{var l;l=n.headers instanceof d?n.headers:new d(n.headers);var c=void 0;n.params&&(c=n.params instanceof g?n.params:new g({fromObject:n.params})),r=new _(t,e,void 0!==n.body?n.body:null,{headers:l,params:c,reportProgress:n.reportProgress,responseType:n.responseType||"json",withCredentials:n.withCredentials})}var h=Object(o.a)(r).pipe(Object(a.a)(function(t){return i.handler.handle(t)}));if(t instanceof _||"events"===n.observe)return h;var f=h.pipe(Object(u.a)(function(t){return t instanceof C}));switch(n.observe||"body"){case"body":switch(r.responseType){case"arraybuffer":return f.pipe(Object(s.a)(function(t){if(null!==t.body&&!(t.body instanceof ArrayBuffer))throw new Error("Response is not an ArrayBuffer.");return t.body}));case"blob":return f.pipe(Object(s.a)(function(t){if(null!==t.body&&!(t.body instanceof Blob))throw new Error("Response is not a Blob.");return t.body}));case"text":return f.pipe(Object(s.a)(function(t){if(null!==t.body&&"string"!=typeof t.body)throw new Error("Response is not a string.");return t.body}));case"json":default:return f.pipe(Object(s.a)(function(t){return t.body}))}case"response":return f;default:throw new Error("Unreachable: unhandled observe type "+n.observe+"}")}},t.prototype.delete=function(t,e){return void 0===e&&(e={}),this.request("DELETE",t,e)},t.prototype.get=function(t,e){return void 0===e&&(e={}),this.request("GET",t,e)},t.prototype.head=function(t,e){return void 0===e&&(e={}),this.request("HEAD",t,e)},t.prototype.jsonp=function(t,e){return this.request("JSONP",t,{params:(new g).append(e,"JSONP_CALLBACK"),observe:"body",responseType:"json"})},t.prototype.options=function(t,e){return void 0===e&&(e={}),this.request("OPTIONS",t,e)},t.prototype.patch=function(t,e,n){return void 0===n&&(n={}),this.request("PATCH",t,R(n,e))},t.prototype.post=function(t,e,n){return void 0===n&&(n={}),this.request("POST",t,R(n,e))},t.prototype.put=function(t,e,n){return void 0===n&&(n={}),this.request("PUT",t,R(n,e))},t}(),O=function(){function t(t,e){this.next=t,this.interceptor=e}return t.prototype.handle=function(t){return this.interceptor.intercept(t,this.next)},t}(),E=new i.q("HTTP_INTERCEPTORS"),T=function(){function t(){}return t.prototype.intercept=function(t,e){return e.handle(t)},t}(),P=/^\)\]\}',?\n/,I=function(){},A=function(){function t(){}return t.prototype.build=function(){return new XMLHttpRequest},t}(),M=function(){function t(t){this.xhrFactory=t}return t.prototype.handle=function(t){var e=this;if("JSONP"===t.method)throw new Error("Attempted to construct Jsonp request without JsonpClientModule installed.");return new l.a(function(n){var r=e.xhrFactory.build();if(r.open(t.method,t.urlWithParams),t.withCredentials&&(r.withCredentials=!0),t.headers.forEach(function(t,e){return r.setRequestHeader(t,e.join(","))}),t.headers.has("Accept")||r.setRequestHeader("Accept","application/json, text/plain, */*"),!t.headers.has("Content-Type")){var i=t.detectContentTypeHeader();null!==i&&r.setRequestHeader("Content-Type",i)}if(t.responseType){var o=t.responseType.toLowerCase();r.responseType="json"!==o?o:"text"}var l=t.serializeBody(),a=null,u=function(){if(null!==a)return a;var e=1223===r.status?204:r.status,n=r.statusText||"OK",i=new d(r.getAllResponseHeaders()),o=function(t){return"responseURL"in t&&t.responseURL?t.responseURL:/^X-Request-URL:/m.test(t.getAllResponseHeaders())?t.getResponseHeader("X-Request-URL"):null}(r)||t.url;return a=new S({headers:i,status:e,statusText:n,url:o})},s=function(){var e=u(),i=e.headers,o=e.status,l=e.statusText,a=e.url,s=null;204!==o&&(s=void 0===r.response?r.responseText:r.response),0===o&&(o=s?200:0);var c=o>=200&&o<300;if("json"===t.responseType&&"string"==typeof s){var h=s;s=s.replace(P,"");try{s=""!==s?JSON.parse(s):null}catch(t){s=h,c&&(c=!1,s={error:t,text:s})}}c?(n.next(new C({body:s,headers:i,status:o,statusText:l,url:a||void 0})),n.complete()):n.error(new k({error:s,headers:i,status:o,statusText:l,url:a||void 0}))},c=function(t){var e=new k({error:t,status:r.status||0,statusText:r.statusText||"Unknown Error"});n.error(e)},h=!1,f=function(e){h||(n.next(u()),h=!0);var i={type:w.DownloadProgress,loaded:e.loaded};e.lengthComputable&&(i.total=e.total),"text"===t.responseType&&r.responseText&&(i.partialText=r.responseText),n.next(i)},p=function(t){var e={type:w.UploadProgress,loaded:t.loaded};t.lengthComputable&&(e.total=t.total),n.next(e)};return r.addEventListener("load",s),r.addEventListener("error",c),t.reportProgress&&(r.addEventListener("progress",f),null!==l&&r.upload&&r.upload.addEventListener("progress",p)),r.send(l),n.next({type:w.Sent}),function(){r.removeEventListener("error",c),r.removeEventListener("load",s),t.reportProgress&&(r.removeEventListener("progress",f),null!==l&&r.upload&&r.upload.removeEventListener("progress",p)),r.abort()}})},t}(),D=new i.q("XSRF_COOKIE_NAME"),N=new i.q("XSRF_HEADER_NAME"),L=function(){},F=function(){function t(t,e,n){this.doc=t,this.platform=e,this.cookieName=n,this.lastCookieString="",this.lastToken=null,this.parseCount=0}return t.prototype.getToken=function(){if("server"===this.platform)return null;var t=this.doc.cookie||"";return t!==this.lastCookieString&&(this.parseCount++,this.lastToken=Object(c.A)(t,this.cookieName),this.lastCookieString=t),this.lastToken},t}(),z=function(){function t(t,e){this.tokenService=t,this.headerName=e}return t.prototype.intercept=function(t,e){var n=t.url.toLowerCase();if("GET"===t.method||"HEAD"===t.method||n.startsWith("http://")||n.startsWith("https://"))return e.handle(t);var r=this.tokenService.getToken();return null===r||t.headers.has(this.headerName)||(t=t.clone({headers:t.headers.set(this.headerName,r)})),e.handle(t)},t}(),V=function(){function t(t,e){this.backend=t,this.injector=e,this.chain=null}return t.prototype.handle=function(t){if(null===this.chain){var e=this.injector.get(E,[]);this.chain=e.reduceRight(function(t,e){return new O(t,e)},this.backend)}return this.chain.handle(t)},t}(),B=function(){function t(){}return t.disable=function(){return{ngModule:t,providers:[{provide:z,useClass:T}]}},t.withOptions=function(e){return void 0===e&&(e={}),{ngModule:t,providers:[e.cookieName?{provide:D,useValue:e.cookieName}:[],e.headerName?{provide:N,useValue:e.headerName}:[]]}},t}(),H=function(){}},t9fZ:function(t,e,n){"use strict";n.d(e,"a",function(){return a});var r=n("mrSG"),i=n("FFOo"),o=n("b7mW"),l=n("G5J1");function a(t){return function(e){return 0===t?Object(l.b)():e.lift(new u(t))}}var u=function(){function t(t){if(this.total=t,this.total<0)throw new o.a}return t.prototype.call=function(t,e){return e.subscribe(new s(t,this.total))},t}(),s=function(t){function e(e,n){var r=t.call(this,e)||this;return r.total=n,r.count=0,r}return r.b(e,t),e.prototype._next=function(t){var e=this.total,n=++this.count;n<=e&&(this.destination.next(t),n===e&&(this.destination.complete(),this.unsubscribe()))},e}(i.a)},tNVB:function(t,e,n){"use strict";n.d(e,"a",function(){return o});var r=n("xMyE"),i=n("3fWJ"),o=function(t){return void 0===t&&(t=l),Object(r.a)({hasValue:!1,next:function(){this.hasValue=!0},complete:function(){if(!this.hasValue)throw t()}})};function l(){return new i.a}},tRTW:function(t,e,n){"use strict";n.d(e,"a",function(){return i}),n.d(e,"b",function(){return o});var r=n("CcnG"),i=(n("/dO6"),n("Wf4p"),n("YSh2"),n("seP3"),n("Fzqc"),n("gIcY"),r.Pa({encapsulation:2,styles:[".mat-chip{position:relative;overflow:hidden;box-sizing:border-box;-webkit-tap-highlight-color:transparent}.mat-standard-chip{transition:box-shadow 280ms cubic-bezier(.4,0,.2,1);display:inline-flex;padding:7px 12px;border-radius:24px;align-items:center;cursor:default}.mat-standard-chip .mat-chip-remove.mat-icon{width:18px;height:18px}.mat-standard-chip:focus{box-shadow:0 3px 3px -2px rgba(0,0,0,.2),0 3px 4px 0 rgba(0,0,0,.14),0 1px 8px 0 rgba(0,0,0,.12);outline:0}@media screen and (-ms-high-contrast:active){.mat-standard-chip{outline:solid 1px}.mat-standard-chip:focus{outline:dotted 2px}}.mat-standard-chip.mat-chip-with-avatar,.mat-standard-chip.mat-chip-with-trailing-icon.mat-chip-with-avatar{padding-top:0;padding-bottom:0}.mat-standard-chip.mat-chip-with-trailing-icon.mat-chip-with-avatar{padding-right:7px;padding-left:0}[dir=rtl] .mat-standard-chip.mat-chip-with-trailing-icon.mat-chip-with-avatar{padding-left:7px;padding-right:0}.mat-standard-chip.mat-chip-with-trailing-icon{padding-top:7px;padding-bottom:7px;padding-right:7px;padding-left:12px}[dir=rtl] .mat-standard-chip.mat-chip-with-trailing-icon{padding-left:7px;padding-right:12px}.mat-standard-chip.mat-chip-with-avatar{padding-left:0;padding-right:12px}[dir=rtl] .mat-standard-chip.mat-chip-with-avatar{padding-right:0;padding-left:12px}.mat-standard-chip .mat-chip-avatar{width:32px;height:32px;margin-right:8px;margin-left:0}[dir=rtl] .mat-standard-chip .mat-chip-avatar{margin-left:8px;margin-right:0}.mat-standard-chip .mat-chip-remove,.mat-standard-chip .mat-chip-trailing-icon{width:18px;height:18px;cursor:pointer}.mat-standard-chip .mat-chip-remove,.mat-standard-chip .mat-chip-trailing-icon{margin-left:7px;margin-right:0}[dir=rtl] .mat-standard-chip .mat-chip-remove,[dir=rtl] .mat-standard-chip .mat-chip-trailing-icon{margin-right:7px;margin-left:0}.mat-chip-list-wrapper{display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;margin:-4px}.mat-chip-list-wrapper .mat-standard-chip,.mat-chip-list-wrapper input.mat-input-element{margin:4px}.mat-chip-list-stacked .mat-chip-list-wrapper{flex-direction:column;align-items:flex-start}.mat-chip-list-stacked .mat-chip-list-wrapper .mat-standard-chip{width:100%}.mat-chip-avatar{border-radius:50%;justify-content:center;align-items:center;display:flex;overflow:hidden}input.mat-chip-input{width:150px;margin:3px;flex:1 0 150px}"],data:{}}));function o(t){return r.lb(2,[(t()(),r.Ra(0,0,null,null,1,"div",[["class","mat-chip-list-wrapper"]],null,null,null,null,null)),r.ab(null,0)],null,null)}},u67D:function(t,e,n){"use strict";n.d(e,"a",function(){return i});var r=n("En8+"),i=function(t){return function(e){for(var n=t[r.a]();;){var i=n.next();if(i.done){e.complete();break}if(e.next(i.value),e.closed)break}return"function"==typeof n.return&&e.add(function(){n.return&&n.return()}),e}}},uMaO:function(t,e,n){"use strict";n.d(e,"a",function(){return i});var r=n("mrSG"),i=function(t){function e(e,n){var r=t.call(this)||this;return r.subject=e,r.subscriber=n,r.closed=!1,r}return r.b(e,t),e.prototype.unsubscribe=function(){if(!this.closed){this.closed=!0;var t=this.subject,e=t.observers;if(this.subject=null,e&&0!==e.length&&!t.isStopped&&!t.closed){var n=e.indexOf(this.subscriber);-1!==n&&e.splice(n,1)}}},e}(n("pugT").a)},vGXY:function(t,e,n){"use strict";n.d(e,"a",function(){return g}),n.d(e,"b",function(){return y});var r,i=n("CcnG"),o=n("dWZg"),l=n("K9Ia"),a=n("dzgT"),u=n("kERW"),s=n("67Y/"),c=n("ny24"),h=n("p0Sj"),f=n("n6gG"),d=new Set,p=function(){function t(t){this.platform=t,this._matchMedia=this.platform.isBrowser&&window.matchMedia?window.matchMedia.bind(window):m}return t.prototype.matchMedia=function(t){return this.platform.WEBKIT&&function(t){if(!d.has(t))try{r||((r=document.createElement("style")).setAttribute("type","text/css"),document.head.appendChild(r)),r.sheet&&(r.sheet.insertRule("@media "+t+" {.fx-query-test{ }}",0),d.add(t))}catch(t){console.error(t)}}(t),this._matchMedia(t)},t.ngInjectableDef=Object(i.U)({factory:function(){return new t(Object(i.Y)(o.a))},token:t,providedIn:"root"}),t}();function m(t){return{matches:"all"===t||""===t,media:t,addListener:function(){},removeListener:function(){}}}var g=function(){function t(t,e){this.mediaMatcher=t,this.zone=e,this._queries=new Map,this._destroySubject=new l.a}return t.prototype.ngOnDestroy=function(){this._destroySubject.next(),this._destroySubject.complete()},t.prototype.isMatched=function(t){var e=this;return b(Object(f.b)(t)).some(function(t){return e._registerQuery(t).mql.matches})},t.prototype.observe=function(t){var e=this,n=b(Object(f.b)(t)).map(function(t){return e._registerQuery(t).observable});return Object(a.b)(n).pipe(Object(s.a)(function(t){var e={matches:!1,breakpoints:{}};return t.forEach(function(t){e.matches=e.matches||t.matches,e.breakpoints[t.query]=t.matches}),e}))},t.prototype._registerQuery=function(t){var e=this;if(this._queries.has(t))return this._queries.get(t);var n=this.mediaMatcher.matchMedia(t),r={observable:Object(u.a)(function(t){n.addListener(function(n){return e.zone.run(function(){return t(n)})})},function(t){n.removeListener(function(n){return e.zone.run(function(){return t(n)})})}).pipe(Object(c.a)(this._destroySubject),Object(h.a)(n),Object(s.a)(function(e){return{query:t,matches:e.matches}})),mql:n};return this._queries.set(t,r),r},t.ngInjectableDef=Object(i.U)({factory:function(){return new t(Object(i.Y)(p),Object(i.Y)(i.z))},token:t,providedIn:"root"}),t}();function b(t){return t.map(function(t){return t.split(",")}).reduce(function(t,e){return t.concat(e)}).map(function(t){return t.trim()})}var y={XSmall:"(max-width: 599px)",Small:"(min-width: 600px) and (max-width: 959px)",Medium:"(min-width: 960px) and (max-width: 1279px)",Large:"(min-width: 1280px) and (max-width: 1919px)",XLarge:"(min-width: 1920px)",Handset:"(max-width: 599px) and (orientation: portrait), (max-width: 959px) and (orientation: landscape)",Tablet:"(min-width: 600px) and (max-width: 839px) and (orientation: portrait), (min-width: 960px) and (max-width: 1279px) and (orientation: landscape)",Web:"(min-width: 840px) and (orientation: portrait), (min-width: 1280px) and (orientation: landscape)",HandsetPortrait:"(max-width: 599px) and (orientation: portrait)",TabletPortrait:"(min-width: 600px) and (max-width: 839px) and (orientation: portrait)",WebPortrait:"(min-width: 840px) and (orientation: portrait)",HandsetLandscape:"(max-width: 959px) and (orientation: landscape)",TabletLandscape:"(min-width: 960px) and (max-width: 1279px) and (orientation: landscape)",WebLandscape:"(min-width: 1280px) and (orientation: landscape)"}},vubp:function(t,e,n){"use strict";n.d(e,"a",function(){return u});var r=n("mrSG"),i=n("T1DM"),o=n("VGuC"),l=n("FFOo"),a=n("60iU");function u(t,e){void 0===e&&(e=i.a);var n=Object(o.a)(t)?+t-e.now():Math.abs(t);return function(t){return t.lift(new s(n,e))}}var s=function(){function t(t,e){this.delay=t,this.scheduler=e}return t.prototype.call=function(t,e){return e.subscribe(new c(t,this.delay,this.scheduler))},t}(),c=function(t){function e(e,n,r){var i=t.call(this,e)||this;return i.delay=n,i.scheduler=r,i.queue=[],i.active=!1,i.errored=!1,i}return r.b(e,t),e.dispatch=function(t){for(var e=t.source,n=e.queue,r=t.scheduler,i=t.destination;n.length>0&&n[0].time-r.now()<=0;)n.shift().notification.observe(i);if(n.length>0){var o=Math.max(0,n[0].time-r.now());this.schedule(t,o)}else this.unsubscribe(),e.active=!1},e.prototype._schedule=function(t){this.active=!0,this.add(t.schedule(e.dispatch,this.delay,{source:this,destination:this.destination,scheduler:t}))},e.prototype.scheduleNotification=function(t){if(!0!==this.errored){var e=this.scheduler,n=new h(e.now()+this.delay,t);this.queue.push(n),!1===this.active&&this._schedule(e)}},e.prototype._next=function(t){this.scheduleNotification(a.a.createNext(t))},e.prototype._error=function(t){this.errored=!0,this.queue=[],this.destination.error(t)},e.prototype._complete=function(){this.scheduleNotification(a.a.createComplete())},e}(l.a),h=function(t,e){this.time=t,this.notification=e}},w1EH:function(t,e,n){"use strict";n.d(e,"a",function(){return s});var r=n("3fWJ"),i=n("VnD/"),o=n("AxiF"),l=n("tNVB"),a=n("HJBe"),u=n("mChF");function s(t,e){var n=arguments.length>=2;return function(s){return s.pipe(t?Object(i.a)(function(e,n){return t(e,n,s)}):u.a,Object(o.a)(1),n?Object(a.a)(e):Object(l.a)(function(){return new r.a}))}}},wFw1:function(t,e,n){"use strict";n.d(e,"d",function(){return p}),n.d(e,"f",function(){return g}),n.d(e,"g",function(){return b}),n.d(e,"e",function(){return m}),n.d(e,"b",function(){return v}),n.d(e,"a",function(){return y}),n.d(e,"c",function(){return a});var r=n("mrSG"),i=n("ihYY"),o=n("CcnG"),l=(n("ZYjt"),n("NSYL")),a=function(t){function e(e,n){var r=t.call(this)||this;return r._nextAnimationId=0,r._renderer=e.createRenderer(n.body,{id:"0",encapsulation:o.R.None,styles:[],data:{animation:[]}}),r}return Object(r.b)(e,t),e.prototype.build=function(t){var e=this._nextAnimationId.toString();this._nextAnimationId++;var n=Array.isArray(t)?Object(i.i)(t):t;return c(this._renderer,null,e,"register",[n]),new u(e,this._renderer)},e}(i.b),u=function(t){function e(e,n){var r=t.call(this)||this;return r._id=e,r._renderer=n,r}return Object(r.b)(e,t),e.prototype.create=function(t,e){return new s(this._id,t,e||{},this._renderer)},e}(i.c),s=function(){function t(t,e,n,r){this.id=t,this.element=e,this._renderer=r,this.parentPlayer=null,this._started=!1,this.totalTime=0,this._command("create",n)}return t.prototype._listen=function(t,e){return this._renderer.listen(this.element,"@@"+this.id+":"+t,e)},t.prototype._command=function(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n];return c(this._renderer,this.element,this.id,t,e)},t.prototype.onDone=function(t){this._listen("done",t)},t.prototype.onStart=function(t){this._listen("start",t)},t.prototype.onDestroy=function(t){this._listen("destroy",t)},t.prototype.init=function(){this._command("init")},t.prototype.hasStarted=function(){return this._started},t.prototype.play=function(){this._command("play"),this._started=!0},t.prototype.pause=function(){this._command("pause")},t.prototype.restart=function(){this._command("restart")},t.prototype.finish=function(){this._command("finish")},t.prototype.destroy=function(){this._command("destroy")},t.prototype.reset=function(){this._command("reset")},t.prototype.setPosition=function(t){this._command("setPosition",t)},t.prototype.getPosition=function(){return 0},t}();function c(t,e,n,r,i){return t.setProperty(e,"@@"+n+":"+r,i)}var h=function(){function t(t,e,n){this.delegate=t,this.engine=e,this._zone=n,this._currentId=0,this._microtaskId=1,this._animationCallbacksBuffer=[],this._rendererCache=new Map,this._cdRecurDepth=0,this.promise=Promise.resolve(0),e.onRemovalComplete=function(t,e){e&&e.parentNode(t)&&e.removeChild(t.parentNode,t)}}return t.prototype.createRenderer=function(t,e){var n=this,r=this.delegate.createRenderer(t,e);if(!(t&&e&&e.data&&e.data.animation)){var i=this._rendererCache.get(r);return i||(i=new f("",r,this.engine),this._rendererCache.set(r,i)),i}var o=e.id,l=e.id+"-"+this._currentId;return this._currentId++,this.engine.register(l,t),e.data.animation.forEach(function(e){return n.engine.registerTrigger(o,l,t,e.name,e)}),new d(this,l,r,this.engine)},t.prototype.begin=function(){this._cdRecurDepth++,this.delegate.begin&&this.delegate.begin()},t.prototype._scheduleCountTask=function(){var t=this;this.promise.then(function(){t._microtaskId++})},t.prototype.scheduleListenerCallback=function(t,e,n){var i=this;t>=0&&t<this._microtaskId?this._zone.run(function(){return e(n)}):(0==this._animationCallbacksBuffer.length&&Promise.resolve(null).then(function(){i._zone.run(function(){i._animationCallbacksBuffer.forEach(function(t){var e=Object(r.c)(t,2);(0,e[0])(e[1])}),i._animationCallbacksBuffer=[]})}),this._animationCallbacksBuffer.push([e,n]))},t.prototype.end=function(){var t=this;this._cdRecurDepth--,0==this._cdRecurDepth&&this._zone.runOutsideAngular(function(){t._scheduleCountTask(),t.engine.flush(t._microtaskId)}),this.delegate.end&&this.delegate.end()},t.prototype.whenRenderingDone=function(){return this.engine.whenRenderingDone()},t}(),f=function(){function t(t,e,n){this.namespaceId=t,this.delegate=e,this.engine=n,this.destroyNode=this.delegate.destroyNode?function(t){return e.destroyNode(t)}:null}return Object.defineProperty(t.prototype,"data",{get:function(){return this.delegate.data},enumerable:!0,configurable:!0}),t.prototype.destroy=function(){this.engine.destroy(this.namespaceId,this.delegate),this.delegate.destroy()},t.prototype.createElement=function(t,e){return this.delegate.createElement(t,e)},t.prototype.createComment=function(t){return this.delegate.createComment(t)},t.prototype.createText=function(t){return this.delegate.createText(t)},t.prototype.appendChild=function(t,e){this.delegate.appendChild(t,e),this.engine.onInsert(this.namespaceId,e,t,!1)},t.prototype.insertBefore=function(t,e,n){this.delegate.insertBefore(t,e,n),this.engine.onInsert(this.namespaceId,e,t,!0)},t.prototype.removeChild=function(t,e){this.engine.onRemove(this.namespaceId,e,this.delegate)},t.prototype.selectRootElement=function(t){return this.delegate.selectRootElement(t)},t.prototype.parentNode=function(t){return this.delegate.parentNode(t)},t.prototype.nextSibling=function(t){return this.delegate.nextSibling(t)},t.prototype.setAttribute=function(t,e,n,r){this.delegate.setAttribute(t,e,n,r)},t.prototype.removeAttribute=function(t,e,n){this.delegate.removeAttribute(t,e,n)},t.prototype.addClass=function(t,e){this.delegate.addClass(t,e)},t.prototype.removeClass=function(t,e){this.delegate.removeClass(t,e)},t.prototype.setStyle=function(t,e,n,r){this.delegate.setStyle(t,e,n,r)},t.prototype.removeStyle=function(t,e,n){this.delegate.removeStyle(t,e,n)},t.prototype.setProperty=function(t,e,n){"@"==e.charAt(0)&&"@.disabled"==e?this.disableAnimations(t,!!n):this.delegate.setProperty(t,e,n)},t.prototype.setValue=function(t,e){this.delegate.setValue(t,e)},t.prototype.listen=function(t,e,n){return this.delegate.listen(t,e,n)},t.prototype.disableAnimations=function(t,e){this.engine.disableAnimations(t,e)},t}(),d=function(t){function e(e,n,r,i){var o=t.call(this,n,r,i)||this;return o.factory=e,o.namespaceId=n,o}return Object(r.b)(e,t),e.prototype.setProperty=function(t,e,n){"@"==e.charAt(0)?"."==e.charAt(1)&&"@.disabled"==e?this.disableAnimations(t,n=void 0===n||!!n):this.engine.process(this.namespaceId,t,e.substr(1),n):this.delegate.setProperty(t,e,n)},e.prototype.listen=function(t,e,n){var i,o,l,a=this;if("@"==e.charAt(0)){var u=function(t){switch(t){case"body":return document.body;case"document":return document;case"window":return window;default:return t}}(t),s=e.substr(1),c="";return"@"!=s.charAt(0)&&(s=(i=Object(r.c)((o=s,l=o.indexOf("."),[o.substring(0,l),o.substr(l+1)]),2))[0],c=i[1]),this.engine.listen(this.namespaceId,u,s,c,function(t){a.factory.scheduleListenerCallback(t._data||-1,n,t)})}return this.delegate.listen(t,e,n)},e}(f),p=function(t){function e(e,n,r){return t.call(this,e.body,n,r)||this}return Object(r.b)(e,t),e}(l.b);function m(){return Object(l.h)()?new l.f:new l.d}function g(){return new l.g}function b(t,e,n){return new h(t,e,n)}var y=new o.q("AnimationModuleType"),v=function(){}},xMyE:function(t,e,n){"use strict";n.d(e,"a",function(){return a});var r=n("mrSG"),i=n("FFOo"),o=n("+umK"),l=n("2Bdj");function a(t,e,n){return function(r){return r.lift(new u(t,e,n))}}var u=function(){function t(t,e,n){this.nextOrObserver=t,this.error=e,this.complete=n}return t.prototype.call=function(t,e){return e.subscribe(new s(t,this.nextOrObserver,this.error,this.complete))},t}(),s=function(t){function e(e,n,r,i){var a=t.call(this,e)||this;return a._tapNext=o.a,a._tapError=o.a,a._tapComplete=o.a,a._tapError=r||o.a,a._tapComplete=i||o.a,Object(l.a)(n)?(a._context=a,a._tapNext=n):n&&(a._context=n,a._tapNext=n.next||o.a,a._tapError=n.error||o.a,a._tapComplete=n.complete||o.a),a}return r.b(e,t),e.prototype._next=function(t){try{this._tapNext.call(this._context,t)}catch(t){return void this.destination.error(t)}this.destination.next(t)},e.prototype._error=function(t){try{this._tapError.call(this._context,t)}catch(t){return void this.destination.error(t)}this.destination.error(t)},e.prototype._complete=function(){try{this._tapComplete.call(this._context)}catch(t){return void this.destination.error(t)}return this.destination.complete()},e}(i.a)},xTla:function(t,e,n){"use strict";n.d(e,"a",function(){return r});var r="function"==typeof Symbol&&Symbol.observable||"@@observable"},xlPZ:function(t,e,n){"use strict";n.d(e,"a",function(){return i});var r=n("KhEm");function i(t,e){return function(n){var i;if(i="function"==typeof t?t:function(){return t},"function"==typeof e)return n.lift(new o(i,e));var l=Object.create(n,r.b);return l.source=n,l.subjectFactory=i,l}}var o=function(){function t(t,e){this.subjectFactory=t,this.selector=e}return t.prototype.call=function(t,e){var n=this.selector,r=this.subjectFactory(),i=n(r).subscribe(t);return i.add(e.subscribe(r)),i},t}()},y3By:function(t,e,n){"use strict";n.d(e,"a",function(){return i}),n.d(e,"b",function(){return o});var r=n("+umK");function i(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return o(t)}function o(t){return t?1===t.length?t[0]:function(e){return t.reduce(function(t,e){return e(t)},e)}:r.a}},y4qS:function(t,e,n){"use strict";n.d(e,"q",function(){return P}),n.d(e,"s",function(){return I}),n.d(e,"r",function(){return A}),n.d(e,"o",function(){return M}),n.d(e,"b",function(){return d}),n.d(e,"j",function(){return p}),n.d(e,"f",function(){return m}),n.d(e,"d",function(){return g}),n.d(e,"i",function(){return y}),n.d(e,"e",function(){return v}),n.d(e,"a",function(){return _}),n.d(e,"l",function(){return x}),n.d(e,"h",function(){return S}),n.d(e,"n",function(){return C}),n.d(e,"c",function(){return k}),n.d(e,"k",function(){return R}),n.d(e,"g",function(){return j}),n.d(e,"m",function(){return O}),n.d(e,"p",function(){return N});var r=n("mrSG"),i=n("n6gG"),o=n("CcnG"),l=n("YlbQ"),a=n("K9Ia"),u=n("26FU"),s=n("6blF"),c=n("F/XL"),h=n("ny24");function f(t){return function(t){function e(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];var r=t.apply(this,e)||this;return r._sticky=!1,r._hasStickyChanged=!1,r}return Object(r.b)(e,t),Object.defineProperty(e.prototype,"sticky",{get:function(){return this._sticky},set:function(t){var e=this._sticky;this._sticky=Object(i.c)(t),this._hasStickyChanged=e!==this._sticky},enumerable:!0,configurable:!0}),e.prototype.hasStickyChanged=function(){var t=this._hasStickyChanged;return this._hasStickyChanged=!1,t},e.prototype.resetStickyChanged=function(){this._hasStickyChanged=!1},e}(t)}var d=function(t){this.template=t},p=function(t){this.template=t},m=function(t){this.template=t},g=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._stickyEnd=!1,e}return Object(r.b)(e,t),Object.defineProperty(e.prototype,"name",{get:function(){return this._name},set:function(t){t&&(this._name=t,this.cssClassFriendlyName=t.replace(/[^a-z0-9_-]/gi,"-"))},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"stickyEnd",{get:function(){return this._stickyEnd},set:function(t){var e=this._stickyEnd;this._stickyEnd=Object(i.c)(t),this._hasStickyChanged=e!==this._stickyEnd},enumerable:!0,configurable:!0}),e}(f(function(){})),b=function(t,e){e.nativeElement.classList.add("cdk-column-"+t.cssClassFriendlyName)},y=function(t){function e(e,n){return t.call(this,e,n)||this}return Object(r.b)(e,t),e}(b),v=function(t){function e(e,n){return t.call(this,e,n)||this}return Object(r.b)(e,t),e}(b),_=function(t){function e(e,n){return t.call(this,e,n)||this}return Object(r.b)(e,t),e}(b),w=function(){function t(t,e){this.template=t,this._differs=e}return t.prototype.ngOnChanges=function(t){if(!this._columnsDiffer){var e=t.columns&&t.columns.currentValue||[];this._columnsDiffer=this._differs.find(e).create(),this._columnsDiffer.diff(e)}},t.prototype.getColumnsDiff=function(){return this._columnsDiffer.diff(this.columns)},t.prototype.extractCellTemplate=function(t){return this instanceof x?t.headerCell.template:this instanceof S?t.footerCell.template:t.cell.template},t}(),x=function(t){function e(e,n){return t.call(this,e,n)||this}return Object(r.b)(e,t),e.prototype.ngOnChanges=function(e){t.prototype.ngOnChanges.call(this,e)},e}(f(function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Object(r.b)(e,t),e}(w))),S=function(t){function e(e,n){return t.call(this,e,n)||this}return Object(r.b)(e,t),e.prototype.ngOnChanges=function(e){t.prototype.ngOnChanges.call(this,e)},e}(f(function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Object(r.b)(e,t),e}(w))),C=function(t){function e(e,n){return t.call(this,e,n)||this}return Object(r.b)(e,t),e}(w),k=function(){function t(e){this._viewContainer=e,t.mostRecentCellOutlet=this}return t.prototype.ngOnDestroy=function(){t.mostRecentCellOutlet===this&&(t.mostRecentCellOutlet=null)},t.mostRecentCellOutlet=null,t}(),R=function(){},j=function(){},O=function(){},E=["top","bottom","left","right"],T=function(){function t(t,e,n){this.isNativeHtmlTable=t,this.stickCellCss=e,this.direction=n}return t.prototype.clearStickyPositioning=function(t,e){for(var n=0,r=t;n<r.length;n++){var i=r[n];if(i.nodeType===i.ELEMENT_NODE){this._removeStickyStyle(i,e);for(var o=0;o<i.children.length;o++)this._removeStickyStyle(i.children[o],e)}}},t.prototype.updateStickyColumns=function(t,e,n){var r=e.some(function(t){return t})||n.some(function(t){return t});if(t.length&&r)for(var i=t[0],o=i.children.length,l=this._getCellWidths(i),a=this._getStickyStartColumnPositions(l,e),u=this._getStickyEndColumnPositions(l,n),s="rtl"===this.direction,c=0,h=t;c<h.length;c++)for(var f=h[c],d=0;d<o;d++){var p=f.children[d];e[d]&&this._addStickyStyle(p,s?"right":"left",a[d]),n[d]&&this._addStickyStyle(p,s?"left":"right",u[d])}},t.prototype.stickRows=function(t,e,n){for(var r="bottom"===n?t.reverse():t,i=0,o=0;o<r.length;o++)if(e[o]){var l=r[o];if(this.isNativeHtmlTable)for(var a=0;a<l.children.length;a++)this._addStickyStyle(l.children[a],n,i);else this._addStickyStyle(l,n,i);i+=l.getBoundingClientRect().height}},t.prototype.updateStickyFooterContainer=function(t,e){if(this.isNativeHtmlTable){var n=t.querySelector("tfoot");e.some(function(t){return!t})?this._removeStickyStyle(n,["bottom"]):this._addStickyStyle(n,"bottom",0)}},t.prototype._removeStickyStyle=function(t,e){for(var n=0,r=e;n<r.length;n++)t.style[r[n]]="";t.style.zIndex=this._getCalculatedZIndex(t),E.some(function(e){return!!t.style[e]})||(t.style.position="",t.classList.remove(this.stickCellCss))},t.prototype._addStickyStyle=function(t,e,n){t.classList.add(this.stickCellCss),t.style[e]=n+"px",t.style.cssText+="position: -webkit-sticky; position: sticky; ",t.style.zIndex=this._getCalculatedZIndex(t)},t.prototype._getCalculatedZIndex=function(t){for(var e={top:100,bottom:10,left:1,right:1},n=0,r=0,i=E;r<i.length;r++){var o=i[r];t.style[o]&&(n+=e[o])}return n?""+n:""},t.prototype._getCellWidths=function(t){for(var e=[],n=t.children,r=0;r<n.length;r++)e.push(n[r].getBoundingClientRect().width);return e},t.prototype._getStickyStartColumnPositions=function(t,e){for(var n=[],r=0,i=0;i<t.length;i++)e[i]&&(n[i]=r,r+=t[i]);return n},t.prototype._getStickyEndColumnPositions=function(t,e){for(var n=[],r=0,i=t.length;i>0;i--)e[i]&&(n[i]=r,r+=t[i]);return n},t}(),P=function(t,e){this.viewContainer=t,this.elementRef=e},I=function(t,e){this.viewContainer=t,this.elementRef=e},A=function(t,e){this.viewContainer=t,this.elementRef=e},M=function(){function t(t,e,n,r,i){this._differs=t,this._changeDetectorRef=e,this._elementRef=n,this._dir=i,this._onDestroy=new a.a,this._columnDefsByName=new Map,this._customColumnDefs=new Set,this._customRowDefs=new Set,this._customHeaderRowDefs=new Set,this._customFooterRowDefs=new Set,this._headerRowDefChanged=!0,this._footerRowDefChanged=!0,this._cachedRenderRowsMap=new Map,this.stickyCssClass="cdk-table-sticky",this._multiTemplateDataRows=!1,this.viewChange=new u.a({start:0,end:Number.MAX_VALUE}),r||this._elementRef.nativeElement.setAttribute("role","grid"),this._isNativeHtmlTable="TABLE"===this._elementRef.nativeElement.nodeName}return Object.defineProperty(t.prototype,"trackBy",{get:function(){return this._trackByFn},set:function(t){Object(o.Z)()&&null!=t&&"function"!=typeof t&&console&&console.warn&&console.warn("trackBy must be a function, but received "+JSON.stringify(t)+"."),this._trackByFn=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"dataSource",{get:function(){return this._dataSource},set:function(t){this._dataSource!==t&&this._switchDataSource(t)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"multiTemplateDataRows",{get:function(){return this._multiTemplateDataRows},set:function(t){this._multiTemplateDataRows=Object(i.c)(t),this._rowOutlet.viewContainer.length&&this._forceRenderDataRows()},enumerable:!0,configurable:!0}),t.prototype.ngOnInit=function(){var t=this;this._setupStickyStyler(),this._isNativeHtmlTable&&this._applyNativeTableSections(),this._dataDiffer=this._differs.find([]).create(function(e,n){return t.trackBy?t.trackBy(n.dataIndex,n.data):n})},t.prototype.ngAfterContentChecked=function(){if(this._cacheRowDefs(),this._cacheColumnDefs(),!this._headerRowDefs.length&&!this._footerRowDefs.length&&!this._rowDefs.length)throw Error("Missing definitions for header, footer, and row; cannot determine which columns should be rendered.");this._renderUpdatedColumns(),this._headerRowDefChanged&&(this._forceRenderHeaderRows(),this._headerRowDefChanged=!1),this._footerRowDefChanged&&(this._forceRenderFooterRows(),this._footerRowDefChanged=!1),this.dataSource&&this._rowDefs.length>0&&!this._renderChangeSubscription&&this._observeRenderChanges(),this._checkStickyStates()},t.prototype.ngOnDestroy=function(){this._rowOutlet.viewContainer.clear(),this._headerRowOutlet.viewContainer.clear(),this._footerRowOutlet.viewContainer.clear(),this._cachedRenderRowsMap.clear(),this._onDestroy.next(),this._onDestroy.complete(),this.dataSource instanceof l.a&&this.dataSource.disconnect(this)},t.prototype.renderRows=function(){var t=this;this._renderRows=this._getAllRenderRows();var e=this._dataDiffer.diff(this._renderRows);if(e){var n=this._rowOutlet.viewContainer;e.forEachOperation(function(e,r,i){if(null==e.previousIndex)t._insertRow(e.item,i);else if(null==i)n.remove(r);else{var o=n.get(r);n.move(o,i)}}),this._updateRowIndexContext(),e.forEachIdentityChange(function(t){n.get(t.currentIndex).context.$implicit=t.item.data}),this.updateStickyColumnStyles()}},t.prototype.setHeaderRowDef=function(t){this._customHeaderRowDefs=new Set([t]),this._headerRowDefChanged=!0},t.prototype.setFooterRowDef=function(t){this._customFooterRowDefs=new Set([t]),this._footerRowDefChanged=!0},t.prototype.addColumnDef=function(t){this._customColumnDefs.add(t)},t.prototype.removeColumnDef=function(t){this._customColumnDefs.delete(t)},t.prototype.addRowDef=function(t){this._customRowDefs.add(t)},t.prototype.removeRowDef=function(t){this._customRowDefs.delete(t)},t.prototype.addHeaderRowDef=function(t){this._customHeaderRowDefs.add(t),this._headerRowDefChanged=!0},t.prototype.removeHeaderRowDef=function(t){this._customHeaderRowDefs.delete(t),this._headerRowDefChanged=!0},t.prototype.addFooterRowDef=function(t){this._customFooterRowDefs.add(t),this._footerRowDefChanged=!0},t.prototype.removeFooterRowDef=function(t){this._customFooterRowDefs.delete(t),this._footerRowDefChanged=!0},t.prototype.updateStickyHeaderRowStyles=function(){var t=this._getRenderedRows(this._headerRowOutlet);this._stickyStyler.clearStickyPositioning(t,["top"]);var e=this._headerRowDefs.map(function(t){return t.sticky});this._stickyStyler.stickRows(t,e,"top"),this._headerRowDefs.forEach(function(t){return t.resetStickyChanged()})},t.prototype.updateStickyFooterRowStyles=function(){var t=this._getRenderedRows(this._footerRowOutlet);this._stickyStyler.clearStickyPositioning(t,["bottom"]);var e=this._footerRowDefs.map(function(t){return t.sticky});this._stickyStyler.stickRows(t,e,"bottom"),this._stickyStyler.updateStickyFooterContainer(this._elementRef.nativeElement,e),this._footerRowDefs.forEach(function(t){return t.resetStickyChanged()})},t.prototype.updateStickyColumnStyles=function(){var t=this,e=this._getRenderedRows(this._headerRowOutlet),n=this._getRenderedRows(this._rowOutlet),r=this._getRenderedRows(this._footerRowOutlet);this._stickyStyler.clearStickyPositioning(e.concat(n,r),["left","right"]),e.forEach(function(e,n){t._addStickyColumnStyles([e],t._headerRowDefs[n])}),this._rowDefs.forEach(function(e){for(var r=[],i=0;i<n.length;i++)t._renderRows[i].rowDef===e&&r.push(n[i]);t._addStickyColumnStyles(r,e)}),r.forEach(function(e,n){t._addStickyColumnStyles([e],t._footerRowDefs[n])}),Array.from(this._columnDefsByName.values()).forEach(function(t){return t.resetStickyChanged()})},t.prototype._getAllRenderRows=function(){var t=[],e=this._cachedRenderRowsMap;this._cachedRenderRowsMap=new Map;for(var n=0;n<this._data.length;n++){var r=this._data[n],i=this._getRenderRowsForData(r,n,e.get(r));this._cachedRenderRowsMap.has(r)||this._cachedRenderRowsMap.set(r,new WeakMap);for(var o=0;o<i.length;o++){var l=i[o],a=this._cachedRenderRowsMap.get(l.data);a.has(l.rowDef)?a.get(l.rowDef).push(l):a.set(l.rowDef,[l]),t.push(l)}}return t},t.prototype._getRenderRowsForData=function(t,e,n){return this._getRowDefs(t,e).map(function(r){var i=n&&n.has(r)?n.get(r):[];if(i.length){var o=i.shift();return o.dataIndex=e,o}return{data:t,rowDef:r,dataIndex:e}})},t.prototype._cacheColumnDefs=function(){var t=this;this._columnDefsByName.clear(),D(this._contentColumnDefs,this._customColumnDefs).forEach(function(e){if(t._columnDefsByName.has(e.name))throw Error('Duplicate column definition name provided: "'+e.name+'".');t._columnDefsByName.set(e.name,e)})},t.prototype._cacheRowDefs=function(){this._headerRowDefs=D(this._contentHeaderRowDefs,this._customHeaderRowDefs),this._footerRowDefs=D(this._contentFooterRowDefs,this._customFooterRowDefs),this._rowDefs=D(this._contentRowDefs,this._customRowDefs);var t=this._rowDefs.filter(function(t){return!t.when});if(!this.multiTemplateDataRows&&t.length>1)throw Error("There can only be one default row without a when predicate function.");this._defaultRowDef=t[0]},t.prototype._renderUpdatedColumns=function(){var t=function(t,e){return t||!!e.getColumnsDiff()};this._rowDefs.reduce(t,!1)&&this._forceRenderDataRows(),this._headerRowDefs.reduce(t,!1)&&this._forceRenderHeaderRows(),this._footerRowDefs.reduce(t,!1)&&this._forceRenderFooterRows()},t.prototype._switchDataSource=function(t){this._data=[],this.dataSource instanceof l.a&&this.dataSource.disconnect(this),this._renderChangeSubscription&&(this._renderChangeSubscription.unsubscribe(),this._renderChangeSubscription=null),t||(this._dataDiffer&&this._dataDiffer.diff([]),this._rowOutlet.viewContainer.clear()),this._dataSource=t},t.prototype._observeRenderChanges=function(){var t=this;if(this.dataSource){var e;if(this.dataSource.connect instanceof Function?e=this.dataSource.connect(this):this.dataSource instanceof s.a?e=this.dataSource:Array.isArray(this.dataSource)&&(e=Object(c.a)(this.dataSource)),void 0===e)throw Error("Provided data source did not match an array, Observable, or DataSource");this._renderChangeSubscription=e.pipe(Object(h.a)(this._onDestroy)).subscribe(function(e){t._data=e||[],t.renderRows()})}},t.prototype._forceRenderHeaderRows=function(){var t=this;this._headerRowOutlet.viewContainer.length>0&&this._headerRowOutlet.viewContainer.clear(),this._headerRowDefs.forEach(function(e,n){return t._renderRow(t._headerRowOutlet,e,n)}),this.updateStickyHeaderRowStyles(),this.updateStickyColumnStyles()},t.prototype._forceRenderFooterRows=function(){var t=this;this._footerRowOutlet.viewContainer.length>0&&this._footerRowOutlet.viewContainer.clear(),this._footerRowDefs.forEach(function(e,n){return t._renderRow(t._footerRowOutlet,e,n)}),this.updateStickyFooterRowStyles(),this.updateStickyColumnStyles()},t.prototype._addStickyColumnStyles=function(t,e){var n=this,r=Array.from(e.columns||[]).map(function(t){return n._columnDefsByName.get(t)}),i=r.map(function(t){return t.sticky}),o=r.map(function(t){return t.stickyEnd});this._stickyStyler.updateStickyColumns(t,i,o)},t.prototype._getRenderedRows=function(t){for(var e=[],n=0;n<t.viewContainer.length;n++){var r=t.viewContainer.get(n);e.push(r.rootNodes[0])}return e},t.prototype._getRowDefs=function(t,e){if(1==this._rowDefs.length)return[this._rowDefs[0]];var n=[];if(this.multiTemplateDataRows)n=this._rowDefs.filter(function(n){return!n.when||n.when(e,t)});else{var r=this._rowDefs.find(function(n){return n.when&&n.when(e,t)})||this._defaultRowDef;r&&n.push(r)}if(!n.length)throw function(t){return Error("Could not find a matching row definition for theprovided row data: "+JSON.stringify(t))}(t);return n},t.prototype._insertRow=function(t,e){this._renderRow(this._rowOutlet,t.rowDef,e,{$implicit:t.data})},t.prototype._renderRow=function(t,e,n,r){void 0===r&&(r={}),t.viewContainer.createEmbeddedView(e.template,r,n);for(var i=0,o=this._getCellTemplates(e);i<o.length;i++)k.mostRecentCellOutlet&&k.mostRecentCellOutlet._viewContainer.createEmbeddedView(o[i],r);this._changeDetectorRef.markForCheck()},t.prototype._updateRowIndexContext=function(){for(var t=this._rowOutlet.viewContainer,e=0,n=t.length;e<n;e++){var r=t.get(e).context;r.count=n,r.first=0===e,r.last=e===n-1,r.even=e%2==0,r.odd=!r.even,this.multiTemplateDataRows?(r.dataIndex=this._renderRows[e].dataIndex,r.renderIndex=e):r.index=this._renderRows[e].dataIndex}},t.prototype._getCellTemplates=function(t){var e=this;return t&&t.columns?Array.from(t.columns,function(n){var r=e._columnDefsByName.get(n);if(!r)throw Error('Could not find column with id "'+n+'".');return t.extractCellTemplate(r)}):[]},t.prototype._applyNativeTableSections=function(){for(var t=0,e=[{tag:"thead",outlet:this._headerRowOutlet},{tag:"tbody",outlet:this._rowOutlet},{tag:"tfoot",outlet:this._footerRowOutlet}];t<e.length;t++){var n=e[t],r=document.createElement(n.tag);r.appendChild(n.outlet.elementRef.nativeElement),this._elementRef.nativeElement.appendChild(r)}},t.prototype._forceRenderDataRows=function(){this._dataDiffer.diff([]),this._rowOutlet.viewContainer.clear(),this.renderRows(),this.updateStickyColumnStyles()},t.prototype._checkStickyStates=function(){var t=function(t,e){return t||e.hasStickyChanged()};this._headerRowDefs.reduce(t,!1)&&this.updateStickyHeaderRowStyles(),this._footerRowDefs.reduce(t,!1)&&this.updateStickyFooterRowStyles(),Array.from(this._columnDefsByName.values()).reduce(t,!1)&&this.updateStickyColumnStyles()},t.prototype._setupStickyStyler=function(){var t=this;this._stickyStyler=new T(this._isNativeHtmlTable,this.stickyCssClass,this._dir?this._dir.value:"ltr"),(this._dir?this._dir.change:Object(c.a)()).pipe(Object(h.a)(this._onDestroy)).subscribe(function(e){t._stickyStyler.direction=e,t.updateStickyColumnStyles()})},t}();function D(t,e){return t.toArray().concat(Array.from(e))}var N=function(){}},yGWI:function(t,e,n){"use strict";n.d(e,"a",function(){return o});var r=n("mrSG"),i=n("FFOo");function o(){return function(t){return t.lift(new l(t))}}var l=function(){function t(t){this.connectable=t}return t.prototype.call=function(t,e){var n=this.connectable;n._refCount++;var r=new a(t,n),i=e.subscribe(r);return r.closed||(r.connection=n.connect()),i},t}(),a=function(t){function e(e,n){var r=t.call(this,e)||this;return r.connectable=n,r}return r.b(e,t),e.prototype._unsubscribe=function(){var t=this.connectable;if(t){this.connectable=null;var e=t._refCount;if(e<=0)this.connection=null;else if(t._refCount=e-1,e>1)this.connection=null;else{var n=this.connection,r=t._connection;this.connection=null,!r||n&&r!==n||r.unsubscribe()}}else this.connection=null},e}(i.a)},yWMr:function(t,e,n){"use strict";n.d(e,"a",function(){return f});var r=n("CcnG"),i=n("BgWK"),o=n("Ip0R"),l=(n("eDkP"),n("Fzqc"),n("4c35")),a=(n("dWZg"),n("qAlS"),n("Wf4p"),n("lLAP")),u=n("vGXY"),s=r.Pa({encapsulation:2,styles:[".mat-bottom-sheet-container{box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12);padding:8px 16px;min-width:100vw;box-sizing:border-box;display:block;outline:0;max-height:80vh;overflow:auto}@media screen and (-ms-high-contrast:active){.mat-bottom-sheet-container{outline:1px solid}}.mat-bottom-sheet-container-medium{min-width:384px;max-width:calc(100vw - 128px)}.mat-bottom-sheet-container-large{min-width:512px;max-width:calc(100vw - 256px)}.mat-bottom-sheet-container-xlarge{min-width:576px;max-width:calc(100vw - 384px)}"],data:{animation:[{type:7,name:"state",definitions:[{type:0,name:"void, hidden",styles:{type:6,styles:{transform:"translateY(100%)"},offset:null},options:void 0},{type:0,name:"visible",styles:{type:6,styles:{transform:"translateY(0%)"},offset:null},options:void 0},{type:1,expr:"visible => void, visible => hidden",animation:{type:4,styles:null,timings:"375ms cubic-bezier(0.4,0.0,1,1)"},options:null},{type:1,expr:"void => visible",animation:{type:4,styles:null,timings:"195ms cubic-bezier(0.0,0.0,0.2,1)"},options:null}],options:{}}]}});function c(t){return r.lb(0,[(t()(),r.Ia(0,null,null,0))],null,null)}function h(t){return r.lb(2,[r.hb(402653184,1,{_portalOutlet:0}),(t()(),r.Ia(16777216,null,null,1,null,c)),r.Qa(2,212992,[[1,4]],0,l.c,[r.j,r.Q],{portal:[0,"portal"]},null)],function(t,e){t(e,2,0,"")},null)}var f=r.Na("mat-bottom-sheet-container",i.c,function(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,1,"mat-bottom-sheet-container",[["aria-modal","true"],["class","mat-bottom-sheet-container"],["role","dialog"],["tabindex","-1"]],[[1,"aria-label",0],[40,"@state",0]],[["component","@state.start"],["component","@state.done"]],function(t,e,n){var i=!0;return"component:@state.start"===e&&(i=!1!==r.bb(t,1)._onAnimationStart(n)&&i),"component:@state.done"===e&&(i=!1!==r.bb(t,1)._onAnimationDone(n)&&i),i},h,s)),r.Qa(1,180224,null,0,i.c,[r.k,r.h,a.e,u.a,[2,o.c],i.b],null,null)],null,function(t,e){t(e,0,0,null==r.bb(e,1).bottomSheetConfig?null:r.bb(e,1).bottomSheetConfig.ariaLabel,r.bb(e,1)._animationState)})},{},{},[])},zAZS:function(t,e,n){"use strict";n.d(e,"a",function(){return o});var r=n("mrSG"),i=n("FFOo");function o(t,e){return function(n){return n.lift(new l(t,e,n))}}var l=function(){function t(t,e,n){this.predicate=t,this.thisArg=e,this.source=n}return t.prototype.call=function(t,e){return e.subscribe(new a(t,this.predicate,this.thisArg,this.source))},t}(),a=function(t){function e(e,n,r,i){var o=t.call(this,e)||this;return o.predicate=n,o.thisArg=r,o.source=i,o.index=0,o.thisArg=r||o,o}return r.b(e,t),e.prototype.notifyComplete=function(t){this.destination.next(t),this.destination.complete()},e.prototype._next=function(t){var e=!1;try{e=this.predicate.call(this.thisArg,t,this.index++,this.source)}catch(t){return void this.destination.error(t)}e||this.notifyComplete(!1)},e.prototype._complete=function(){this.notifyComplete(!0)},e}(i.a)},zUnb:function(t,e,n){"use strict";n.r(e);var r=n("CcnG"),i=n("AytR"),o=n("Ip0R"),l=n("aecd"),a=function(){return function(t,e){this.platformId=t,this.appId=e;var n=Object(o.w)(t)?"in the browser":"on the server";console.log("Running "+n+" with appId="+e)}}(),u=n("Mhm+"),s=n("rf30"),c=function(){function t(t,e,n,r){var i=this;this.breakpointObserver=t,this.router=e,this.chunkLoader=n,this.bottomSheet=r,this.showSubmenu=!1,this.showBackHomeLogo=!0,this.openedSideNav=!0,this.routerLinkChunkProcessing=function(t){i.routerLinkChunkProcessingUnbound(t,i)};var o=window.location.href;console.log("App component : "+o);var l=new RegExp("Team:GO_Paris-Saclay\\/.*"),a=o.match(l);if(Array.isArray(a)&&a.length){var u=a[0].slice(20);console.log("Preparing to navigate to Special Page Path : "+u);var c=s.c.find(function(t){return t.specialPageName==u});if(void 0==c)return void console.log("IPL : No redirection record found for special page.");console.log("IPL : Corresponding record found : "+c.specialPageName+" ("+c.chunkRecordPageName+", "+c.navTo+")"),e.navigate([c.navTo])}this.showBackHomeLogo=!0,"http://2018.igem.org/Team:GO_Paris-Saclay"!==o&&"http://2018.igem.org/Team:GO_Paris-Saclay#/"!==o&&"http://2018.igem.org/Team:GO_Paris-Saclay#"!==o||(this.showBackHomeLogo=!1)}return t.prototype.routerLinkChunkProcessingUnbound=function(t,e){0==i.a.production&&(console.log("AppComponent::routerLinkChunkProcessingUnbound Prod = false; navigating directly to "+t),e.router.navigate([t])),e.showBackHomeLogo="/"!==t,e.chunkLoader.loadPageChunk(t,function(){e.router.navigate([t])})},t.prototype.openWikiSourceBottomSheet=function(){this.sourcesheetref=this.bottomSheet.open(h)},t.prototype.ngOnInit=function(){},t}(),h=function(){function t(t){this.bottomSheetRef=t}return t.prototype.openLink=function(t){this.bottomSheetRef.dismiss(),t.preventDefault()},t}(),f=n("pMnS"),d=n("lzlj"),p=n("FVSy"),m=n("8dSa"),g=n("PHGO"),b=n("9Asj"),y=n("BgWK"),v=n("6UMx"),_=n("0/Q6"),w=n("Mr+X"),x=n("SMsm"),S=n("Wf4p"),C=n("VphZ"),k=function(){function t(t,e){this.router=t,this.route=e}return t.prototype.resetPositions=function(){this.RNAPol.attr("transform","translate(100,-100)"),this.RNA.attr("transform","translate(-100,-100)"),this.RNAPol_label.attr("transform","translate(-100,-100)"),this.HNS_label.attr("transform","translate(0,0)"),this.HNS.attr("transform","translate(0,0)"),this.HNS2.attr("transform","translate(0,0)"),this.HNS3.attr("transform","translate(0,0)"),this.HNS4.attr("transform","translate(0,0)"),this.Ler.attr("transform","translate(0,0)"),this.Ler_label.attr("transform","translate(0,0)")},t.prototype.runHNSAnim=function(){var t=this;this.resetPositions(),this.HNS_label.transition().duration(2e3).attr("transform","translate(10,40)").transition().duration(4e3).attr("transform","translate(-100,-100)"),this.HNS.transition().duration(2e3).attr("transform","translate(10,40)").on("end",function(){t.HNS2.transition().duration(1e3).attr("transform","translate(0,40)").on("end",function(){t.HNS3.transition().duration(1e3).attr("transform","translate(20,40)"),t.HNS4.transition().duration(1500).attr("transform","translate(30,40)").on("end",function(){t.Ler_label.transition().duration(500).attr("transform","translate(-20,35)"),t.Ler.transition().duration(500).attr("transform","translate(-20,35)").on("end",function(){t.Ler_label.transition().duration(1e3).attr("transform","translate(-100,-100)"),t.Ler.transition().duration(1e3).attr("transform","translate(-100,-100)").on("end",function(){t.RNAPol_label.transition().duration(1e3).attr("transform","translate(-55,20)"),t.RNAPol.transition().duration(1e3).attr("transform","translate(-80,20)").on("end",function(){t.RNAPol.transition().duration(1e3).attr("transform","translate(-100,-100)"),t.RNAPol_label.transition().duration(1e3).attr("transform","translate(-100,-100)").on("end",function(){t.resetPositions(),t.runLerAnim()})})})})})})})},t.prototype.runLerAnim=function(){var t=this;this.resetPositions(),this.HNS_label.transition().duration(1e3).attr("transform","translate(-0,-70)"),this.HNS.transition().duration(1e3).attr("transform","translate(-0,-70)"),this.HNS2.transition().duration(1e3).attr("transform","translate(-0,-70)"),this.HNS3.transition().duration(1e3).attr("transform","translate(0,-70)"),this.HNS4.transition().duration(1e3).attr("transform","translate(0,-70)"),this.Ler_label.transition().duration(2e3).attr("transform","translate(-20,40)").transition().duration(2e3).attr("transform","translate(-100,-100)"),this.Ler.transition().duration(2e3).attr("transform","translate(-20,40)").on("end",function(){t.RNAPol_label.transition().duration(1e3).attr("transform","translate(-55,20)"),t.RNAPol.transition().duration(1e3).attr("transform","translate(-80,30)").on("end",function(){t.RNA.attr("transform","translate(-80,40)").transition().duration(1e3).attr("transform","translate(100,40)").on("start",function(){}),t.RNAPol_label.transition().duration(1e3).attr("transform","translate(100,20)"),t.RNAPol.transition().duration(1e3).attr("transform","translate(100,30)").on("end",function(){t.resetPositions(),t.runHNSAnim()})})})},t.prototype.ngOnInit=function(){var t=this;this.route.fragment.subscribe(function(e){t.fragment=e}),this.HNS_label=C.a("#HNSLabel"),this.HNS=C.a("#HNS"),this.HNS2=C.a("#HNS2"),this.HNS3=C.a("#HNS3"),this.HNS4=C.a("#HNS4"),this.Ler_label=C.a("#LerLabel"),this.Ler=C.a("#Ler"),this.RNAPol=C.a("#RNA_Pol"),this.RNAPol_label=C.a("#RNAPolLabel"),this.RNA=C.a("#RNA"),this.runLerAnim()},t.prototype.ngAfterViewInit=function(){try{document.querySelector("#"+this.fragment).scrollIntoView()}catch(t){}},t}(),R=n("ZYCi"),j=r.Pa({encapsulation:0,styles:[["#gcontainer[_ngcontent-%COMP%]{margin:20px}.dashboard-card-content[_ngcontent-%COMP%]{text-align:left}.dashboard-card[_ngcontent-%COMP%]{overflow:auto}.grid-container[_ngcontent-%COMP%]{margin:20px}.lee5explainer[_ngcontent-%COMP%]{float:right}  .mat-line{word-wrap:break-word!important;white-space:pre-wrap!important}  .mat-list .mat-list-item{height:initial!important}"]],data:{}});function O(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,6,"div",[["class","bannercontainer"]],null,null,null,null,null)),(t()(),r.Ra(1,0,null,null,2,"video",[["autoplay","true"],["class","bannerimg superposedbanner1"],["loop","true"],["muted","true"],["style","margin-top: 00px;"],["width","1200"]],null,null,null,null,null)),(t()(),r.Ra(2,0,null,null,0,"source",[["src","http://2018.igem.org/wiki/images/d/db/T--GO_Paris-Saclay--bacteria_anim.mp4"],["type","video/mp4"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" Your browser does not support the video tag. "])),(t()(),r.Ra(4,0,null,null,0,"img",[["class","bannerimg superposedbanner2"],["src","http://2018.igem.org/wiki/images/8/89/T--GO_Paris-Saclay--topbanner_nocartouche.png"]],null,null,null,null,null)),(t()(),r.Ra(5,0,null,null,1,"div",[["class","headlinetextbottom"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Project\xa0Summary"])),(t()(),r.Ra(7,0,null,null,534,"mat-card",[["class","dashboard-card largemargin mat-card"]],null,null,null,d.d,d.a)),r.Qa(8,49152,null,0,p.a,[],null,null),(t()(),r.Ra(9,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(10,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(11,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Abstract"])),(t()(),r.Ra(13,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Cytotoxic anticancer drugs are among harmful chemicals found in hospital wastewater at high concentration. Physical and chemical degradation methods exist but are often inefficient, unsustainable or expensive. We propose MethotrExit, a bioreactor-based approach to tackle this problem. We focused on the biotransformation of methotrexate (MTX), a widely used anticancer drug. "])),(t()(),r.Ra(15,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["We designed synthetic cassettes encoding a new biotransformation pathway using an heterologous carboxypeptidase in Escherichia coli. In only 5 h of culture, MethotrExit drastically removes MTX from the media. However, the degradation of anticancer drugs and the biotransformation pathway itself can be toxic. To overcome these issues, biobricks bringing an heterogeneity in enzyme expression were built to ensure the survival of a subpopulation. Modeling of this system highlights the interest of a division of labor between \u2018cleaning\u2019 and \u2018stem\u2019 bacterial cells. "])),(t()(),r.Ra(17,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(18,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(19,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Project genesis"])),(t()(),r.Ra(21,0,null,0,1,"p",[["class","withlettrine"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" Our team GO Paris Saclay started its journey focusing on two main projects : one named \u2018Cytodestiny\u2019 aimed to develop and optimize, in a yeast model, functionalized nanobodies targeting \u03b1-synuclein aggregates responsible of Parkinson's disease; another one, the \u2018Heterogenious Cleaning Factory\u2019 designed to develop a bacterial platform capable of cleaning up hospital wastewater, contaminated with therapeutic anticancer agents. After a constructive peer-review session with our advisors and PIs, the \u2018Heterogenious Cleaning Factory\u2019 was finally chosen according to the following motivations : "])),(t()(),r.Ra(23,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" Anti-cancer drugs are chemotherapeutic agents, designed to kill or reduce proliferating cells. Most of these drugs are not completely metabolized by the patients, therefore are released in the environment in urine. "])),(t()(),r.Ra(25,0,null,0,4,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" Unfortunately, environmental risk assessment is available for only a limited number of anti-cancer drugs, derived mainly from predicted data and excluding information on their metabolites and transformation products"])),(t()(),r.Ra(27,0,null,null,1,"reference-box",[["shorthand","Toolaram2014"]],null,null,null,m.c,m.b)),r.Qa(28,114688,null,0,g.a,[b.a,y.a],{shorthand:[0,"shorthand"]},null),(t()(),r.jb(-1,null,[". It is known that the most commonly used drugs such as methotrexate (MTX) or 5-fluorouracil exhibit genotoxic effects due to their mechanism of action. "])),(t()(),r.Ra(30,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["The few available studies investigating these drugs show their presence in post-treatment wastewater meaning that the water treatment processes are not able to degrade them entirely. Here we describe how our project was designed with the purpose of degrading/transforming anti-cancer drugs. "])),(t()(),r.Ra(32,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" As proof of concept, we decided to focus on methotrexate (MTX), one of the most used anti-cancer drugs, found in high concentration in untreated hospital wastewater. As a folate analog, MTX acts as a chemotherapeutic drug by inhibiting dihydrofolate reductase (DHFR), an enzyme that reduces folic acid to tetrahydrofolic acid. Therefore, MTX interferes with DNA metabolism and cell replication. It is used to treat various diseases (e.g. cancer, rheumatoid arthritis, psoriasis ...). Since MTX is highly toxic, its presence in the hospital wastewater is worrying. "])),(t()(),r.Ra(34,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(35,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(36,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Design of the methotrexate transformation pathway"])),(t()(),r.Ra(38,0,null,0,3,"div",[["class","formoredetailssee"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["For a more detailled view, see "])),(t()(),r.Ra(40,0,null,null,1,"a",[],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.router.navigate(["/biology","mtx"],{fragment:"top"})&&r),r},null,null)),(t()(),r.jb(-1,null,["Methotrexate Degradation"])),(t()(),r.Ra(42,0,null,0,4,"mat-card",[["class","eatintotextmargin mat-card"]],null,null,null,d.d,d.a)),r.Qa(43,49152,null,0,p.a,[],null,null),(t()(),r.Ra(44,0,null,0,0,"img",[["class","wideimg"],["src","http://2018.igem.org/wiki/images/f/f3/T--GO_Paris-Saclay--degrad_complete_chemical.png"]],null,null,null,null,null)),(t()(),r.Ra(45,0,null,0,1,"div",[["class","mat-caption captionafterapicture"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Figure 1: Overview of the chemical transformation produced by our pathway "])),(t()(),r.Ra(47,0,null,0,19,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" For MTX biotransformation inside the cell, we focused our attention on two enzymes that have been described as involved in MTX biotransformation (Figure 1). The most important one is the "])),(t()(),r.Ra(49,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Pseudomonas"])),(t()(),r.jb(-1,null,[" carboxypeptidase G2 (Cpg2, commercialy marketed as "])),(t()(),r.Ra(52,0,null,null,1,"a",[["href","https://en.wikipedia.org/wiki/Glucarpidase"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Voraxase"])),(t()(),r.Ra(54,0,null,null,1,"sup",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["tm"])),(t()(),r.jb(-1,null,[") which rapidly converts MTX into less toxic metabolites glutamate and "])),(t()(),r.Ra(57,0,null,null,1,"abbr",[["title","2,4-diamino-N10-methylpteroic acid"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["DAMPA"])),(t()(),r.Ra(59,0,null,null,1,"reference-box",[["shorthand","Widemann2000"]],null,null,null,m.c,m.b)),r.Qa(60,114688,null,0,g.a,[b.a,y.a],{shorthand:[0,"shorthand"]},null),(t()(),r.Ra(61,0,null,null,1,"reference-box",[["shorthand","Larimer2014"]],null,null,null,m.c,m.b)),r.Qa(62,114688,null,0,g.a,[b.a,y.a],{shorthand:[0,"shorthand"]},null),(t()(),r.jb(-1,null,[" . We also tested the interest of co-expressing a bifunctional dihydrofolate synthase and folylpoly-\u03b3-glutamate synthetase (FolC) that could potentially enhance MTX catabolism by coupling MTX to polyglutamate "])),(t()(),r.Ra(64,0,null,null,1,"reference-box",[["shorthand","Chabner1985"]],null,null,null,m.c,m.b)),r.Qa(65,114688,null,0,g.a,[b.a,y.a],{shorthand:[0,"shorthand"]},null),(t()(),r.jb(-1,null,[" . By increasing its accumulation within the cell, FolC could allow higher effective MTX concentration and reaction rate. We hypothesized that in presence of FolC, the MTX is rapidly linked to polyglutamates, a reaction that could increase its metabolism by limiting its export and so that increasing the activity of Cpg2. "])),(t()(),r.Ra(67,0,null,0,7,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" For the MethotrExit project, we introduced in our chassis an expression cassette encoding "])),(t()(),r.Ra(69,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["cpg2"])),(t()(),r.jb(-1,null,[" gene under the control of lac promoter coupled or not to "])),(t()(),r.Ra(72,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["folC"])),(t()(),r.jb(-1,null,[" gene under the control of ara promoter. "])),(t()(),r.Ra(75,0,null,0,1,"h2",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Choice of chassis and indicative strains"])),(t()(),r.Ra(77,0,null,0,7,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" Many laboratory strains of "])),(t()(),r.Ra(79,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["E. coli"])),(t()(),r.jb(-1,null,[" are resistant to MTX. This resistance is mainly due to the export of MTX through efflux pumps composed of several proteins such as AcrA and TolC "])),(t()(),r.Ra(82,0,null,null,1,"reference-box",[["shorthand","Kopytek2000"]],null,null,null,m.c,m.b)),r.Qa(83,114688,null,0,g.a,[b.a,y.a],{shorthand:[0,"shorthand"]},null),(t()(),r.jb(-1,null,[" . One of the challenges of our project therefore relies on limiting MTX efflux to favor MTX biotransformation and sequestration within the \u2018cleaning factory\u2019. Moreover we needed an indicative strain to easily monitor MTX biotransformation. "])),(t()(),r.Ra(85,0,null,0,19,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" We decided to take advantage of the availability in our lab of the Keio collection "])),(t()(),r.Ra(87,0,null,null,1,"reference-box",[["shorthand","Baba2006"]],null,null,null,m.c,m.b)),r.Qa(88,114688,null,0,g.a,[b.a,y.a],{shorthand:[0,"shorthand"]},null),(t()(),r.jb(-1,null,[" to test the growth of several "])),(t()(),r.Ra(90,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["E. coli"])),(t()(),r.jb(-1,null,[" K12 mutants (\u0394"])),(t()(),r.Ra(93,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["acrA"])),(t()(),r.jb(-1,null,[", \u0394"])),(t()(),r.Ra(96,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["acrB"])),(t()(),r.jb(-1,null,[", \u0394"])),(t()(),r.Ra(99,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["abgT"])),(t()(),r.jb(-1,null,[", \u0394"])),(t()(),r.Ra(102,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["tolC"])),(t()(),r.jb(-1,null,[") in presence of MTX. "])),(t()(),r.Ra(105,0,null,0,12,"p",[["class","intermediateconclusion"]],null,null,null,null,null)),(t()(),r.Ra(106,0,null,null,1,"b",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Main conclusions"])),(t()(),r.jb(-1,null,[": The WT strain may constitute a suitable \u2018MTX-resistant chassis\u2019, whereas \u0394"])),(t()(),r.Ra(109,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["acrA"])),(t()(),r.jb(-1,null,[" and \u0394"])),(t()(),r.Ra(112,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["tolC"])),(t()(),r.jb(-1,null,[" strains could constitute MTX-sensitive indicative strains as well as chassis accumulating MTX. Since TolC is a general efflux pump component involved in a large panel of compound efflux (even in standard LB growth conditions), we thought it could be interesting to also evaluate its general interest as a chassis sequestrating MTX (and possibly other toxic molecules). Finally, the \u0394"])),(t()(),r.Ra(115,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["acrA"])),(t()(),r.jb(-1,null,[" mutant was used as an indicative strain for further bioassays since it presents no growth defect in absence of MTX. "])),(t()(),r.Ra(118,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(119,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(120,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Expression vector design"])),(t()(),r.Ra(122,0,null,0,10,"mat-card",[["class","sidefigure mat-card"]],null,null,null,d.d,d.a)),r.Qa(123,49152,null,0,p.a,[],null,null),(t()(),r.Ra(124,0,null,0,0,"img",[["class","wideimg"],["src","http://2018.igem.org/wiki/images/3/38/T--GO_Paris-Saclay--folC_cpg2_pSB1C3.png"]],null,null,null,null,null)),(t()(),r.Ra(125,0,null,0,7,"div",[["class","mat-caption captionafterapicture"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Figure 3: The "])),(t()(),r.Ra(127,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["folC"])),(t()(),r.jb(-1,null,["-"])),(t()(),r.Ra(130,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["cpg2"])),(t()(),r.jb(-1,null,[" encoding plasmid present within the MTX \u2018Cleaning Factory\u2019 "])),(t()(),r.Ra(133,0,null,0,10,"p",[],null,null,null,null,null)),(t()(),r.Ra(134,0,null,null,1,"b",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["FolC/folylpolyglutamate synthetase: adding a polyglutamate to MTX"])),(t()(),r.Ra(136,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" FolC is one of the enzymes (ATP-dependent) which can drive the glutamylation reaction. FolC is naturally encoded by "])),(t()(),r.Ra(138,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["E. coli"])),(t()(),r.jb(-1,null,[". However to control and overexpress it, we cloned "])),(t()(),r.Ra(141,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["folC"])),(t()(),r.jb(-1,null,[" under the control of the ara inducible promoter in pSB1C3. "])),(t()(),r.Ra(144,0,null,0,22,"p",[],null,null,null,null,null)),(t()(),r.Ra(145,0,null,null,1,"b",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Carboxypeptidase G2: breaking MTX into DAMPA and glutamate"])),(t()(),r.Ra(147,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" Originating from "])),(t()(),r.Ra(149,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Pseudomonas"])),(t()(),r.jb(-1,null,[" strain RS-16, carboxypeptidase is not naturally present in "])),(t()(),r.Ra(152,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["E. coli"])),(t()(),r.jb(-1,null,[" genome. The "])),(t()(),r.Ra(155,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["cpg2"])),(t()(),r.jb(-1,null,[" gene was cloned within pSB1C3 under the control of lac inducible promoter. We constructed two plasmids: one containing only "])),(t()(),r.Ra(158,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["cpg2"])),(t()(),r.jb(-1,null,[" expression cassette and the other harboring both "])),(t()(),r.Ra(161,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["cpg2"])),(t()(),r.jb(-1,null,[" and "])),(t()(),r.Ra(164,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["folC"])),(t()(),r.jb(-1,null,[" expression cassettes separated by a transcription terminator (Figure 3). "])),(t()(),r.Ra(167,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" The translation units in this expression vector were synthetized separately, courtesy of IDT, then assembled using standard biobrick assembly. "])),(t()(),r.Ra(169,0,null,0,0,"p",[["class","spacemaker"]],null,null,null,null,null)),(t()(),r.Ra(170,0,null,0,0,"p",[["class","spacemaker"]],null,null,null,null,null)),(t()(),r.Ra(171,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(172,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(173,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["MTX Biotransformation Assays"])),(t()(),r.Ra(175,0,null,0,3,"div",[["class","formoredetailssee"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["For a more detailled view, see "])),(t()(),r.Ra(177,0,null,null,1,"a",[],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.router.navigate(["/biology","mtx"],{fragment:"assays"})&&r),r},null,null)),(t()(),r.jb(-1,null,["Methotrexate Degradation : Assays"])),(t()(),r.Ra(179,0,null,0,10,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" To determine whether our \u2018Cleaning Factories\u2019 (WT and \u0394"])),(t()(),r.Ra(181,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["tolC"])),(t()(),r.jb(-1,null,[" strains harboring "])),(t()(),r.Ra(184,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["cpg2"])),(t()(),r.jb(-1,null,[" with or without "])),(t()(),r.Ra(187,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["folC"])),(t()(),r.jb(-1,null,[" expression cassette) were able to biotransform MTX, we performed the following experiments: "])),(t()(),r.Ra(190,0,null,0,34,"mat-list",[["class","mat-list"]],null,null,null,v.d,v.a)),r.Qa(191,49152,null,0,_.a,[],null,null),(t()(),r.Ra(192,0,null,0,17,"mat-list-item",[["class","mat-list-item"]],[[2,"mat-list-item-avatar",null],[2,"mat-list-item-with-avatar",null]],[[null,"focus"],[null,"blur"]],function(t,e,n){var i=!0;return"focus"===e&&(i=!1!==r.bb(t,193)._handleFocus()&&i),"blur"===e&&(i=!1!==r.bb(t,193)._handleBlur()&&i),i},v.c,v.b)),r.Qa(193,1097728,null,3,_.c,[r.k,[2,_.f]],null,null),r.hb(603979776,1,{_lines:1}),r.hb(335544320,2,{_avatar:0}),r.hb(335544320,3,{_icon:0}),(t()(),r.Ra(197,0,null,0,3,"mat-icon",[["class","mat-icon mat-list-icon"],["mat-list-icon",""],["role","img"]],[[2,"mat-icon-inline",null]],null,null,w.b,w.a)),r.Qa(198,638976,null,0,x.a,[r.k,x.c,[8,null]],null,null),r.Qa(199,16384,[[3,4]],0,_.b,[],null,null),(t()(),r.jb(-1,0,["keyboard_arrow_right"])),(t()(),r.Ra(201,0,null,1,2,"h4",[["class","mat-line"],["mat-line",""]],null,null,null,null,null)),r.Qa(202,16384,[[1,4]],0,S.m,[],null,null),(t()(),r.jb(-1,null,["Residual toxicity bioassays"])),(t()(),r.Ra(204,0,null,1,5,"p",[["class","mat-line"],["mat-line",""]],null,null,null,null,null)),r.Qa(205,16384,[[1,4]],0,S.m,[],null,null),(t()(),r.jb(-1,null,[" Analyzing the growth of the \u0394"])),(t()(),r.Ra(207,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["acrA"])),(t()(),r.jb(-1,null,[" indicative strain in presence of a set of supernatants containing MTX and incubated or not with the \u2018Cleaning Factories\u2019 "])),(t()(),r.Ra(210,0,null,0,14,"mat-list-item",[["class","mat-list-item"]],[[2,"mat-list-item-avatar",null],[2,"mat-list-item-with-avatar",null]],[[null,"focus"],[null,"blur"]],function(t,e,n){var i=!0;return"focus"===e&&(i=!1!==r.bb(t,211)._handleFocus()&&i),"blur"===e&&(i=!1!==r.bb(t,211)._handleBlur()&&i),i},v.c,v.b)),r.Qa(211,1097728,null,3,_.c,[r.k,[2,_.f]],null,null),r.hb(603979776,4,{_lines:1}),r.hb(335544320,5,{_avatar:0}),r.hb(335544320,6,{_icon:0}),(t()(),r.Ra(215,0,null,0,3,"mat-icon",[["class","mat-icon mat-list-icon"],["mat-list-icon",""],["role","img"]],[[2,"mat-icon-inline",null]],null,null,w.b,w.a)),r.Qa(216,638976,null,0,x.a,[r.k,x.c,[8,null]],null,null),r.Qa(217,16384,[[6,4]],0,_.b,[],null,null),(t()(),r.jb(-1,0,["keyboard_arrow_right"])),(t()(),r.Ra(219,0,null,1,2,"h4",[["class","mat-line"],["mat-line",""]],null,null,null,null,null)),r.Qa(220,16384,[[4,4]],0,S.m,[],null,null),(t()(),r.jb(-1,null,["HPLC analysis"])),(t()(),r.Ra(222,0,null,1,2,"p",[["class","mat-line"],["mat-line",""]],null,null,null,null,null)),r.Qa(223,16384,[[4,4]],0,S.m,[],null,null),(t()(),r.jb(-1,null,[" Searching for MTX and metabolites using an analytical-grade HPLC line "])),(t()(),r.Ra(225,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" The experimental scheme used for this study is summarized in the Figure 4. "])),(t()(),r.Ra(227,0,null,0,26,"mat-card",[["class","eatintotextmargin mat-card"],["style","overflow: auto;"]],null,null,null,d.d,d.a)),r.Qa(228,49152,null,0,p.a,[],null,null),(t()(),r.Ra(229,0,null,0,0,"img",[["src","http://2018.igem.org/wiki/images/a/a4/T--GO_Paris-Saclay--recap_exp_mtx.png"],["style","width:40%;float:left;margin-right: 1.2em;"]],null,null,null,null,null)),(t()(),r.Ra(230,0,null,0,23,"div",[["class","mat-caption captionafterapicture"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Figure 4: MTX-biotransformation assays "])),(t()(),r.Ra(232,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.Ra(233,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.Ra(234,0,null,null,19,"div",[["class","captionmaterialmethod"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" The WT and \u0394"])),(t()(),r.Ra(236,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["tolC"])),(t()(),r.jb(-1,null,[" chassis strains harbouring pSB1C3-"])),(t()(),r.Ra(239,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["cpg2"])),(t()(),r.jb(-1,null,[", pSB1C3-"])),(t()(),r.Ra(242,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["folC"])),(t()(),r.jb(-1,null,["-"])),(t()(),r.Ra(245,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["cpg2"])),(t()(),r.jb(-1,null,[" or control plasmids (pSB1C3-tet or pSB1C3-"])),(t()(),r.Ra(248,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["folC"])),(t()(),r.jb(-1,null,[") were precultured overnight under agitation at 37\xb0C in 4 ml of LB supplemented with 30 \xb5g/ml chloramphenicol. Thereafter, the chassis strains were inoculated at an opacimetry of 0.2 (DO600nm) in LB medium containing and 0.5 mM IPTG and 0.2 % arabinose and either 2% DMSO (\u2018control condition\u2019) or 512 \xb5M MTX (\u2018MTX condition\u2019). Five or 24 h after shaking at 37\xb0C, the samples were harvested, centrifuged and the supernatants filtered before being tested on the \u0394"])),(t()(),r.Ra(251,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["acrA"])),(t()(),r.jb(-1,null,[" indicative strain or submitted to HPLC analysis. "])),(t()(),r.Ra(254,0,null,0,0,"p",[["class","spacemaker"]],null,null,null,null,null)),(t()(),r.Ra(255,0,null,0,28,"mat-card",[["class","eatintotextmargin mat-card"]],null,null,null,d.d,d.a)),r.Qa(256,49152,null,0,p.a,[],null,null),(t()(),r.Ra(257,0,null,0,0,"img",[["class","wideimg"],["src","http://2018.igem.org/wiki/images/4/41/T--GO_Paris-Saclay--viability_assay.png"]],null,null,null,null,null)),(t()(),r.Ra(258,0,null,0,25,"div",[["class","mat-caption captionafterapicture"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Figure 5.1: MTX-bioassay using "])),(t()(),r.Ra(260,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["E. coli"])),(t()(),r.jb(-1,null,[" \u0394"])),(t()(),r.Ra(263,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["acrA"])),(t()(),r.jb(-1,null,[" mutant as an indicative strain "])),(t()(),r.Ra(266,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.Ra(267,0,null,null,16,"div",[["class","captionmaterialmethod"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" The \u0394"])),(t()(),r.Ra(269,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["acrA"])),(t()(),r.jb(-1,null,[" indicative strain was precultured overnight under agitation at 37\xb0C in 4 ml of LB medium. The culture was diluted in LB medium to obtain a \u20182X-culture\u2019 at an initial OD"])),(t()(),r.Ra(272,0,null,null,1,"sub",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["600nm"])),(t()(),r.jb(-1,null,[" of 0.04. Fifty \xb5l of this \u20182X-culture\u2019 were inoculated in a 96-well plate. Fifty \xb5l per well of supernatants filtrated after \u2018MTX biotransformation assays\u2019 performed during 20 h (Figure 4) were added to this \u20182X-culture\u2019 (so that the initial OD was 0.02 and the MTX concentration was of 256 \xb5M at maximum i.e. in absence of MTX-biotransformation). The 96-well plate was covered with an adhesive transparent top to avoid evaporation. Bacteria were grown at 37\xb0C in a Clariostar\xae plate reader (BMG LABtech GmbH), with orbital shaking, measuring OD"])),(t()(),r.Ra(275,0,null,null,1,"sub",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["600nm"])),(t()(),r.jb(-1,null,[" all 20 min. The growth over 500 min of the indicative strain incubated with different supernatants is presented in "])),(t()(),r.Ra(278,0,null,null,1,"span",[["style","font-weight: bold;"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["panel A"])),(t()(),r.jb(-1,null,[". The final opacimetry (at 500 min) is presented in "])),(t()(),r.Ra(281,0,null,null,1,"span",[["style","font-weight: bold;"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["panel B"])),(t()(),r.jb(-1,null,[". The results are the mean (\xb1 sem) of duplicates. "])),(t()(),r.Ra(284,0,null,0,0,"p",[["class","spacemaker"]],null,null,null,null,null)),(t()(),r.Ra(285,0,null,0,30,"p",[["class","intermediateconclusion"]],null,null,null,null,null)),(t()(),r.Ra(286,0,null,null,1,"b",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Main conclusions for the bioassay"])),(t()(),r.jb(-1,null,[": The MTX supernatants incubated during 20 h with the chassis strains (WT or \u2206"])),(t()(),r.Ra(289,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["tolC"])),(t()(),r.jb(-1,null,[") harboring a plasmid encoding "])),(t()(),r.Ra(292,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["cpg2"])),(t()(),r.jb(-1,null,[" under the control of lac promoter (pSB1C3-"])),(t()(),r.Ra(295,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["cpg2"])),(t()(),r.jb(-1,null,[" or pSB1C3-"])),(t()(),r.Ra(298,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["folC"])),(t()(),r.jb(-1,null,["-"])),(t()(),r.Ra(301,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["cpg2"])),(t()(),r.jb(-1,null,[") are not toxic anymore against the \u0394"])),(t()(),r.Ra(304,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["acrA"])),(t()(),r.jb(-1,null,[" indicative strain (Figure 5). The best growth yields of the indicative strains are observed when the \xab\xa0Cleaning Factory\xa0\xbb is the \u2206"])),(t()(),r.Ra(307,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["tolC"])),(t()(),r.jb(-1,null,[" mutant harboring pSB1C3-"])),(t()(),r.Ra(310,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["folC"])),(t()(),r.jb(-1,null,["-"])),(t()(),r.Ra(313,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["cpg2"])),(t()(),r.jb(-1,null,[". "])),(t()(),r.Ra(316,0,null,0,0,"p",[["class","spacemaker"]],null,null,null,null,null)),(t()(),r.Ra(317,0,null,0,20,"mat-card",[["class","eatintotextmargin mat-card"]],null,null,null,d.d,d.a)),r.Qa(318,49152,null,0,p.a,[],null,null),(t()(),r.Ra(319,0,null,0,0,"img",[["class","wideimg"],["src","http://2018.igem.org/wiki/images/0/0f/T--GO_Paris-Saclay--typ_hplc_res.png"]],null,null,null,null,null)),(t()(),r.Ra(320,0,null,0,17,"div",[["class","mat-caption captionafterapicture"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Figure 5.2: HPLC analysis of MTX medium incubated with a control strain or a \u2018MTX-Cleaning Factory\u2019 "])),(t()(),r.Ra(322,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.Ra(323,0,null,null,14,"div",[["class","captionmaterialmethod"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" The results correspond to the HPLC analysis of supernatants obtained after 5 h of incubation with WT strains harboring pSB1C3-tet (CLTR) or pSB1C3-"])),(t()(),r.Ra(325,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["folC"])),(t()(),r.jb(-1,null,["-"])),(t()(),r.Ra(328,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["cpg2"])),(t()(),r.jb(-1,null,[" (\u2018MTX Cleaning factory\u2019) bacteria as described in Figure 4. The HPLC assay was run with a reverse phase, C18 column. Detection was made using UV spectrophotometry at 303 nm (peak absorption 302-303 nm "])),(t()(),r.Ra(331,0,null,null,1,"reference-box",[["shorthand","Merck2007"]],null,null,null,m.c,m.b)),r.Qa(332,114688,null,0,g.a,[b.a,y.a],{shorthand:[0,"shorthand"]},null),(t()(),r.jb(-1,null,[" ) with peak-triggered UV-vis spectrum (diode array). The eluting solvent was a gradient of acetonitrile and water (with 0.1% v/v HCOOH). This mode of operation is very similar to the assay and impurities protocols of reference pharmacopeia for MTX. "])),(t()(),r.Ra(334,0,null,null,1,"reference-box",[["shorthand","PhEur2017"]],null,null,null,m.c,m.b)),r.Qa(335,114688,null,0,g.a,[b.a,y.a],{shorthand:[0,"shorthand"]},null),(t()(),r.Ra(336,0,null,null,1,"reference-box",[["shorthand","USP2007"]],null,null,null,m.c,m.b)),r.Qa(337,114688,null,0,g.a,[b.a,y.a],{shorthand:[0,"shorthand"]},null),(t()(),r.Ra(338,0,null,0,0,"p",[["class","spacemaker"]],null,null,null,null,null)),(t()(),r.Ra(339,0,null,0,9,"p",[["class","intermediateconclusion"]],null,null,null,null,null)),(t()(),r.Ra(340,0,null,null,1,"b",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Main conclusions for the HPLC analysis"])),(t()(),r.jb(-1,null,[": MTX is removed from the culture medium in presence of bacteria harboring "])),(t()(),r.Ra(343,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["cpg2"])),(t()(),r.jb(-1,null,[" encoding plasmids as early as 5 h post-incubation. Of note, the supernatants incubated only 5h with the chassis were tested but still present some toxicity against the \u2206"])),(t()(),r.Ra(346,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["acrA"])),(t()(),r.jb(-1,null,[" indicative strain (data not shown). We hypothesize that waiting longer (20 h) allow the bacteria to remove a toxic compound from the medium. "])),(t()(),r.Ra(349,0,null,0,5,"p",[],null,null,null,null,null)),(t()(),r.Ra(350,0,null,null,4,"b",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["In conclusion: The bacteria harboring a plasmid encoding "])),(t()(),r.Ra(352,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["cpg2"])),(t()(),r.jb(-1,null,[" are \u2018MTX-Cleaning Factories\u2019 that efficiently remove MTX from the medium."])),(t()(),r.Ra(355,0,null,0,0,"p",[["class","spacemaker"]],null,null,null,null,null)),(t()(),r.Ra(356,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(357,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(358,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Toward a \u2018HeteroGenious\u2019 expression of BioBricks"])),(t()(),r.Ra(360,0,null,0,3,"div",[["class","formoredetailssee"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["For a more detailled view, see "])),(t()(),r.Ra(362,0,null,null,1,"a",[],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.router.navigate(["/biology","heterogenious"],{fragment:"top"})&&r),r},null,null)),(t()(),r.jb(-1,null,["HeteroGenious expression"])),(t()(),r.Ra(364,0,null,0,44,"mat-card",[["class","sidefigure mat-card"]],null,null,null,d.d,d.a)),r.Qa(365,49152,null,0,p.a,[],null,null),(t()(),r.Ra(366,0,null,0,25,":svg:svg",[["class","lee5explainer"],["viewBox","0 0 250 100"]],null,null,null,null,null)),(t()(),r.Ra(367,0,null,null,24,":svg:g",[[":inkscape:label","Layer 1"],["id","layer1-7"],["transform","translate(0.21045238,11.007044)"]],null,null,null,null,null)),(t()(),r.Ra(368,0,null,null,0,":svg:path",[[":inkscape:connector-curvature","0"],["d","M 24.273365,68.217281 H 199.06763"],["id","DNA_tractline"],["style","fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.70000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"]],null,null,null,null,null)),(t()(),r.Ra(369,0,null,null,0,":svg:rect",[["height","15.501633"],["id","GFP_gene"],["style","opacity:1;fill:#50b47b;fill-opacity:1;stroke:none;stroke-width:2.04960823;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"],["width","105.83334"],["x","82.020828"],["y","59.248367"]],null,null,null,null,null)),(t()(),r.Ra(370,0,null,null,0,":svg:path",[[":inkscape:connector-curvature","0"],["d","M 56.126599,68.217279 V 54.051998 h 9.621705"],["id","LEE5_Prom_Arrow"],["style","fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.70000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Send)"]],null,null,null,null,null)),(t()(),r.Ra(371,0,null,null,3,":svg:text",[[":xml:space","preserve"],["id","GFP_Label"],["style","font-style:italic;font-variant:normal;font-weight:300;font-stretch:normal;font-size:10.58333302px;line-height:125%;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro, Light';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"],["x","126.95313"],["y","70.528824"]],null,null,null,null,null)),(t()(),r.Ra(372,0,null,null,2,":svg:tspan",[["id","tspan2612"],["style","stroke-width:0.26458332px"],["x","126.95313"],["y","70.528824"]],null,null,null,null,null)),(t()(),r.Ra(373,0,null,null,1,":svg:tspan",[["id","tspan2610"],["style","stroke-width:0.26458332px"],["x","126.95313"],["y","70.528824"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["GFP"])),(t()(),r.Ra(375,0,null,null,3,":svg:text",[[":xml:space","preserve"],["id","LEE5_Label"],["style","font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"],["x","46.903778"],["y","77.547478"]],null,null,null,null,null)),(t()(),r.Ra(376,0,null,null,2,":svg:tspan",[["id","tspan2618"],["style","stroke-width:0.26458332px"],["x","46.903778"],["y","77.547478"]],null,null,null,null,null)),(t()(),r.Ra(377,0,null,null,1,":svg:tspan",[["id","tspan2616"],["style","font-style:italic;font-variant:normal;font-weight:300;font-stretch:normal;font-size:10.58333302px;font-family:'Source Sans Pro';-inkscape-font-specification:'Source Sans Pro, Light Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"],["x","46.903778"],["y","77.547478"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["LEE5"])),(t()(),r.Ra(379,0,null,null,0,":svg:path",[["d","M 51.645202,28.269915 H 40.589667 l -5.918626,-5.459935 5.806954,-5.047855 h 11.055534 l -5.471928,5.047855 5.471928,5.047857 z"],["id","HNS"],["style","fill:#ff3800;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"]],null,null,null,null,null)),(t()(),r.Ra(380,0,null,null,0,":svg:path",[["d","M 51.645202,28.269915 H 40.589667 l -5.918626,-5.459935 5.806954,-5.047855 h 11.055534 l -5.471928,5.047855 5.471928,5.047857 z"],["id","HNS2"],["style","fill:#ff3800;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"]],null,null,null,null,null)),(t()(),r.Ra(381,0,null,null,0,":svg:path",[["d","M 51.645202,28.269915 H 40.589667 l -5.918626,-5.459935 5.806954,-5.047855 h 11.055534 l -5.471928,5.047855 5.471928,5.047857 z"],["id","HNS3"],["style","fill:#ff3800;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"]],null,null,null,null,null)),(t()(),r.Ra(382,0,null,null,0,":svg:path",[["d","M 51.645202,28.269915 H 40.589667 l -5.918626,-5.459935 5.806954,-5.047855 h 11.055534 l -5.471928,5.047855 5.471928,5.047857 z"],["id","HNS4"],["style","fill:#ff3800;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"]],null,null,null,null,null)),(t()(),r.Ra(383,0,null,null,0,":svg:path",[["d","m 85.950738,27.608459 h -11.05554 l -5.918624,-5.459936 5.806954,-5.047855 h 11.05553 c 0.08057,3.365533 0.03878,6.730179 0,10.095713 z"],["id","Ler"],["style","fill:#ee9942;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"]],null,null,null,null,null)),(t()(),r.Ra(384,0,null,null,0,":svg:path",[["d","m 159.90191,38.635006 h -17.37252 c -8.7785,-1.214539 -7.30392,-5.148532 -9.35443,-8.285353 -8.62849,2.681416 -7.43344,0.162134 -10.69078,0 -5.48854,-9.664339 -5.93783,-14.587134 0.66817,-10.022609 14.65528,0 23.60451,-8.559072 43.96584,0 0.38289,7.845351 -1.89798,14.025855 -7.21628,18.307962 z"],["id","RNA_Pol"],["style","fill:#216398;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"]],null,null,null,null,null)),(t()(),r.Ra(385,0,null,null,0,":svg:path",[["d","M 133.69158,10.972607 120.86266,2.9545174 h -16.43709 v -4.9444776 h 16.43709 l 12.82892,7.4067856 z"],["id","RNA"],["style","fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:12.00000033, 2.00000006;stroke-dashoffset:0;stroke-opacity:1"]],null,null,null,null,null)),(t()(),r.Ra(386,0,null,null,1,":svg:text",[["id","HNSLabel"],["x","32.673473"],["y","14.795038"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["H-NS "])),(t()(),r.Ra(388,0,null,null,1,":svg:text",[["id","LerLabel"],["x","71.794014"],["y","13.472123"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Ler "])),(t()(),r.Ra(390,0,null,null,1,":svg:text",[["id","RNAPolLabel"],["x","71.794014"],["y","13.472123"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["RNA Polymerase "])),(t()(),r.Ra(392,0,null,0,16,"div",[["class","mat-caption captionafterapicture"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Figure 8: Interplay between Ler and H-NS for the modulation of "])),(t()(),r.Ra(394,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["LEE5"])),(t()(),r.jb(-1,null,[" promoter activity "])),(t()(),r.Ra(397,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.Ra(398,0,null,null,10,"div",[["class","captionmaterialmethod"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" Ler is a nucleoid associated protein encoded by LEE (locus of enterocyte effacement) genomic island encoding a secretion system in enteropathogenic "])),(t()(),r.Ra(400,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["E. coli"])),(t()(),r.jb(-1,null,[". For the project, we used "])),(t()(),r.Ra(403,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["ler"])),(t()(),r.jb(-1,null,[" and its target DNA, a small part of LEE island containing the promoter region of the 5th operon, named "])),(t()(),r.Ra(406,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["LEE5"])),(t()(),r.jb(-1,null,[". This region has been shown to be recognized by two nucleoid-associated proteins, H-NS and Ler. \xa0H-NS and Ler belong to the same family of protein of proteins qualified as \u2018silencers\u2019 of foreign DNA expression, the H-NS family. However, it has been reported that Ler can counteract the H-NS silencing on the LEE island. "])),(t()(),r.Ra(409,0,null,0,10,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" While analysing the growth of our chassis strain (WT and \u0394"])),(t()(),r.Ra(411,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["tolC"])),(t()(),r.jb(-1,null,[" strain) in absence or presence of MTX, we noticed that the strains harboring pSB1C3-"])),(t()(),r.Ra(414,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["folC"])),(t()(),r.jb(-1,null,["-"])),(t()(),r.Ra(417,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["cpg2"])),(t()(),r.jb(-1,null,[" present a growth delay/defect. More generally, BioBrick expression and/or drug degradation may be toxic for the chassis strains, and can be detrimental for the long term maintenance of a cleaning bioreactor ; anti-cancer drugs degradation pathways may be especially affected, given these drugs target very basic mecanism of life, likely to be conserved from bacteria to man. "])),(t()(),r.Ra(420,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" Therefore we wanted our bioreactor to harbor a heterogeneous bacterial population so that all of them will not express the degradation pathway at the same time. This system is so called \u2018HeteroGenious\u2019 since it generates \u2018ingenious\u2019 heterogeneity within the \u2018cleaning factory\u2019 population. "])),(t()(),r.Ra(422,0,null,0,24,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" We took advantage of a recently described regulation system that can generate bimodal expression patterns in "])),(t()(),r.Ra(424,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["E. coli"])),(t()(),r.Ra(426,0,null,null,1,"reference-box",[["shorthand","Leh2017"]],null,null,null,m.c,m.b)),r.Qa(427,114688,null,0,g.a,[b.a,y.a],{shorthand:[0,"shorthand"]},null),(t()(),r.jb(-1,null,[" . Only two components must be provided to implement this \u2018heterogenious\u2019 system in "])),(t()(),r.Ra(429,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["E. coli"])),(t()(),r.jb(-1,null,[": "])),(t()(),r.Ra(432,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["LEE5"])),(t()(),r.jb(-1,null,[" promoter region and the gene encoding Ler (\u2018LEE encoded regulator\u2019). The "])),(t()(),r.Ra(435,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["E. coli"])),(t()(),r.jb(-1,null,[" endogeneous H-NS silencer also plays a part in the system: the competition between H-NS and Ler for "])),(t()(),r.Ra(438,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["LEE5"])),(t()(),r.jb(-1,null,[" binding can generate some heterogeneity of transgene expression within "])),(t()(),r.Ra(441,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["E. coli"])),(t()(),r.jb(-1,null,[" populations "])),(t()(),r.Ra(444,0,null,null,1,"reference-box",[["shorthand","Leh2017"]],null,null,null,m.c,m.b)),r.Qa(445,114688,null,0,g.a,[b.a,y.a],{shorthand:[0,"shorthand"]},null),(t()(),r.jb(-1,null,[" (Figure 8). "])),(t()(),r.Ra(447,0,null,0,13,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" Since H-NS is naturally present in "])),(t()(),r.Ra(449,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["E. coli"])),(t()(),r.jb(-1,null,[", our synthetic system requires only the expression of Ler and a transgene under the control of "])),(t()(),r.Ra(452,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["LEE5"])),(t()(),r.jb(-1,null,[". We analyzed the expression of "])),(t()(),r.Ra(455,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["gfp"])),(t()(),r.jb(-1,null,[" under the control of "])),(t()(),r.Ra(458,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["LEE5"])),(t()(),r.jb(-1,null,[" promoter as proof of concept. The resulting population was heterogeneous regarding GFP expression since one sub-population expressed GFP and the other did not (Figure 9). "])),(t()(),r.Ra(461,0,null,0,55,"mat-card",[["class","eatintotextmargin mat-card"],["style","overflow: auto;"]],null,null,null,d.d,d.a)),r.Qa(462,49152,null,0,p.a,[],null,null),(t()(),r.Ra(463,0,null,0,1,"div",[["class","centerstuff semiwideimg"]],null,null,null,null,null)),(t()(),r.Ra(464,0,null,null,0,"img",[["class","wideimg"],["src","http://2018.igem.org/wiki/images/f/f6/T--GO_Paris-Saclay--heterogeneity_example.png"]],null,null,null,null,null)),(t()(),r.Ra(465,0,null,0,51,"div",[["class","mat-caption captionafterapicture"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Figure 9: \u2018HeteroGenious\u2019 GFP expression using "])),(t()(),r.Ra(467,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["LEE5"])),(t()(),r.jb(-1,null,[" and Ler BioBricks "])),(t()(),r.Ra(470,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.Ra(471,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.Ra(472,0,null,null,44,"div",[["class","captionmaterialmethod"]],null,null,null,null,null)),(t()(),r.Ra(473,0,null,null,43,"mat-list",[["class","mat-list"]],null,null,null,v.d,v.a)),r.Qa(474,49152,null,0,_.a,[],null,null),(t()(),r.Ra(475,0,null,0,17,"mat-list-item",[["class","mat-list-item"]],[[2,"mat-list-item-avatar",null],[2,"mat-list-item-with-avatar",null]],[[null,"focus"],[null,"blur"]],function(t,e,n){var i=!0;return"focus"===e&&(i=!1!==r.bb(t,476)._handleFocus()&&i),"blur"===e&&(i=!1!==r.bb(t,476)._handleBlur()&&i),i},v.c,v.b)),r.Qa(476,1097728,null,3,_.c,[r.k,[2,_.f]],null,null),r.hb(603979776,7,{_lines:1}),r.hb(335544320,8,{_avatar:0}),r.hb(335544320,9,{_icon:0}),(t()(),r.Ra(480,0,null,0,3,"mat-icon",[["class","mat-icon mat-list-icon"],["mat-list-icon",""],["role","img"]],[[2,"mat-icon-inline",null]],null,null,w.b,w.a)),r.Qa(481,638976,null,0,x.a,[r.k,x.c,[8,null]],null,null),r.Qa(482,16384,[[9,4]],0,_.b,[],null,null),(t()(),r.jb(-1,0,["filter_1"])),(t()(),r.Ra(484,0,null,1,5,"h4",[["class","mat-line"],["mat-line",""]],null,null,null,null,null)),r.Qa(485,16384,[[7,4]],0,S.m,[],null,null),(t()(),r.jb(-1,null,["Fluorescent microscopy of "])),(t()(),r.Ra(487,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["E. coli"])),(t()(),r.jb(-1,null,[" K12 MG1655Z1 harboring pSB1C3-LEE5_GFP_native (BBa_K2688012)"])),(t()(),r.Ra(490,0,null,1,2,"p",[["class","mat-line"],["mat-line",""]],null,null,null,null,null)),r.Qa(491,16384,[[7,4]],0,S.m,[],null,null),(t()(),r.jb(-1,null,[" Bacteria were cultured in LB at 37\xb0C during 24h."])),(t()(),r.Ra(493,0,null,0,23,"mat-list-item",[["class","mat-list-item"]],[[2,"mat-list-item-avatar",null],[2,"mat-list-item-with-avatar",null]],[[null,"focus"],[null,"blur"]],function(t,e,n){var i=!0;return"focus"===e&&(i=!1!==r.bb(t,494)._handleFocus()&&i),"blur"===e&&(i=!1!==r.bb(t,494)._handleBlur()&&i),i},v.c,v.b)),r.Qa(494,1097728,null,3,_.c,[r.k,[2,_.f]],null,null),r.hb(603979776,10,{_lines:1}),r.hb(335544320,11,{_avatar:0}),r.hb(335544320,12,{_icon:0}),(t()(),r.Ra(498,0,null,0,3,"mat-icon",[["class","mat-icon mat-list-icon"],["mat-list-icon",""],["role","img"]],[[2,"mat-icon-inline",null]],null,null,w.b,w.a)),r.Qa(499,638976,null,0,x.a,[r.k,x.c,[8,null]],null,null),r.Qa(500,16384,[[12,4]],0,_.b,[],null,null),(t()(),r.jb(-1,0,["filter_2"])),(t()(),r.Ra(502,0,null,1,11,"h4",[["class","mat-line"],["mat-line",""]],null,null,null,null,null)),r.Qa(503,16384,[[10,4]],0,S.m,[],null,null),(t()(),r.jb(-1,null,["Cytometry analysis of "])),(t()(),r.Ra(505,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["E. coli"])),(t()(),r.jb(-1,null,[" K12 MG1655Z1 harboring pSB1C3-tet-Ler1 and an integrated "])),(t()(),r.Ra(508,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["LEE5"])),(t()(),r.jb(-1,null,["-"])),(t()(),r.Ra(511,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["gfp"])),(t()(),r.jb(-1,null,[" expression cassette"])),(t()(),r.Ra(514,0,null,1,2,"p",[["class","mat-line"],["mat-line",""]],null,null,null,null,null)),r.Qa(515,16384,[[10,4]],0,S.m,[],null,null),(t()(),r.jb(-1,null,["Bacteria were cultured in LB containing 50 ng/ml anhydrotetracyclin at 37\xb0C during 24h."])),(t()(),r.Ra(517,0,null,0,19,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" Depending on which protein (H-NS or LER) cooperatively binds to the "])),(t()(),r.Ra(519,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["LEE5"])),(t()(),r.jb(-1,null,[" promoter, "])),(t()(),r.Ra(522,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["gfp"])),(t()(),r.jb(-1,null,[" expression is silenced or activated. Using this interesting property, several possibilities are opened for application to our project. Instead of "])),(t()(),r.Ra(525,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["gfp"])),(t()(),r.jb(-1,null,[" transgene, "])),(t()(),r.Ra(528,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["cpg2"])),(t()(),r.jb(-1,null,[" and "])),(t()(),r.Ra(531,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["folC"])),(t()(),r.jb(-1,null,[" encoding genes could be cloned in operon under the control of "])),(t()(),r.Ra(534,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["LEE5"])),(t()(),r.jb(-1,null,[". This way, part of the population will not express the MTX-degradation pathway and therefore will ensure cell renewal in the bioreactor. This illustrates the concept of \u2018division of labor\u2019 between \u2018cleaning\u2019 and \u2018stem-like\u2019 bacteria. All together, we can combine the degradation pathway with our heterogeneous expression device to achieve efficient degradation and long-term maintenance of the \u2018Cleaning Factory\u2019. "])),(t()(),r.Ra(537,0,null,0,3,"div",[["class","formoredetailssee"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["A modeling of this system is presented on "])),(t()(),r.Ra(539,0,null,null,1,"a",[],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.router.navigate(["/modeling"],{fragment:"top"})&&r),r},null,null)),(t()(),r.jb(-1,null,["a dedicated section"])),(t()(),r.Ra(541,0,null,0,0,"p",[["class","spacemaker"]],null,null,null,null,null))],function(t,e){t(e,28,0,"Toolaram2014"),t(e,60,0,"Widemann2000"),t(e,62,0,"Larimer2014"),t(e,65,0,"Chabner1985"),t(e,83,0,"Kopytek2000"),t(e,88,0,"Baba2006"),t(e,198,0),t(e,216,0),t(e,332,0,"Merck2007"),t(e,335,0,"PhEur2017"),t(e,337,0,"USP2007"),t(e,427,0,"Leh2017"),t(e,445,0,"Leh2017"),t(e,481,0),t(e,499,0)},function(t,e){t(e,192,0,r.bb(e,193)._avatar||r.bb(e,193)._icon,r.bb(e,193)._avatar||r.bb(e,193)._icon),t(e,197,0,r.bb(e,198).inline),t(e,210,0,r.bb(e,211)._avatar||r.bb(e,211)._icon,r.bb(e,211)._avatar||r.bb(e,211)._icon),t(e,215,0,r.bb(e,216).inline),t(e,475,0,r.bb(e,476)._avatar||r.bb(e,476)._icon,r.bb(e,476)._avatar||r.bb(e,476)._icon),t(e,480,0,r.bb(e,481).inline),t(e,493,0,r.bb(e,494)._avatar||r.bb(e,494)._icon,r.bb(e,494)._avatar||r.bb(e,494)._icon),t(e,498,0,r.bb(e,499).inline)})}var E=r.Na("app-project-details",k,function(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,1,"app-project-details",[],null,null,null,O,j)),r.Qa(1,4308992,null,0,k,[R.n,R.a],null,null)],function(t,e){t(e,1,0)},null)},{},{},[]),T=n("bujt"),P=n("UodH"),I=n("dWZg"),A=n("lLAP"),M=n("wFw1"),D=function(){function t(){}return t.prototype.ngOnInit=function(){},t}(),N=r.Pa({encapsulation:0,styles:[["#gcontainer[_ngcontent-%COMP%]{margin:20px}.dashboard-card-content[_ngcontent-%COMP%]{text-align:left}.dashboard-card[_ngcontent-%COMP%]{overflow:auto}.grid-container[_ngcontent-%COMP%]{margin:20px}.screenshot[_ngcontent-%COMP%]{width:100%;margin-top:1em;margin-bottom:1em}.smallillus[_ngcontent-%COMP%]{width:30%;float:right}p[_ngcontent-%COMP%]{font-size:14pt;font-family:Lato,Helvetica,SansSerif}#even_more[_ngcontent-%COMP%]{color:#fe4a49;font-size:35px;margin-top:25px}#petit[_ngcontent-%COMP%]{color:#a6a6a6;font-size:25px;line-height:35px;font-family:Lato,Helvetica,SansSerif}#trespetit[_ngcontent-%COMP%]{font-size:18px}"]],data:{}});function L(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,4,"div",[["class","bannercontainer"]],null,null,null,null,null)),(t()(),r.Ra(1,0,null,null,0,"img",[["class","bannerimg superposedbanner1"],["src","http://2018.igem.org/wiki/images/0/08/T--GO_Paris-Saclay--software_underbanner.png"]],null,null,null,null,null)),(t()(),r.Ra(2,0,null,null,0,"img",[["class","bannerimg superposedbanner2"],["src","http://2018.igem.org/wiki/images/9/90/T--GO_Paris-Saclay--empty-banner.png"]],null,null,null,null,null)),(t()(),r.Ra(3,0,null,null,1,"div",[["class","headlinetext"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Software"])),(t()(),r.Ra(5,0,null,null,150,"mat-card",[["class","dashboard-card largemargin mat-card"]],null,null,null,d.d,d.a)),r.Qa(6,49152,null,0,p.a,[],null,null),(t()(),r.Ra(7,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(8,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(9,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Plasmid Sketcher at a glimpse"])),(t()(),r.Ra(11,0,null,0,4,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" Plasmid Sketcher is a "])),(t()(),r.Ra(13,0,null,null,1,"b",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["web-based software to draw plasmid map"])),(t()(),r.jb(-1,null,[". In contrast to existing tools, the view is not generated from sequence information, but entirely from user input: this allows for non-proportional, didactic plasmid map that showcase function over technical precision. "])),(t()(),r.Ra(16,0,null,0,3,"p",[],null,null,null,null,null)),(t()(),r.Ra(17,0,null,null,1,"b",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Recommended use"])),(t()(),r.jb(-1,null,[": to draw clear plasmid map for communication purpose (proposing a plasmid design, illustrating a poster, explaining a cloning process \u2026). Use other software for technical operations. "])),(t()(),r.Ra(20,0,null,0,7,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" You can use the software at "])),(t()(),r.Ra(22,0,null,null,5,"a",[["href","http://plasmidsketcher.page.link/start"],["mat-raised-button",""],["target","_blank"]],[[1,"tabindex",0],[1,"disabled",0],[1,"aria-disabled",0],[2,"_mat-animation-noopable",null]],[[null,"click"]],function(t,e,n){var i=!0;return"click"===e&&(i=!1!==r.bb(t,23)._haltDisabledEvents(n)&&i),i},T.c,T.a)),r.Qa(23,180224,null,0,P.a,[I.a,A.d,r.k,[2,M.a]],null,null),(t()(),r.Ra(24,0,null,0,2,"mat-icon",[["class","mat-icon"],["role","img"]],[[2,"mat-icon-inline",null]],null,null,w.b,w.a)),r.Qa(25,638976,null,0,x.a,[r.k,x.c,[8,null]],null,null),(t()(),r.jb(-1,0,["open_in_new"])),(t()(),r.jb(-1,0,[" Plasmid Sketcher website"])),(t()(),r.Ra(28,0,null,0,4,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" It is a Free and Open Source Software (FOSS) licenced under GPL v3 or later, with "])),(t()(),r.Ra(30,0,null,null,1,"a",[["href","http://2018.igem.org/wiki/images/b/bf/T--GO_Paris-Saclay--plasmid_sketcher.zip"],["target","_blank"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["source code available here"])),(t()(),r.jb(-1,null,[". It is based on Vixis\u2019 angularplasmid and Google Angular Material. "])),(t()(),r.Ra(33,0,null,0,2,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" The interface looks as follow. Depending on the size of your screen you may have to zoom out. "])),(t()(),r.Ra(35,0,null,null,0,"img",[["class","screenshot"],["src","http://2018.igem.org/wiki/images/7/74/T--GO_Paris-Saclay--plasmid_sketcher_screenshot1.png"]],null,null,null,null,null)),(t()(),r.Ra(36,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(37,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(38,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Inspiration for Plasmid Sketcher"])),(t()(),r.Ra(40,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" Visual communication has long been recognised as an integral part of biology, especially in bacteriology, cell biology and related disciplines. From the earliest papers, the textual description of restriction site positions, cloning protocols or operon structures have given way to the easier-to-grasp graphics we know and love. "])),(t()(),r.Ra(42,0,null,0,1,"h2",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["The first plasmid maps"])),(t()(),r.Ra(44,0,null,0,5,"p",[["class","textparagraph"]],null,null,null,null,null)),(t()(),r.Ra(45,0,null,null,0,"img",[["class","smallillus"],["src","http://2018.igem.org/wiki/images/8/85/T--GO_Paris-Saclay--pbr322_restr.png"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" The concept of plasmid as transferable genetic material with circular topology emerged slowly. Mapping of plasmid took off with the discovery of type II restriction enzyme, starting with \u201cendonuclease R\u201d (now known as a mix of HindII and HindIII) in 1970 "])),(t()(),r.Ra(47,0,null,null,1,"reference-box",[["shorthand","Loenen2014"]],null,null,null,m.c,m.b)),r.Qa(48,114688,null,0,g.a,[b.a,y.a],{shorthand:[0,"shorthand"]},null),(t()(),r.jb(-1,null,[" . The predictable and sequence-dependent cutting allowed characterization of fragment and later restriction cloning. Exploring the publication presenting the earliest widely-used plasmids like ColE1, pSC101 or pBR322, we see plasmids maps that look strikingly modern: except for dated typesetting, one could draw something similar for one\u2019s publication. "])),(t()(),r.Ra(50,0,null,0,1,"p",[["class","textparagraph"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" Modern consumer-oriented computers were just starting to appear: these are not the work of a cloning assistant software like we have today, but more likely custom-made illustration. This is something we wanted to emulate, to have the possibility to deviate from one-size-fit-all representations to more streamline figures. "])),(t()(),r.Ra(52,0,null,0,1,"h2",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Visual Language Standardization"])),(t()(),r.Ra(54,0,null,0,13,"p",[["class","textparagraph"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" Some attempts have been made to standardize the visual language of synthetic biology "])),(t()(),r.Ra(56,0,null,null,1,"reference-box",[["shorthand","Cox2018"]],null,null,null,m.c,m.b)),r.Qa(57,114688,null,0,g.a,[b.a,y.a],{shorthand:[0,"shorthand"]},null),(t()(),r.jb(-1,null,[" , or protein domain description "])),(t()(),r.Ra(59,0,null,null,1,"reference-box",[["shorthand","Cox2017"]],null,null,null,m.c,m.b)),r.Qa(60,114688,null,0,g.a,[b.a,y.a],{shorthand:[0,"shorthand"]},null),(t()(),r.jb(-1,null,[" . Other proposals would use such language as a base for software modelling of biological processes "])),(t()(),r.Ra(62,0,null,null,1,"reference-box",[["shorthand","Novere2009"]],null,null,null,m.c,m.b)),r.Qa(63,114688,null,0,g.a,[b.a,y.a],{shorthand:[0,"shorthand"]},null),(t()(),r.jb(-1,null,[" . With the notable exception of pathway modelling, where the existence of exhaustive and widely-used database like KEGG and associated tools like CellDesigner "])),(t()(),r.Ra(65,0,null,null,1,"reference-box",[["shorthand","Funahashi2003"]],null,null,null,m.c,m.b)),r.Qa(66,114688,null,0,g.a,[b.a,y.a],{shorthand:[0,"shorthand"]},null),(t()(),r.jb(-1,null,[" have lead to de facto standardisation, other fields have not widely embraced such standardisation attempts. "])),(t()(),r.Ra(68,0,null,0,1,"p",[["class","textparagraph"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" We hypothesise this is the case because such proposals are not derived from a discipline-wide consultation: the normative power of these visual languages fails to manifest simply though lack of adoption. "])),(t()(),r.Ra(70,0,null,0,4,"p",[["class","textparagraph"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" Seen as simply descriptive reviews of visual elements in use, such publication are still worthwhile, and we used "])),(t()(),r.Ra(72,0,null,null,1,"reference-box",[["shorthand","Cox2018"]],null,null,null,m.c,m.b)),r.Qa(73,114688,null,0,g.a,[b.a,y.a],{shorthand:[0,"shorthand"]},null),(t()(),r.jb(-1,null,[" as inspiration for some elements of our software. We recognize the advantages of having only one type of visual representation for each feature, but given the absence of consensus, our software provides a variety of visual style when possible. "])),(t()(),r.Ra(75,0,null,0,1,"h2",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Putting the map in perspective"])),(t()(),r.Ra(77,0,null,0,34,"p",[["class","textparagraph"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" When analysing implicit goals rather than explicit visual choices, we find that there is a duality of purpose in plasmid maps: "])),(t()(),r.Ra(79,0,null,null,31,"mat-list",[["class","mat-list"]],null,null,null,v.d,v.a)),r.Qa(80,49152,null,0,_.a,[],null,null),(t()(),r.Ra(81,0,null,0,14,"mat-list-item",[["class","mat-list-item"]],[[2,"mat-list-item-avatar",null],[2,"mat-list-item-with-avatar",null]],[[null,"focus"],[null,"blur"]],function(t,e,n){var i=!0;return"focus"===e&&(i=!1!==r.bb(t,82)._handleFocus()&&i),"blur"===e&&(i=!1!==r.bb(t,82)._handleBlur()&&i),i},v.c,v.b)),r.Qa(82,1097728,null,3,_.c,[r.k,[2,_.f]],null,null),r.hb(603979776,1,{_lines:1}),r.hb(335544320,2,{_avatar:0}),r.hb(335544320,3,{_icon:0}),(t()(),r.Ra(86,0,null,0,3,"mat-icon",[["class","mat-icon mat-list-icon"],["mat-list-icon",""],["role","img"]],[[2,"mat-icon-inline",null]],null,null,w.b,w.a)),r.Qa(87,638976,null,0,x.a,[r.k,x.c,[8,null]],null,null),r.Qa(88,16384,[[3,4]],0,_.b,[],null,null),(t()(),r.jb(-1,0,["keyboard_arrow_right"])),(t()(),r.Ra(90,0,null,1,2,"h4",[["class","mat-line"],["id","petit"],["mat-line",""]],null,null,null,null,null)),r.Qa(91,16384,[[1,4]],0,S.m,[],null,null),(t()(),r.jb(-1,null,["Technical precision"])),(t()(),r.Ra(93,0,null,1,2,"p",[["class","mat-line"],["id","trespetit"],["mat-line",""]],null,null,null,null,null)),r.Qa(94,16384,[[1,4]],0,S.m,[],null,null),(t()(),r.jb(-1,null,[" Features are marked exactly, that displayed size are proportional to their length. Exact representations. "])),(t()(),r.Ra(96,0,null,0,14,"mat-list-item",[["class","mat-list-item"]],[[2,"mat-list-item-avatar",null],[2,"mat-list-item-with-avatar",null]],[[null,"focus"],[null,"blur"]],function(t,e,n){var i=!0;return"focus"===e&&(i=!1!==r.bb(t,97)._handleFocus()&&i),"blur"===e&&(i=!1!==r.bb(t,97)._handleBlur()&&i),i},v.c,v.b)),r.Qa(97,1097728,null,3,_.c,[r.k,[2,_.f]],null,null),r.hb(603979776,4,{_lines:1}),r.hb(335544320,5,{_avatar:0}),r.hb(335544320,6,{_icon:0}),(t()(),r.Ra(101,0,null,0,3,"mat-icon",[["class","mat-icon mat-list-icon"],["mat-list-icon",""],["role","img"]],[[2,"mat-icon-inline",null]],null,null,w.b,w.a)),r.Qa(102,638976,null,0,x.a,[r.k,x.c,[8,null]],null,null),r.Qa(103,16384,[[6,4]],0,_.b,[],null,null),(t()(),r.jb(-1,0,["keyboard_arrow_right"])),(t()(),r.Ra(105,0,null,1,2,"h4",[["class","mat-line"],["id","petit"],["mat-line",""]],null,null,null,null,null)),r.Qa(106,16384,[[4,4]],0,S.m,[],null,null),(t()(),r.jb(-1,null,["Clear Communication"])),(t()(),r.Ra(108,0,null,1,2,"p",[["class","mat-line"],["id","trespetit"],["mat-line",""]],null,null,null,null,null)),r.Qa(109,16384,[[4,4]],0,S.m,[],null,null),(t()(),r.jb(-1,null,[" The overall purpose and functioning of the system is readily understood. Teaching material."])),(t()(),r.jb(-1,null,[" These purposes are sometime at odds. Smart compromise may be possible in some cases but not all. In synthetic biology, a high-level view is often valuable. Thus we wanted to offer a usable solution fulfilling the second identified goal. "])),(t()(),r.Ra(112,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(113,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(114,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["About the software"])),(t()(),r.Ra(116,0,null,0,4,"p",[["class","textparagraph"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" Following the recognized user persona method "])),(t()(),r.Ra(118,0,null,null,1,"reference-box",[["shorthand","Cooper2007"]],null,null,null,m.c,m.b)),r.Qa(119,114688,null,0,g.a,[b.a,y.a],{shorthand:[0,"shorthand"]},null),(t()(),r.jb(-1,null,[", the interface was designed assuming a target audience of scientists or students, having some familiarity with the underlying biological concepts. "])),(t()(),r.Ra(121,0,null,0,1,"h2",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Technical considerations"])),(t()(),r.Ra(123,0,null,0,10,"p",[["class","textparagraph"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" The technology used is AngularJS, though there is a will to port it to Angular (\u201cAngular 2.0\u201d). It is based on "])),(t()(),r.Ra(125,0,null,null,1,"a",[["href","http://angularplasmid.vixis.com/"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Angular Plasmid by Vixis"])),(t()(),r.jb(-1,null,[" for plasmid visual rendering; and "])),(t()(),r.Ra(128,0,null,null,1,"a",[["href","https://material.angularjs.org/"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Google Angular Material"])),(t()(),r.jb(-1,null,[" for UI elements. It is an open source software licenced under the GNU GPL v3 or later. "])),(t()(),r.Ra(131,0,null,null,1,"a",[["href","http://2018.igem.org/wiki/images/b/bf/T--GO_Paris-Saclay--plasmid_sketcher.zip"],["target","_blank"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Source code available here"])),(t()(),r.jb(-1,null,[". "])),(t()(),r.Ra(134,0,null,0,1,"h2",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Future features"])),(t()(),r.Ra(136,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" While useable as of now, we plan to add further features, which will be published at the same URL. "])),(t()(),r.Ra(138,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" Future features : "])),(t()(),r.Ra(140,0,null,0,13,"table",[["class","mdl-data-table mdl-js-data-table mdl-data-table--selectable mdl-shadow--2dp halfwidetable"]],null,null,null,null,null)),(t()(),r.Ra(141,0,null,null,12,"tbody",[],null,null,null,null,null)),(t()(),r.Ra(142,0,null,null,2,"tr",[],null,null,null,null,null)),(t()(),r.Ra(143,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["More options for visual representation of features"])),(t()(),r.Ra(145,0,null,null,2,"tr",[],null,null,null,null,null)),(t()(),r.Ra(146,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Native export to vector format (PDF, SVG)"])),(t()(),r.Ra(148,0,null,null,2,"tr",[],null,null,null,null,null)),(t()(),r.Ra(149,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Custom CSS loading for in-depth theming"])),(t()(),r.Ra(151,0,null,null,2,"tr",[],null,null,null,null,null)),(t()(),r.Ra(152,0,null,null,1,"td",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["More shapes for the plasmid circle itself"])),(t()(),r.Ra(154,0,null,0,1,"p",[["id","even_more"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["And even more !"]))],function(t,e){t(e,25,0),t(e,48,0,"Loenen2014"),t(e,57,0,"Cox2018"),t(e,60,0,"Cox2017"),t(e,63,0,"Novere2009"),t(e,66,0,"Funahashi2003"),t(e,73,0,"Cox2018"),t(e,87,0),t(e,102,0),t(e,119,0,"Cooper2007")},function(t,e){t(e,22,0,r.bb(e,23).disabled?-1:r.bb(e,23).tabIndex||0,r.bb(e,23).disabled||null,r.bb(e,23).disabled.toString(),"NoopAnimations"===r.bb(e,23)._animationMode),t(e,24,0,r.bb(e,25).inline),t(e,81,0,r.bb(e,82)._avatar||r.bb(e,82)._icon,r.bb(e,82)._avatar||r.bb(e,82)._icon),t(e,86,0,r.bb(e,87).inline),t(e,96,0,r.bb(e,97)._avatar||r.bb(e,97)._icon,r.bb(e,97)._avatar||r.bb(e,97)._icon),t(e,101,0,r.bb(e,102).inline)})}var F=r.Na("app-computing-section",D,function(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,1,"app-computing-section",[],null,null,null,L,N)),r.Qa(1,114688,null,0,D,[],null,null)],function(t,e){t(e,1,0)},null)},{},{},[]),z=function(){function t(t){this.route=t}return t.prototype.ngOnInit=function(){var t=this;this.route.fragment.subscribe(function(e){t.fragment=e})},t.prototype.ngAfterViewInit=function(){MathJax.Hub.Queue(["Typeset",MathJax.Hub]);try{document.querySelector("#"+this.fragment).scrollIntoView()}catch(t){}},t}(),V=r.Pa({encapsulation:0,styles:[["#gcontainer[_ngcontent-%COMP%]{margin:20px}.dashboard-card-content[_ngcontent-%COMP%]{text-align:left}.dashboard-card[_ngcontent-%COMP%]{overflow:auto}.grid-container[_ngcontent-%COMP%]{margin:20px}"]],data:{}});function B(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,4,"div",[["class","bannercontainer"]],null,null,null,null,null)),(t()(),r.Ra(1,0,null,null,0,"img",[["class","bannerimg superposedbanner1"],["src","http://2018.igem.org/wiki/images/1/1b/T--GO_Paris-Saclay--tableau_banner.png"]],null,null,null,null,null)),(t()(),r.Ra(2,0,null,null,0,"img",[["class","bannerimg superposedbanner2"],["src","http://2018.igem.org/wiki/images/9/90/T--GO_Paris-Saclay--empty-banner.png"]],null,null,null,null,null)),(t()(),r.Ra(3,0,null,null,1,"div",[["class","headlinetext"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Model"])),(t()(),r.Ra(5,0,null,null,166,"mat-card",[["class","dashboard-card largemargin mat-card"]],null,null,null,d.d,d.a)),r.Qa(6,49152,null,0,p.a,[],null,null),(t()(),r.Ra(7,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(8,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(9,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Introduction"])),(t()(),r.Ra(11,0,null,0,2,"p",[["class","withlettrine"]],null,null,null,null,null)),(t()(),r.jb(-1,null,['In order to degrade drugs in hospital wastewater in a sustainable way, our biological system is split into two distinct populations with different biological properties. Specifically the growth of the "stem" cell population may be faster than the growth of the degrader population.\xa0Indeed degrader cells produce two enzymes, FolC and CPG2, which can cause a growth delay.'])),(t()(),r.Ra(13,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.Ra(14,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["We analyzed the population dynamics for several scenarios. It could happen in hospital effluents, where drugs release depends on many parameters like human errors, schedule of health services, etc. Finally, we demonstrated the effectiveness of our system by proving it can degrade drugs in many scenarios."])),(t()(),r.Ra(16,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(17,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(18,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Model construction"])),(t()(),r.Ra(20,0,null,0,1,"h2",[["id","AFirstApproach"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["A first approach: the exponential phase"])),(t()(),r.Ra(22,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[' Let\'s denote $n_1(t)$ the population of degradation cells, $n_2(t)$ the population of "stem" cells and $m(t)$ the quantity of methotrexate (MTX) in solution. '])),(t()(),r.Ra(24,0,null,0,3,"p",[],null,null,null,null,null)),(t()(),r.jb(25,null,[" According to our experiments, and general theoretical consideration, we can write the following reactions: \\begin","array}","clll} n_1 & \\xrightarrow","r_1} & n_1 & \\text","(degrader cells growth)} \\\\ n_2 & \\xrightarrow","r_2} & n_2 & \\text",'("stem" cells growth.)} \\\\ n_1 + m & \\xrightarrow',"-A} & n_1 & \\text","(degradation of methotrexate)} \\\\ \\star & \\xrightarrow","p} & m & \\text","(methotrexate input)} \\\\ \\end","array} "])),(t()(),r.Ra(26,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" The letter above the arrow is the rate at which the transformation happens. Here, all theses rates are assumed to be positive. "])),(t()(),r.Ra(28,0,null,0,3,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" Now, in order to transform those reactions into mathematical solutions we use the law of mass action . This law states that transformations are proportional to the input reactants. "])),(t()(),r.Ra(30,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.jb(31,null,[" Therefore: \\begin","eqnarray} \\frac","dn_1}","dt} & = & r_1 n_1 & (1.1)\\\\ \\frac","dn_2}","dt} & = & r_2 n_2 & (1.2)\\\\ \\frac","dm}","dt} & = & - A m n_1 + p & (1.3) \\end","eqnarray} "])),(t()(),r.Ra(32,0,null,0,1,"h3",[["id","EnvironmentCarryingCapacity"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["The environment carrying capacity"])),(t()(),r.Ra(34,0,null,0,2,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Over time and without methotrexate, both cell populations reach a stationary phase due to the finite carrying capacity $K$ of the environment. This new interaction explains that infinite population growth is unsustainable because the amount of renewable ressources in the environment is finite. "])),(t()(),r.Ra(36,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.Ra(37,0,null,0,4,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[' To this end, we multiply growth terms in equation (1.1) and (1.2) by $[1 - (n_1 + n_2)/K]$. This operation is known as "the Verhulst equation" '])),(t()(),r.Ra(39,0,null,null,1,"reference-box",[["shorthand","Murray2002"]],null,null,null,m.c,m.b)),r.Qa(40,114688,null,0,g.a,[b.a,y.a],{shorthand:[0,"shorthand"]},null),(t()(),r.jb(-1,null,[" . "])),(t()(),r.Ra(42,0,null,0,2,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" However at the steady state, this new term prevents cells from switching from $n_1$ to $n_2$ or from $n_2$ to $n_1$. Therefore, we add switching terms in our equations. "])),(t()(),r.Ra(44,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.Ra(45,0,null,0,4,"p",[],null,null,null,null,null)),(t()(),r.jb(46,null,["So, we have new biological reactions: \\begin","array}","clll} \\star & \\xrightarrow","\\text","environment}} & n_1 & \\text","(carrying capacity of the environment)} \\\\ \\star & \\xrightarrow","\\text","environment}} & n_2 & \\text","(carrying capacity of the environment)} \\\\ n_1 & \\xrightarrow","a} & n_2 & \\text","(switching from $n_1$ to $n_2$ at the steady state)} \\\\ n_2 & \\xrightarrow","b} & n_1 & \\text","(switching from $n_2$ to $n_1$ at the steady state)}. \\\\ \\end","array} "])),(t()(),r.Ra(47,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" The letter above the arrow is the rate at which the transformation happens. Here, all theses rates are assumed to be positive."])),(t()(),r.Ra(49,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.Ra(50,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(51,null,["Through the law of mass action, we transform these reactions into mathematical equations: \\begin","eqnarray} \\frac","dn_1}","dt} & = & r_1 n_1 ( 1 - \\frac","n_1 + n_2}","K}) + b n_2 - a n_1 & (eqn.A)\\\\ \\frac","dn_2}","dt} & = & r_2 n_2 ( 1 - \\frac","n_1 + n_2}","K}) + a n_1 - b n_2 & (eqn.B)\\\\ \\frac","dm}","dt} & = & - A m n_1 + p. & (eqn.C) \\end","eqnarray}"])),(t()(),r.Ra(52,0,null,0,1,"h3",[["id","ModelAssumptions"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Model assumptions and limitations"])),(t()(),r.Ra(54,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Our model relies on a few approximations and assumptions, which we found both necessary to keep the problem tractable, and realistic enough to attain our goal of giving us actionable insight."])),(t()(),r.Ra(56,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,['Furthermore, the linearity hypothesis only holds locally in the state space: as long as all parameters are "reasonable" then the approximation error is largely negligible. However considering more extreme regimes would be both impractical (hard to gather reliable experimental data) and irrelevant in pratice for our applied and industrial setting.'])),(t()(),r.Ra(58,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["While we have worked throughout our projet on a variety of models, we have found the ones presented here to be the most balanced in regards to the complexity / accuracy tradeoff, and most useful for effective decision making. In particular we expanded great effort in keeping our models analytically tractable where possible, as it is our opinion that analytical (ie. explicit) solutions are often much more enlightening to practitionners for further biological system design than numerical solutions."])),(t()(),r.Ra(60,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(61,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(62,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Mathematical Analysis"])),(t()(),r.Ra(64,0,null,0,1,"h2",[["id","TheSteadyState."]],null,null,null,null,null)),(t()(),r.jb(-1,null,["The steady state"])),(t()(),r.Ra(66,0,null,0,4,"mat-card",[["class","sidefigure mat-card"],["style","width: 70%;"]],null,null,null,d.d,d.a)),r.Qa(67,49152,null,0,p.a,[],null,null),(t()(),r.Ra(68,0,null,0,0,"img",[["class","wideimg"],["src","http://2018.igem.org/wiki/images/0/01/T--GO_Paris-Saclay--model_fig1.png"]],null,null,null,null,null)),(t()(),r.Ra(69,0,null,0,1,"div",[["class","mat-caption captionafterapicture"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Figure 1: Steady State without Methotrexate, a = 0.7, b = 0.3"])),(t()(),r.Ra(71,0,null,0,3,"p",[],null,null,null,null,null)),(t()(),r.jb(72,null,['Asymptotically, the population reaches steady state value $n_1 + n_2 = K$. Then the ratio between the "stem" cells and the degradation cells only depends on the switching parameters $a$ and $b$ (strain and pathway specific). $$ f = \\frac',"n_1}","n_2} = \\frac","b}","a}. $$ Figure 1 illustrates how $n_1$ and $n_2$ eventually reach a steady state when long times are considered. "])),(t()(),r.Ra(73,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.jb(74,null,[" In the end, $$ n_1 = \\frac","fK}","f + 1} $$ Moreover, this steady state is stable. It means that small pertubations around the equilibrium will not change the state of our system."])),(t()(),r.Ra(75,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(76,null,["When the system reaches steady state, (eqn.C) becomes: $$ 0 = \\frac","dm}","dt} = - A m n_1 + p = -A m \\frac","fK}","f + 1} + p$$ and $$ m = \\frac","f + 1}","fK} p A $$ Then, Methotrexate concentration converges to $$\\frac","f + 1}","fK} p A$$ "])),(t()(),r.Ra(77,0,null,0,0,"p",[],null,null,null,null,null)),(t()(),r.Ra(78,0,null,0,1,"h2",[["id","Proof"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Proof"])),(t()(),r.Ra(80,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(81,null,["1) At the steady state $n_1 + n_2$ = K. So we can simplify (eqn.A) and (eqn.B): \\begin","eqnarray} 0 & = & b n_2 - a n_1 \\\\ 0 & = & a n_1 - b n_2\\\\ \\end","eqnarray}"])),(t()(),r.Ra(82,0,null,0,4,"p",[],null,null,null,null,null)),(t()(),r.jb(83,null,["Therefore $$ b n_2 = a n_1 $$ and $$ \\frac","n_1}","n_2} = \\frac","b}","a} $$"])),(t()(),r.Ra(84,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.jb(85,null,[" 2) At the steady state we have $$n_1 + n_2 = K \\text"," and } f = \\frac","n_1}","n_2} = \\frac","b}","a}$$ Therefore $$\\frac","n_1}","n_1}+ \\frac","n_2}","n_1} = \\frac","K}","n_1} $$ So $$1 + \\frac","1}","f} = \\frac","K}","n_1} $$ So $$ n_1 = \\frac","fK}","f + 1}. $$ 3) Moreover this steady state is stable. In order to show that, let's take $\\varepsilon > 0$ where $\\varepsilon$ is a little perturbation. Then: \\begin","eqnarray} \\frac","dn_1}","dt} & = & r_1n_1 (1 - \\frac","n_1 + n_2 + \\varepsilon}","K}) - an_1 + bn_2 \\\\ & = & -r_1n_1 \\varepsilon + r_1n_1 (1 - \\frac","n_1 + n_2}","K}) - an_1 + bn_2. \\end","eqnarray} Near the equilibrium: $$ n_1 + n_2 \\approx K \\text"," and } f = \\frac","n_1}","n_2} \\approx \\frac","b}","a}.$$ Therefore: $$ \\frac","dn_1}","dt} \\approx -r_1n_1 \\varepsilon < 0 $$ We see that the value is negative, so we conclude that the steady state is stable. "])),(t()(),r.Ra(86,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.Ra(87,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(88,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(89,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Towards a system to degrade more drugs"])),(t()(),r.Ra(91,0,null,0,1,"h2",[["id","From-a-proof-of-concept-to-the-general-problem."]],null,null,null,null,null)),(t()(),r.jb(-1,null,["From a proof of concept to the general problem"])),(t()(),r.Ra(93,0,null,0,3,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Until now, our system was designed to only degradate methotrexate. But methotrexate is just a proof of concept, a way to show we can degrade any drug with our system.\xa0be able to iterate with a predictive model driven approach faster than it would be possible with only wetlab experiments. "])),(t()(),r.Ra(95,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" This is where our model becomes important because it can be adapted for any situation. This is the main motivation: be able to iterate with a predictive model driven approach faster than would be possible with only wetlab experiments."])),(t()(),r.Ra(97,0,null,0,6,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,['Here again let\'s denote $n_1(t)$ the population of degradation cells, $n_2(t)$ the population of "stem" cells and $d(t)$ the quantity of targeted drug. '])),(t()(),r.Ra(99,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" The main difference with our precedent model is that hazardous drugs may kill some of our cells. To represent that we introduce two growth terms. The first one $\\mu^g$ when there are no drugs, and the second one $\\mu^s$ when there are drugs in the environnement. "])),(t()(),r.Ra(101,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" Specifically $\\mu^s < \\mu^g$. "])),(t()(),r.Ra(103,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.Ra(104,0,null,0,2,"p",[],null,null,null,null,null)),(t()(),r.jb(105,null,["The transformation can be represented by biological reactions: \\begin","array}","clll} n_1 & \\xrightarrow","\\mu^g_1} & n_1 & \\text","(degradation cells growth without drugs)} \\\\ n_2 & \\xrightarrow","\\mu^g_2} & n_2 & \\text",'("stem" cells growth without drugs.)} \\\\ n_1 & \\xrightarrow',"\\mu^s_1} & n_1 & \\text","(degradation cells growth with drugs)} \\\\ n_2 & \\xrightarrow","\\mu^s_2} & n_2 & \\text",'("stem" cells growth with drugs.)} \\\\ n_1 + m & \\xrightarrow',"-A} & n_1 & \\text","(degradation of drugs)} \\\\ \\star & \\xrightarrow","p} & m & \\text","(drug input)} \\\\ \\star & \\xrightarrow","\\text","environment}} & n_1 & \\text","(carrying capacity of the environment)} \\\\ \\star & \\xrightarrow","\\text","environment}} & n_2 & \\text","(carrying capacity of the environment)} \\\\ n_1 & \\xrightarrow","a} & n_2 & \\text","(switching from $n_1$ to $n_2$ at the steady state)} \\\\ n_2 & \\xrightarrow","b} & n_1 & \\text","(switching from $n_2$ to $n_1$ at the steady state)}. \\\\ \\end","array} "])),(t()(),r.Ra(106,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.Ra(107,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(108,null,["We use the Law of Mass Action to translate theses reactions into mathematical equations: \\begin","eqnarray} \\frac","dn_1}","dt} & = & \\mu_1 n_1 ( 1 - \\frac","n_1 + n_2}","K}) + b n_2 - a n_1 & (eqn.D)\\\\ \\frac","dn_2}","dt} & = & \\mu_2 n_2 ( 1 - \\frac","n_1 + n_2}","K}) + a n_1 - b n_2 & (eqn.E)\\\\ \\frac","dm}","dt} & = & - A m n_1 + p. & (eqn.F) \\end","eqnarray}"])),(t()(),r.Ra(109,0,null,0,1,"h2",[["id","ResponseEnvironmentalShift."]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Response to an environmental shift"])),(t()(),r.Ra(111,0,null,0,4,"mat-card",[["class","sidefigure mat-card"],["style","width: 70%;"]],null,null,null,d.d,d.a)),r.Qa(112,49152,null,0,p.a,[],null,null),(t()(),r.Ra(113,0,null,0,0,"img",[["class","wideimg"],["src","http://2018.igem.org/wiki/images/2/24/T--GO_Paris-Saclay--model_fig2.png"]],null,null,null,null,null)),(t()(),r.Ra(114,0,null,0,1,"div",[["class","mat-caption captionafterapicture"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Figure 2: The degradation of Methotrexate"])),(t()(),r.Ra(116,0,null,0,28,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Patra and Klumpp "])),(t()(),r.Ra(118,0,null,null,1,"reference-box",[["shorthand","Patra2013"]],null,null,null,m.c,m.b)),r.Qa(119,114688,null,0,g.a,[b.a,y.a],{shorthand:[0,"shorthand"]},null),(t()(),r.jb(-1,null,[" tudied the dynamics of a similar system where a population that has been growing without drugs is exposed to drugs. Before removing all kind of drugs (Fig.2), there is a biphasis dynamic which translates into different phenotypes in the cell population (Fig. 4)."])),(t()(),r.Ra(121,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" The authors said that: "])),(t()(),r.Ra(123,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.Ra(124,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.Ra(125,0,null,null,3,"font",[["color","grey"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[' "At time t~15 hours, the parameters were changed to those for stress condition. After the shift to stress conditions (by the addition of an antibiotic), the total population displays the biphasic decay behavior. In the fast-decaying phase, the decay of the total population is dominated by the death of normal cells, while in the second, slower-decaying phase, the total population consists predominantly of persister cells and the decay rate is governed by the death rate of the persisters. '])),(t()(),r.Ra(127,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[' The transition between the two different phases occurs when both subpopulations becomes equal in size" '])),(t()(),r.jb(-1,null,[" ( "])),(t()(),r.Ra(130,0,null,null,1,"reference-box",[["shorthand","Patra2013"]],null,null,null,m.c,m.b)),r.Qa(131,114688,null,0,g.a,[b.a,y.a],{shorthand:[0,"shorthand"]},null),(t()(),r.jb(-1,null,[" , p.5). "])),(t()(),r.Ra(133,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.Ra(134,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.Ra(135,0,null,null,8,"mat-card",[["class","wideimg mat-card"]],null,null,null,d.d,d.a)),r.Qa(136,49152,null,0,p.a,[],null,null),(t()(),r.Ra(137,0,null,0,0,"img",[["class","wideimg"],["src","http://2018.igem.org/wiki/images/8/8a/T--GO_Paris-Saclay--model_fig3.png"]],null,null,null,null,null)),(t()(),r.Ra(138,0,null,0,5,"div",[["class","mat-caption captionafterapicture"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Figure 4 "])),(t()(),r.Ra(140,0,null,null,1,"reference-box",[["shorthand","Patra2013"]],null,null,null,m.c,m.b)),r.Qa(141,114688,null,0,g.a,[b.a,y.a],{shorthand:[0,"shorthand"]},null),(t()(),r.Ra(142,0,null,null,1,"div",[["class","captionmaterialmethod"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[' Numerical integration of Eqs. (D,E) over a growth period of 15 hours (with \u03bcgn 2hr\u22121,\u03bcgn 0.2hr\u22121) followed by a stress period (with \u03bcgn \u22122hr\u22121,\u03bcgn \u22120.2hr\u22121) of another 15 hours. The switching rates were chosen to be a 0,001hr\u22121 and b 0,0001hr\u22121 . The killing curve of total population show two distinct phases, a fast-decaying phase and a slow-decaying phase. (b) Numerical integration of Eqs. (1) over a stress period of 15 hours followed by a regrowth period of another 15 hours. The regrowth curve of the total population shows two distinct phases, a slow-growing phase followed by a fast-growing phase. The parameters are the same as in (a). Here the "stem" cells are the normal cells, and the degradation cells are the persistence cells. '])),(t()(),r.jb(144,null,[" They even compute $T_s$, the time where transition occurs: $$T_s \\approx \\frac","1}","\\Delta_s} \\cdot ln(\\frac","n_2(0)}","n_1(0)}) $$ where $\\Delta_s = (\\mu_1^s - a) - (\\mu_2^s - b)$. We also note $\\Delta_g = (\\mu_2^g - b) - (\\mu_1^g - a)$ "])),(t()(),r.Ra(145,0,null,0,1,"h2",[["id","Dynamics-in-periodically-switching-environment."]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Dynamics in a periodically switching environment"])),(t()(),r.Ra(147,0,null,0,3,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["In real conditions, drugs quantity depends on many factors: human errors, schedule of health services, and so on. But even if that quantity is not a constant, a looser but more realistic assumption would be that drug input is periodic. "])),(t()(),r.Ra(149,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.jb(150,null,[" Here, we will calculate the optimal parameters $a_","opt}$ and $b_","opt}$ in order to degrade the drug."])),(t()(),r.Ra(151,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(152,null,["During one period, let's denote $t_s$ the duration of drugs presence in the environment and $t_g$ the duration without drugs. The average growth rates of our cells populations are: \\begin","eqnarray} <\\mu_1> & = & \\frac","<\\mu_1^g> t_g + <\\mu_1^s> t_s}","t_g + t_s} \\\\ <\\mu_2> & = & \\frac","<\\mu_2^g> t_g + <\\mu_2^s> t_s}","t_g + t_s} \\\\ \\end","eqnarray} where $<x>$ is the average growth rate of x."])),(t()(),r.Ra(153,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(154,null,["Let's denote $\\mu = \\mu_1 + \\mu_2$ the global growth rate. Then $$ <\\mu> = \\frac","<\\mu_1^g> t_g + <\\mu_1^s> t_s}","t_g + t_s} + \\frac","<\\mu_2^g> t_g + <\\mu_2^s> t_s}","t_g + t_s} $$ Then, we use results in Patra and Klumpp [3] to compute that: $$ <\\mu> = \\frac","(\\mu_2^g - b) t_g + (\\mu_1^s - a) t_s}","t_g + t_s} + \\frac","ln(\\frac","ab}","\\Delta_s \\Delta_g})}","t_g + t_s} $$ We consider that $a$ and $b$ are optimal when they maximize $<\\mu>$. That means that: $$ \\frac","1}","a_","opt}} = t_s - \\frac","1}","\\Delta_s} + \\frac","1}","\\Delta_g}$$ $$ \\frac","1}","b_","opt}} = t_g - \\frac","1}","\\Delta_g} + \\frac","1}","\\Delta_s} $$ Thus, we have found $a_","opt}$ and $b_","opt}$ in order to degrade drugs. If we had to build such a biological system, we would aim for these values when assessing possible promoters."])),(t()(),r.Ra(155,0,null,0,1,"h2",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Conclusion"])),(t()(),r.Ra(157,0,null,0,3,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" First and foremost, does our model justify the bimodal system? The answer is yes. In other case, they would be just one population to degrade MTX that would be poisoned by FolC and CPG2. Therefore the rate of evolution would be negative and the population would collapse. "])),(t()(),r.Ra(159,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" This justifies the use of a bimodal system, because that's the only way to reach a steady state where both populations don't collapse. "])),(t()(),r.Ra(161,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["In this such system, our model shows that our device is useful when the rate of evolution delay caused by FolC and CPG2 is not so important. Indeed we can see (Fig. 4) that both population reach the steady case in a short case. But if the rate of evolution delay is important, the population of degraders cannot increase. (Fig. 5), which threatens the proper functioning of our system. "])),(t()(),r.Ra(163,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" This model could be easily generalized to any situation involving drug degradation, taking into account at least 3 parameters: i) drug toxicity (not considered here because MTX is not toxic for WT E. coli), ii) loss of fitness associated to its degradation pathway, and iii) the rate of renewal. "])),(t()(),r.Ra(165,0,null,0,5,"mat-card",[["class","normalmargin mat-card"],["style","width: 80%;"]],null,null,null,d.d,d.a)),r.Qa(166,49152,null,0,p.a,[],null,null),(t()(),r.Ra(167,0,null,0,0,"img",[["class","wideimg"],["src","http://2018.igem.org/wiki/images/8/85/T--GO_Paris-Saclay--model_fig4.png"]],null,null,null,null,null)),(t()(),r.Ra(168,0,null,0,0,"img",[["class","wideimg"],["src","http://2018.igem.org/wiki/images/1/19/T--GO_Paris-Saclay--model_fig5.png"]],null,null,null,null,null)),(t()(),r.Ra(169,0,null,0,1,"div",[["class","mat-caption captionafterapicture"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Figure 4 & 5 "])),(t()(),r.Ra(171,0,null,0,0,"p",[["class","spacemaker"]],null,null,null,null,null))],function(t,e){t(e,40,0,"Murray2002"),t(e,119,0,"Patra2013"),t(e,131,0,"Patra2013"),t(e,141,0,"Patra2013")},function(t,e){t(e,25,1,["{","{","{","{","{","{","{","{","{","{","{"]),t(e,31,0,"{","{","{","{","{","{","{","{"),t(e,46,1,["{","{","{","{","{","{","{","{","{","{","{","{","{"]),t(e,51,1,["{","{","{","{","{","{","{","{","{","{","{","{"]),t(e,72,0,"{","{","{","{"),t(e,74,0,"{","{"),t(e,76,0,"{","{","{","{","{","{","{","{"),t(e,81,0,"{","{"),t(e,83,0,"{","{","{","{"),t(e,85,1,["{","{","{","{","{","{","{","{","{","{","{","{","{","{","{","{","{","{","{","{","{","{","{","{","{","{","{","{","{","{","{","{"]),t(e,105,1,["{","{","{","{","{","{","{","{","{","{","{","{","{","{","{","{","{","{","{","{","{","{","{","{","{"]),t(e,108,1,["{","{","{","{","{","{","{","{","{","{","{","{"]),t(e,144,0,"{","{","{","{"),t(e,150,0,"{","{"),t(e,152,0,"{","{","{","{","{","{"),t(e,154,1,["{","{","{","{","{","{","{","{","{","{","{","{","{","{","{","{","{","{","{","{","{","{","{","{","{","{"])})}var H=r.Na("app-modeling",z,function(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,1,"app-modeling",[],null,null,null,B,V)),r.Qa(1,4308992,null,0,z,[R.a],null,null)],function(t,e){t(e,1,0)},null)},{},{},[]),G=n("AyJq"),U=n("jlZm"),q=n("YlbQ"),Q=function(){function t(t){this.router=t}return t.prototype.ngOnInit=function(){},t}(),W=r.Pa({encapsulation:0,styles:[["#gcontainer[_ngcontent-%COMP%]{margin:20px}.dashboard-card-content[_ngcontent-%COMP%]{text-align:left}.dashboard-card[_ngcontent-%COMP%]{overflow:auto}.grid-container[_ngcontent-%COMP%]{margin:20px}div.item[_ngcontent-%COMP%]{vertical-align:top;display:inline-block;text-align:center;width:140px;margin:0 10px}hpicons[_ngcontent-%COMP%]{width:100px;background-color:grey}.hptext[_ngcontent-%COMP%]{text-align:center}"]],data:{}});function Y(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,4,"div",[["class","bannercontainer"]],null,null,null,null,null)),(t()(),r.Ra(1,0,null,null,0,"img",[["class","bannerimg superposedbanner1"],["src","http://2018.igem.org/wiki/images/0/03/T--GO_Paris-Saclay--fond_groupe.png"]],null,null,null,null,null)),(t()(),r.Ra(2,0,null,null,0,"img",[["class","bannerimg superposedbanner2"],["src","http://2018.igem.org/wiki/images/9/90/T--GO_Paris-Saclay--empty-banner.png"]],null,null,null,null,null)),(t()(),r.Ra(3,0,null,null,1,"div",[["class","headlinetext"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Human\xa0Practices"])),(t()(),r.Ra(5,0,null,null,505,"mat-card",[["class","dashboard-card largemargin mat-card"]],null,null,null,d.d,d.a)),r.Qa(6,49152,null,0,p.a,[],null,null),(t()(),r.Ra(7,0,null,0,35,"div",[["class","normalmargin"],["style","display:flex;flex-direction: row ;flex-wrap: nowrap; justify-content:center;"]],null,null,null,null,null)),(t()(),r.Ra(8,0,null,null,6,"div",[["class","item"]],null,null,null,null,null)),(t()(),r.Ra(9,0,null,null,5,"a",[["href","#impact"]],null,null,null,null,null)),(t()(),r.Ra(10,0,null,null,0,"img",[["class","hpicons"],["src","http://2018.igem.org/wiki/images/2/24/T--GO_Paris-Saclay--impact.png"]],null,null,null,null,null)),(t()(),r.Ra(11,0,null,null,3,"p",[["class","hptext"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Impact\xa0"])),(t()(),r.Ra(13,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["of\xa0scientists"])),(t()(),r.Ra(15,0,null,null,6,"div",[["class","item"]],null,null,null,null,null)),(t()(),r.Ra(16,0,null,null,5,"a",[["href","#video"]],null,null,null,null,null)),(t()(),r.Ra(17,0,null,null,0,"img",[["class","hpicons"],["src","http://2018.igem.org/wiki/images/7/7e/T--GO_Paris-Saclay--video.png"],["style",""]],null,null,null,null,null)),(t()(),r.Ra(18,0,null,null,3,"p",[["class","hptext"],["style",""]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Video"])),(t()(),r.Ra(20,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Interview"])),(t()(),r.Ra(22,0,null,null,6,"div",[["class","item"]],null,null,null,null,null)),(t()(),r.Ra(23,0,null,null,5,"a",[["href","#industry"]],null,null,null,null,null)),(t()(),r.Ra(24,0,null,null,0,"img",[["class","hpicons"],["src","http://2018.igem.org/wiki/images/7/76/T--GO_Paris-Saclay--industry.png"],["style",""]],null,null,null,null,null)),(t()(),r.Ra(25,0,null,null,3,"p",[["class","hptext"],["style",""]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Industry"])),(t()(),r.Ra(27,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Chemists"])),(t()(),r.Ra(29,0,null,null,6,"div",[["class","item"]],null,null,null,null,null)),(t()(),r.Ra(30,0,null,null,5,"a",[["href","#law"]],null,null,null,null,null)),(t()(),r.Ra(31,0,null,null,0,"img",[["class","hpicons"],["src","http://2018.igem.org/wiki/images/1/13/T--GO_Paris-Saclay--law.png"],["style",""]],null,null,null,null,null)),(t()(),r.Ra(32,0,null,null,3,"p",[["class","hptext"],["style",""]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Environmental"])),(t()(),r.Ra(34,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Law"])),(t()(),r.Ra(36,0,null,null,6,"div",[["class","item"]],null,null,null,null,null)),(t()(),r.Ra(37,0,null,null,5,"a",[["href","#opinion"]],null,null,null,null,null)),(t()(),r.Ra(38,0,null,null,0,"img",[["class","hpicons"],["src","http://2018.igem.org/wiki/images/f/f0/T--GO_Paris-Saclay--opinions.png"],["style",""]],null,null,null,null,null)),(t()(),r.Ra(39,0,null,null,3,"p",[["class","hptext"],["style",""]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Public\xa0Opinion"])),(t()(),r.Ra(41,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Arts"])),(t()(),r.Ra(43,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" We decided to combine both integrated and non-integrated human practices in the same page, the two parts being linked by a unique story that we wanted to share. We consider as purely integrated human practices the scientific video and written discussion with chemists (that work on drug degradation), cancer biologists (that work on drug development), and industries that all completely steered our project. As you will see on this page we have several discussions and presentation forms (a video, some complete written or shortened interviews, plus the publication of a review which sums up all our bibliography work). "])),(t()(),r.Ra(45,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(46,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(47,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Overview"])),(t()(),r.Ra(49,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Numerous chemicals are used in health care facilities. However, the consequences of chemical pollution associated with hospital wastewater is not sufficiently taken into consideration: available data on the subject are scarce. As these molecules can eventually find their way into drinking water, their elimination is an important societal issue. "])),(t()(),r.Ra(51,0,null,0,4,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["We wrote a short manuscript that is presently submitted to peer review to inform the French-speaking public about hazards associated with hospital wastewaters and possible treatments, the topic of our project (in the "])),(t()(),r.Ra(53,0,null,null,1,"a",[["href","https://www.medecinesciences.org/en/"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Medecine-Science journal"])),(t()(),r.jb(-1,null,[")."])),(t()(),r.Ra(56,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Furthermore, we assessed the opinions of the general public, and that of physicians and scientists working in related fields, and consequently steered our project to maximize social utility and acceptability."])),(t()(),r.Ra(58,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["As a GMO-based solution, the real-life deployability of our project was dependant on observance of European and French standards concerning the use of modified bacteria. We integrated regulatory compliance from the ground up by contacting and interviewing a lawyer specialized in environmental law."])),(t()(),r.Ra(60,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Our solution may also be of interest to industries specialized in water treatment, as it is a simple system to set up, inexpensive and generalizable to a broad spectrum of target compounds."])),(t()(),r.Ra(62,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(63,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(64,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Project building"])),(t()(),r.Ra(66,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["When we first created our iGEM team, a few team members proposed that we could work on degradation of oestrogens in wastewaters."])),(t()(),r.Ra(68,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["However, this subject was already very popular and had been explored by several iGEM teams. Yet, we realized that if the presence of oestrogen in wastewater was an important environmental issue, then the presence of highly toxic molecules such as anticancer drugs was most likely equally problematic. Many questions came to our minds: could these drugs be degraded and how? Had their presence in wastewater been quantified? Had their potential impact on the environment been evaluated? Was the degradation process included in the drug design process? To answer our many questions we started a long bibliographic work to find as much information as possible. "])),(t()(),r.Ra(70,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["In one of the most striking articles we found, the authors developed an in vitro culture of human cells in a mixture that contained some hospital wastewater. The results were frightening, as cells could not develop nor grow. Many articles explained that the amount of the different drugs contained in surface waters and hospital effluents can change the behaviours of fishes or impact their development. In the case of anticancer drugs, only a few studies have been carried out until now, but quantifications show the same dramatic effects as for the other pharmaceuticals. "])),(t()(),r.Ra(72,0,null,0,3,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["You can find more informations and references about pharmaceuticals impact in wastewater on "])),(t()(),r.Ra(74,0,null,null,1,"a",[],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.router.navigate(["/background"],{fragment:"top"})&&r),r},null,null)),(t()(),r.jb(-1,null,["the Background page"])),(t()(),r.Ra(76,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Since the number of reviews on the topic was limited, we decided to address the question and wrote a manuscript to Medecine/Science, a French journal. This review is about the impact of anticancer drugs in wastewater and introduces our project as a potential solution."])),(t()(),r.Ra(78,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Furthermore, the limited amount of data available in the literature encouraged us to contact scientists to help us broaden our knowledge on the subject and shape our project."])),(t()(),r.Ra(80,0,null,0,3,"div",[["class","titrebloc"],["id","impact"]],null,null,null,null,null)),(t()(),r.Ra(81,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(82,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Impact of scientists"])),(t()(),r.Ra(84,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["To better frame our project, we contacted several researchers that specifically work on anticancer drug development. We reached 19 scientists to get to know the habits of specialists working with those drugs. It is important to get in contact with researchers because they development cancer treatment of tomorrow. They all came from two of the main European cancer research centers: \xa0the Institut Curie and the Institut Gustave Roussy."])),(t()(),r.Ra(86,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["The 18 first scientists interviewed were mostly researchers (94.1%), one was a health professional and the last one was an engineer. Among them, 47% used cytostatic or cytotoxic drugs (Fig. 1). More precisely, 35% used them less than once a month, 24% used them once or twice a month, and 24% once or twice a week. The other drugs (Immunotherapy, Tyrosine Kinase Inhibitors, B-Raf inhibitors) being used less commonly, we thus decided to focus on cytostatic and cytotoxic drugs based on these survey results."])),(t()(),r.Ra(88,0,null,0,4,"mat-card",[["class","normalmargin mat-card"],["style","width: 80%;"]],null,null,null,d.d,d.a)),r.Qa(89,49152,null,0,p.a,[],null,null),(t()(),r.Ra(90,0,null,0,0,"img",[["class","wideimg"],["src","http://2018.igem.org/wiki/images/c/ca/T--GO_Paris-Saclay--graph12.png"]],null,null,null,null,null)),(t()(),r.Ra(91,0,null,0,1,"div",[["class","mat-caption captionafterapicture"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Figure 1: Percentages of anticancer drugs family used by specialists and the frequency of use. "])),(t()(),r.Ra(93,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Before choosing any specific drug, we asked these scientists if they took into consideration, during the drug development process, the degradation of the anticancer drugs after their use. Surprisingly, we found out that 47% of them did not consider this step during their research (Fig. 2), while 53% considered it rarely, or sometimes. Thus it appeared that these aspects had not been integrated into development process. Even though most of these scientists confessed that they did not have enough time to really consider this step, 65% of them agreed that it should be taken in consideration during the drug development process. "])),(t()(),r.Ra(95,0,null,0,4,"mat-card",[["class","normalmargin mat-card"],["style","width: 80%;"]],null,null,null,d.d,d.a)),r.Qa(96,49152,null,0,p.a,[],null,null),(t()(),r.Ra(97,0,null,0,0,"img",[["class","wideimg"],["src","http://2018.igem.org/wiki/images/5/57/T--GO_Paris-Saclay--hpbonbon.png"]],null,null,null,null,null)),(t()(),r.Ra(98,0,null,0,1,"div",[["class","mat-caption captionafterapicture"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Figure 2: First graph : Percentages of researchers taking in consideration the degradation in the environment of the anticancer drugs during the development process; Second graph : number of researchers thinking more time should be spent on the environmental impact of drug degradation during the development phase. "])),(t()(),r.Ra(100,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Lastly, we asked them if developing an anticancer drug degradation system based on bacteria to treat hospital wastewater could be a solution : 41% thought that it could indeed be a good solution, and another 41% remained uncommitted, which encouraged us to continue developing our concept (Fig. 3)."])),(t()(),r.Ra(102,0,null,0,4,"mat-card",[["class","normalmargin mat-card"],["style","width: 80%;"]],null,null,null,d.d,d.a)),r.Qa(103,49152,null,0,p.a,[],null,null),(t()(),r.Ra(104,0,null,0,0,"img",[["class","wideimg"],["src","http://2018.igem.org/wiki/images/c/c8/T--GO_Paris-Saclay--hpgraph4.png"]],null,null,null,null,null)),(t()(),r.Ra(105,0,null,0,1,"div",[["class","mat-caption captionafterapicture"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Figure 3: Number of researchers thinking that using bacteria could be a reasonable solution. "])),(t()(),r.Ra(107,0,null,0,3,"div",[["class","titrebloc"],["id","video"]],null,null,null,null,null)),(t()(),r.Ra(108,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(109,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Video interview"])),(t()(),r.Ra(111,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["You can find below a video of the interview of Maria Ko\u017alak, a PhD candidate at the Institut Curie who works in the Marie Dutreix team on \xab\xa0DBait molecules/ Reparation, Recombination and Cancer\xbb. This video illustrates our typical interview process with researchers. "])),(t()(),r.Ra(113,0,null,0,1,"div",[["class","normalmargin"],["style","width: 600px;"]],null,null,null,null,null)),(t()(),r.Ra(114,0,null,null,0,"iframe",[["allow","autoplay; encrypted-media"],["allowfullscreen",""],["frameborder","0"],["height","340"],["src","https://www.youtube.com/embed/8_9nALAaFHI?rel=0&showinfo=0"],["width","600"]],null,null,null,null,null)),(t()(),r.Ra(115,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["As you can see in the video, Maria shares the same observations as her colleagues. The main anticancer drugs used in the labs are the cytostatic/cytotoxic drugs, and unfortunately scientists do not have time to work on the degradation step during the drug design process. These weeks of investigations reinforced our belief that there is indeed an urge to tackle this major environmental issue. There is a lack of research on degradation of anticancer drugs. No specific method seems to be developed for future cures. "])),(t()(),r.Ra(117,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" At this point we heard about methotrexate (MTX). We had a particular interest in this drug because of its uses in several diseases. Indeed, it is used to treat cancer as a cytostatic drug but it is also to treat chronic inflammatory syndromes such as psoriasis, arthritis, and many others. "])),(t()(),r.Ra(119,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" For sure, a lot of questions remained in our heads. Does the wastewater industry implement specific methods to degrade anticancer drugs? Can our type of project (use GMOs to degrade specifically anticancer drugs) have an industrial interest? "])),(t()(),r.Ra(121,0,null,0,3,"div",[["class","titrebloc"],["id","industry"]],null,null,null,null,null)),(t()(),r.Ra(122,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(123,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Confronting our idea to industries"])),(t()(),r.Ra(125,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["We met and discussed with the Dr R. Labru\xe8re, a scientist in chemistry and researcher at the Paris-Saclay University. He works on drug elimination in wastewaters. He helped us to create and develop MethotrExit. However, at the end of one discussion he told us that industry would not be interested in a treatment that cannot be useful for multiple drugs at once. He advised us to make a specific but modular project, a kind of \u201ctoolbox\u201d that could degrade a large spectrum of drugs but using only one simple method. "])),(t()(),r.Ra(127,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" The discussions we had with Dr Labru\xe8re had also a decisive influence in our choice. Other scientists already told us that this drug could be an interesting target. Dr Labru\xe8re explained clearly that if not treated in the hospital effluents, this drug metabolized into a more harmful molecule. If low doses of MTX already impact fish populations with lethal nerve development defects, it is clear how much the 7-OH-MTX, its more active metabolite, can be dangerous for the environment. "])),(t()(),r.Ra(129,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" To get a real industrial opinion we asked almost 20 different organizations from all over the world, private or public, all working on wastewater treatments. We struggled a lot to contact them, at the end only one company accepted to help us with our project and to define what was already done in industries. It has to be noted that several companies cut off the discussions when questioned about \u201canticancerous drug wastewater treatment\u201d. We discussed with a member of the Arvia Technology Company, one of the British leaders in that field. "])),(t()(),r.Ra(131,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["During the exchange and reading the press, we learned that they used an adsorption and electrochemical oxidation method to reduce micropollutants, such as medicines, in wastewaters. This solution is chemicals free and able to reduce the general level of these pharmaceutical micropollutants. However, they explained to our team that, presently, they don\u2019t have a specific solution for the elimination of the most present anticancer drugs into wastewaters such as methotrexate. "])),(t()(),r.Ra(133,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["According to Francesco Bregoli from the European Geosciences Union, water contamination by pharmaceutical products could increase by two third until 2050. This is quite alarming and amplifies the emergency of the situation."])),(t()(),r.Ra(135,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Short talks with practicing nurses, such as Vincent Aubry, who works at the Strasbourg hospital in a unit which is partly treating people suffering from cancer lead us to discover that there are no specific precautions nor protocols for disposal of the excretions of treated patients! Moreover, according to the nurses interviewed, during their studies, no indications of any procedures to isolate patients excretions using anticancer medicines were given. "])),(t()(),r.Ra(137,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["To make sure our concept was complete, we still needed to check the legality of MethotrExit."])),(t()(),r.Ra(139,0,null,0,3,"div",[["class","titrebloc"],["id","law"]],null,null,null,null,null)),(t()(),r.Ra(140,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(141,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["MethotrExit and french laws"])),(t()(),r.Ra(143,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["To make sure our project was built respecting the French Laws we interviewed a lawyer Mrs C. Deschamps, lawyer at Paris Bar. Indeed, it is important to make sure that our project is viable, but it is as important to make sure that our project is legal and that we respected the legislation during the building process."])),(t()(),r.Ra(145,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Moreover, it was also important to talk with this specialized lawyer to understand the hospital obligations in term of pharmaceuticals degradation."])),(t()(),r.Ra(147,0,null,0,21,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Mrs. Deschamps explained to us that protecting aquatic ecosystems and humans around these is a very large task depending on a lot of different parameters and laws. But most of these laws can be found in the european "])),(t()(),r.Ra(149,0,null,null,2,"i",[],null,null,null,null,null)),(t()(),r.Ra(150,0,null,null,1,"a",[["href","https://eur-lex.europa.eu/legal-content/FR/TXT/HTML/?uri=CELEX:32000L0060&from=FR"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Directive Cadre sur l\u2019Eau"])),(t()(),r.jb(-1,null,[" (DCE), in the french "])),(t()(),r.Ra(153,0,null,null,2,"i",[],null,null,null,null,null)),(t()(),r.Ra(154,0,null,null,1,"a",[["href","https://www.legifrance.gouv.fr/affichCode.do?cidTexte=LEGITEXT000006074220"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Code de l\u2019Environnement"])),(t()(),r.jb(-1,null,[" and "])),(t()(),r.Ra(157,0,null,null,2,"i",[],null,null,null,null,null)),(t()(),r.Ra(158,0,null,null,1,"a",[["href","https://www.legifrance.gouv.fr/affichCode.do?cidTexte=LEGITEXT000006072665"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Code de la Sant\xe9 Publique"])),(t()(),r.jb(-1,null,[", and in two different guides: the "])),(t()(),r.Ra(161,0,null,null,2,"i",[],null,null,null,null,null)),(t()(),r.Ra(162,0,null,null,1,"a",[["href","http://www.hautconseildesbiotechnologies.fr/fr/system/files/file_fields/2015/06/30/manuelduconfine.pdf"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Guide du Haut Conseil de Biotechnologie"])),(t()(),r.jb(-1,null,[" (HCB) and the "])),(t()(),r.Ra(165,0,null,null,2,"i",[],null,null,null,null,null)),(t()(),r.Ra(166,0,null,null,1,"a",[["href","https://www.icrc.org/fre/assets/files/publications/icrc-001-4032.pdf"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Guide de gestion des d\xe9chets hospitaliers"])),(t()(),r.jb(-1,null,["."])),(t()(),r.Ra(169,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" All those texts are very important and can not be ignored when building a project like ours. Since 2012, we can observe a real evolution on the environmental law, so it is crucial to adapt."])),(t()(),r.Ra(171,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Here you will find the written interview of Mrs. Deschamps:"])),(t()(),r.Ra(173,0,null,0,1,"h2",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["1. What are the laws for the preservation of aquatic ecosystems in France?"])),(t()(),r.Ra(175,16777216,null,0,67,"mat-expansion-panel",[["class","mat-expansion-panel"]],[[2,"mat-expanded",null],[2,"mat-expansion-panel-spacing",null]],null,null,G.d,G.a)),r.Qa(176,1753088,null,1,U.c,[[3,U.a],r.h,q.c,r.Q],null,null),r.hb(335544320,1,{_lazyContent:0}),r.gb(256,null,U.a,void 0,[]),(t()(),r.Ra(179,0,null,0,6,"mat-expansion-panel-header",[["class","mat-expansion-panel-header"],["role","button"]],[[1,"id",0],[1,"tabindex",0],[1,"aria-controls",0],[1,"aria-expanded",0],[1,"aria-disabled",0],[2,"mat-expanded",null],[40,"@expansionHeight",0]],[[null,"click"],[null,"keydown"]],function(t,e,n){var i=!0;return"click"===e&&(i=!1!==r.bb(t,180)._toggle()&&i),"keydown"===e&&(i=!1!==r.bb(t,180)._keydown(n)&&i),i},G.c,G.b)),r.Qa(180,180224,null,0,U.e,[U.c,r.k,A.d,r.h],null,null),r.eb(181,{collapsedHeight:0,expandedHeight:1}),r.eb(182,{value:0,params:1}),(t()(),r.Ra(183,0,null,0,2,"mat-panel-title",[["class","mat-expansion-panel-header-title"]],null,null,null,null,null)),r.Qa(184,16384,null,0,U.f,[],null,null),(t()(),r.jb(-1,null,[" Answer "])),(t()(),r.Ra(186,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["There is a multiplicity of texts whose objective is the preservation of aquatic ecosystems: the subject is very vast."])),(t()(),r.Ra(188,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["That is why we are going to present a general frame to get a first approach of the regulations that may apply to your project, subject to its precise characteristics. Only definitive specifications and applications for the final device would allow us to be accurate and precise."])),(t()(),r.Ra(190,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["They depend not only on the areas concerned (urban, protected, ...) but also on the nature of the activity, or the nature of the discharges likely to harm the environment. Beyond the preservation of the ecosystem itself, we also aim to preserve the health of people which are also impacted by the environment degradation."])),(t()(),r.Ra(192,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Besides, we must keep in mind that patients and workers are exposed to these pollutants. That is why we may also find regulation to protect the workers from exposition to pollutants."])),(t()(),r.Ra(194,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["At European level, the Water Framework Directive (WFD) (2000/60 / EC), adopted on October 23, 2000, already established a Community framework for the rational management of water and the protection of wetlands with the aim of the good ecological status of the water bodies."])),(t()(),r.Ra(196,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,['In French law, these rules are essentially contained in the Code of the Environment (CE) and in the Code of Public Health (CSP). The Environment Code includes a specific section for the preservation of water from the aquatic environment, in its book II "Physical Environments", Title 1, "Water and aquatic and marine environments". It is for the legislative part, articles L210 and L211-1 and following. '])),(t()(),r.Ra(198,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["This code evolves and laws are taken regularly. For example the Law n \xb0 2006-1772 of December 30th, 2006 on the water and the aquatic environments and the Law n \xb0 2016-1888 of December 28th, 2016 of modernization, development and protection of mountain territories, or the ordinance n \xb0 2017-80 dated on January 26th, 2017 relative to the environmental authorization."])),(t()(),r.Ra(200,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Here is an extract of the Article L214-1:"])),(t()(),r.Ra(202,0,null,1,2,"p",[],null,null,null,null,null)),(t()(),r.Ra(203,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Sont soumis aux dispositions des articles L. 214-2 \xe0 L. 214-6 les installations, les ouvrages, travaux et activit\xe9s r\xe9alis\xe9s \xe0 des fins non domestiques par toute personne physique ou morale, publique ou priv\xe9e, et entra\xeenant des pr\xe9l\xe8vements sur les eaux superficielles ou souterraines, restitu\xe9s ou non, une modification du niveau ou du mode d'\xe9coulement des eaux, la destruction de fray\xe8res, de zones de croissance ou d'alimentation de la faune piscicole ou des d\xe9versements, \xe9coulements, rejets ou d\xe9p\xf4ts directs ou indirects, chroniques ou \xe9pisodiques, m\xeame non polluants."])),(t()(),r.Ra(205,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["This article explains that installations, works and activities carried out for non-domestic purposes by any natural or legal person, public or private, and resulting in withdrawals from superficial or underground water, whether or not returned, a change in the level or method of disposal of water the destruction of spawning areas, growth areas or feeding grounds for fish fauna or direct or indirect, chronic or episodic spills, discharges, discharges or deposits, even if they are not polluting, are subject to precise regulation. "])),(t()(),r.Ra(207,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["They provide a prior authorization mechanism before any installation, the administrative authority verifies that the facilities comply. In particular and in accordance with Article L181-3 of the same Code, authorization may only be granted if the measures it entails ensure the prevention of dangers or disadvantages for the interests mentioned in Articles L. 211-1 and L. 511-1, as the case may be. The environmental authorization can only be granted if the measures it contains also ensure : "])),(t()(),r.Ra(209,16777216,null,1,33,"mat-expansion-panel",[["class","mat-expansion-panel"]],[[2,"mat-expanded",null],[2,"mat-expansion-panel-spacing",null]],null,null,G.d,G.a)),r.Qa(210,1753088,null,1,U.c,[[3,U.a],r.h,q.c,r.Q],null,null),r.hb(335544320,2,{_lazyContent:0}),r.gb(256,null,U.a,void 0,[]),(t()(),r.Ra(213,0,null,0,9,"mat-expansion-panel-header",[["class","mat-expansion-panel-header"],["role","button"]],[[1,"id",0],[1,"tabindex",0],[1,"aria-controls",0],[1,"aria-expanded",0],[1,"aria-disabled",0],[2,"mat-expanded",null],[40,"@expansionHeight",0]],[[null,"click"],[null,"keydown"]],function(t,e,n){var i=!0;return"click"===e&&(i=!1!==r.bb(t,214)._toggle()&&i),"keydown"===e&&(i=!1!==r.bb(t,214)._keydown(n)&&i),i},G.c,G.b)),r.Qa(214,180224,null,0,U.e,[U.c,r.k,A.d,r.h],null,null),r.eb(215,{collapsedHeight:0,expandedHeight:1}),r.eb(216,{value:0,params:1}),(t()(),r.Ra(217,0,null,0,2,"mat-panel-title",[["class","mat-expansion-panel-header-title"]],null,null,null,null,null)),r.Qa(218,16384,null,0,U.f,[],null,null),(t()(),r.jb(-1,null,[" Conditions for authorization "])),(t()(),r.Ra(220,0,null,1,2,"mat-panel-description",[["class","mat-expansion-panel-header-description"]],null,null,null,null,null)),r.Qa(221,16384,null,0,U.d,[],null,null),(t()(),r.jb(-1,null,[" Code de l'environement (Environment Code) "])),(t()(),r.Ra(223,0,null,1,19,"div",[["style","font-style: italic;"]],null,null,null,null,null)),(t()(),r.Ra(224,0,null,null,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["1 \xb0 Compliance with the conditions set by Articles L. 229-7 to L. 229-10 for allocating greenhouse gas emission allowances;"])),(t()(),r.Ra(226,0,null,null,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["2 \xb0 The conservation of the interests defined in articles L. 332-1 and L. 332-2 as well as, if necessary, the implementation of the regulation or the obligation mentioned in article L. 332-2, as translated by the act of classification provided for by Article L. 332-3, when the environmental authorization takes the place of special authorization under a nature reserve created by the State;"])),(t()(),r.Ra(228,0,null,null,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["3 \xb0 The preservation or preservation of the interest or interests that are attached to the classification of a site or natural monument mentioned in Article L. 341-1 as well as those mentioned by the classification decision, when the Environmental authorization is the special authorization provided for by Articles L. 341-7 and L. 341-10;"])),(t()(),r.Ra(230,0,null,null,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["4 \xb0 the respect of the conditions, fixed in 4 \xb0 of the article L. 411-2, of issue of the derogation to the prohibitions enacted for the conservation of sites of geological interest, natural habitats, non-domestic animal species or non-crop plants and their habitats, where the environmental authorization serves as the derogation; 5 \xb0 The respect of the conservation objectives of the Natura 2000 site, when the environmental permit serves as the absence of opposition mentioned in VI of Article L. 414-4;"])),(t()(),r.Ra(232,0,null,null,2,"p",[],null,null,null,null,null)),(t()(),r.Ra(233,0,null,null,1,"b",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["6 \xb0 The respect of the conditions of the contained use of genetically modified organisms envisaged by the first paragraph of I of the article L. 532-2 fixed by the technical prescriptions mentioned in II of the article L. 532-3 when the authorization takes the place of approval, or the respect of the conditions fixed by the second subparagraph of I of the article L. 532-3 when the use is subjected only to the declaration envisaged by this subparagraph;"])),(t()(),r.Ra(235,0,null,null,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["7 \xb0 the respect of the conditions of exercise of the activity of waste management mentioned in the article L. 541-22, when the authorization takes place of approval for the treatment of waste in application of this article;"])),(t()(),r.Ra(237,0,null,null,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["8 \xb0 Consideration of the criteria mentioned in Article L. 311-5 of the French Energy Code, when the environmental permit is used to authorize the operation of a power generation installation in application of the Article L. 311-1 of this Code;"])),(t()(),r.Ra(239,0,null,null,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["9 \xb0 The preservation of the interests listed in Article L. 112-1 of the Forest Code and the functions defined in Article L. 341-5 of the same Code, when the environmental permit is used as a clearing permit;"])),(t()(),r.Ra(241,0,null,null,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["10 \xb0 The respect of the conditions of issue of the authorizations mentioned in 12 \xb0 of article L. 181-2, when the environmental authorization takes the place of these authorizations."])),(t()(),r.Ra(243,0,null,0,0,"p",[["class","spacemaker"]],null,null,null,null,null)),(t()(),r.Ra(244,0,null,0,1,"h2",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["2. What are the laws concerning the treatment of wastewater?"])),(t()(),r.Ra(246,16777216,null,0,24,"mat-expansion-panel",[["class","mat-expansion-panel"]],[[2,"mat-expanded",null],[2,"mat-expansion-panel-spacing",null]],null,null,G.d,G.a)),r.Qa(247,1753088,null,1,U.c,[[3,U.a],r.h,q.c,r.Q],null,null),r.hb(335544320,3,{_lazyContent:0}),r.gb(256,null,U.a,void 0,[]),(t()(),r.Ra(250,0,null,0,6,"mat-expansion-panel-header",[["class","mat-expansion-panel-header"],["role","button"]],[[1,"id",0],[1,"tabindex",0],[1,"aria-controls",0],[1,"aria-expanded",0],[1,"aria-disabled",0],[2,"mat-expanded",null],[40,"@expansionHeight",0]],[[null,"click"],[null,"keydown"]],function(t,e,n){var i=!0;return"click"===e&&(i=!1!==r.bb(t,251)._toggle()&&i),"keydown"===e&&(i=!1!==r.bb(t,251)._keydown(n)&&i),i},G.c,G.b)),r.Qa(251,180224,null,0,U.e,[U.c,r.k,A.d,r.h],null,null),r.eb(252,{collapsedHeight:0,expandedHeight:1}),r.eb(253,{value:0,params:1}),(t()(),r.Ra(254,0,null,0,2,"mat-panel-title",[["class","mat-expansion-panel-header-title"]],null,null,null,null,null)),r.Qa(255,16384,null,0,U.f,[],null,null),(t()(),r.jb(-1,null,[" Answer "])),(t()(),r.Ra(257,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["There are laws for each particular waste type, health facilities emit a wide variety of waste."])),(t()(),r.Ra(259,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Some are radioactive, others have a significant risk of viral or bacterial infection. For example, what do you do with an Ebola strain? Radioactive waste? Liquid waste is distinguished by risk category: Radioactive, Infectious, Chemical, Combined."])),(t()(),r.Ra(261,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["As for the circuit of the drug, it is also treated according to its cytotoxic dangerousness or not."])),(t()(),r.Ra(263,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["- Liquid waste resulting from the establishment's activities meets the specific regulations waste related;"])),(t()(),r.Ra(265,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["- The effluents (or wastewater) joining the facility's wastewater collection network and then the collective sewage system or the receiving environment, comply with the specific regulations concerning the discharge of wastewater."])),(t()(),r.Ra(267,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["There are as many specific regulations as exist different kinds of potential harm related to the product, considering it could be released through what we call domestic effluents. "])),(t()(),r.Ra(269,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" The French CSP and EC impose specific ways to destroy the wastes even before they can reach the domestic wastewater network, and under conditions that have been authorized (as for instance under Article L1331-10 CSP)."])),(t()(),r.Ra(271,0,null,0,0,"p",[["class","spacemaker"]],null,null,null,null,null)),(t()(),r.Ra(272,0,null,0,1,"h2",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["3. Are there any specific laws regarding hospital wastewater?"])),(t()(),r.Ra(274,16777216,null,0,34,"mat-expansion-panel",[["class","mat-expansion-panel"]],[[2,"mat-expanded",null],[2,"mat-expansion-panel-spacing",null]],null,null,G.d,G.a)),r.Qa(275,1753088,null,1,U.c,[[3,U.a],r.h,q.c,r.Q],null,null),r.hb(335544320,4,{_lazyContent:0}),r.gb(256,null,U.a,void 0,[]),(t()(),r.Ra(278,0,null,0,6,"mat-expansion-panel-header",[["class","mat-expansion-panel-header"],["role","button"]],[[1,"id",0],[1,"tabindex",0],[1,"aria-controls",0],[1,"aria-expanded",0],[1,"aria-disabled",0],[2,"mat-expanded",null],[40,"@expansionHeight",0]],[[null,"click"],[null,"keydown"]],function(t,e,n){var i=!0;return"click"===e&&(i=!1!==r.bb(t,279)._toggle()&&i),"keydown"===e&&(i=!1!==r.bb(t,279)._keydown(n)&&i),i},G.c,G.b)),r.Qa(279,180224,null,0,U.e,[U.c,r.k,A.d,r.h],null,null),r.eb(280,{collapsedHeight:0,expandedHeight:1}),r.eb(281,{value:0,params:1}),(t()(),r.Ra(282,0,null,0,2,"mat-panel-title",[["class","mat-expansion-panel-header-title"]],null,null,null,null,null)),r.Qa(283,16384,null,0,U.f,[],null,null),(t()(),r.jb(-1,null,[" Answer "])),(t()(),r.Ra(285,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["As explained previously there is specific regulation for specific kind of pollution. Hospitals are quite particular polluters since they produce chemical, radioactive, pharmaceutical and organic pollution, among others."])),(t()(),r.Ra(287,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,['Waste management is based on several guiding principles, among which the responsibility of the waste producer (Article L. 541-1-1 of the Environment Code (EC)). The so-called "extended producer responsibility" ("EPR") sectors - which make the producers of certain manufactured products contribute to the treatment of the waste that comes from these products - are an exception to this principle.'])),(t()(),r.Ra(289,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["In order to reach the appropriate sector, waste produced by an establishment follows a typical path. These steps correspond to the definition of waste management (Article L.541-1-1 of the EC)."])),(t()(),r.Ra(291,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["The management of liquid waste at source must make it possible to limit any risk of water pollution. The chapters dedicated to the different types of waste produced in the establishments describe how to achieve the best management methods (depending on the risk(s) associated with the waste). However, it appears that certain pollution can not be collected and managed and that they will join the wastewater network of the establishment: it is in particular cleaning water premises, rinsing water of some devices laboratories, and so on."])),(t()(),r.Ra(293,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Liquid waste from establishments is classified as non-domestic wastewater as defined by the EC. They result from the mixing of wastewater from household activities and wastewater from all care and technical and logistic activities. As such, the connection to the collective sewerage system is conditional on the issuance of a prior authorization of a spill (Article L. 1331-10 of the CSP) by the competent authority (ies) in matters of environmental protection."])),(t()(),r.Ra(295,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["The regulation of the sanitation service defines the requirements related to the adoption of the spill authorization. It is limited in time and renewable. It indicates the characteristics that wastewater must present in order to be discharged and the spill monitoring conditions. The results of the periodic control of the prescribed discharges must be transmitted to the collection system manager and the wastewater treatment plant manager, who must in turn transmit them to the water police services once a year."])),(t()(),r.Ra(297,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["The spill authorization may also make the spill conditional on the implementation of appropriate pretreatment (such as screening, degreasing or deoiling)."])),(t()(),r.Ra(299,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["In addition, the spill authorization shall, when appropriate, require the establishment to immediately alert the competent authority in the event of an accidental spill."])),(t()(),r.Ra(301,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["The regulation recalls that it is forbidden to introduce into the public sanitation system, among others (Article R. 1331-2 and following of the CSP, Article 13 of the Decree of July 21st, 2015):"])),(t()(),r.Ra(303,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["- directly or through building pipelines, any solid, liquid or gaseous, which may be toxic to the environment, to be the cause either of a danger to the operating personnel or to the inhabitants of the buildings connected to the collection system, or of a deterioration of the drainage works and of treatment, either of a hindrance in their operation ;"])),(t()(),r.Ra(305,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["- solid waste (diapers, plastic bags, etc.), included after grinding."])),(t()(),r.Ra(307,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Depending of their nature, characteristics and risks, wastes should be eliminated or pretreated differently (filtered, incinerated, inactivated\u2026) whether they can be spilled into the public wastewater network or not."])),(t()(),r.Ra(309,0,null,0,0,"p",[["class","spacemaker"]],null,null,null,null,null)),(t()(),r.Ra(310,0,null,0,1,"h2",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["4. With regard to drugs and pharmaco-chemical pollutants, are there laws ensuring their specific treatment in wastewater?"])),(t()(),r.Ra(312,16777216,null,0,58,"mat-expansion-panel",[["class","mat-expansion-panel"]],[[2,"mat-expanded",null],[2,"mat-expansion-panel-spacing",null]],null,null,G.d,G.a)),r.Qa(313,1753088,null,1,U.c,[[3,U.a],r.h,q.c,r.Q],null,null),r.hb(335544320,5,{_lazyContent:0}),r.gb(256,null,U.a,void 0,[]),(t()(),r.Ra(316,0,null,0,6,"mat-expansion-panel-header",[["class","mat-expansion-panel-header"],["role","button"]],[[1,"id",0],[1,"tabindex",0],[1,"aria-controls",0],[1,"aria-expanded",0],[1,"aria-disabled",0],[2,"mat-expanded",null],[40,"@expansionHeight",0]],[[null,"click"],[null,"keydown"]],function(t,e,n){var i=!0;return"click"===e&&(i=!1!==r.bb(t,317)._toggle()&&i),"keydown"===e&&(i=!1!==r.bb(t,317)._keydown(n)&&i),i},G.c,G.b)),r.Qa(317,180224,null,0,U.e,[U.c,r.k,A.d,r.h],null,null),r.eb(318,{collapsedHeight:0,expandedHeight:1}),r.eb(319,{value:0,params:1}),(t()(),r.Ra(320,0,null,0,2,"mat-panel-title",[["class","mat-expansion-panel-header-title"]],null,null,null,null,null)),r.Qa(321,16384,null,0,U.f,[],null,null),(t()(),r.jb(-1,null,[" Answer "])),(t()(),r.Ra(323,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["More specifically, when we talk about drugs, we can talk about various treatments, including liquids. They will not all have the same toxicity or the same characteristics."])),(t()(),r.Ra(325,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Waste is therefore classified according to these characteristics."])),(t()(),r.Ra(327,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Some medicines contain dangerous substances (as defined in article L. 1342-2 of the CSP)."])),(t()(),r.Ra(329,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["The circular of the Directorate of Relations at Work (DRT) No. 12 of May 24, 2006 classifies the drugs in the category of chemical agents and mentions, within the scope of the regulations on the dangerous chemical reagents, the consideration of certain which, although not meeting the criteria for the European classification of dangerous substances, may pose a risk to the health or safety of workers."])),(t()(),r.Ra(331,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["As explained in the Guide de gestion des d\xe9chets hospitaliers the drugs at the origin of the waste, one distinguishes notably:"])),(t()(),r.Ra(333,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["- drugs used in human medicine (or veterinary medicine), non-cytotoxic, non-cytostatic;"])),(t()(),r.Ra(335,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["- drugs used in human (or veterinary), cytotoxic and cytostatic medicine;"])),(t()(),r.Ra(337,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["- narcotics;"])),(t()(),r.Ra(339,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["- drugs used in nuclear medicine (radiopharmaceuticals);"])),(t()(),r.Ra(341,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["- drugs used in clinical trials."])),(t()(),r.Ra(343,0,null,1,0,"p",[["style","margin-bottom:1.3em;"]],null,null,null,null,null)),(t()(),r.Ra(344,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["All waste from drugs in these facilities includes:"])),(t()(),r.Ra(346,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["- pharmaceutical raw materials used for the manufacture of medicinal products and preparations;"])),(t()(),r.Ra(348,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["- medicines that have become unsuitable for the intended initial use (expired, altered, used, partially used, not administered, not used), generated by the establishment, returned by individuals to the pharmacy for indoor use or returned by patients during a consultation or hospitalization;"])),(t()(),r.Ra(350,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["- single-use medical devices and devices used for the preparation before administration and / or the administration of drugs (compresses, syringes, needles, solute bags, perfusers, peripheral catheters, central catheters, etc.) or incorporating active substances;"])),(t()(),r.Ra(352,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["- emptied primary packaging contaminated with drug residues (empty acons, empty vials, etc.);"])),(t()(),r.Ra(354,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["- secondary and tertiary instructions and packaging (cartons, etc.)."])),(t()(),r.Ra(356,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,['"DIMED" means all the above-mentioned wastes, which are hazardous or non-hazardous waste. DIMED management methods are currently organized mainly in establishments within two sectors: healthcare waste with infectious and similar risks and chemically hazardous waste.'])),(t()(),r.Ra(358,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["The collection and destruction of UNMs, with the exception of narcotics which are the subject of specific management, are governed by Articles R. 4211-24 to R. 4211-31 of the CSP. In application of these articles, the Cyclamed association is approved by the public authorities to manage them; Although the PUIs are required to collect the UNMs free of charge, the collection and processing circuits managed by Cyclamed are organized so far only in the community pharmacies."])),(t()(),r.Ra(360,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["ancer treatments are under specific regulation. "])),(t()(),r.Ra(362,0,null,1,4,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["- They may not be destroyed the same way depending if they are contaminated or not, "])),(t()(),r.Ra(364,0,null,null,1,"b",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["concentrated or not. For most of them it is admitted that they can be incinerated without major risk for the environment"])),(t()(),r.jb(-1,null,["."])),(t()(),r.Ra(367,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["- Circular No. DHOS/ E4 / DGS / SD7B / DPPR / 2006/58 of February 13, 2006 on the disposal of waste generated by cancer treatments ; DRT Circular No. 12 of May 24, 2006 on the general rules for the prevention of chemical risks and the special rules to be adopted against the risks of exposure to carcinogenic, mutagenic or toxic agents for reproduction );"])),(t()(),r.Ra(369,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["- Nevertheless some organic wastes from patients under cancer treatments cannot be collected and will inevitably be spilled into the wastewater network."])),(t()(),r.Ra(371,0,null,0,0,"p",[["class","spacemaker"]],null,null,null,null,null)),(t()(),r.Ra(372,0,null,0,1,"h2",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["5. Are hospitals subject to legislation regarding the treatment of organic waste?"])),(t()(),r.Ra(374,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Yes as we saw previously. Theses organic waste may be polluted themselves: they may potentially be infected by viruses, bacteria or chemicals. "])),(t()(),r.Ra(376,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" Some of them have to be confined and destroyed or inactivated without any possibility to be spilled into the wastewater network considering the health risk (we can keep in mind the Ebola virus hypothesis)."])),(t()(),r.Ra(378,0,null,0,0,"p",[["class","spacemaker"]],null,null,null,null,null)),(t()(),r.Ra(379,0,null,0,1,"h2",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["6. Do these laws take into account the waste that can be found in wastewater?"])),(t()(),r.Ra(381,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Yes as we saw previously. Unfortunately, some wastes will inevitably be found in wastewater network as far as we cannot collect them. The point is then to know how to filter and/or destroy these non-collectable wastes."])),(t()(),r.Ra(383,0,null,0,0,"p",[["class","spacemaker"]],null,null,null,null,null)),(t()(),r.Ra(384,0,null,0,1,"h2",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["7. Do you have any ideas for filling any legal loopholes or limitations of our project?"])),(t()(),r.Ra(386,16777216,null,0,38,"mat-expansion-panel",[["class","mat-expansion-panel"]],[[2,"mat-expanded",null],[2,"mat-expansion-panel-spacing",null]],null,null,G.d,G.a)),r.Qa(387,1753088,null,1,U.c,[[3,U.a],r.h,q.c,r.Q],null,null),r.hb(335544320,6,{_lazyContent:0}),r.gb(256,null,U.a,void 0,[]),(t()(),r.Ra(390,0,null,0,6,"mat-expansion-panel-header",[["class","mat-expansion-panel-header"],["role","button"]],[[1,"id",0],[1,"tabindex",0],[1,"aria-controls",0],[1,"aria-expanded",0],[1,"aria-disabled",0],[2,"mat-expanded",null],[40,"@expansionHeight",0]],[[null,"click"],[null,"keydown"]],function(t,e,n){var i=!0;return"click"===e&&(i=!1!==r.bb(t,391)._toggle()&&i),"keydown"===e&&(i=!1!==r.bb(t,391)._keydown(n)&&i),i},G.c,G.b)),r.Qa(391,180224,null,0,U.e,[U.c,r.k,A.d,r.h],null,null),r.eb(392,{collapsedHeight:0,expandedHeight:1}),r.eb(393,{value:0,params:1}),(t()(),r.Ra(394,0,null,0,2,"mat-panel-title",[["class","mat-expansion-panel-header-title"]],null,null,null,null,null)),r.Qa(395,16384,null,0,U.f,[],null,null),(t()(),r.jb(-1,null,[" Answer "])),(t()(),r.Ra(397,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["The potential obstacles to your project are double:"])),(t()(),r.Ra(399,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["- First of all, the entity who will use your product has to obtain an authorization to use it as a waste elimination equipment. It has to satisfy security and efficiency standards."])),(t()(),r.Ra(401,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["- Second of all your project is using GMOs."])),(t()(),r.Ra(403,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["The cultivation and marketing of GMOs on the European territory are mainly governed by two texts: Directive 2001/18 / EC and Regulation 1829/2003, relating to deliberate release (marketing for cultivation or food, clinical trials and field trials). In the context of a contained use (research laboratories, industrial production), GMOs are regulated by Directive 2009/41 / EC."])),(t()(),r.Ra(405,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["In France It is impossible to use or manufacture a GMO without first having a specific authorization. Applications for GMO authorization fall into three broad categories:"])),(t()(),r.Ra(407,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["- contained uses permit the use of GMOs for industrial production or research purposes;"])),(t()(),r.Ra(409,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["- uses for deliberate release allow their use for marketing purposes (for animal or human food, GMO seeds and plants, veterinary drugs, gene therapy products or non-food products such as cut flowers);"])),(t()(),r.Ra(411,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["- some GMOs are not intended for marketing and are part of experiments such as field experiments or biomedical or veterinary research."])),(t()(),r.Ra(413,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["The conditions for authorizing research on genetically modified or genetically modified health products are contained mostly in Public health code, under articles R. 1125-1 and following."])),(t()(),r.Ra(415,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["The general provisions for the control of the use and dissemination of genetically modified organisms are contained into the Environmental code (Art. L. 124-3, Art. L. 531-1 et seq., Art. L. 532-1 et seq., Art. L. 533-1 et seq., Art. L. 534-1, Art. L. 535-1 et seq., Art. L. 536-1 et seq., Art. L. 537-1, Art. D. 531-1 et seq., Art. R. 532-1 et seq., Art. R. 533-1 et seq., Art. R. 536-1 et seq.)"])),(t()(),r.Ra(417,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["The rural code and sea fishing also contain specific regulation under articles L. 663-1 et seq., and articles D. 663-1 and s, apart from non-codified texts."])),(t()(),r.Ra(419,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["The competent authority to issue authorizations for the use of GMOs depends on their field of application (agriculture, consumption, health, research), but the Ministry of the Environment is always consulted. Whatever the authorization type requested, an assessment of the potential risks to human health and the environment of the use of the GMO concerned is always carried out beforehand by the High Council for Biotechnology (HCB), which issues an opinion and / or a recommendation depending on the nature of the application for authorization."])),(t()(),r.Ra(421,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["You should ensure that your project will not be an environmental issue by itself, beyond its efficiency."])),(t()(),r.Ra(423,0,null,1,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["In a case of contained use I invite you to read the guide of HCB, which deals in particular with the treatment of the production and waste GMO."])),(t()(),r.Ra(425,0,null,0,0,"p",[["class","spacemaker"]],null,null,null,null,null)),(t()(),r.Ra(426,0,null,0,1,"h2",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["8. Legally, what are the risks in the event of a leak in the containment of the bioreactor?"])),(t()(),r.Ra(428,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["It depends on the nature of the risk in case of leak as well as the cause of the leak: is your GMO dangerous for people in case of ingestion? Is it dangerous for an ecosystem and how? (proliferation, toxicity\u2026)"])),(t()(),r.Ra(430,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["It is important to remember that penalties are provided for environmental and personal health and safety violations, usually with extremely high fines."])),(t()(),r.Ra(432,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Waste management is based on several guiding principles, among which the responsibility of the waste producer (Article L. 541-1-1 of the Environment Code (EC))."])),(t()(),r.Ra(434,0,null,0,0,"p",[["class","spacemaker"]],null,null,null,null,null)),(t()(),r.Ra(435,0,null,0,1,"h2",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["9. More generally, what do you think of the project itself?"])),(t()(),r.Ra(437,0,null,0,3,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["This project is a particularly interesting research project. I think you must first and foremost think about protecting your ideas.."])),(t()(),r.Ra(439,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" Given its novelty, why not consider a Solleau envelope or a patent, provided that you\u2019ll achieve a specific industrial design ton contain and use the GMOs. "])),(t()(),r.Ra(441,0,null,0,0,"p",[["class","spacemaker"]],null,null,null,null,null)),(t()(),r.Ra(442,0,null,0,1,"h2",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["10. Have you ever heard of something similar?"])),(t()(),r.Ra(444,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["I am far from having your level of knowledge in this field. Your project reminds me of the sanitation of swimming pool waters, for example, by means of certain organisms (micro-algae). Nevertheless your case presents the peculiarity of the genetic modification which seems unique to me."])),(t()(),r.Ra(446,0,null,0,0,"p",[["class","spacemaker"]],null,null,null,null,null)),(t()(),r.Ra(447,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["As it was developed on the question 4 of the interview, from now only little is mandatory in order to remove pharmaceuticals in hospital effluent. A recent national plan \u201cPharmaceuticals residue in water\u201d from the French Ministry of Ecology indicates that, according to the actual default in eliminating these drugs into wastewater new economical solution are needed for the future."])),(t()(),r.Ra(449,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Interviewing specialists and scientist was necessary to build the most suitable concept and caring about the legal aspect was obligatory to make it work."])),(t()(),r.Ra(451,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["At this point, one last question came to our minds, what about the public opinion? Would our project be accepted by society?"])),(t()(),r.Ra(453,0,null,0,3,"div",[["class","titrebloc"],["id","opinion"]],null,null,null,null,null)),(t()(),r.Ra(454,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(455,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Public opinion"])),(t()(),r.Ra(457,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["After ensuring that our project could work and was legal by discussing with experts, we thought that we also needed to ask citizens what they thought of our project. Indeed, the society as a whole in concerned by our project, as we all drink tap water. We thus felt that we had to design."])),(t()(),r.Ra(459,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["We developed a survey open to everyone to gather the public\u2019s opinion. 170 persons from all ages and all professions answered to our questionnaire. 90.1% (Fig. 1A) of them admitted taking some medications during the past year. 92.9% of the interviewed people taking some medications (Fig. 1B) took anti-inflammatory drugs (such as paracetamol), 45.5% took antibiotics, 30.3% took birth control pills, 23.2% took antihistamines (and other allergy treatments), and 20.2% followed other treatments (none specified). No one went through heavy treatments such as cancer treatments. "])),(t()(),r.Ra(461,0,null,0,4,"mat-card",[["class","normalmargin mat-card"],["style","width: 80%;"]],null,null,null,d.d,d.a)),r.Qa(462,49152,null,0,p.a,[],null,null),(t()(),r.Ra(463,0,null,0,0,"img",[["src","http://2018.igem.org/wiki/images/2/2e/T--GO_Paris-Saclay--graph6.png"]],null,null,null,null,null)),(t()(),r.Ra(464,0,null,0,1,"div",[["class","mat-caption captionafterapicture"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Figure 4: Percentages of persons who took some medications during the last year, and percentages of the different drugs taken by the persons in during the last year. "])),(t()(),r.Ra(466,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Most of the surveyed citizens are concerned about the fate (degradation, environmental spreading\u2026) of the drugs they use (60.9%) yet most of them don\u2019t actually know what the current techniques of drug degradation are (93.5%) and what are the impacts of drug spreading in the environment (60.4%). These figures encouraged us to sensitize and inform people all around us and on social networks about our concept and wastewater treatments. Since some of these drugs end up in the tab water we drink, it is important to warn them and to be sure that our idea can be accepted by the society."])),(t()(),r.Ra(468,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["We asked our panel if they agreed with our projects and if they had comments to make. 85.3% are fine with the use of GMOs to degrade the anticancer drugs in wastewaters and really encourages the Methotrexit. Whereas, 14.7% do not agree with our project because nature should not be modified and we cannot ensure the containment of our system."])),(t()(),r.Ra(470,0,null,0,4,"mat-card",[["class","normalmargin mat-card"],["style","width: 80%;"]],null,null,null,d.d,d.a)),r.Qa(471,49152,null,0,p.a,[],null,null),(t()(),r.Ra(472,0,null,0,0,"img",[["class","wideimg"],["src","http://2018.igem.org/wiki/images/5/56/T--GO_Paris-Saclay--hpdergraph.png"]],null,null,null,null,null)),(t()(),r.Ra(473,0,null,0,1,"div",[["class","mat-caption captionafterapicture"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Figure 5: Percentages of people from the panel agreeing with our project. "])),(t()(),r.Ra(475,0,null,0,0,"p",[["class","spacemaker"]],null,null,null,null,null)),(t()(),r.Ra(476,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(477,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(478,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Artistic view"])),(t()(),r.Ra(480,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["A French artist, known as Vipallegoria, got inspired by our idea of treating the hospital wastewaters from all these toxic medicines and made some symbolic drawings. Art is another way to illustrate a point of view and to send a message to society. Through her drawings, she wanted to show the gravity of the situation and the urge to do something. This is an original way to raise awareness to the problem of drug residues in surface water and to promote our projec"])),(t()(),r.Ra(482,0,null,0,4,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["More of her artwork can be found on "])),(t()(),r.Ra(484,0,null,null,1,"a",[["href","https://vipallegoria.wixsite.com/site"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["her website"])),(t()(),r.jb(-1,null,["."])),(t()(),r.Ra(487,0,null,0,0,"img",[["class","wideimg"],["src","http://2018.igem.org/wiki/images/f/f7/T--GO_Paris-Saclay--art_1.png"]],null,null,null,null,null)),(t()(),r.Ra(488,0,null,0,0,"p",[["class","spacemaker"]],null,null,null,null,null)),(t()(),r.Ra(489,0,null,0,0,"img",[["class","wideimg"],["src","http://2018.igem.org/wiki/images/f/f0/T--GO_Paris-Saclay--art_2.png"]],null,null,null,null,null)),(t()(),r.Ra(490,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(491,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(492,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Conclusion and prospects"])),(t()(),r.Ra(494,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["The potential societal impact of our project was a very important motivation for us. We really wanted to develop a project that could be used by the society. We did our best to make sure that MethotrExit was a viable project, and that people could actually accept it as a potential solution to the problem of water contamination by drug residues, even though GMOs are not well considered in France. "])),(t()(),r.Ra(496,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["At each step of the design process, we strived to integrate the human practice aspect, and made sure to gather some external opinions to continuously improve our project."])),(t()(),r.Ra(498,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["To raise awareness of the hazards linked to the presence of drugs in surface waters, we decided to write our own article about our project and the different impacts of anticancer drugs in hospital effluents. We talked with scientists and pharmacists to really shape the project and make sure that it will be really useful in the future. "])),(t()(),r.Ra(500,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["The contact we had with industries made us expand our field of action by developing the concept of a system that can degrade many molecules using one simple pathway instead of just treating one drug. The interview with the lawyer was necessary to make sure that there were no legal issues with our project. At last, taking in consideration the public\u2019s opinion was obligatory to evaluate to which extent people were aware of the problem of water contamination with drug residues and were considering our project, using GMOs, as a solution that was worth considering. Our project even inspired an artist to make drawings about MethotrExit! "])),(t()(),r.Ra(502,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Analyzing our results and the different surveys we also thought of ways to extend our project in two main directions: "])),(t()(),r.Ra(504,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["\u2022 the development of a probiotic in the case of a methotrexate overdose. We thought of developing a capsule in which the bacteria would be contained, the drug would enter the device and be degraded, the capsule would then be eliminated in the feces. "])),(t()(),r.Ra(506,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["\u2022 the development of a probiotic in the case of a methotrexate overdose. We thought of developing a capsule in which the bacteria would be contained, the drug would enter the device and be degraded, the capsule would then be eliminated in the feces."])),(t()(),r.Ra(508,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["\u2022 the use of the \u2018HeteroGenious\u2019 expression system we developed for this project, in other strains in which the synthetic pathways of interest are associated to fitness-cost. This could allow the degradation of many other drugs, including estrogens."])),(t()(),r.Ra(510,0,null,0,0,"p",[["class","spacemaker"]],null,null,null,null,null))],null,function(t,e){t(e,175,0,r.bb(e,176).expanded,r.bb(e,176)._hasSpacing()),t(e,179,0,r.bb(e,180).panel._headerId,r.bb(e,180).panel.disabled?-1:0,r.bb(e,180)._getPanelId(),r.bb(e,180)._isExpanded(),r.bb(e,180).panel.disabled,r.bb(e,180)._isExpanded(),t(e,182,0,r.bb(e,180)._getExpandedState(),t(e,181,0,r.bb(e,180).collapsedHeight,r.bb(e,180).expandedHeight))),t(e,209,0,r.bb(e,210).expanded,r.bb(e,210)._hasSpacing()),t(e,213,0,r.bb(e,214).panel._headerId,r.bb(e,214).panel.disabled?-1:0,r.bb(e,214)._getPanelId(),r.bb(e,214)._isExpanded(),r.bb(e,214).panel.disabled,r.bb(e,214)._isExpanded(),t(e,216,0,r.bb(e,214)._getExpandedState(),t(e,215,0,r.bb(e,214).collapsedHeight,r.bb(e,214).expandedHeight))),t(e,246,0,r.bb(e,247).expanded,r.bb(e,247)._hasSpacing()),t(e,250,0,r.bb(e,251).panel._headerId,r.bb(e,251).panel.disabled?-1:0,r.bb(e,251)._getPanelId(),r.bb(e,251)._isExpanded(),r.bb(e,251).panel.disabled,r.bb(e,251)._isExpanded(),t(e,253,0,r.bb(e,251)._getExpandedState(),t(e,252,0,r.bb(e,251).collapsedHeight,r.bb(e,251).expandedHeight))),t(e,274,0,r.bb(e,275).expanded,r.bb(e,275)._hasSpacing()),t(e,278,0,r.bb(e,279).panel._headerId,r.bb(e,279).panel.disabled?-1:0,r.bb(e,279)._getPanelId(),r.bb(e,279)._isExpanded(),r.bb(e,279).panel.disabled,r.bb(e,279)._isExpanded(),t(e,281,0,r.bb(e,279)._getExpandedState(),t(e,280,0,r.bb(e,279).collapsedHeight,r.bb(e,279).expandedHeight))),t(e,312,0,r.bb(e,313).expanded,r.bb(e,313)._hasSpacing()),t(e,316,0,r.bb(e,317).panel._headerId,r.bb(e,317).panel.disabled?-1:0,r.bb(e,317)._getPanelId(),r.bb(e,317)._isExpanded(),r.bb(e,317).panel.disabled,r.bb(e,317)._isExpanded(),t(e,319,0,r.bb(e,317)._getExpandedState(),t(e,318,0,r.bb(e,317).collapsedHeight,r.bb(e,317).expandedHeight))),t(e,386,0,r.bb(e,387).expanded,r.bb(e,387)._hasSpacing()),t(e,390,0,r.bb(e,391).panel._headerId,r.bb(e,391).panel.disabled?-1:0,r.bb(e,391)._getPanelId(),r.bb(e,391)._isExpanded(),r.bb(e,391).panel.disabled,r.bb(e,391)._isExpanded(),t(e,393,0,r.bb(e,391)._getExpandedState(),t(e,392,0,r.bb(e,391).collapsedHeight,r.bb(e,391).expandedHeight)))})}var Z=r.Na("app-human-practice-section",Q,function(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,1,"app-human-practice-section",[],null,null,null,Y,W)),r.Qa(1,114688,null,0,Q,[R.n],null,null)],function(t,e){t(e,1,0)},null)},{},{},[]),K=n("mrSG");function X(t){return""+(t||"")}function $(t){return"string"==typeof t?parseInt(t,10):t}var J=function(){function t(t){this._element=t,this._rowspan=1,this._colspan=1}return Object.defineProperty(t.prototype,"rowspan",{get:function(){return this._rowspan},set:function(t){this._rowspan=$(t)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"colspan",{get:function(){return this._colspan},set:function(t){this._colspan=$(t)},enumerable:!0,configurable:!0}),t.prototype._setStyle=function(t,e){this._element.nativeElement.style[t]=e},t}(),tt=function(){function t(t,e){var n=this;this.columnIndex=0,this.rowIndex=0,this.tracker=new Array(t),this.tracker.fill(0,0,this.tracker.length),this.positions=e.map(function(t){return n._trackTile(t)})}return Object.defineProperty(t.prototype,"rowCount",{get:function(){return this.rowIndex+1},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"rowspan",{get:function(){var t=Math.max.apply(Math,this.tracker);return t>1?this.rowCount+t-1:this.rowCount},enumerable:!0,configurable:!0}),t.prototype._trackTile=function(t){var e=this._findMatchingGap(t.colspan);return this._markTilePosition(e,t),this.columnIndex=e+t.colspan,new et(this.rowIndex,e)},t.prototype._findMatchingGap=function(t){if(t>this.tracker.length)throw Error("mat-grid-list: tile with colspan "+t+' is wider than grid with cols="'+this.tracker.length+'".');var e=-1,n=-1;do{this.columnIndex+t>this.tracker.length?this._nextRow():-1!=(e=this.tracker.indexOf(0,this.columnIndex))?(n=this._findGapEndIndex(e),this.columnIndex=e+1):this._nextRow()}while(n-e<t);return Math.max(e,0)},t.prototype._nextRow=function(){this.columnIndex=0,this.rowIndex++;for(var t=0;t<this.tracker.length;t++)this.tracker[t]=Math.max(0,this.tracker[t]-1)},t.prototype._findGapEndIndex=function(t){for(var e=t+1;e<this.tracker.length;e++)if(0!=this.tracker[e])return e;return this.tracker.length},t.prototype._markTilePosition=function(t,e){for(var n=0;n<e.colspan;n++)this.tracker[t+n]=e.rowspan},t}(),et=function(t,e){this.row=t,this.col=e},nt=function(){function t(){this._rows=0,this._rowspan=0}return t.prototype.init=function(t,e,n,r){this._gutterSize=at(t),this._rows=e.rowCount,this._rowspan=e.rowspan,this._cols=n,this._direction=r},t.prototype.getBaseTileSize=function(t,e){return"("+t+"% - ("+this._gutterSize+" * "+e+"))"},t.prototype.getTilePosition=function(t,e){return 0===e?"0":lt("("+t+" + "+this._gutterSize+") * "+e)},t.prototype.getTileSize=function(t,e){return"("+t+" * "+e+") + ("+(e-1)+" * "+this._gutterSize+")"},t.prototype.setStyle=function(t,e,n){var r=100/this._cols,i=(this._cols-1)/this._cols;this.setColStyles(t,n,r,i),this.setRowStyles(t,e,r,i)},t.prototype.setColStyles=function(t,e,n,r){var i=this.getBaseTileSize(n,r);t._setStyle("rtl"===this._direction?"right":"left",this.getTilePosition(i,e)),t._setStyle("width",lt(this.getTileSize(i,t.colspan)))},t.prototype.getGutterSpan=function(){return this._gutterSize+" * ("+this._rowspan+" - 1)"},t.prototype.getTileSpan=function(t){return this._rowspan+" * "+this.getTileSize(t,1)},t.prototype.getComputedHeight=function(){return null},t}(),rt=function(t){function e(e){var n=t.call(this)||this;return n.fixedRowHeight=e,n}return Object(K.b)(e,t),e.prototype.init=function(e,n,r,i){t.prototype.init.call(this,e,n,r,i),this.fixedRowHeight=at(this.fixedRowHeight)},e.prototype.setRowStyles=function(t,e){t._setStyle("top",this.getTilePosition(this.fixedRowHeight,e)),t._setStyle("height",lt(this.getTileSize(this.fixedRowHeight,t.rowspan)))},e.prototype.getComputedHeight=function(){return["height",lt(this.getTileSpan(this.fixedRowHeight)+" + "+this.getGutterSpan())]},e.prototype.reset=function(t){t._setListStyle(["height",null]),t._tiles.forEach(function(t){t._setStyle("top",null),t._setStyle("height",null)})},e}(nt),it=function(t){function e(e){var n=t.call(this)||this;return n._parseRatio(e),n}return Object(K.b)(e,t),e.prototype.setRowStyles=function(t,e,n,r){this.baseTileHeight=this.getBaseTileSize(n/this.rowHeightRatio,r),t._setStyle("marginTop",this.getTilePosition(this.baseTileHeight,e)),t._setStyle("paddingTop",lt(this.getTileSize(this.baseTileHeight,t.rowspan)))},e.prototype.getComputedHeight=function(){return["paddingBottom",lt(this.getTileSpan(this.baseTileHeight)+" + "+this.getGutterSpan())]},e.prototype.reset=function(t){t._setListStyle(["paddingBottom",null]),t._tiles.forEach(function(t){t._setStyle("marginTop",null),t._setStyle("paddingTop",null)})},e.prototype._parseRatio=function(t){var e=t.split(":");if(2!==e.length)throw Error('mat-grid-list: invalid ratio given for row-height: "'+t+'"');this.rowHeightRatio=parseFloat(e[0])/parseFloat(e[1])},e}(nt),ot=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Object(K.b)(e,t),e.prototype.setRowStyles=function(t,e){var n=this.getBaseTileSize(100/this._rowspan,(this._rows-1)/this._rows);t._setStyle("top",this.getTilePosition(n,e)),t._setStyle("height",lt(this.getTileSize(n,t.rowspan)))},e.prototype.reset=function(t){t._tiles.forEach(function(t){t._setStyle("top",null),t._setStyle("height",null)})},e}(nt);function lt(t){return"calc("+t+")"}function at(t){return t.match(/px|em|rem/)?t:t+"px"}var ut=function(){function t(t,e){this._element=t,this._dir=e,this._gutter="1px"}return Object.defineProperty(t.prototype,"cols",{get:function(){return this._cols},set:function(t){this._cols=$(t)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"gutterSize",{get:function(){return this._gutter},set:function(t){this._gutter=X(t)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"rowHeight",{set:function(t){var e=X(t);e!==this._rowHeight&&(this._rowHeight=e,this._setTileStyler(this._rowHeight))},enumerable:!0,configurable:!0}),t.prototype.ngOnInit=function(){this._checkCols(),this._checkRowHeight()},t.prototype.ngAfterContentChecked=function(){this._layoutTiles()},t.prototype._checkCols=function(){if(!this.cols)throw Error('mat-grid-list: must pass in number of columns. Example: <mat-grid-list cols="3">')},t.prototype._checkRowHeight=function(){this._rowHeight||this._setTileStyler("1:1")},t.prototype._setTileStyler=function(t){this._tileStyler&&this._tileStyler.reset(this),this._tileStyler="fit"===t?new ot:t&&t.indexOf(":")>-1?new it(t):new rt(t)},t.prototype._layoutTiles=function(){var t=this,e=new tt(this.cols,this._tiles);this._tileStyler.init(this.gutterSize,e,this.cols,this._dir?this._dir.value:"ltr"),this._tiles.forEach(function(n,r){var i=e.positions[r];t._tileStyler.setStyle(n,i.row,i.col)}),this._setListStyle(this._tileStyler.getComputedHeight())},t.prototype._setListStyle=function(t){t&&(this._element.nativeElement.style[t[0]]=t[1])},t}(),st=function(){},ct=n("Fzqc"),ht=r.Pa({encapsulation:2,styles:[".mat-grid-list{display:block;position:relative}.mat-grid-tile{display:block;position:absolute;overflow:hidden}.mat-grid-tile .mat-figure{top:0;left:0;right:0;bottom:0;position:absolute;display:flex;align-items:center;justify-content:center;height:100%;padding:0;margin:0}.mat-grid-tile .mat-grid-tile-footer,.mat-grid-tile .mat-grid-tile-header{display:flex;align-items:center;height:48px;color:#fff;background:rgba(0,0,0,.38);overflow:hidden;padding:0 16px;position:absolute;left:0;right:0}.mat-grid-tile .mat-grid-tile-footer>*,.mat-grid-tile .mat-grid-tile-header>*{margin:0;padding:0;font-weight:400;font-size:inherit}.mat-grid-tile .mat-grid-tile-footer.mat-2-line,.mat-grid-tile .mat-grid-tile-header.mat-2-line{height:68px}.mat-grid-tile .mat-grid-list-text{display:flex;flex-direction:column;width:100%;box-sizing:border-box;overflow:hidden}.mat-grid-tile .mat-grid-list-text>*{margin:0;padding:0;font-weight:400;font-size:inherit}.mat-grid-tile .mat-grid-list-text:empty{display:none}.mat-grid-tile .mat-grid-tile-header{top:0}.mat-grid-tile .mat-grid-tile-footer{bottom:0}.mat-grid-tile .mat-grid-avatar{padding-right:16px}[dir=rtl] .mat-grid-tile .mat-grid-avatar{padding-right:0;padding-left:16px}.mat-grid-tile .mat-grid-avatar:empty{display:none}"],data:{}});function ft(t){return r.lb(2,[(t()(),r.Ra(0,0,null,null,1,"div",[],null,null,null,null,null)),r.ab(null,0)],null,null)}var dt=r.Pa({encapsulation:2,styles:[".mat-grid-list{display:block;position:relative}.mat-grid-tile{display:block;position:absolute;overflow:hidden}.mat-grid-tile .mat-figure{top:0;left:0;right:0;bottom:0;position:absolute;display:flex;align-items:center;justify-content:center;height:100%;padding:0;margin:0}.mat-grid-tile .mat-grid-tile-footer,.mat-grid-tile .mat-grid-tile-header{display:flex;align-items:center;height:48px;color:#fff;background:rgba(0,0,0,.38);overflow:hidden;padding:0 16px;position:absolute;left:0;right:0}.mat-grid-tile .mat-grid-tile-footer>*,.mat-grid-tile .mat-grid-tile-header>*{margin:0;padding:0;font-weight:400;font-size:inherit}.mat-grid-tile .mat-grid-tile-footer.mat-2-line,.mat-grid-tile .mat-grid-tile-header.mat-2-line{height:68px}.mat-grid-tile .mat-grid-list-text{display:flex;flex-direction:column;width:100%;box-sizing:border-box;overflow:hidden}.mat-grid-tile .mat-grid-list-text>*{margin:0;padding:0;font-weight:400;font-size:inherit}.mat-grid-tile .mat-grid-list-text:empty{display:none}.mat-grid-tile .mat-grid-tile-header{top:0}.mat-grid-tile .mat-grid-tile-footer{bottom:0}.mat-grid-tile .mat-grid-avatar{padding-right:16px}[dir=rtl] .mat-grid-tile .mat-grid-avatar{padding-right:0;padding-left:16px}.mat-grid-tile .mat-grid-avatar:empty{display:none}"],data:{}});function pt(t){return r.lb(2,[(t()(),r.Ra(0,0,null,null,1,"figure",[["class","mat-figure"]],null,null,null,null,null)),r.ab(null,0)],null,null)}var mt=function(){function t(t,e){this.router=t,this.route=e,this.team_list=["Sorbonne U (France)","Bordeaux (France)","Toulouse (France)","Pasteur (France)","Copenhagen (Denmark)","Evry (France)","Fau Erlangen (Germany)","Tu Darmstadt (Germany)","Dusseldorf (Germany)","Eindhoven (Netherlands)","EFL (Switzerland)","Alto Helsinki (Finland)","Stuttgart (Germany)","U Born (Germany)","Leiden (Netherlands)","Aachen (Germany)","Wurzburg (Germany)","Bielefeld (Germany)","ETH Zurich (Switzerland)","Marburg (Germany)","Boku Viena (Austria) ","Paris Bettencourt (France)","Utrecht (Netherlands) ","Delaware (USA) ","Lippstad (Germany)","Tubigen (Germany)","Groningen (Netherlands)","New Castle (UK)","Taichung (Taiwan)","Hamburg (Germany)","Munich(Germany)"]}return t.prototype.ngAfterViewInit=function(){try{document.querySelector("#"+this.fragment).scrollIntoView()}catch(t){}},t.prototype.ngOnInit=function(){var t=this;this.route.fragment.subscribe(function(e){t.fragment=e})},t}(),gt=r.Pa({encapsulation:0,styles:[["#gcontainer[_ngcontent-%COMP%]{margin:20px}.dashboard-card-content[_ngcontent-%COMP%]{text-align:left}.dashboard-card[_ngcontent-%COMP%]{overflow:auto;font:unset}.grid-container[_ngcontent-%COMP%]{margin:20px}.emeetupimg[_ngcontent-%COMP%]{width:52%;margin-bottom:2em}.emeetupimgtall[_ngcontent-%COMP%]{width:46%;margin-left:1em;float:right;overflow:hidden}.teamtile[_ngcontent-%COMP%]{font-size:9pt}.pmeetup[_ngcontent-%COMP%]{width:90%;display:block;margin:2em auto}.ourcollabwith[_ngcontent-%COMP%]{font-weight:bolder;margin-left:-20%;margin-right:2em;float:left}"]],data:{}});function bt(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,2,"mat-grid-tile",[["class","teamtile mat-grid-tile"]],null,null,null,pt,dt)),r.Qa(1,49152,[[1,4]],0,J,[r.k],{rowspan:[0,"rowspan"],colspan:[1,"colspan"]},null),(t()(),r.jb(2,0,[" "," "]))],function(t,e){t(e,1,0,1,1)},function(t,e){t(e,2,0,e.context.$implicit)})}function yt(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,4,"div",[["class","bannercontainer"]],null,null,null,null,null)),(t()(),r.Ra(1,0,null,null,0,"img",[["class","bannerimg superposedbanner1"],["src","http://2018.igem.org/wiki/images/5/58/T--GO_Paris-Saclay--collab_underbanner.png"]],null,null,null,null,null)),(t()(),r.Ra(2,0,null,null,0,"img",[["class","bannerimg superposedbanner2"],["src","http://2018.igem.org/wiki/images/9/90/T--GO_Paris-Saclay--empty-banner.png"]],null,null,null,null,null)),(t()(),r.Ra(3,0,null,null,1,"div",[["class","headlinetext"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Collaborations"])),(t()(),r.Ra(5,0,null,null,95,"mat-card",[["class","dashboard-card largemargin mat-card"]],null,null,null,d.d,d.a)),r.Qa(6,49152,null,0,p.a,[],null,null),(t()(),r.Ra(7,0,null,0,1,"p",[["style","margin-bottom: 1em;"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" During this 2018 edition, we made fruitful connections with many teams : "])),(t()(),r.Ra(9,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(10,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(11,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Sorbonne University team"])),(t()(),r.Ra(13,0,null,0,0,"img",[["class","pmeetup"],["src","http://2018.igem.org/wiki/images/4/48/T--GO_Paris-Saclay--sorbonne_collab.jpg"]],null,null,null,null,null)),(t()(),r.Ra(14,0,null,0,3,"p",[],null,null,null,null,null)),(t()(),r.Ra(15,0,null,null,1,"a",[["href","http://2018.igem.org/Team:Sorbonne_U_Paris/Collaborations"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["iGEM Sorbonne University"])),(t()(),r.jb(-1,null,["/IGEM GO Paris_Saclay is probably the best example of what a real collaboration is. Because our team lacked programmers and designers, they proposed to help us with the coding part of IGEM (which really helped us in creating our wiki), and with the sketching process of our new logo."])),(t()(),r.Ra(18,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" We, on the other hand, realized that there was no mathematician in their team. Our two mathematicians proposed to work with them on the modelling of their project. "])),(t()(),r.Ra(20,0,null,0,0,"p",[["class","spacemaker"]],null,null,null,null,null)),(t()(),r.Ra(21,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(22,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(23,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Grenoble team"])),(t()(),r.Ra(25,0,null,0,0,"img",[["class","pmeetup"],["src","http://2018.igem.org/wiki/images/b/ba/T--GO_Paris-Saclay--grenoble_collab.jpg"]],null,null,null,null,null)),(t()(),r.Ra(26,0,null,0,4,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" In collaboration with the "])),(t()(),r.Ra(28,0,null,null,1,"a",[["href","http://2018.igem.org/Team:Grenoble-Alpes/Collaborations"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["IGEM Grenoble Alpes "])),(t()(),r.jb(-1,null,[" team we created the: \u201cTake a famous painting and throw some biology in it challenge\u201d. Pictures were posted on social media, the one with the most \u201clikes\u201d wins the competition. A very fun challenge indeed, a nice break from the lab during the summer. "])),(t()(),r.Ra(31,0,null,0,0,"p",[["class","spacemaker"]],null,null,null,null,null)),(t()(),r.Ra(32,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(33,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(34,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Dusseldorf team"])),(t()(),r.Ra(36,0,null,0,0,"img",[["class","pmeetup"],["src","http://2018.igem.org/wiki/images/0/00/T--GO_Paris-Saclay--collab_postcard.png"]],null,null,null,null,null)),(t()(),r.Ra(37,0,null,0,4,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" We collaborated with "])),(t()(),r.Ra(39,0,null,null,1,"a",[["href","http://2018.igem.org/Team:Duesseldorf/Collaborations"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Dusseldorf iGEM steam"])),(t()(),r.jb(-1,null,[" by participating in the design of a postcard showing an image related to synthetic biology associated with a small informational text. Each team\u2019s postcards were exchanged with other iGEM-teams so that each team could collect postcards from all over the world. The goal is to diffuse the postcard during public events. We chose to put the picture of our challenge and a brief description of the Grenoble and the GO Paris-Saclay teams. "])),(t()(),r.Ra(42,0,null,0,0,"p",[["class","spacemaker"]],null,null,null,null,null)),(t()(),r.Ra(43,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(44,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(45,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Sorbonne and Bordeaux university team"])),(t()(),r.Ra(47,0,null,0,0,"img",[["class","pmeetup"],["src","http://2018.igem.org/wiki/images/a/a3/T--GO_Paris-Saclay--collabsorbbord.png"],["style","width: 70%;"]],null,null,null,null,null)),(t()(),r.Ra(48,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" With Sorbonne University and the Bordeaux IGEM team, we organized a Seminar on September 26th on Synthetic Biology. Aliaa El Dairouty (PhD student in public law), Alexei Grinbaud (researcher at CEA) and Pierre Crozet (lecturer at Sorbonne University) were kind enough to join our project to present different topics to our public. We hope the collaboration between the three teams will continue beyond this seminar. "])),(t()(),r.Ra(50,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(51,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(52,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Louvain University team"])),(t()(),r.Ra(54,0,null,0,0,"img",[["class","pmeetup"],["src","http://2018.igem.org/wiki/images/c/c9/T--GO_Paris-Saclay--UCL_collab.png"]],null,null,null,null,null)),(t()(),r.Ra(55,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" In the early phase of the competition, we welcomed Celestin from UCL Louvain iGEM team in Paris for a day. More than just a meeting, it was the perfect time to discuss, and obtain a fresh look on the our respective team\u2019s project. "])),(t()(),r.Ra(57,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" We helped each other on several aspects of the contest such as the human practices and modelling. Our two teams would have neglected iGEM mandatory elements without this meeting. "])),(t()(),r.Ra(59,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(60,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(61,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Evry team"])),(t()(),r.Ra(63,0,null,0,0,"img",[["class","pmeetup"],["src","http://2018.igem.org/wiki/images/9/9a/T--GO_Paris-Saclay--evryretraite.png"],["style","width: 70%;"]],null,null,null,null,null)),(t()(),r.Ra(64,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" With Ad\xe8le Mazelin and Esteban Lebrun from the Evry Paris Saclay team, we came up with a vulgarization activity in senior residence for the science festival, a national scientific group of events. "])),(t()(),r.Ra(66,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" In France, GMO are often negatively perceived, especially among the senior population. During this day, we firstly evaluated the bacterial and synthetic biology knowledge of the audience. Surprisingly most of them were familiar with fact that bacteria are ubiquitous, and even with the microbiote notion. "])),(t()(),r.Ra(68,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" However, as usual, synthetic biology and GMO production were seen as negative \u201ctechnologies\u201d made by the agribusiness for their own profit. We took time to explain the technologies and to enlighten all the issue synthetic biology can or as already addressed with examples such as the insulin production. "])),(t()(),r.Ra(70,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" It was a truly inspiring moment to hear that we could change their opinion against GMO. We hope that, in the future, EU laws will be more adapted to this promising field. "])),(t()(),r.Ra(72,0,null,0,0,"p",[["class","spacemaker"]],null,null,null,null,null)),(t()(),r.Ra(73,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["These collaboration would not have been the same without the meetups we attended :"])),(t()(),r.Ra(75,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(76,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(77,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["European meetup with the iGEM community"])),(t()(),r.Ra(79,0,null,0,4,"div",[],null,null,null,null,null)),(t()(),r.Ra(80,0,null,null,0,"img",[["class","emeetupimgtall"],["src","http://2018.igem.org/wiki/images/2/21/T--GO_Paris-Saclay--european_meetup_1.jpg"]],null,null,null,null,null)),(t()(),r.Ra(81,0,null,null,0,"img",[["class","emeetupimg"],["src","http://2018.igem.org/wiki/images/a/a2/T--GO_Paris-Saclay--european_meetup_2.jpg"]],null,null,null,null,null)),(t()(),r.Ra(82,0,null,null,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["We were delighted to participate to the iGEM European meet-up in Munich. There, we got the chance to present our project in its earliest stages to:"])),(t()(),r.Ra(84,0,null,0,7,"div",[["style","clear:both;"]],null,null,null,null,null)),(t()(),r.Ra(85,0,null,null,4,"mat-grid-list",[["class","teamgrid mat-grid-list"],["cols","4"],["rowHeight","3em"]],null,null,null,ft,ht)),r.Qa(86,2211840,null,1,ut,[r.k,[2,ct.b]],{cols:[0,"cols"],rowHeight:[1,"rowHeight"]},null),r.hb(603979776,1,{_tiles:1}),(t()(),r.Ia(16777216,null,0,1,null,bt)),r.Qa(89,278528,null,0,o.j,[r.Q,r.N,r.s],{ngForOf:[0,"ngForOf"]},null),(t()(),r.Ra(90,0,null,null,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Thanks to this amazing meetup, we got the chance to listen to fantastic projects happening nearby. It was the first poster session for our team and we finished 2nd. After the meetup, we stayed in touch with iGEM teams."])),(t()(),r.Ra(92,0,null,0,0,"div",[["class","spacemaker"]],null,null,null,null,null)),(t()(),r.Ra(93,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(94,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(95,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Parisian meetup"])),(t()(),r.Ra(97,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["The Parisian meetup was our first opportunity to present our project to all the French teams: Bordeaux, Toulouse, Pasteur, Evry, Grenoble and Sorbonne University. We receive a strong positive feedback on our project and congratulation for our presentation. We were happy to be there, and kept in touch with iGEM Bordeaux, Sorbonne and Grenoble teams after this meetup. "])),(t()(),r.Ra(99,0,null,0,0,"img",[["class","pmeetup"],["src","http://2018.igem.org/wiki/images/7/76/T--GO_Paris-Saclay--parisian_meetup.jpg"]],null,null,null,null,null)),(t()(),r.Ra(100,0,null,0,0,"div",[["class","spacemaker"]],null,null,null,null,null))],function(t,e){var n=e.component;t(e,86,0,"4","3em"),t(e,89,0,n.team_list)},null)}var vt=r.Na("app-collaborations",mt,function(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,1,"app-collaborations",[],null,null,null,yt,gt)),r.Qa(1,4308992,null,0,mt,[R.n,R.a],null,null)],function(t,e){t(e,1,0)},null)},{},{},[]),_t=function(){function t(t,e){this.route=t,this.router=e}return t.prototype.ngOnInit=function(){var t=this;this.route.fragment.subscribe(function(e){t.fragment=e})},t.prototype.ngAfterViewInit=function(){try{document.querySelector("#"+this.fragment).scrollIntoView()}catch(t){}},t}(),wt=r.Pa({encapsulation:0,styles:[[""]],data:{}});function xt(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,4,"div",[["class","bannercontainer"]],null,null,null,null,null)),(t()(),r.Ra(1,0,null,null,0,"img",[["class","bannerimg superposedbanner1"],["src","http://2018.igem.org/wiki/images/c/c8/T--GO_Paris-Saclay--stagedlab_underbanner.png"]],null,null,null,null,null)),(t()(),r.Ra(2,0,null,null,0,"img",[["class","bannerimg superposedbanner2"],["src","http://2018.igem.org/wiki/images/9/90/T--GO_Paris-Saclay--empty-banner.png"]],null,null,null,null,null)),(t()(),r.Ra(3,0,null,null,1,"div",[["class","headlinetext"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Demonstrate"])),(t()(),r.Ra(5,0,null,null,115,"mat-card",[["class","dashboard-card largemargin mat-card"]],null,null,null,d.d,d.a)),r.Qa(6,49152,null,0,p.a,[],null,null),(t()(),r.Ra(7,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(8,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(9,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["MethotrExit: a HeteroGenious Cleaning Factory"])),(t()(),r.Ra(11,0,null,0,4,"p",[["class","withlettrine"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" Cytotoxic anticancer drugs are among harmful chemicals found in hospital wastewater at high concentration. Physical and chemical degradation methods exist but are often inefficient, unsustainable or expensive. We propose "])),(t()(),r.Ra(13,0,null,null,1,"b",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["MethotrExit"])),(t()(),r.jb(-1,null,[", a bioreactor-based approach to tackle this problem. We focused on the biotransformation of methotrexate (MTX), a widely used anticancer drug. "])),(t()(),r.Ra(16,0,null,0,7,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" After choosing appropriate chassis strains, we designed synthetic cassettes encoding a new biotransformation pathway using a heterologously expressed carboxypeptidase in "])),(t()(),r.Ra(18,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Escherichia coli"])),(t()(),r.jb(-1,null,[". In only 5 hours, "])),(t()(),r.Ra(21,0,null,null,1,"b",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["MethotrExit"])),(t()(),r.jb(-1,null,[" drastically removes MTX from the media. However, the degradation of anticancer drugs and the biotransformation pathway itself can be toxic. To overcome these issues, Biobricks bringing heterogeneity in enzyme expression were built to ensure the survival of a subpopulation. Modeling of this system highlights the interest of a division of labor between \u2018cleaning\u2019 and \u2018stem\u2019 bacterial cells. "])),(t()(),r.Ra(24,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(25,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(26,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["The choice of a \u2018Cleaning Factory\u2019 chassis"])),(t()(),r.Ra(28,0,null,0,7,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" After analysing the MTX-sensitivity of several "])),(t()(),r.Ra(30,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Escherichia coli"])),(t()(),r.jb(-1,null,[" K12 WT and efflux pump mutants, we decided to choose both the WT and \u0394"])),(t()(),r.Ra(33,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["tolC"])),(t()(),r.jb(-1,null,[" strains as chassis. Indeed the former present a strong MTX-resistance (up to 1024 \xb5M MTX) while the latter is MTX-sensitive but devoid of MTX efflux pump. This may limit MTX efflux and so favor MTX biotransformation within the cell. "])),(t()(),r.Ra(36,0,null,0,24,"mat-card",[["class","eatintotextmargin mat-card"],["style","overflow: auto;"]],null,null,null,d.d,d.a)),r.Qa(37,49152,null,0,p.a,[],null,null),(t()(),r.Ra(38,0,null,0,0,"img",[["class","wideimg"],["src","http://2018.igem.org/wiki/images/0/0c/T--GO_Paris-Saclay--demonstrate_schema.png"]],null,null,null,null,null)),(t()(),r.Ra(39,0,null,0,21,"div",[["class","mat-caption captionafterapicture"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Figure 1: "])),(t()(),r.Ra(41,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.Ra(42,0,null,null,1,"b",[["style","color:black;"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["A The MethotrExit project : MTX-biotransformation pathway and division of labor strategy"])),(t()(),r.Ra(44,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.Ra(45,0,null,null,1,"b",[["style","color:black;"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["B HPLC analysis of MTX medium incubated with a \u2018MTX-Cleaning Factory\u2019"])),(t()(),r.Ra(47,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.Ra(48,0,null,null,7,"div",[["class","captionmaterialmethod"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" LB medium containing MTX (512 \xb5M) was incubated during 5 h at 37\xb0C with control bacteria [E. coli K12 pSB1C3-tet (BBa_R0040)] or with one of our \u2018MTX Cleaning Factory\u2019 [E. coli WT pSB1C3-"])),(t()(),r.Ra(50,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["folC"])),(t()(),r.jb(-1,null,["-"])),(t()(),r.Ra(53,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["cpg2"])),(t()(),r.jb(-1,null,[" (BBa_K2688009)]. The supernatants were filtrated and analysed by HPLC with a reverse phase C18 column. Detection was made using UV spectrophotometry at 303 nm. "])),(t()(),r.Ra(56,0,null,null,1,"b",[["style","color:black;"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" C The \u2018HeteroGenious\u2019 device."])),(t()(),r.Ra(58,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.Ra(59,0,null,null,1,"div",[["class","captionmaterialmethod"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Interplay between Ler and H-NS for the modulation of LEE5 promoter activity; Fluorescent microscopy of E. coli K12 harboring pSB1C3-LEE5_GFP_native (BBa_K2688012) cultured in LB at 37\xb0C during 24 h. "])),(t()(),r.Ra(61,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(62,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(63,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Design of the MTX biotransformation pathway"])),(t()(),r.Ra(65,0,null,0,20,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" We focused our attention on two enzymes, "])),(t()(),r.Ra(67,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Pseudomonas"])),(t()(),r.jb(-1,null,[" carboxypeptidase G2 (CPG2 or \u2018glucarpidase\u2019) and a folylpoly-\u03b3-glutamate synthetase (FolC) (Figure 1.A). CPG2 is the key enzyme that rapidly converts MTX into less toxic metabolites glutamate and DAMPA (2,4-diamino-N10-methylpteroic acid)"])),(t()(),r.Ra(70,0,null,null,1,"reference-box",[["shorthand","Widemann2000"]],null,null,null,m.c,m.b)),r.Qa(71,114688,null,0,g.a,[b.a,y.a],{shorthand:[0,"shorthand"]},null),(t()(),r.Ra(72,0,null,null,1,"reference-box",[["shorthand","Larimer2014"]],null,null,null,m.c,m.b)),r.Qa(73,114688,null,0,g.a,[b.a,y.a],{shorthand:[0,"shorthand"]},null),(t()(),r.jb(-1,null,[". We also tested the interest of co-expressing FolC that may enhance MTX catabolism by coupling MTX to polyglutamate"])),(t()(),r.Ra(75,0,null,null,1,"reference-box",[["shorthand","Chabner1985"]],null,null,null,m.c,m.b)),r.Qa(76,114688,null,0,g.a,[b.a,y.a],{shorthand:[0,"shorthand"]},null),(t()(),r.Ra(77,0,null,null,1,"reference-box",[["shorthand","Kwon2008"]],null,null,null,m.c,m.b)),r.Qa(78,114688,null,0,g.a,[b.a,y.a],{shorthand:[0,"shorthand"]},null),(t()(),r.jb(-1,null,[". The biotransformation of MTX was monitored by HPLC analysis and bioassays using "])),(t()(),r.Ra(80,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["E. coli"])),(t()(),r.jb(-1,null,[" K12 \u0394"])),(t()(),r.Ra(83,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["acrA"])),(t()(),r.jb(-1,null,[" mutant as an indicative strain. In only 5 h of incubation with our \u2018Cleaning Factories\u2019, MTX was nearly completely removed from LB medium (Figure 1.B). "])),(t()(),r.Ra(86,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(87,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(88,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Toward the \u2018HeteroGenious Cleaning Factory\u2019"])),(t()(),r.Ra(90,0,null,0,13,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["We observed that the chassis strains harboring both "])),(t()(),r.Ra(92,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["cpg2"])),(t()(),r.jb(-1,null,[" and "])),(t()(),r.Ra(95,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["folC"])),(t()(),r.jb(-1,null,[" expression cassettes present a slight growth delay. Indeed, drug degradation pathways may be associated with a fitness cost. Therefore we wanted our bioreactor to harbor a heterogeneous synthetic transgene expression. Only two parts are required to implement this \u2018HeteroGenious\u2019 system in "])),(t()(),r.Ra(98,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["E. coli"])),(t()(),r.jb(-1,null,[": Ler (\u2018LEE encoded regulator\u2019) and its target LEE5 promoter (Figure 1.C)"])),(t()(),r.Ra(101,0,null,null,1,"reference-box",[["shorthand","Leh2017"]],null,null,null,m.c,m.b)),r.Qa(102,114688,null,0,g.a,[b.a,y.a],{shorthand:[0,"shorthand"]},null),(t()(),r.jb(-1,null,[". The competition between Ler and H-NS (naturally present in E. coli) for LEE5 binding can generate a heterogeneous transgene expression. Modeling a heterogeneous expression of the synthetic pathway within the \u2018cleaning factory\u2019 population highlights the interest of a division of labor between \u2018cleaning\u2019 and \u2018stem-like\u2019 bacterial cells. "])),(t()(),r.Ra(104,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(105,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(106,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Conclusion"])),(t()(),r.Ra(108,0,null,0,7,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" We obtained "])),(t()(),r.Ra(110,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["E. coli"])),(t()(),r.jb(-1,null,[" strains that efficiently remove MTX from culture medium, and a two-part device that can generate heterogeneity of transgene expression within a bacterial population. This study opens new insight concerning the design of \u2018Cleaning Factories\u2019. Moreover, "])),(t()(),r.Ra(113,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["E. coli"])),(t()(),r.jb(-1,null,[" strains able to degrade MTX could be of potential interest as probiotics to treat MTX intoxication. "])),(t()(),r.Ra(116,0,null,0,3,"div",[["class","formoredetailssee"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["For more details, see the "])),(t()(),r.Ra(118,0,null,null,1,"a",[],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.router.navigate(["/project"],{fragment:"top"})&&r),r},null,null)),(t()(),r.jb(-1,null,["summary of our project"])),(t()(),r.Ra(120,0,null,0,0,"p",[["class","spacemaker"]],null,null,null,null,null))],function(t,e){t(e,71,0,"Widemann2000"),t(e,73,0,"Larimer2014"),t(e,76,0,"Chabner1985"),t(e,78,0,"Kwon2008"),t(e,102,0,"Leh2017")},null)}var St=r.Na("app-demonstrate",_t,function(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,1,"app-demonstrate",[],null,null,null,xt,wt)),r.Qa(1,4308992,null,0,_t,[R.a,R.n],null,null)],function(t,e){t(e,1,0)},null)},{},{},[]),Ct=function(){function t(){}return t.prototype.ngOnInit=function(){},t}(),kt=r.Pa({encapsulation:0,styles:[["#gcontainer[_ngcontent-%COMP%]{margin:20px}.dashboard-card-content[_ngcontent-%COMP%]{text-align:left}.dashboard-card[_ngcontent-%COMP%]{overflow:auto}.grid-container[_ngcontent-%COMP%]{margin:20px}"]],data:{}});function Rt(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,4,"div",[["class","bannercontainer"]],null,null,null,null,null)),(t()(),r.Ra(1,0,null,null,0,"img",[["class","bannerimg superposedbanner1"],["src","http://2018.igem.org/wiki/images/c/c8/T--GO_Paris-Saclay--stagedlab_underbanner.png"]],null,null,null,null,null)),(t()(),r.Ra(2,0,null,null,0,"img",[["class","bannerimg superposedbanner2"],["src","http://2018.igem.org/wiki/images/9/90/T--GO_Paris-Saclay--empty-banner.png"]],null,null,null,null,null)),(t()(),r.Ra(3,0,null,null,1,"div",[["class","headlinetext"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Safety"])),(t()(),r.Ra(5,0,null,null,1,"mat-card",[["class","dashboard-card mat-card"]],null,null,null,d.d,d.a)),r.Qa(6,49152,null,0,p.a,[],null,null)],null,null)}var jt=r.Na("app-safety",Ct,function(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,1,"app-safety",[],null,null,null,Rt,kt)),r.Qa(1,114688,null,0,Ct,[],null,null)],function(t,e){t(e,1,0)},null)},{},{},[]),Ot=n("BHnd"),Et=n("y4qS"),Tt=n("/dO6"),Pt=n("tRTW"),It=n("seP3"),At=n("gIcY"),Mt=n("pIm3"),Dt=n("dJrM"),Nt=n("G5J1"),Lt=n("K9Ia"),Ft=(n("bne5"),n("n6gG")),zt=(n("Rney"),n("ny24"),!!Object(I.d)()&&{passive:!0}),Vt=function(){function t(t,e){this._platform=t,this._ngZone=e,this._monitoredElements=new Map}return t.prototype.monitor=function(t){var e=this;if(!this._platform.isBrowser)return Nt.a;var n=this._monitoredElements.get(t);if(n)return n.subject.asObservable();var r=new Lt.a,i="cdk-text-field-autofilled",o=function(n){"cdk-text-field-autofill-start"!==n.animationName||t.classList.contains(i)?"cdk-text-field-autofill-end"===n.animationName&&t.classList.contains(i)&&(t.classList.remove(i),e._ngZone.run(function(){return r.next({target:n.target,isAutofilled:!1})})):(t.classList.add(i),e._ngZone.run(function(){return r.next({target:n.target,isAutofilled:!0})}))};return this._ngZone.runOutsideAngular(function(){t.addEventListener("animationstart",o,zt),t.classList.add("cdk-text-field-autofill-monitored")}),this._monitoredElements.set(t,{subject:r,unlisten:function(){t.removeEventListener("animationstart",o,zt)}}),r.asObservable()},t.prototype.stopMonitoring=function(t){var e=this._monitoredElements.get(t);e&&(e.unlisten(),e.subject.complete(),t.classList.remove("cdk-text-field-autofill-monitored"),t.classList.remove("cdk-text-field-autofilled"),this._monitoredElements.delete(t))},t.prototype.ngOnDestroy=function(){var t=this;this._monitoredElements.forEach(function(e,n){return t.stopMonitoring(n)})},t.ngInjectableDef=Object(r.U)({factory:function(){return new t(Object(r.Y)(I.a),Object(r.Y)(r.z))},token:t,providedIn:"root"}),t}(),Bt=function(){},Ht=["button","checkbox","file","hidden","image","radio","range","reset","submit"],Gt=0,Ut=function(t){function e(e,n,r,i,o,l,a,u,s){var c=t.call(this,l,i,o,r)||this;return c._elementRef=e,c._platform=n,c.ngControl=r,c._autofillMonitor=u,c._uid="mat-input-"+Gt++,c._isServer=!1,c.focused=!1,c.stateChanges=new Lt.a,c.controlType="mat-input",c.autofilled=!1,c._disabled=!1,c._required=!1,c._type="text",c._readonly=!1,c._neverEmptyInputTypes=["date","datetime","datetime-local","month","time","week"].filter(function(t){return Object(I.c)().has(t)}),c._inputValueAccessor=a||c._elementRef.nativeElement,c._previousNativeValue=c.value,c.id=c.id,n.IOS&&s.runOutsideAngular(function(){e.nativeElement.addEventListener("keyup",function(t){var e=t.target;e.value||e.selectionStart||e.selectionEnd||(e.setSelectionRange(1,1),e.setSelectionRange(0,0))})}),c._isServer=!c._platform.isBrowser,c}return Object(K.b)(e,t),Object.defineProperty(e.prototype,"disabled",{get:function(){return this.ngControl&&null!==this.ngControl.disabled?this.ngControl.disabled:this._disabled},set:function(t){this._disabled=Object(Ft.c)(t),this.focused&&(this.focused=!1,this.stateChanges.next())},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"id",{get:function(){return this._id},set:function(t){this._id=t||this._uid},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"required",{get:function(){return this._required},set:function(t){this._required=Object(Ft.c)(t)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"type",{get:function(){return this._type},set:function(t){this._type=t||"text",this._validateType(),!this._isTextarea()&&Object(I.c)().has(this._type)&&(this._elementRef.nativeElement.type=this._type)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"value",{get:function(){return this._inputValueAccessor.value},set:function(t){t!==this.value&&(this._inputValueAccessor.value=t,this.stateChanges.next())},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"readonly",{get:function(){return this._readonly},set:function(t){this._readonly=Object(Ft.c)(t)},enumerable:!0,configurable:!0}),e.prototype.ngOnInit=function(){var t=this;this._autofillMonitor.monitor(this._elementRef.nativeElement).subscribe(function(e){t.autofilled=e.isAutofilled,t.stateChanges.next()})},e.prototype.ngOnChanges=function(){this.stateChanges.next()},e.prototype.ngOnDestroy=function(){this.stateChanges.complete(),this._autofillMonitor.stopMonitoring(this._elementRef.nativeElement)},e.prototype.ngDoCheck=function(){this.ngControl&&this.updateErrorState(),this._dirtyCheckNativeValue()},e.prototype.focus=function(){this._elementRef.nativeElement.focus()},e.prototype._focusChanged=function(t){t===this.focused||this.readonly||(this.focused=t,this.stateChanges.next())},e.prototype._onInput=function(){},e.prototype._dirtyCheckNativeValue=function(){var t=this.value;this._previousNativeValue!==t&&(this._previousNativeValue=t,this.stateChanges.next())},e.prototype._validateType=function(){if(Ht.indexOf(this._type)>-1)throw Error('Input type "'+this._type+"\" isn't supported by matInput.")},e.prototype._isNeverEmpty=function(){return this._neverEmptyInputTypes.indexOf(this._type)>-1},e.prototype._isBadInput=function(){var t=this._elementRef.nativeElement.validity;return t&&t.badInput},e.prototype._isTextarea=function(){return"textarea"===this._elementRef.nativeElement.nodeName.toLowerCase()},Object.defineProperty(e.prototype,"empty",{get:function(){return!(this._isNeverEmpty()||this._elementRef.nativeElement.value||this._isBadInput()||this.autofilled)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"shouldLabelFloat",{get:function(){return this.focused||!this.empty},enumerable:!0,configurable:!0}),e.prototype.setDescribedByIds=function(t){this._ariaDescribedby=t.join(" ")},e.prototype.onContainerClick=function(){this.focus()},e}(Object(S.F)(function(t,e,n,r){this._defaultErrorStateMatcher=t,this._parentForm=e,this._parentFormGroup=n,this.ngControl=r})),qt=function(){},Qt=function(){function t(t){var e=this;this.refman=t,this.displayedColumns=["index","shorthand"],t.reflist.subscribe(function(t){e.datasource_references=new Ot.l(t)},function(t){return console.log(t)})}return t.prototype.applyFilter=function(t){this.datasource_references.filter=t.trim().toLowerCase()},t.prototype.ngOnInit=function(){},t}(),Wt=r.Pa({encapsulation:0,styles:[["#gcontainer[_ngcontent-%COMP%]{margin:20px}.dashboard-card-content[_ngcontent-%COMP%]{text-align:left}.dashboard-card[_ngcontent-%COMP%]{overflow:auto}.grid-container[_ngcontent-%COMP%]{margin:20px}.references-table[_ngcontent-%COMP%], .search-field[_ngcontent-%COMP%]{width:100%}tr.example-detail-row[_ngcontent-%COMP%]{height:0}.example-element-row[_ngcontent-%COMP%]   td[_ngcontent-%COMP%]{border-bottom-width:0}tr.example-element-row[_ngcontent-%COMP%]:not(.example-expanded-row):hover{background:#f5f5f5}tr.example-element-row[_ngcontent-%COMP%]:not(.example-expanded-row):active{background:#efefef}"]],data:{}});function Yt(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,2,"th",[["class","mat-header-cell"],["mat-header-cell",""],["role","columnheader"]],null,null,null,null,null)),r.Qa(1,16384,null,0,Ot.e,[Et.d,r.k],null,null),(t()(),r.jb(-1,null,[" Ref. # "]))],null,null)}function Zt(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,2,"td",[["class","mat-cell"],["mat-cell",""],["role","gridcell"]],null,null,null,null,null)),r.Qa(1,16384,null,0,Ot.a,[Et.d,r.k],null,null),(t()(),r.jb(2,null,[" "," "]))],null,function(t,e){t(e,2,0,e.context.$implicit.index)})}function Kt(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,2,"th",[["class","mat-header-cell"],["mat-header-cell",""],["role","columnheader"]],null,null,null,null,null)),r.Qa(1,16384,null,0,Ot.e,[Et.d,r.k],null,null),(t()(),r.jb(-1,null,[" Shorthand "]))],null,null)}function Xt(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,2,"td",[["class","mat-cell"],["mat-cell",""],["role","gridcell"]],null,null,null,null,null)),r.Qa(1,16384,null,0,Ot.a,[Et.d,r.k],null,null),(t()(),r.jb(2,null,[" "," "]))],null,function(t,e){t(e,2,0,e.context.$implicit.shorthand)})}function $t(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,2,"th",[["class","mat-header-cell"],["mat-header-cell",""],["role","columnheader"]],null,null,null,null,null)),r.Qa(1,16384,null,0,Ot.e,[Et.d,r.k],null,null),(t()(),r.jb(-1,null,[" Title "]))],null,null)}function Jt(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,3,"td",[["class","mat-cell"],["mat-cell",""],["role","gridcell"]],null,null,null,null,null)),r.Qa(1,16384,null,0,Ot.a,[Et.d,r.k],null,null),(t()(),r.Ra(2,0,null,null,1,"span",[["style","font-weight: bold;"]],null,null,null,null,null)),(t()(),r.jb(3,null,["",""]))],null,function(t,e){t(e,3,0,e.context.$implicit.title)})}function te(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,5,"mat-chip",[["class","mat-chip"],["role","option"]],[[1,"tabindex",0],[2,"mat-chip-selected",null],[2,"mat-chip-with-avatar",null],[2,"mat-chip-with-trailing-icon",null],[2,"mat-chip-disabled",null],[1,"disabled",0],[1,"aria-disabled",0],[1,"aria-selected",0]],[[null,"click"],[null,"keydown"],[null,"focus"],[null,"blur"]],function(t,e,n){var i=!0;return"click"===e&&(i=!1!==r.bb(t,1)._handleClick(n)&&i),"keydown"===e&&(i=!1!==r.bb(t,1)._handleKeydown(n)&&i),"focus"===e&&(i=!1!==r.bb(t,1).focus()&&i),"blur"===e&&(i=!1!==r.bb(t,1)._blur()&&i),i},null,null)),r.Qa(1,147456,[[24,4]],3,Tt.b,[r.k,r.z,I.a,[2,S.k]],null,null),r.hb(335544320,25,{avatar:0}),r.hb(335544320,26,{trailingIcon:0}),r.hb(335544320,27,{removeIcon:0}),(t()(),r.jb(5,null,["",""]))],null,function(t,e){t(e,0,0,r.bb(e,1).disabled?null:-1,r.bb(e,1).selected,r.bb(e,1).avatar,r.bb(e,1).trailingIcon||r.bb(e,1).removeIcon,r.bb(e,1).disabled,r.bb(e,1).disabled||null,r.bb(e,1).disabled.toString(),r.bb(e,1).ariaSelected),t(e,5,0,e.context.$implicit)})}function ee(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,29,"td",[["class","mat-cell"],["mat-cell",""],["role","gridcell"]],[[1,"colspan",0]],null,null,null,null)),r.Qa(1,16384,null,0,Ot.a,[Et.d,r.k],null,null),(t()(),r.Ra(2,0,null,null,27,"div",[],null,null,null,null,null)),(t()(),r.Ra(3,0,null,null,1,"div",[["class","mat-subheading-1"],["style","margin-bottom : 0px;"]],null,null,null,null,null)),(t()(),r.jb(4,null,["",""])),(t()(),r.Ra(5,0,null,null,1,"div",[["class","mat-title"],["style","margin-bottom : 0px;"]],null,null,null,null,null)),(t()(),r.jb(6,null,["",""])),(t()(),r.Ra(7,0,null,null,1,"div",[["class","mat-subheading-1"]],null,null,null,null,null)),(t()(),r.jb(8,null,["",""])),(t()(),r.Ra(9,0,null,null,1,"div",[["class","example-element-description"]],null,null,null,null,null)),(t()(),r.jb(10,null,[" "," "])),(t()(),r.Ra(11,0,null,null,0,"div",[],null,null,null,null,null)),(t()(),r.Ra(12,0,null,null,7,"div",[["style","float: right;"]],null,null,null,null,null)),(t()(),r.Ra(13,0,null,null,6,"span",[],null,null,null,null,null)),(t()(),r.Ra(14,0,null,null,5,"a",[["mat-raised-button",""]],[[8,"href",4],[1,"tabindex",0],[1,"disabled",0],[1,"aria-disabled",0],[2,"_mat-animation-noopable",null]],[[null,"click"]],function(t,e,n){var i=!0;return"click"===e&&(i=!1!==r.bb(t,15)._haltDisabledEvents(n)&&i),i},T.c,T.a)),r.Qa(15,180224,null,0,P.a,[I.a,A.d,r.k,[2,M.a]],null,null),(t()(),r.Ra(16,0,null,0,2,"mat-icon",[["class","mat-icon"],["role","img"]],[[2,"mat-icon-inline",null]],null,null,w.b,w.a)),r.Qa(17,638976,null,0,x.a,[r.k,x.c,[8,null]],null,null),(t()(),r.jb(-1,0,["open_in_new"])),(t()(),r.jb(-1,0,[" Open article page"])),(t()(),r.Ra(20,0,null,null,9,"p",[["class","mat-caption"]],null,null,null,null,null)),(t()(),r.jb(21,null,[""," \u2014 doi:"," "])),(t()(),r.Ra(22,0,null,null,7,"span",[],null,null,null,null,null)),(t()(),r.Ra(23,0,null,null,6,"mat-chip-list",[["class","mat-chip-list"]],[[1,"tabindex",0],[1,"aria-describedby",0],[1,"aria-required",0],[1,"aria-disabled",0],[1,"aria-invalid",0],[1,"aria-multiselectable",0],[1,"role",0],[2,"mat-chip-list-disabled",null],[2,"mat-chip-list-invalid",null],[2,"mat-chip-list-required",null],[1,"aria-orientation",0],[8,"id",0]],[[null,"focus"],[null,"blur"],[null,"keydown"]],function(t,e,n){var i=!0;return"focus"===e&&(i=!1!==r.bb(t,25).focus()&&i),"blur"===e&&(i=!1!==r.bb(t,25)._blur()&&i),"keydown"===e&&(i=!1!==r.bb(t,25)._keydown(n)&&i),i},Pt.b,Pt.a)),r.gb(6144,null,It.c,null,[Tt.c]),r.Qa(25,1556480,null,1,Tt.c,[r.k,r.h,[2,ct.b],[2,At.c],[2,At.a],S.d,[8,null]],null,null),r.hb(603979776,24,{chips:1}),(t()(),r.jb(-1,0,[" Tags: "])),(t()(),r.Ia(16777216,null,0,1,null,te)),r.Qa(29,278528,null,0,o.j,[r.Q,r.N,r.s],{ngForOf:[0,"ngForOf"]},null)],function(t,e){t(e,17,0),t(e,25,0),t(e,29,0,e.context.$implicit.tags)},function(t,e){t(e,0,0,e.component.displayedColumns.length),t(e,4,0,e.context.$implicit.journal),t(e,6,0,e.context.$implicit.title),t(e,8,0,e.context.$implicit.authors),t(e,10,0,e.context.$implicit.abstract),t(e,14,0,r.Ta(1,"",e.context.$implicit.url,""),r.bb(e,15).disabled?-1:r.bb(e,15).tabIndex||0,r.bb(e,15).disabled||null,r.bb(e,15).disabled.toString(),"NoopAnimations"===r.bb(e,15)._animationMode),t(e,16,0,r.bb(e,17).inline),t(e,21,0,e.context.$implicit.pubDetails,e.context.$implicit.doi),t(e,23,1,[r.bb(e,25)._tabIndex,r.bb(e,25)._ariaDescribedby||null,r.bb(e,25).required.toString(),r.bb(e,25).disabled.toString(),r.bb(e,25).errorState,r.bb(e,25).multiple,r.bb(e,25).role,r.bb(e,25).disabled,r.bb(e,25).errorState,r.bb(e,25).required,r.bb(e,25).ariaOrientation,r.bb(e,25)._uid])})}function ne(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,2,"tr",[["class","mat-header-row"],["mat-header-row",""],["role","row"]],null,null,null,Mt.d,Mt.a)),r.gb(6144,null,Et.k,null,[Ot.g]),r.Qa(2,49152,null,0,Ot.g,[],null,null)],null,null)}function re(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,2,"tr",[["class","example-element-row mat-row"],["mat-row",""],["role","row"]],[[2,"example-expanded-row",null]],[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==(t.component.expandedElement=t.context.$implicit)&&r),r},Mt.e,Mt.b)),r.gb(6144,null,Et.m,null,[Ot.i]),r.Qa(2,49152,null,0,Ot.i,[],null,null)],null,function(t,e){t(e,0,0,e.component.expandedElement===e.context.$implicit)})}function ie(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,2,"tr",[["class","example-detail-row mat-row"],["mat-row",""],["role","row"]],null,null,null,Mt.e,Mt.b)),r.gb(6144,null,Et.m,null,[Ot.i]),r.Qa(2,49152,null,0,Ot.i,[],null,null)],null,null)}function oe(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,4,"div",[["class","bannercontainer"]],null,null,null,null,null)),(t()(),r.Ra(1,0,null,null,0,"img",[["class","bannerimg superposedbanner1"],["src","http://2018.igem.org/wiki/images/1/1b/T--GO_Paris-Saclay--tableau_banner.png"]],null,null,null,null,null)),(t()(),r.Ra(2,0,null,null,0,"img",[["class","bannerimg superposedbanner2"],["src","http://2018.igem.org/wiki/images/9/90/T--GO_Paris-Saclay--empty-banner.png"]],null,null,null,null,null)),(t()(),r.Ra(3,0,null,null,1,"div",[["class","headlinetext"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Bibliography"])),(t()(),r.Ra(5,0,null,null,75,"mat-card",[["class","dashboard-card largemargin mat-card"]],null,null,null,d.d,d.a)),r.Qa(6,49152,null,0,p.a,[],null,null),(t()(),r.Ra(7,0,null,0,11,"mat-form-field",[["class","search-field mat-form-field"]],[[2,"mat-form-field-appearance-standard",null],[2,"mat-form-field-appearance-fill",null],[2,"mat-form-field-appearance-outline",null],[2,"mat-form-field-appearance-legacy",null],[2,"mat-form-field-invalid",null],[2,"mat-form-field-can-float",null],[2,"mat-form-field-should-float",null],[2,"mat-form-field-hide-placeholder",null],[2,"mat-form-field-disabled",null],[2,"mat-form-field-autofilled",null],[2,"mat-focused",null],[2,"mat-accent",null],[2,"mat-warn",null],[2,"ng-untouched",null],[2,"ng-touched",null],[2,"ng-pristine",null],[2,"ng-dirty",null],[2,"ng-valid",null],[2,"ng-invalid",null],[2,"ng-pending",null],[2,"_mat-animation-noopable",null]],null,null,Dt.b,Dt.a)),r.Qa(8,7389184,null,7,It.b,[r.k,r.h,[2,S.h],[2,ct.b],[2,It.a],I.a,r.z,[2,M.a]],null,null),r.hb(335544320,1,{_control:0}),r.hb(335544320,2,{_placeholderChild:0}),r.hb(335544320,3,{_labelChild:0}),r.hb(603979776,4,{_errorChildren:1}),r.hb(603979776,5,{_hintChildren:1}),r.hb(603979776,6,{_prefixChildren:1}),r.hb(603979776,7,{_suffixChildren:1}),(t()(),r.Ra(16,0,null,1,2,"input",[["class","mat-input-element mat-form-field-autofill-control"],["matInput",""],["placeholder","Search"]],[[2,"mat-input-server",null],[1,"id",0],[1,"placeholder",0],[8,"disabled",0],[8,"required",0],[8,"readOnly",0],[1,"aria-describedby",0],[1,"aria-invalid",0],[1,"aria-required",0]],[[null,"keyup"],[null,"blur"],[null,"focus"],[null,"input"]],function(t,e,n){var i=!0,o=t.component;return"blur"===e&&(i=!1!==r.bb(t,17)._focusChanged(!1)&&i),"focus"===e&&(i=!1!==r.bb(t,17)._focusChanged(!0)&&i),"input"===e&&(i=!1!==r.bb(t,17)._onInput()&&i),"keyup"===e&&(i=!1!==o.applyFilter(n.target.value)&&i),i},null,null)),r.Qa(17,999424,null,0,Ut,[r.k,I.a,[8,null],[2,At.c],[2,At.a],S.d,[8,null],Vt,r.z],{placeholder:[0,"placeholder"]},null),r.gb(2048,[[1,4]],It.c,null,[Ut]),(t()(),r.Ra(19,0,null,0,61,"table",[["class","references-table mat-table"],["mat-table",""],["multiTemplateDataRows",""]],null,null,null,Mt.f,Mt.c)),r.Qa(20,2342912,null,4,Ot.k,[r.s,r.h,r.k,[8,null],[2,ct.b]],{dataSource:[0,"dataSource"],multiTemplateDataRows:[1,"multiTemplateDataRows"]},null),r.hb(603979776,8,{_contentColumnDefs:1}),r.hb(603979776,9,{_contentRowDefs:1}),r.hb(603979776,10,{_contentHeaderRowDefs:1}),r.hb(603979776,11,{_contentFooterRowDefs:1}),(t()(),r.Ra(25,0,null,null,11,null,null,null,null,null,null,null)),r.Qa(26,16384,null,3,Ot.c,[],{name:[0,"name"]},null),r.hb(335544320,12,{cell:0}),r.hb(335544320,13,{headerCell:0}),r.hb(335544320,14,{footerCell:0}),r.gb(2048,[[8,4]],Et.d,null,[Ot.c]),(t()(),r.Ia(0,null,null,2,null,Yt)),r.Qa(32,16384,null,0,Ot.f,[r.N],null,null),r.gb(2048,[[13,4]],Et.j,null,[Ot.f]),(t()(),r.Ia(0,null,null,2,null,Zt)),r.Qa(35,16384,null,0,Ot.b,[r.N],null,null),r.gb(2048,[[12,4]],Et.b,null,[Ot.b]),(t()(),r.Ra(37,0,null,null,11,null,null,null,null,null,null,null)),r.Qa(38,16384,null,3,Ot.c,[],{name:[0,"name"]},null),r.hb(335544320,15,{cell:0}),r.hb(335544320,16,{headerCell:0}),r.hb(335544320,17,{footerCell:0}),r.gb(2048,[[8,4]],Et.d,null,[Ot.c]),(t()(),r.Ia(0,null,null,2,null,Kt)),r.Qa(44,16384,null,0,Ot.f,[r.N],null,null),r.gb(2048,[[16,4]],Et.j,null,[Ot.f]),(t()(),r.Ia(0,null,null,2,null,Xt)),r.Qa(47,16384,null,0,Ot.b,[r.N],null,null),r.gb(2048,[[15,4]],Et.b,null,[Ot.b]),(t()(),r.Ra(49,0,null,null,11,null,null,null,null,null,null,null)),r.Qa(50,16384,null,3,Ot.c,[],{name:[0,"name"]},null),r.hb(335544320,18,{cell:0}),r.hb(335544320,19,{headerCell:0}),r.hb(335544320,20,{footerCell:0}),r.gb(2048,[[8,4]],Et.d,null,[Ot.c]),(t()(),r.Ia(0,null,null,2,null,$t)),r.Qa(56,16384,null,0,Ot.f,[r.N],null,null),r.gb(2048,[[19,4]],Et.j,null,[Ot.f]),(t()(),r.Ia(0,null,null,2,null,Jt)),r.Qa(59,16384,null,0,Ot.b,[r.N],null,null),r.gb(2048,[[18,4]],Et.b,null,[Ot.b]),(t()(),r.Ra(61,0,null,null,8,null,null,null,null,null,null,null)),r.Qa(62,16384,null,3,Ot.c,[],{name:[0,"name"]},null),r.hb(335544320,21,{cell:0}),r.hb(335544320,22,{headerCell:0}),r.hb(335544320,23,{footerCell:0}),r.gb(2048,[[8,4]],Et.d,null,[Ot.c]),(t()(),r.Ia(0,null,null,2,null,ee)),r.Qa(68,16384,null,0,Ot.b,[r.N],null,null),r.gb(2048,[[21,4]],Et.b,null,[Ot.b]),(t()(),r.Ra(70,0,null,null,10,"tbody",[],null,null,null,null,null)),(t()(),r.Ia(0,null,null,2,null,ne)),r.Qa(72,540672,null,0,Ot.h,[r.N,r.s],{columns:[0,"columns"]},null),r.gb(2048,[[10,4]],Et.l,null,[Ot.h]),(t()(),r.Ia(0,null,null,2,null,re)),r.Qa(75,540672,null,0,Ot.j,[r.N,r.s],{columns:[0,"columns"]},null),r.gb(2048,[[9,4]],Et.n,null,[Ot.j]),(t()(),r.Ia(0,null,null,3,null,ie)),r.Qa(78,540672,null,0,Ot.j,[r.N,r.s],{columns:[0,"columns"]},null),r.cb(79,1),r.gb(2048,[[9,4]],Et.n,null,[Ot.j])],function(t,e){var n=e.component;t(e,17,0,"Search"),t(e,20,0,n.datasource_references,""),t(e,26,0,"index"),t(e,38,0,"shorthand"),t(e,50,0,"title"),t(e,62,0,"expandedDetail"),t(e,72,0,n.displayedColumns),t(e,75,0,n.displayedColumns),t(e,78,0,t(e,79,0,"expandedDetail"))},function(t,e){t(e,7,1,["standard"==r.bb(e,8).appearance,"fill"==r.bb(e,8).appearance,"outline"==r.bb(e,8).appearance,"legacy"==r.bb(e,8).appearance,r.bb(e,8)._control.errorState,r.bb(e,8)._canLabelFloat,r.bb(e,8)._shouldLabelFloat(),r.bb(e,8)._hideControlPlaceholder(),r.bb(e,8)._control.disabled,r.bb(e,8)._control.autofilled,r.bb(e,8)._control.focused,"accent"==r.bb(e,8).color,"warn"==r.bb(e,8).color,r.bb(e,8)._shouldForward("untouched"),r.bb(e,8)._shouldForward("touched"),r.bb(e,8)._shouldForward("pristine"),r.bb(e,8)._shouldForward("dirty"),r.bb(e,8)._shouldForward("valid"),r.bb(e,8)._shouldForward("invalid"),r.bb(e,8)._shouldForward("pending"),!r.bb(e,8)._animationsEnabled]),t(e,16,0,r.bb(e,17)._isServer,r.bb(e,17).id,r.bb(e,17).placeholder,r.bb(e,17).disabled,r.bb(e,17).required,r.bb(e,17).readonly,r.bb(e,17)._ariaDescribedby||null,r.bb(e,17).errorState,r.bb(e,17).required.toString())})}var le=r.Na("app-references-page",Qt,function(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,1,"app-references-page",[],null,null,null,oe,Wt)),r.Qa(1,114688,null,0,Qt,[b.a],null,null)],function(t,e){t(e,1,0)},null)},{},{},[]),ae=function(){function t(t,e){this.router=t,this.route=e}return t.prototype.ngAfterViewInit=function(){try{document.querySelector("#"+this.fragment).scrollIntoView()}catch(t){}},t.prototype.ngOnInit=function(){var t=this;this.route.fragment.subscribe(function(e){t.fragment=e})},t}(),ue=r.Pa({encapsulation:0,styles:[[""]],data:{}});function se(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,4,"div",[["class","bannercontainer"]],null,null,null,null,null)),(t()(),r.Ra(1,0,null,null,0,"img",[["class","bannerimg superposedbanner1"],["src","http://2018.igem.org/wiki/images/c/c8/T--GO_Paris-Saclay--stagedlab_underbanner.png"]],null,null,null,null,null)),(t()(),r.Ra(2,0,null,null,0,"img",[["class","bannerimg superposedbanner2"],["src","http://2018.igem.org/wiki/images/9/90/T--GO_Paris-Saclay--empty-banner.png"]],null,null,null,null,null)),(t()(),r.Ra(3,0,null,null,1,"div",[["class","headlinetext"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Achievements"])),(t()(),r.Ra(5,0,null,null,309,"mat-card",[["class","dashboard-card largemargin mat-card"]],null,null,null,d.d,d.a)),r.Qa(6,49152,null,0,p.a,[],null,null),(t()(),r.Ra(7,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" This year the iGEM GO_Paris Saclay has been working hard and while doing so has kept the medal requirements in mind. Below each medal, a list can be found which completes the criteria that have to be met to earn the medals. "])),(t()(),r.Ra(9,0,null,0,1,"div",[["class","centerstuff"],["style","width: 300px;"]],null,null,null,null,null)),(t()(),r.Ra(10,0,null,null,0,"img",[["class","wideimg"],["src","http://2018.igem.org/wiki/images/8/8b/T--GO_Paris-Saclay--gold.png"]],null,null,null,null,null)),(t()(),r.Ra(11,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(12,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(13,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Integrated Human Practices"])),(t()(),r.Ra(15,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" At the beginning of our project, two members of our team wanted to work on endocrine disruptor in wastewater treatment. However, after a few survey on the subject, and a thorough bibliographic search we found out that there were already plenty of proposed solutions for these kind of chemical. Another idea emerged: "])),(t()(),r.Ra(17,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" What about anticancer drugs? "])),(t()(),r.Ra(19,0,null,0,4,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" Indeed, cancer is one of the leading killer of the 21"])),(t()(),r.Ra(21,0,null,null,1,"sup",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["th"])),(t()(),r.jb(-1,null,[" century, its burden on public health larger year by year. Advances in treatment allow us a chance to beat cancer with evidence-based therapy and an ever-refining drug arsenal. But at what cost to the environement? Some of those medicines are highly harmful when released into the biosphere; excreted metabolites are causing dramatic disruption on ecosystems. Yet we cannot just stop treating patients! "])),(t()(),r.Ra(24,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" With that conundrum in mind, we decided to reach out to scientists from the two biggest cancer research facilities in France and Europe. Our findings were alarming : environmental considerations were not part of the drug development process. While drug design will hopefully catch on to these concerns, it became clear we had to tackle the problem downstream, degrading drugs after they have been used by the patients. Aiming for maximal societal impact, we sought to target the right drugs to degrade, the most ubiquitously prescribed. Ultimately we narrowed our search to the cytostatic drugs, and more precisely methotrexate (MTX). "])),(t()(),r.Ra(26,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" To be sure that our project would really have the potential to be integrated into society, and impart consequential change, we also asked to companies such as Arvia, a huge waste water treatment company operating in Great Britain, to answer a couple of our question about waste water drug treatment. We also discussed with a chemist from Paris-Sud that work on drug degradation. "])),(t()(),r.Ra(28,0,null,0,4,"p",[["class","formoredetailssee"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" You can find detailed explaination on those subjects on our "])),(t()(),r.Ra(30,0,null,null,1,"a",[],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.router.navigate(["/human-practices"],{fragment:"top"})&&r),r},null,null)),(t()(),r.jb(-1,null,["Human Practices page"])),(t()(),r.jb(-1,null,[", which deeply shaped our MethotrExit project. Thanks to this process, we choose the methotrexate as proof of concept but designed a modular solution for others drug targets. "])),(t()(),r.Ra(33,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(34,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(35,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Model"])),(t()(),r.Ra(37,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Advanced models were created and used to get insight into the core of the project, and the degradation of the MTX. More precisely, we modelize the case in which the degradation of anticancer drugs and the biotransformation pathways themselves are toxic. Modeling an heterogeneous expression of the synthetic pathway within the \u2018cleaning factory\u2019 population highlights the interest of a division of labor between \u201ccleaning\u201d and \u201cstem\u201d bacterial cells. "])),(t()(),r.Ra(39,0,null,0,4,"p",[["class","formoredetailssee"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" See our "])),(t()(),r.Ra(41,0,null,null,1,"a",[],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.router.navigate(["/human-practices"],{fragment:"top"})&&r),r},null,null)),(t()(),r.jb(-1,null,["Model page"])),(t()(),r.jb(-1,null,[" for more details. "])),(t()(),r.Ra(44,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(45,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(46,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Demonstrate our project work"])),(t()(),r.Ra(48,0,null,0,7,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["We designed synthetic cassettes encoding a new biotransformation pathway using an heterologous carboxypeptidase in "])),(t()(),r.Ra(50,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Escherichia coli"])),(t()(),r.jb(-1,null,[". In only 5 h, our \u2018cleaning factory\u2019 drastically removes MTX from the media. During our project we demonstrated that the level of MTX after getting through our E. coli population, dropped from 512 \xb5M to close to 0, proving that "])),(t()(),r.Ra(53,0,null,null,1,"b",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["our degrading system is efficient"])),(t()(),r.jb(-1,null,[". "])),(t()(),r.Ra(56,0,null,0,7,"p",[["class","formoredetailssee"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" See our "])),(t()(),r.Ra(58,0,null,null,1,"a",[],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.router.navigate(["/demonstrate"],{fragment:"top"})&&r),r},null,null)),(t()(),r.jb(-1,null,["Demonstrate page"])),(t()(),r.jb(-1,null,[", and also the "])),(t()(),r.Ra(61,0,null,null,1,"a",[],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.router.navigate(["/biology","mtx"],{fragment:"top"})&&r),r},null,null)),(t()(),r.jb(-1,null,["Methotrexate degradation page"])),(t()(),r.jb(-1,null,[" for detailed analysis of our HPLC results, demonstrating that our system indeed do what it was planned to do. "])),(t()(),r.Ra(64,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(65,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(66,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Improvement of an existing biobrick"])),(t()(),r.Ra(68,0,null,0,22,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["During the part of our part concerning the \u2018heterogenious\u2019 expression system, we initially wanted to express "])),(t()(),r.Ra(70,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["ler"])),(t()(),r.jb(-1,null,[" genes at different levels. Therefore we had interest in the large and very well characterized "])),(t()(),r.Ra(73,0,null,null,1,"a",[["href","http://parts.igem.org/Promoters/Catalog/Anderson"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Anderson promoter collection"])),(t()(),r.jb(-1,null,[". Four promoters from this collection were available in pSB1C3 backbone vector in the Distribution Kit 2018 ("])),(t()(),r.Ra(76,0,null,null,1,"a",[["href","http://parts.igem.org/Part:BBa_J23119"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["BBa_J23119"])),(t()(),r.jb(-1,null,[" ; "])),(t()(),r.Ra(79,0,null,null,1,"a",[["href","http://parts.igem.org/Part:BBa_J23108"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["BBa_J23108"])),(t()(),r.jb(-1,null,[" ; "])),(t()(),r.Ra(82,0,null,null,1,"a",[["href","http://parts.igem.org/Part:BBa_J23109"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["BBa_J23109"])),(t()(),r.jb(-1,null,[" ; "])),(t()(),r.Ra(85,0,null,null,1,"a",[["href","http://parts.igem.org/Part:BBa_J23108"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["BBa_J23111"])),(t()(),r.jb(-1,null,["). By sequencing the pSB1C3 plasmids carrying these promoters we identified in three of them extra-sequences (notable SpeI extra-sites) that were detrimental for further Biobrick assembly strategy. We corrected one of them by directed mutagenesis and sent the corrected pSB1C3-BBa_J23108_corrected plasmid ( "])),(t()(),r.Ra(88,0,null,null,1,"a",[["href","http://parts.igem.org/Part:BBa_K2688025"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["BBa_K2688025"])),(t()(),r.jb(-1,null,[") to iGEM. "])),(t()(),r.Ra(91,0,null,0,4,"p",[["class","formoredetailssee"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" See our "])),(t()(),r.Ra(93,0,null,null,1,"a",[],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.router.navigate(["/biology","J23108"],{fragment:"top"})&&r),r},null,null)),(t()(),r.jb(-1,null,["Improved Part page"])),(t()(),r.jb(-1,null,[" for more details "])),(t()(),r.Ra(96,0,null,0,1,"div",[["class","centerstuff"],["style","width: 300px;"]],null,null,null,null,null)),(t()(),r.Ra(97,0,null,null,0,"img",[["class","wideimg"],["src","http://2018.igem.org/wiki/images/2/26/T--GO_Paris-Saclay--silver.png"]],null,null,null,null,null)),(t()(),r.Ra(98,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(99,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(100,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Validated Part"])),(t()(),r.Ra(102,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["We match all deliverables requirements and submitted 13 Biobricks (see Table)."])),(t()(),r.Ra(104,0,null,0,125,"table",[["class","mdl-data-table mdl-js-data-table mdl-data-table--selectable mdl-shadow--2dp halfwidetable centerstuff"]],null,null,null,null,null)),(t()(),r.Ra(105,0,null,null,7,"thead",[],null,null,null,null,null)),(t()(),r.Ra(106,0,null,null,6,"tr",[],null,null,null,null,null)),(t()(),r.Ra(107,0,null,null,1,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" Part registry number "])),(t()(),r.Ra(109,0,null,null,1,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" Shorthand "])),(t()(),r.Ra(111,0,null,null,1,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" Characterization "])),(t()(),r.Ra(113,0,null,null,116,"tbody",[],null,null,null,null,null)),(t()(),r.Ra(114,0,null,null,3,"tr",[],null,null,null,null,null)),(t()(),r.Ra(115,0,null,null,2,"td",[["class","mdl-data-table__cell--non-numeric"],["colspan","3"],["rowspan","1"]],null,null,null,null,null)),(t()(),r.Ra(116,0,null,null,1,"div",[["style","text-align: center;font-weight: bolder;font-size: 18pt;"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["MTX biotransformation pathway"])),(t()(),r.Ra(118,0,null,null,7,"tr",[],null,null,null,null,null)),(t()(),r.Ra(119,0,null,null,2,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.Ra(120,0,null,null,1,"a",[["href","http://parts.igem.org/Part:BBa_K2688003"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["BBa_K2688003"])),(t()(),r.Ra(122,0,null,null,1,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" cpg2_tu "])),(t()(),r.Ra(124,0,null,null,1,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" Yes "])),(t()(),r.Ra(126,0,null,null,7,"tr",[],null,null,null,null,null)),(t()(),r.Ra(127,0,null,null,2,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.Ra(128,0,null,null,1,"a",[["href","http://parts.igem.org/Part:BBa_K2688008"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["BBa_K2688008"])),(t()(),r.Ra(130,0,null,null,1,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" folC_tu "])),(t()(),r.Ra(132,0,null,null,1,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" \xa0 "])),(t()(),r.Ra(134,0,null,null,7,"tr",[],null,null,null,null,null)),(t()(),r.Ra(135,0,null,null,2,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.Ra(136,0,null,null,1,"a",[["href","http://parts.igem.org/Part:BBa_K2688009"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["BBa_K2688009"])),(t()(),r.Ra(138,0,null,null,1,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" folC_cpg2_tu "])),(t()(),r.Ra(140,0,null,null,1,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" Yes "])),(t()(),r.Ra(142,0,null,null,3,"tr",[],null,null,null,null,null)),(t()(),r.Ra(143,0,null,null,2,"td",[["class","c36 c13"],["colspan","3"],["rowspan","1"]],null,null,null,null,null)),(t()(),r.Ra(144,0,null,null,1,"div",[["style","text-align: center;font-weight: bolder;font-size: 18pt;"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["\u2018HeteroGenious\u2019 expression "])),(t()(),r.Ra(146,0,null,null,7,"tr",[],null,null,null,null,null)),(t()(),r.Ra(147,0,null,null,2,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.Ra(148,0,null,null,1,"a",[["href","http://parts.igem.org/Part:BBa_K2688012"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["BBa_K2688012"])),(t()(),r.Ra(150,0,null,null,1,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" LEE5_GFP_native "])),(t()(),r.Ra(152,0,null,null,1,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" Yes "])),(t()(),r.Ra(154,0,null,null,7,"tr",[],null,null,null,null,null)),(t()(),r.Ra(155,0,null,null,2,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.Ra(156,0,null,null,1,"a",[["href","http://parts.igem.org/Part:BBa_K2688014"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["BBa_K2688014"])),(t()(),r.Ra(158,0,null,null,1,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" LEE5_GFP_variant-1 "])),(t()(),r.Ra(160,0,null,null,1,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" Yes "])),(t()(),r.Ra(162,0,null,null,7,"tr",[],null,null,null,null,null)),(t()(),r.Ra(163,0,null,null,2,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.Ra(164,0,null,null,1,"a",[["href","http://parts.igem.org/Part:BBa_K2688016"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["BBa_K2688016"])),(t()(),r.Ra(166,0,null,null,1,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" LEE5_GFP_variant-1_inframe "])),(t()(),r.Ra(168,0,null,null,1,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" Yes "])),(t()(),r.Ra(170,0,null,null,7,"tr",[],null,null,null,null,null)),(t()(),r.Ra(171,0,null,null,2,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.Ra(172,0,null,null,1,"a",[["href","http://parts.igem.org/Part:BBa_K2688027"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["BBa_K2688027"])),(t()(),r.Ra(174,0,null,null,1,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" LEE5_GFP_native_\u0394Tir "])),(t()(),r.Ra(176,0,null,null,1,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" Yes "])),(t()(),r.Ra(178,0,null,null,7,"tr",[],null,null,null,null,null)),(t()(),r.Ra(179,0,null,null,2,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.Ra(180,0,null,null,1,"a",[["href","http://parts.igem.org/Part:BBa_K2688018"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["BBa_K2688018"])),(t()(),r.Ra(182,0,null,null,1,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" LEE5_GFP_variant-1_\u0394Tir "])),(t()(),r.Ra(184,0,null,null,1,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" Yes "])),(t()(),r.Ra(186,0,null,null,7,"tr",[],null,null,null,null,null)),(t()(),r.Ra(187,0,null,null,2,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.Ra(188,0,null,null,1,"a",[["href","http://parts.igem.org/Part:BBa_K2688019"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["BBa_K2688019"])),(t()(),r.Ra(190,0,null,null,1,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" RBS_ler_2 "])),(t()(),r.Ra(192,0,null,null,1,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" Yes "])),(t()(),r.Ra(194,0,null,null,7,"tr",[],null,null,null,null,null)),(t()(),r.Ra(195,0,null,null,2,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.Ra(196,0,null,null,1,"a",[["href","http://parts.igem.org/Part:BBa_K2688022"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["BBa_K2688022"])),(t()(),r.Ra(198,0,null,null,1,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" tetO_RBS_ler1 "])),(t()(),r.Ra(200,0,null,null,1,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" Yes "])),(t()(),r.Ra(202,0,null,null,7,"tr",[],null,null,null,null,null)),(t()(),r.Ra(203,0,null,null,2,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.Ra(204,0,null,null,1,"a",[["href","http://parts.igem.org/Part:BBa_K2688023"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["BBa_K2688023"])),(t()(),r.Ra(206,0,null,null,1,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" tetO_RBS_ler2 "])),(t()(),r.Ra(208,0,null,null,1,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" Yes "])),(t()(),r.Ra(210,0,null,null,7,"tr",[],null,null,null,null,null)),(t()(),r.Ra(211,0,null,null,2,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.Ra(212,0,null,null,1,"a",[["href","http://parts.igem.org/Part:BBa_K2688024"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["BBa_K2688024"])),(t()(),r.Ra(214,0,null,null,1,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" tetO_RBS_ler3 "])),(t()(),r.Ra(216,0,null,null,1,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" Yes "])),(t()(),r.Ra(218,0,null,null,3,"tr",[],null,null,null,null,null)),(t()(),r.Ra(219,0,null,null,2,"td",[["class","c13 c36"],["colspan","3"],["rowspan","1"]],null,null,null,null,null)),(t()(),r.Ra(220,0,null,null,1,"div",[["style","text-align: center;font-weight: bolder;font-size: 18pt;"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Improvement of a Biobrick"])),(t()(),r.Ra(222,0,null,null,7,"tr",[],null,null,null,null,null)),(t()(),r.Ra(223,0,null,null,2,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.Ra(224,0,null,null,1,"a",[["href","http://parts.igem.org/Part:BBa_K2688025"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["BBa_K2688025"])),(t()(),r.Ra(226,0,null,null,1,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" J23108_corrected "])),(t()(),r.Ra(228,0,null,null,1,"td",[["class","mdl-data-table__cell--non-numeric"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" Sequence corrected within pSB1C3 vector "])),(t()(),r.Ra(230,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(231,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(232,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Collaborations"])),(t()(),r.Ra(234,0,null,0,4,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" We have significantly worked with 3 other registered iGEM team (IGEM Grenoble Alpes 2018, iGEM Sorbonne University team, Dusseldorf iGEM team) in a perfect symbiosis. For more informations, go check out our "])),(t()(),r.Ra(236,0,null,null,1,"a",[],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.router.navigate(["/collaborations"],{fragment:"top"})&&r),r},null,null)),(t()(),r.jb(-1,null,["collaboration"])),(t()(),r.jb(-1,null,[" page."])),(t()(),r.Ra(239,0,null,0,3,"p",[],null,null,null,null,null)),(t()(),r.Ra(240,0,null,null,1,"a",[["href","http://2018.igem.org/Team:Sorbonne_U_Paris/Collaborations"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["iGEM Sorbonne University team"])),(t()(),r.jb(-1,null,[": we designed and realised the mathematical model of their project. In exchanges, they helped us at the beginning of the sketching process for our brand new logo and they gave us a special class about the wiki conception. "])),(t()(),r.Ra(243,0,null,0,3,"p",[],null,null,null,null,null)),(t()(),r.Ra(244,0,null,null,1,"a",[["href","http://2018.igem.org/Team:Grenoble-Alpes/Collaborations"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["IGEM Grenoble Alpes 2018"])),(t()(),r.jb(-1,null,[": we created the: \u201cTake a famous painting and throw some biology in it challenge\u201d "])),(t()(),r.Ra(247,0,null,0,3,"p",[],null,null,null,null,null)),(t()(),r.Ra(248,0,null,null,1,"a",[["href","http://2018.igem.org/Team:Duesseldorf/Collaborations"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Dusseldorf iGEM team"])),(t()(),r.jb(-1,null,[": we participate to the postcard campaign thrown by the Dusseldorf team, we made a postcard which shows an image related to synthetic biology. "])),(t()(),r.Ra(251,0,null,0,0,"p",[],null,null,null,null,null)),(t()(),r.Ra(252,0,null,0,4,"p",[["class","formoredetailssee"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" See our "])),(t()(),r.Ra(254,0,null,null,1,"a",[],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.router.navigate(["/collaborations"],{fragment:"top"})&&r),r},null,null)),(t()(),r.jb(-1,null,["Collaboration page"])),(t()(),r.jb(-1,null,[" for more details "])),(t()(),r.Ra(257,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(258,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(259,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Human Practices"])),(t()(),r.Ra(261,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Cancer is one of the most harmful diseases of our century and lots of different drugs are used in order to fight this it. These medicines can cause dramatic effects on the environment. With that in our minds, we decided to send surveys to the two biggest cancer research facilities in France and Europe. The answers were glaring and there is still plenty of work to be done in this field. In order to be sure not to waste time, and target the right drug to degrade, we asked the \u201ctype\u201d of drugs researchers were working on the most. That\u2019s how the methotrexate (MTX) came to our thoughts and how our project was born. "])),(t()(),r.Ra(263,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["We also interviewed Arvia, a huge waste water treatment company, localized in Great Britain, about wastewaters drugs treatments. We also discuss at different time with Rapha\xebl Labruere that works on drug degradation in collaboration with industry. "])),(t()(),r.Ra(265,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["We also contacted a French lawyer to make sure of the legality of our project."])),(t()(),r.Ra(267,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["To be sure that our concept was really integrated to the society we live in, we made a survey for the general public. We also work in collaboration with an artist of our region to have another point of view of our work. "])),(t()(),r.Ra(269,0,null,0,4,"p",[["class","formoredetailssee"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" See our "])),(t()(),r.Ra(271,0,null,null,1,"a",[],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.router.navigate(["/human-practices"],{fragment:"top"})&&r),r},null,null)),(t()(),r.jb(-1,null,["Human Practices page"])),(t()(),r.jb(-1,null,[" for more details "])),(t()(),r.Ra(274,0,null,0,1,"div",[["class","centerstuff"],["style","width: 300px;"]],null,null,null,null,null)),(t()(),r.Ra(275,0,null,null,0,"img",[["class","wideimg"],["src","http://2018.igem.org/wiki/images/3/3e/T--GO_Paris-Saclay--bronze.png"]],null,null,null,null,null)),(t()(),r.Ra(276,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(277,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(278,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Register and attend"])),(t()(),r.Ra(280,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["We successfully registered for iGEM and had an amazing time, and will attend the Giant Jamboree"])),(t()(),r.Ra(282,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(283,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(284,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Deliverables"])),(t()(),r.Ra(286,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["We created our wiki, documented our entire project and our future aspirations"])),(t()(),r.Ra(288,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Our Poster and presentation are ready to be presented at the Giant Jamboree"])),(t()(),r.Ra(290,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["The judging form as well as the safety form were filled up as soon as they were available."])),(t()(),r.Ra(292,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["We created, documented and registered all of our part in the registry page"])),(t()(),r.Ra(294,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["We submitted all of our part\u2019s DNA samples."])),(t()(),r.Ra(296,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(297,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(298,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Attribution"])),(t()(),r.Ra(300,0,null,0,4,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["We are grateful for all the help we have received, to see the wonderful people who helped us, check out our "])),(t()(),r.Ra(302,0,null,null,1,"a",[],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.router.navigate(["/attribution"],{fragment:"top"})&&r),r},null,null)),(t()(),r.jb(-1,null,["attribution"])),(t()(),r.jb(-1,null,[" page"])),(t()(),r.Ra(305,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(306,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(307,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Contributions"])),(t()(),r.Ra(309,0,null,0,4,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["We conduct and realised the interlab measurement study, you can see our result in the "])),(t()(),r.Ra(311,0,null,null,1,"a",[],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.router.navigate(["/biology","interlab"],{fragment:"top"})&&r),r},null,null)),(t()(),r.jb(-1,null,["interlab"])),(t()(),r.jb(-1,null,[" Page"])),(t()(),r.Ra(314,0,null,0,0,"p",[["class","spacemaker"]],null,null,null,null,null))],null,null)}var ce=r.Na("app-achievements",ae,function(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,1,"app-achievements",[],null,null,null,se,ue)),r.Qa(1,4308992,null,0,ae,[R.n,R.a],null,null)],function(t,e){t(e,1,0)},null)},{},{},[]),he=function(){function t(t){this.route=t}return t.prototype.ngOnInit=function(){var t=this;this.route.fragment.subscribe(function(e){t.fragment=e})},t.prototype.ngAfterViewInit=function(){try{document.querySelector("#"+this.fragment).scrollIntoView()}catch(t){}},t}(),fe=r.Pa({encapsulation:0,styles:[[""]],data:{}});function de(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,4,"div",[["class","bannercontainer"]],null,null,null,null,null)),(t()(),r.Ra(1,0,null,null,0,"img",[["class","bannerimg superposedbanner1"],["src","http://2018.igem.org/wiki/images/0/03/T--GO_Paris-Saclay--fond_groupe.png"]],null,null,null,null,null)),(t()(),r.Ra(2,0,null,null,0,"img",[["class","bannerimg superposedbanner2"],["src","http://2018.igem.org/wiki/images/9/90/T--GO_Paris-Saclay--empty-banner.png"]],null,null,null,null,null)),(t()(),r.Ra(3,0,null,null,1,"div",[["class","headlinetext"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Background"])),(t()(),r.Ra(5,0,null,null,72,"mat-card",[["class","dashboard-card largemargin mat-card"]],null,null,null,d.d,d.a)),r.Qa(6,49152,null,0,p.a,[],null,null),(t()(),r.Ra(7,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(8,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(9,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Drugs in wastewater"])),(t()(),r.Ra(11,0,null,0,1,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["According to the Organisation for Economic Co-operation and Development (OECD) the drug consumption has drastically increased since the beginning of the 2000. For instance, we can observe a doubling of antidiabetic, antidepressants, antihypertensives and cholesterol-lowering drugs consumption between the years 2000 and 2005."])),(t()(),r.Ra(13,0,null,0,4,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Some of the drugs are released in the wastewater in their native form, because not completely metabolized by the human body. As a matter of fact, several molecules have been found in large quantities in effluent water near hospitals but also in surface water with a concentration of up to \u03bcg per liter per drug "])),(t()(),r.Ra(15,0,null,null,1,"reference-box",[["shorthand","Deblonde2011"]],null,null,null,m.c,m.b)),r.Qa(16,114688,null,0,g.a,[b.a,y.a],{shorthand:[0,"shorthand"]},null),(t()(),r.jb(-1,null,[" . "])),(t()(),r.Ra(18,0,null,0,4,"mat-card",[["class","normalmargin mat-card"],["style","width: 70%;"]],null,null,null,d.d,d.a)),r.Qa(19,49152,null,0,p.a,[],null,null),(t()(),r.Ra(20,0,null,0,0,"img",[["class","wideimg"],["src","http://2018.igem.org/wiki/images/a/a4/T--GO_Paris-Saclay--1_drugconsumpt.png"]],null,null,null,null,null)),(t()(),r.Ra(21,0,null,0,1,"div",[["class","mat-caption captionafterapicture"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Figure 1: Diagram of the drug consumption (based on antihypertensive drug consumption) between 2000 and 2015 in various countries per 1 000 people per day. "])),(t()(),r.Ra(23,0,null,0,3,"div",[["class","titrebloc"],["style","clear:both;"]],null,null,null,null,null)),(t()(),r.Ra(24,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(25,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Consequences of drug accumulation"])),(t()(),r.Ra(27,0,null,0,4,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["f the concentrations of drugs measured in the environment do not seem alarming, they represent a real problem for the ecosystem but also for the human being. Firstly, antibiotic accumulation in wastewater contribute to bacterial resistance. Secondly, pharmaceuticals in wastewater threaten some aquatic species, inhibiting their development, growth or changing their behaviours "])),(t()(),r.Ra(29,0,null,null,1,"reference-box",[["shorthand","Patneedi2015"]],null,null,null,m.c,m.b)),r.Qa(30,114688,null,0,g.a,[b.a,y.a],{shorthand:[0,"shorthand"]},null),(t()(),r.jb(-1,null,[" . "])),(t()(),r.Ra(32,0,null,0,4,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["One study demonstrated that human embryonic cells cannot develop in a media composed of a drug mixture found in wastewater "])),(t()(),r.Ra(34,0,null,null,1,"reference-box",[["shorthand","Pomati2006"]],null,null,null,m.c,m.b)),r.Qa(35,114688,null,0,g.a,[b.a,y.a],{shorthand:[0,"shorthand"]},null),(t()(),r.jb(-1,null,[" . "])),(t()(),r.Ra(37,0,null,0,9,"mat-card",[["class","normalmargin mat-card"],["style","width: 80%;"]],null,null,null,d.d,d.a)),r.Qa(38,49152,null,0,p.a,[],null,null),(t()(),r.Ra(39,0,null,0,0,"img",[["class","wideimg"],["src","http://2018.igem.org/wiki/images/d/de/T--GO_Paris-Saclay--2_cells.png"]],null,null,null,null,null)),(t()(),r.Ra(40,0,null,0,6,"div",[["class","mat-caption captionafterapicture"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Figure 2: Light microscopy (20X magnification) of HEK293 cells untreated (A) and exposed to a pharmaceutical mixture from wastewaters(B). "])),(t()(),r.Ra(42,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.Ra(43,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["From : "])),(t()(),r.Ra(45,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Pomati, F., Castiglioni, S., Zuccato, E., Fanelli, R., Vigetti, D., Rossetti, C., & Calamari, D. (2006). Effects of a complex mixture of therapeutic drugs at environmental levels on human embryonic cells. Environmental Science and Technology, 40(7), 2442\u20132447."])),(t()(),r.Ra(47,0,null,0,4,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Unfortunately, only few studies focusing on chronic exposures and synergistic effect of pharmaceuticals in ecosystems close to hospital effluents, have been made "])),(t()(),r.Ra(49,0,null,null,1,"reference-box",[["shorthand","Hernando2004"]],null,null,null,m.c,m.b)),r.Qa(50,114688,null,0,g.a,[b.a,y.a],{shorthand:[0,"shorthand"]},null),(t()(),r.jb(-1,null,[" . "])),(t()(),r.Ra(52,0,null,0,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(53,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(54,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Methotrexate as a water pollutant"])),(t()(),r.Ra(56,0,null,0,4,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Cytotoxic anticancer drugs are among harmful chemicals found in hospital wastewater at high concentration (up to 4689 ng/\xb5L "])),(t()(),r.Ra(58,0,null,null,1,"reference-box",[["shorthand","Yin2010"]],null,null,null,m.c,m.b)),r.Qa(59,114688,null,0,g.a,[b.a,y.a],{shorthand:[0,"shorthand"]},null),(t()(),r.jb(-1,null,[" ). Degradation through physical and chemical methods exist but are often inefficient, unsustainable or expensive. We propose MethotrExit, a bioreactor-based approach to tackle this problem. We focused on the biotransformation of methotrexate (MTX), a widely used anticancer drug. "])),(t()(),r.Ra(61,0,null,0,6,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["The detection of MTX in the environment can be explained by the fact that 60 to 90% of the MTX ingested is excreted by the urine in its active form. In addition, it is rapidly metabolized to 7-OH-MTX, a highly toxic compound that has never been measured in wastewater. Few studies have been conducted for the time being on the effects of MTX alone in the environment. Nevertheless, it has been seen that small doses of MTX in zebrafish habitat cause developmental problems, including developmental arrest (head necrosis and congenital heart problems) "])),(t()(),r.Ra(63,0,null,null,1,"reference-box",[["shorthand","Lee2012"]],null,null,null,m.c,m.b)),r.Qa(64,114688,null,0,g.a,[b.a,y.a],{shorthand:[0,"shorthand"]},null),(t()(),r.Ra(65,0,null,null,1,"reference-box",[["shorthand","Sun2009"]],null,null,null,m.c,m.b)),r.Qa(66,114688,null,0,g.a,[b.a,y.a],{shorthand:[0,"shorthand"]},null),(t()(),r.jb(-1,null,[" . "])),(t()(),r.Ra(68,0,null,0,9,"mat-card",[["class","normalmargin mat-card"],["style","width: 60%;"]],null,null,null,d.d,d.a)),r.Qa(69,49152,null,0,p.a,[],null,null),(t()(),r.Ra(70,0,null,0,0,"img",[["class","wideimg"],["src","http://2018.igem.org/wiki/images/5/55/T--GO_Paris-Saclay--3_zebrafish.png"]],null,null,null,null,null)),(t()(),r.Ra(71,0,null,0,6,"div",[["class","mat-caption captionafterapicture"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Figure 3: Abnormal cell cycle properties of MTX treated embryos. After 24\u2009hours of 200\u2009\u03bcM or 400\u2009\u03bcM MTX exposure, embryos are capable of incorporating BrdU via DNA synthesis."])),(t()(),r.Ra(73,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.Ra(74,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" From "])),(t()(),r.Ra(76,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Lee, M. S., Bonner, J. R., Bernard, D. J., Sanchez, E. L., Sause, E. T., Prentice, R. R., \u2026 Brody, L. C. (2012). Disruption of the folate pathway in zebrafish causes developmental defects. BMC Developmental Biology, 12(1), 12."]))],function(t,e){t(e,16,0,"Deblonde2011"),t(e,30,0,"Patneedi2015"),t(e,35,0,"Pomati2006"),t(e,50,0,"Hernando2004"),t(e,59,0,"Yin2010"),t(e,64,0,"Lee2012"),t(e,66,0,"Sun2009")},null)}var pe=r.Na("app-background",he,function(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,1,"app-background",[],null,null,null,de,fe)),r.Qa(1,4308992,null,0,he,[R.a],null,null)],function(t,e){t(e,1,0)},null)},{},{},[]),me=function(){function t(){}return Object.defineProperty(t,"defaultEasingLogic",{get:function(){return t._easingLogic},set:function(e){t._easingLogic=e},enumerable:!0,configurable:!0}),t._interval=10,t._minScrollDistance=2,t._defaultNamespace="default",t.defaultIsVerticalScrolling=!0,t._logLevel=1,t.defaultDuration=1250,t.defaultScrollOffset=0,t.defaultAdvancedInlineOffsetCalculation=!1,t._interruptEvents=["mousedown","wheel","DOMMouseScroll","mousewheel","keyup","touchmove"],t._interruptKeys=[33,34,35,36,38,40],t.defaultInterruptible=!0,t._easingLogic={ease:function(t,e,n,r){return n*t/r+e}},t}(),ge=function(){function t(){}return t.isUndefinedOrNull=function(t){return void 0===t||void 0===t||null===t},t.extractElementPosition=function(e,n){var r=e.body,i=e.documentElement,o=e.defaultView&&e.defaultView.pageYOffset||i.scrollTop||r.scrollTop,l=e.defaultView&&e.defaultView.pageXOffset||i.scrollLeft||r.scrollLeft,a=i.clientTop||r.clientTop||0,u=i.clientLeft||r.clientLeft||0;if(t.isUndefinedOrNull(n))return{top:o,left:l};var s=n.getBoundingClientRect(),c=s.left+l-u;return{top:Math.round(s.top+o-a),left:Math.round(c)}},t}(),be=function(){function t(){var e=this;this.runningInstances=[],this.onInterrupted={report:function(t,n){if(n.interruptible){var r=!0;"keyup"===t.type?-1===me._interruptKeys.indexOf(t.keyCode)&&(r=!1):"mousedown"===t.type&&(n.scrollingViews.some(function(e){return e.contains(t.target)})||(r=!1)),r&&e.stopAll(n.namespace)}}},t.instanceCounter>0&&(me._logLevel>=2||me._logLevel>=1&&Object(r.Z)())&&console.warn("An instance of PageScrollService already exists, usually including one provider should be enough, so double check."),t.instanceCounter++}return t.prototype.stopInternal=function(t,e){var n=this.runningInstances.indexOf(e);return n>=0&&this.runningInstances.splice(n,1),e.interruptListenersAttached&&e.detachInterruptListeners(),!!e.timer&&(clearInterval(e.timer),e.timer=void 0,e.fireEvent(!t),!0)},t.prototype.start=function(t){var e=this;if(this.stopAll(t.namespace),null!==t.scrollingViews&&0!==t.scrollingViews.length){var n=!1;t.startScrollPosition=0,t.scrollingViews.forEach(function(e){if(!ge.isUndefinedOrNull(e)){var r=t.getScrollPropertyValue(e);!n&&r&&(t.startScrollPosition=r,n=!0)}});var i=t.getCurrentOffset(),o=t.extractScrollTargetPosition();if(t.targetScrollPosition=Math.round((t.verticalScrolling?o.top:o.left)-i),t.distanceToScroll=t.targetScrollPosition-t.startScrollPosition,isNaN(t.distanceToScroll))return(me._logLevel>=2||me._logLevel>=1&&Object(r.Z)())&&console.log("Scrolling not possible, as we can't find the specified target"),void t.fireEvent(!1);var l=Math.abs(t.distanceToScroll)<me._minScrollDistance;if(t.executionDuration=t.duration,!ge.isUndefinedOrNull(t.speed)&&ge.isUndefinedOrNull(t.duration)&&(t.executionDuration=Math.abs(t.distanceToScroll)/t.speed*1e3),l||t.executionDuration<=me._interval)return(me._logLevel>=2||me._logLevel>=1&&Object(r.Z)())&&(l?console.log("Scrolling not possible, as we can't get any closer to the destination"):console.log("Scroll duration shorter that interval length, jumping to target")),t.setScrollPosition(t.targetScrollPosition),void t.fireEvent(!0);(t.interruptible||ge.isUndefinedOrNull(t.interruptible)&&me.defaultInterruptible)&&t.attachInterruptListeners(this.onInterrupted),t.startTime=(new Date).getTime(),t.endTime=t.startTime+t.executionDuration,t.timer=setInterval(function(t){var n,r=(new Date).getTime(),i=!1;t.endTime<=r?(n=t.targetScrollPosition,i=!0):n=Math.round(t.easingLogic.ease(r-t.startTime,t.startScrollPosition,t.distanceToScroll,t.executionDuration)),t.setScrollPosition(n)||(i=!0),i&&e.stopInternal(!1,t)},me._interval,t),this.runningInstances.push(t)}else(me._logLevel>=2||me._logLevel>=1&&Object(r.Z)())&&console.warn("No scrollingViews specified, this ngx-page-scroll does not know which DOM elements to scroll")},t.prototype.stopAll=function(t){if(this.runningInstances.length>0){for(var e=!1,n=0;n<this.runningInstances.length;++n){var r=this.runningInstances[n];(ge.isUndefinedOrNull(t)||0===t.length||r.namespace===t)&&(e=!0,this.stopInternal(!0,r),n--)}return e}return!1},t.prototype.stop=function(t){return this.stopInternal(!0,t)},t.instanceCounter=0,t}();function ye(t){return t||new be}new r.A,new r.K;var ve=function(){function t(t,e){this._namespace=me._defaultNamespace,this._verticalScrolling=me.defaultIsVerticalScrolling,this._offset=me.defaultScrollOffset,this._duration=me.defaultDuration,this._easingLogic=me.defaultEasingLogic,this._interruptible=me.defaultInterruptible,this._advancedInlineOffsetCalculation=me.defaultAdvancedInlineOffsetCalculation,this._pageScrollFinish=new r.n,this._startScrollPosition=0,this._interruptListenersAttached=!1,this._timer=null,this._namespace=t,this.document=e}return t.simpleInstance=function(e,n,r){return t.newInstance({document:e,scrollTarget:n,namespace:r})},t.newInstance=function(e){(ge.isUndefinedOrNull(e.namespace)||e.namespace.length<=0)&&(e.namespace=me._defaultNamespace);var n=new t(e.namespace,document);return ge.isUndefinedOrNull(e.scrollingViews)||0===e.scrollingViews.length?(n._isInlineScrolling=!1,n._scrollingViews=[document.documentElement,document.body,document.body.parentNode]):(n._isInlineScrolling=!0,n._scrollingViews=e.scrollingViews),n._scrollTarget=e.scrollTarget,ge.isUndefinedOrNull(e.verticalScrolling)||(n._verticalScrolling=e.verticalScrolling),ge.isUndefinedOrNull(e.pageScrollOffset)||(n._offset=e.pageScrollOffset),ge.isUndefinedOrNull(e.pageScrollEasingLogic)||(n._easingLogic=e.pageScrollEasingLogic),ge.isUndefinedOrNull(e.pageScrollDuration)&&!ge.isUndefinedOrNull(e.pageScrollSpeed)?(n._speed=e.pageScrollSpeed,n._duration=void 0):ge.isUndefinedOrNull(e.pageScrollDuration)||(n._duration=e.pageScrollDuration),ge.isUndefinedOrNull(e.pageScrollFinishListener)||(n._pageScrollFinish=e.pageScrollFinishListener),n._interruptible=e.pageScrollInterruptible||ge.isUndefinedOrNull(e.pageScrollInterruptible)&&me.defaultInterruptible,n._advancedInlineOffsetCalculation=e.advancedInlineOffsetCalculation||ge.isUndefinedOrNull(e.advancedInlineOffsetCalculation)&&me.defaultAdvancedInlineOffsetCalculation,n},t.prototype.getScrollPropertyValue=function(t){return this.verticalScrolling?t.scrollTop:t.scrollLeft},t.prototype.extractScrollTargetPosition=function(){var t;if("string"==typeof this._scrollTarget){var e=this._scrollTarget;t=null!==e.match(/^#[^\s]+$/g)?this.document.getElementById(e.substr(1)):this.document.querySelector(e)}else t=this._scrollTarget;if(null===t||void 0===t)return{top:NaN,left:NaN};if(this._isInlineScrolling){var n={top:t.offsetTop,left:t.offsetLeft};if(this._advancedInlineOffsetCalculation&&1===this.scrollingViews.length){for(var i={top:0,left:0},o=t.ownerDocument.defaultView,l=!1,a=t.parentElement;!l&&!ge.isUndefinedOrNull(a);)"relative"===o.getComputedStyle(a).getPropertyValue("position")&&(i.top+=a.offsetTop,i.left+=a.offsetLeft),l=(a=a.parentElement)===this.scrollingViews[0];l?(n.top+=i.top,n.left+=i.left):(me._logLevel>=2||me._logLevel>=1&&Object(r.Z)())&&console.warn("Unable to find nested scrolling targets parent!")}return n}return ge.extractElementPosition(this.document,t)},t.prototype.getCurrentOffset=function(){return this._offset},t.prototype.setScrollPosition=function(t){var e=this;return me._logLevel>=5&&Object(r.Z)()&&console.warn("Scroll Position: "+t),this.scrollingViews.reduce(function(n,r){var i=e.getScrollPropertyValue(r);if(r&&!ge.isUndefinedOrNull(i)){var o=Math.abs(i-t),l=o<me._minScrollDistance;if(e.verticalScrolling?r.scrollTop=t:r.scrollLeft=t,l||o>Math.abs(e.getScrollPropertyValue(r)-t))return!0}return n},!1)},t.prototype.fireEvent=function(t){this._pageScrollFinish&&this._pageScrollFinish.emit(t)},t.prototype.attachInterruptListeners=function(t){var e=this;this._interruptListenersAttached&&this.detachInterruptListeners(),this._interruptListener=function(n){t.report(n,e)},me._interruptEvents.forEach(function(t){return e.document.body.addEventListener(t,e._interruptListener)}),this._interruptListenersAttached=!0},t.prototype.detachInterruptListeners=function(){var t=this;me._interruptEvents.forEach(function(e){return t.document.body.removeEventListener(e,t._interruptListener)}),this._interruptListenersAttached=!1},Object.defineProperty(t.prototype,"namespace",{get:function(){return this._namespace},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"scrollTarget",{get:function(){return this._scrollTarget},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"verticalScrolling",{get:function(){return this._verticalScrolling},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"scrollingViews",{get:function(){return this._scrollingViews},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"startScrollPosition",{get:function(){return this._startScrollPosition},set:function(t){this._startScrollPosition=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"targetScrollPosition",{get:function(){return this._targetScrollPosition},set:function(t){this._targetScrollPosition=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"distanceToScroll",{get:function(){return this._distanceToScroll},set:function(t){this._distanceToScroll=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"executionDuration",{get:function(){return this._executionDuration},set:function(t){this._executionDuration=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"duration",{get:function(){return this._duration},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"speed",{get:function(){return this._speed},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"easingLogic",{get:function(){return this._easingLogic},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"interruptible",{get:function(){return this._interruptible},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"startTime",{get:function(){return this._startTime},set:function(t){this._startTime=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"endTime",{get:function(){return this._endTime},set:function(t){this._endTime=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"timer",{get:function(){return this._timer},set:function(t){this._timer=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"interruptListenersAttached",{get:function(){return this._interruptListenersAttached},enumerable:!0,configurable:!0}),t}(),_e=function(){function t(t,e,n){this.pageScrollService=t,this.router=e,this.pageScrollTarget=null,this.pageScrollHorizontal=null,this.pageScrollOffset=null,this.pageScrollDuration=null,this.pageScrollSpeed=null,this.pageScrollEasing=null,this.pageScrollAdjustHash=!1,this.pageScroll=null,this.pageScrollFinish=new r.n,this.document=n}return t.prototype.ngOnChanges=function(t){this.pageScrollInstance=void 0},t.prototype.ngOnDestroy=function(){this.pageScrollInstance&&this.pageScrollService.stop(this.pageScrollInstance)},t.prototype.generatePageScrollInstance=function(){return ge.isUndefinedOrNull(this.pageScrollInstance)&&(this.pageScrollInstance=ve.newInstance({document:this.document,scrollTarget:this.pageScrollTarget||this.href,scrollingViews:null,namespace:this.pageScroll,verticalScrolling:!this.pageScrollHorizontal,pageScrollOffset:this.pageScrollOffset,pageScrollInterruptible:this.pageScrollInterruptible,pageScrollEasingLogic:this.pageScrollEasing,pageScrollDuration:this.pageScrollDuration,pageScrollSpeed:this.pageScrollSpeed,pageScrollFinishListener:this.pageScrollFinish})),this.pageScrollInstance},t.prototype.pushRouterState=function(){this.pageScrollAdjustHash&&"string"==typeof this.pageScrollInstance.scrollTarget&&"#"===this.pageScrollInstance.scrollTarget.substr(0,1)&&this.router.navigate([],{fragment:this.pageScrollInstance.scrollTarget.substr(1),preserveQueryParams:!0})},t.prototype.scroll=function(){var t=this.generatePageScrollInstance();this.pushRouterState(),this.pageScrollService.start(t)},t.prototype.handleClick=function(t){var e,n=this;if(this.routerLink&&null!==this.router&&void 0!==this.router&&(e="string"==typeof this.routerLink?this.router.parseUrl(this.routerLink):this.router.createUrlTree(this.routerLink),!this.router.isActive(e,!0))){var r=this.router.events.subscribe(function(t){t instanceof R.e?(r.unsubscribe(),setTimeout(function(){n.scroll()},0)):(t instanceof R.f||t instanceof R.d)&&r.unsubscribe()});return!1}return this.scroll(),!1},t}(),we=function(){function t(t){this.router=t}return t.prototype.ngAfterContentInit=function(){},t}(),xe=r.Pa({encapsulation:0,styles:[[".grid-container[_ngcontent-%COMP%]{margin:20px}.dashboard-card-content[_ngcontent-%COMP%]{text-align:left}.dashboard-card[_ngcontent-%COMP%]{overflow:auto}.mat-card-title[_ngcontent-%COMP%]{font-weight:700}.project-pres[_ngcontent-%COMP%]{font-size:14pt}a[_ngcontent-%COMP%], h1[_ngcontent-%COMP%], h2[_ngcontent-%COMP%], h3[_ngcontent-%COMP%], h4[_ngcontent-%COMP%], h5[_ngcontent-%COMP%], h6[_ngcontent-%COMP%], li[_ngcontent-%COMP%], p[_ngcontent-%COMP%], u[_ngcontent-%COMP%]{font-family:Lato,Helvetica,SansSerif}#carre_blanc[_ngcontent-%COMP%]{width:100px;position:absolute;top:300px}#carre[_ngcontent-%COMP%]{width:500px;position:absolute;top:-5px;right:0}#titre_principal[_ngcontent-%COMP%]{color:#2ab7ca;font-size:4em;position:absolute;right:580px;top:230px}#sous_titre[_ngcontent-%COMP%]{color:#fff;font-size:2em;position:absolute;right:560px;top:330px}.idea[_ngcontent-%COMP%]{width:30px;padding-bottom:10px}.discover[_ngcontent-%COMP%]{width:258px;font-size:1.27em;padding:10px 10px 0 28px;background-color:#fed766;border-radius:10px;border:1px #fed766;color:#fff;text-decoration:none;position:absolute;top:420px;right:600px;z-index:2}a[_ngcontent-%COMP%]:hover{text-decoration:none;color:#fff}a[_ngcontent-%COMP%]{color:#203864}#bloc2[_ngcontent-%COMP%]{width:100%;position:absolute;top:400px;z-index:1}#textbloc2[_ngcontent-%COMP%]{color:#fff;font-size:2em;width:400px;position:absolute;top:950px;right:300px;line-height:1.2em;text-align:center;font-family:Lato,Helvetica,SansSerif;z-index:3}#ancre[_ngcontent-%COMP%]{color:#203864;position:absolute;top:700px}#double_fleche[_ngcontent-%COMP%]{width:60px;position:absolute;top:620px;left:30px;z-index:7}#bloc3[_ngcontent-%COMP%]{width:700px;position:absolute;top:1400px;right:200px}#leading[_ngcontent-%COMP%]{color:#fff;font-size:2em;position:absolute;top:1560px;left:80px;z-index:6;font-family:Lato,Helvetica,SansSerif}#antibio[_ngcontent-%COMP%]{width:200px;color:#fe4a49;font-size:2em;line-height:1em;text-align:center;position:absolute;top:1665px;left:120px;font-family:Lato,Helvetica,SansSerif}#jaune[_ngcontent-%COMP%]{color:#fed766}#vitro[_ngcontent-%COMP%]{color:#fed766;width:300px;font-size:2em;line-height:1em;text-align:center;position:absolute;top:1890px;left:130px;font-family:Lato,Helvetica,SansSerif}#alter[_ngcontent-%COMP%]{color:#2ab7ca;width:200px;font-size:2em;line-height:1em;text-align:center;position:absolute;top:1780px;right:40px;font-family:Lato,Helvetica,SansSerif}#ancre2[_ngcontent-%COMP%]{color:#203864;font-size:.2em;position:absolute;top:1340px;left:80px;z-index:6;font-family:Lato,Helvetica,SansSerif}#ancre4[_ngcontent-%COMP%]{color:#203864;font-size:.2em;position:absolute;top:2770px;left:80px;z-index:6;font-family:Lato,Helvetica,SansSerif}#ancre5[_ngcontent-%COMP%]{color:#203864;font-size:.2em;position:absolute;top:3240px;left:80px;z-index:1200;font-family:Lato,Helvetica,SansSerif}#ancre6[_ngcontent-%COMP%]{color:#203864;font-size:.2em;position:absolute;top:3845px;left:80px;z-index:6;font-family:Lato,Helvetica,SansSerif}#double_fleche2[_ngcontent-%COMP%]{width:60px;position:absolute;top:925px;right:120px;z-index:7}#double_fleche3[_ngcontent-%COMP%]{width:60px;position:absolute;top:1310px;right:100px;z-index:7}#double_fleche4[_ngcontent-%COMP%]{width:50px;position:absolute;top:1680px;left:320px;z-index:7}#double_fleche5[_ngcontent-%COMP%]{width:50px;position:absolute;top:1890px;right:320px;z-index:9}#bloc4[_ngcontent-%COMP%]{width:700px;position:absolute;top:2200px;left:40px}#bloc5[_ngcontent-%COMP%]{width:90%;position:absolute;top:2880px}#tuyaujaune[_ngcontent-%COMP%]{width:130px;position:absolute;right:760px}#methotrexit[_ngcontent-%COMP%]{width:600px;position:absolute;top:200px;left:100px}#ancre3[_ngcontent-%COMP%]{color:#203864;position:absolute;top:2100px}#texte_carte[_ngcontent-%COMP%]{color:#fff;font-size:1.8em;width:400px;position:absolute;top:2180px;text-align:center;right:50px;line-height:1.2em;font-family:Lato,Helvetica,SansSerif;z-index:6}#text2carte[_ngcontent-%COMP%]{color:#fe4a49;font-size:2.5em;width:400px;position:absolute;top:2330px;text-align:center;right:50px;line-height:1.2em;font-family:Lato,Helvetica,SansSerif;z-index:6}#text3[_ngcontent-%COMP%]{color:#fff;font-size:1.8em;width:400px;position:absolute;top:2445px;text-align:center;right:50px;line-height:1.2em;font-family:Lato,Helvetica,SansSerif;z-index:6}#text_bact1[_ngcontent-%COMP%]{color:#fff;font-size:1.8em;width:400px;position:absolute;top:2940px;text-align:center;right:70px;line-height:1.2em;font-family:Lato,Helvetica,SanfsSerif;z-index:6}#text_bact2[_ngcontent-%COMP%]{color:#fff;font-size:1.8em;width:400px;position:absolute;top:3540px;text-align:center;left:40px;line-height:1.2em;font-family:Lato,Helvetica,SansSerif;z-index:6}#text_bact3[_ngcontent-%COMP%]{color:#fff;font-size:2em;width:400px;position:absolute;top:4020px;text-align:center;right:70px;line-height:1.2em;font-family:Lato,Helvetica,SansSerif;z-index:6}#butr[_ngcontent-%COMP%]{color:#fff;font-size:4em;position:absolute;top:3285px;right:450px;text-align:center}#sor[_ngcontent-%COMP%]{color:#fff;font-size:4em;position:absolute;top:3740px;left:170px;text-align:center}#gras[_ngcontent-%COMP%]{font-style:bold}#titre3[_ngcontent-%COMP%]{color:#fff;font-size:4.6em;position:absolute;top:2800px;text-align:center;right:50px;font-family:Lato,Helvetica,SansSerif;z-index:6}#metho_rouge[_ngcontent-%COMP%]{color:#fe4a49}.oursolution[_ngcontent-%COMP%]{width:1200px;height:200px;position:absolute;text-align:center;top:2100px;left:0;background-color:#2b4b85}.smallpresproj[_ngcontent-%COMP%]{width:1200px;height:1100px;position:absolute;top:2299px;background-color:#fff;color:#2b4b85;font-size:2em;left:0;line-height:1.2em;text-align:justify;font-family:Lato,Helvetica,SansSerif;padding:20px 100px}.schemashort[_ngcontent-%COMP%]{position:absolute;top:2700px;left:0;text-align:center;z-index:4}.oursoltext[_ngcontent-%COMP%]{position:absolute;top:48%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#fff;font-family:'Didact Gothic',Helvetica,SansSerif;font-weight:bolder;font-size:50pt;text-shadow:2px 2px #000}.comeseemore[_ngcontent-%COMP%]{width:1200px;height:200px;position:absolute;text-align:center;top:3380px;left:0;background-color:#2b4b85}.seemoretext[_ngcontent-%COMP%]{position:absolute;top:48%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#fff;font-family:Lato,Helvetica,SansSerif;font-weight:bolder;font-size:50pt;cursor:pointer}#bleu[_ngcontent-%COMP%]{color:#2ab7ca}.footer-distributed[_ngcontent-%COMP%]   .footer-center[_ngcontent-%COMP%]   p[_ngcontent-%COMP%]   a[_ngcontent-%COMP%]{color:#2e508e;text-decoration:none}.footer-center[_ngcontent-%COMP%]{text-align:center;font-size:20px}#ic[_ngcontent-%COMP%]{width:55px;margin:auto}#logo[_ngcontent-%COMP%]{width:200px;margin-left:2px}.footer-distributed[_ngcontent-%COMP%]{background-color:#d9d9d9;display:flex;flex-direction:row;align-items:center;justify-content:space-around}"]],data:{}});function Se(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,100,"div",[["class","innercontainer"]],null,null,null,null,null)),(t()(),r.Ra(1,0,null,null,0,"img",[["alt","tuyau jaune"],["id","tuyaujaune"],["src","http://2018.igem.org/wiki/images/7/76/T--GO_Paris-Saclay--tuyau_jaune.png"]],null,null,null,null,null)),(t()(),r.Ra(2,0,null,null,0,"img",[["alt","carres_multicolores"],["id","carre"],["src","http://2018.igem.org/wiki/images/5/5f/T--GO_Paris-Saclay--carre_colore.png"]],null,null,null,null,null)),(t()(),r.Ra(3,0,null,null,0,"img",[["alt","carre_blanc"],["id","carre_blanc"],["src","http://2018.igem.org/wiki/images/3/38/T--GO_Paris-Saclay--carre_blanc.png"]],null,null,null,null,null)),(t()(),r.Ra(4,0,null,null,0,"img",[["alt","titre logo methotrexit"],["id","methotrexit"],["src","\nhttp://2018.igem.org/wiki/images/2/28/T--GO_Paris-Saclay--methotrexittire.png\n"]],null,null,null,null,null)),(t()(),r.Ra(5,0,null,null,3,"h2",[["id","sous_titre"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Heterogen"])),(t()(),r.Ra(7,0,null,null,0,"img",[["alt","idea"],["class","idea"],["src","http://2018.igem.org/wiki/images/c/c6/T--GO_Paris-Saclay--idea.png"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["ous Cleaning Factory"])),(t()(),r.Ra(9,0,null,null,4,"div",[["class","discover"]],null,null,null,null,null)),(t()(),r.Ra(10,0,null,null,3,"p",[],null,null,null,null,null)),(t()(),r.Ra(11,0,null,null,2,"a",[["href","#ancre"],["pageScroll",""]],null,[[null,"click"]],function(t,e,n){var i=!0;return"click"===e&&(i=!1!==r.bb(t,12).handleClick(n)&&i),i},null,null)),r.Qa(12,671744,null,0,_e,[be,[2,R.n],o.c],{href:[0,"href"],pageScroll:[1,"pageScroll"]},null),(t()(),r.jb(-1,null,["Discover our project"])),(t()(),r.Ra(14,0,null,null,0,"img",[["alt","bloc2"],["id","bloc2"],["src","http://2018.igem.org/wiki/images/5/56/T--GO_Paris-Saclay--BON2909bloc2.png"]],null,null,null,null,null)),(t()(),r.Ra(15,0,null,null,4,"div",[["id","textbloc2"]],null,null,null,null,null)),(t()(),r.jb(-1,null,[" Thanks to medicinal advances, each year drug consumption increases to meet the needs of the population."])),(t()(),r.Ra(17,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.Ra(18,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" However drugs are not totally metabolized and by-products accumulate in wastewater. "])),(t()(),r.Ra(20,0,null,null,2,"a",[["href","#ancre2"],["id","double_fleche"],["pageScroll",""]],null,[[null,"click"]],function(t,e,n){var i=!0;return"click"===e&&(i=!1!==r.bb(t,21).handleClick(n)&&i),i},null,null)),r.Qa(21,671744,null,0,_e,[be,[2,R.n],o.c],{href:[0,"href"],pageScroll:[1,"pageScroll"]},null),(t()(),r.Ra(22,0,null,null,0,"img",[["alt","double_fleche"],["id","double_fleche"],["src","http://2018.igem.org/wiki/images/9/93/T--GO_Paris-Saclay--.double_fleche.png"]],null,null,null,null,null)),(t()(),r.Ra(23,0,null,null,1,"div",[["id","ancre"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["o"])),(t()(),r.Ra(25,0,null,null,0,"img",[["alt","bloc3"],["id","bloc3"],["src","http://2018.igem.org/wiki/images/0/08/T--GO_Paris-Saclay--bloc3.png"]],null,null,null,null,null)),(t()(),r.Ra(26,0,null,null,1,"div",[["id","ancre2"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["o"])),(t()(),r.Ra(28,0,null,null,1,"div",[["id","leading"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Leading to..."])),(t()(),r.Ra(30,0,null,null,1,"div",[["id","antibio"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Antibiotic resistance"])),(t()(),r.Ra(32,0,null,null,1,"div",[["id","vitro"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Disrupting effects on cells"])),(t()(),r.Ra(34,0,null,null,1,"div",[["id","alter"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Altered ecosystems"])),(t()(),r.Ra(36,0,null,null,2,"a",[["href","#ancre3"],["id","double_fleche2"],["pageScroll",""]],null,[[null,"click"]],function(t,e,n){var i=!0;return"click"===e&&(i=!1!==r.bb(t,37).handleClick(n)&&i),i},null,null)),r.Qa(37,671744,null,0,_e,[be,[2,R.n],o.c],{href:[0,"href"],pageScroll:[1,"pageScroll"]},null),(t()(),r.Ra(38,0,null,null,0,"img",[["alt","double_fleche"],["id","double_fleche2"],["src","http://2018.igem.org/wiki/images/9/93/T--GO_Paris-Saclay--.double_fleche.png"]],null,null,null,null,null)),(t()(),r.Ra(39,0,null,null,0,"img",[["alt","bloc4"],["id","bloc4"],["src","http://2018.igem.org/wiki/images/6/6d/T--GO_Paris-Saclay--cartelegende.png\n"]],null,null,null,null,null)),(t()(),r.Ra(40,0,null,null,1,"div",[["id","ancre3"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["o"])),(t()(),r.Ra(42,0,null,null,1,"div",[["id","texte_carte"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["A majority of studies on the subject are done in countries that already have a wastewater treatment program. "])),(t()(),r.Ra(44,0,null,null,1,"div",[["id","text2carte"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Pharmaceutical pollution is underated."])),(t()(),r.Ra(46,0,null,null,4,"div",[["id","text3"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["If no mitigating action is taken, the environmental threat could increase by up to "])),(t()(),r.Ra(48,0,null,null,1,"strong",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["65%"])),(t()(),r.jb(-1,null,[" in 2050 for some drugs. "])),(t()(),r.Ra(51,0,null,null,3,"div",[["id","titre3"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["OUR\xa0SOLUTION:\xa0"])),(t()(),r.Ra(53,0,null,null,1,"span",[["id","metho_rouge"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["METHOTREXIT"])),(t()(),r.Ra(55,0,null,null,0,"img",[["alt","bloc5"],["id","bloc5"],["src","http://2018.igem.org/wiki/images/c/c9/T--GO_Paris-Saclay--bacteriapower.png\n"]],null,null,null,null,null)),(t()(),r.Ra(56,0,null,null,1,"div",[["id","ancre4"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["o"])),(t()(),r.Ra(58,0,null,null,7,"div",[["id","text_bact1"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["We designed a unique biotransformation pathway using a heterologously expressed carboxypeptidase coupled with FolC in "])),(t()(),r.Ra(60,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Escherichia coli"])),(t()(),r.jb(-1,null,[". "])),(t()(),r.Ra(63,0,null,null,1,"span",[["id","metho_rouge"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["MethotrExit"])),(t()(),r.jb(-1,null,[" drastically and quickly removes methotrexate, a broadly used anticancer drug, from the media. "])),(t()(),r.Ra(66,0,null,null,4,"div",[["id","text_bact2"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["We found "])),(t()(),r.Ra(68,0,null,null,1,"span",[["id","bleu"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["degrading drugs can be toxic to the bacteria itself"])),(t()(),r.jb(-1,null,[" and we wanted a project that can be adaptable to any drug degradation in wastewater "])),(t()(),r.Ra(71,0,null,null,12,"div",[["id","text_bact3"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["We brought "])),(t()(),r.Ra(73,0,null,null,1,"span",[["id","gras"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["heterogeneity in the form of varying pathway expression"])),(t()(),r.jb(-1,null,[", as that ensures the survival of a self-renewable reserve subpopulation "])),(t()(),r.Ra(76,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" A division of labor between "])),(t()(),r.Ra(78,0,null,null,1,"span",[["id","metho_rouge"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["\u2018cleaning\u2019"])),(t()(),r.jb(-1,null,[" and "])),(t()(),r.Ra(81,0,null,null,1,"span",[["id","jaune"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["\u2018stem\u2019"])),(t()(),r.jb(-1,null,[" bacteria "])),(t()(),r.Ra(84,0,null,null,1,"div",[["id","butr"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["BUT\u2026 "])),(t()(),r.Ra(86,0,null,null,2,"a",[["href","#ancre4"],["id","double_fleche3"],["pageScroll",""]],null,[[null,"click"]],function(t,e,n){var i=!0;return"click"===e&&(i=!1!==r.bb(t,87).handleClick(n)&&i),i},null,null)),r.Qa(87,671744,null,0,_e,[be,[2,R.n],o.c],{href:[0,"href"],pageScroll:[1,"pageScroll"]},null),(t()(),r.Ra(88,0,null,null,0,"img",[["alt","double_fleche"],["id","double_fleche3"],["src","http://2018.igem.org/wiki/images/9/93/T--GO_Paris-Saclay--.double_fleche.png"]],null,null,null,null,null)),(t()(),r.Ra(89,0,null,null,2,"a",[["href","#ancre5"],["id","double_fleche4"],["pageScroll",""]],null,[[null,"click"]],function(t,e,n){var i=!0;return"click"===e&&(i=!1!==r.bb(t,90).handleClick(n)&&i),i},null,null)),r.Qa(90,671744,null,0,_e,[be,[2,R.n],o.c],{href:[0,"href"],pageScroll:[1,"pageScroll"]},null),(t()(),r.Ra(91,0,null,null,0,"img",[["alt","double_fleche"],["id","double_fleche4"],["src","http://2018.igem.org/wiki/images/9/93/T--GO_Paris-Saclay--.double_fleche.png"]],null,null,null,null,null)),(t()(),r.Ra(92,0,null,null,2,"a",[["href","#ancre6"],["id","double_fleche5"],["pageScroll",""]],null,[[null,"click"]],function(t,e,n){var i=!0;return"click"===e&&(i=!1!==r.bb(t,93).handleClick(n)&&i),i},null,null)),r.Qa(93,671744,null,0,_e,[be,[2,R.n],o.c],{href:[0,"href"],pageScroll:[1,"pageScroll"]},null),(t()(),r.Ra(94,0,null,null,0,"img",[["alt","double_fleche"],["id","double_fleche5"],["src","http://2018.igem.org/wiki/images/9/93/T--GO_Paris-Saclay--.double_fleche.png"]],null,null,null,null,null)),(t()(),r.Ra(95,0,null,null,1,"div",[["id","ancre5"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["o"])),(t()(),r.Ra(97,0,null,null,1,"div",[["id","ancre6"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["o"])),(t()(),r.Ra(99,0,null,null,1,"div",[["id","sor"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["SO "])),(t()(),r.Ra(101,0,null,null,23,"footer",[["class","footer-distributed"]],null,null,null,null,null)),(t()(),r.Ra(102,0,null,null,3,"div",[["class","footer-left"]],null,null,null,null,null)),(t()(),r.Ra(103,0,null,null,0,"img",[["alt","logo"],["id","logo"],["src","http://2018.igem.org/wiki/images/1/11/T--GO_Paris-Saclay--logobleu.png"]],null,null,null,null,null)),(t()(),r.Ra(104,0,null,null,1,"p",[["class","footer-company-name"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["Igem GO Paris Saclay \xa9 2018"])),(t()(),r.Ra(106,0,null,null,10,"div",[["class","footer-center"]],null,null,null,null,null)),(t()(),r.Ra(107,0,null,null,5,"div",[],null,null,null,null,null)),(t()(),r.Ra(108,0,null,null,4,"p",[],null,null,null,null,null)),(t()(),r.Ra(109,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["15, rue Georges Cl\xe9menceau"])),(t()(),r.Ra(111,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["91405 Orsay, France"])),(t()(),r.Ra(113,0,null,null,3,"div",[],null,null,null,null,null)),(t()(),r.Ra(114,0,null,null,2,"p",[["id","mail"]],null,null,null,null,null)),(t()(),r.Ra(115,0,null,null,1,"a",[["href","mailto:igem.parissaclay@gmail.com"]],null,null,null,null,null)),(t()(),r.jb(-1,null,["igem.parissaclay@gmail.com"])),(t()(),r.Ra(117,0,null,null,7,"div",[["class","footer-right"]],null,null,null,null,null)),(t()(),r.Ra(118,0,null,null,6,"div",[["class","footer-icons"]],null,null,null,null,null)),(t()(),r.Ra(119,0,null,null,1,"a",[["href","https://www.facebook.com/iGEMParisSaclay/"]],null,null,null,null,null)),(t()(),r.Ra(120,0,null,null,0,"img",[["alt","fb"],["id","ic"],["src","http://2018.igem.org/wiki/images/f/f2/T--GO_Paris-Saclay--socialfb.png"]],null,null,null,null,null)),(t()(),r.Ra(121,0,null,null,1,"a",[["href","https://twitter.com/igemparissaclay?lang=en"]],null,null,null,null,null)),(t()(),r.Ra(122,0,null,null,0,"img",[["alt","tw"],["id","ic"],["src","http://2018.igem.org/wiki/images/e/e6/T--GO_Paris-Saclay--twittersocial.png"]],null,null,null,null,null)),(t()(),r.Ra(123,0,null,null,1,"a",[["href","#"]],null,null,null,null,null)),(t()(),r.Ra(124,0,null,null,0,"img",[["alt","linkedin"],["id","ic"],["src","http://2018.igem.org/wiki/images/2/22/T--GO_Paris-Saclay--linkedinso.png"]],null,null,null,null,null))],function(t,e){t(e,12,0,"#ancre",""),t(e,21,0,"#ancre2",""),t(e,37,0,"#ancre3",""),t(e,87,0,"#ancre4",""),t(e,90,0,"#ancre5",""),t(e,93,0,"#ancre6","")},null)}var Ce=r.Na("dashboard",we,function(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,1,"dashboard",[],null,null,null,Se,xe)),r.Qa(1,1097728,null,0,we,[R.n],null,null)],null,null)},{},{},[]),ke=n("yWMr"),Re=n("vGXY"),je=r.Pa({encapsulation:0,styles:[["body[_ngcontent-%COMP%]{margin:2em}.fill-toolbar-space[_ngcontent-%COMP%]{flex:1 1 auto}.sidenav-container[_ngcontent-%COMP%]{height:100%}.sidenav[_ngcontent-%COMP%]{width:200px;box-shadow:3px 0 6px rgba(0,0,0,.24)}#sitemapbut[_ngcontent-%COMP%]{position:absolute;background:#fff;bottom:0;width:100%}mat-icon[_ngcontent-%COMP%]{padding:3px}#sidenavflexcontent[_ngcontent-%COMP%]{max-width:1000px}.titlediv[_ngcontent-%COMP%]{text-align:center;line-height:10pt;font-size:18pt}.firstpartoftitle[_ngcontent-%COMP%]{color:#dbbbf5}.secondpartoftitle[_ngcontent-%COMP%]{color:red}.subtitleoftitle[_ngcontent-%COMP%]{font-size:8pt}"]],data:{}});function Oe(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,0,"img",[["class","superposedbanner1"],["src","http://2018.igem.org/wiki/images/3/37/T--GO_Paris-Saclay--footer_small.png"]],null,null,null,null,null))],null,null)}function Ee(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,136,"div",[["id","insideapps"]],null,null,null,null,null)),(t()(),r.Ra(1,0,null,null,128,"nav",[["id","top"]],null,null,null,null,null)),(t()(),r.Ra(2,0,null,null,127,"div",[["id","cssmenu"]],null,null,null,null,null)),(t()(),r.Ra(3,0,null,null,126,"ul",[],null,null,null,null,null)),(t()(),r.Ra(4,0,null,null,4,"li",[],null,null,null,null,null)),(t()(),r.Ra(5,0,null,null,3,"a",[["href","#"]],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.routerLinkChunkProcessing("/")&&r),r},null,null)),(t()(),r.Ra(6,0,null,null,2,"mat-icon",[["class","mat-icon"],["role","img"]],[[2,"mat-icon-inline",null]],null,null,w.b,w.a)),r.Qa(7,638976,null,0,x.a,[r.k,x.c,[8,null]],null,null),(t()(),r.jb(-1,0,["home"])),(t()(),r.Ra(9,0,null,null,24,"li",[],null,null,null,null,null)),(t()(),r.Ra(10,0,null,null,2,"a",[],null,null,null,null,null)),(t()(),r.Ra(11,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Project"])),(t()(),r.Ra(13,0,null,null,20,"ul",[],null,null,null,null,null)),(t()(),r.Ra(14,0,null,null,3,"li",[],null,null,null,null,null)),(t()(),r.Ra(15,0,null,null,2,"a",[],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.routerLinkChunkProcessing("/background")&&r),r},null,null)),(t()(),r.Ra(16,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Background"])),(t()(),r.Ra(18,0,null,null,3,"li",[],null,null,null,null,null)),(t()(),r.Ra(19,0,null,null,2,"a",[],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.routerLinkChunkProcessing("/project")&&r),r},null,null)),(t()(),r.Ra(20,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Project Summary"])),(t()(),r.Ra(22,0,null,null,3,"li",[],null,null,null,null,null)),(t()(),r.Ra(23,0,null,null,2,"a",[],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.routerLinkChunkProcessing("/biology/mtx")&&r),r},null,null)),(t()(),r.Ra(24,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Degrading MTX"])),(t()(),r.Ra(26,0,null,null,3,"li",[],null,null,null,null,null)),(t()(),r.Ra(27,0,null,null,2,"a",[],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.routerLinkChunkProcessing("/biology/heterogenious")&&r),r},null,null)),(t()(),r.Ra(28,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["An HeteroGenious System"])),(t()(),r.Ra(30,0,null,null,3,"li",[],null,null,null,null,null)),(t()(),r.Ra(31,0,null,null,2,"a",[],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.routerLinkChunkProcessing("/demonstrate")&&r),r},null,null)),(t()(),r.Ra(32,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Demonstrating our project"])),(t()(),r.Ra(34,0,null,null,41,"li",[],null,null,null,null,null)),(t()(),r.Ra(35,0,null,null,2,"a",[],null,null,null,null,null)),(t()(),r.Ra(36,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Biology"])),(t()(),r.Ra(38,0,null,null,37,"ul",[],null,null,null,null,null)),(t()(),r.Ra(39,0,null,null,28,"li",[["class","has-sub"]],null,null,null,null,null)),(t()(),r.Ra(40,0,null,null,2,"a",[],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.routerLinkChunkProcessing("/biology/parts")&&r),r},null,null)),(t()(),r.Ra(41,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Parts"])),(t()(),r.Ra(43,0,null,null,24,"ul",[],null,null,null,null,null)),(t()(),r.Ra(44,0,null,null,3,"li",[],null,null,null,null,null)),(t()(),r.Ra(45,0,null,null,2,"a",[],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.routerLinkChunkProcessing("/biology/cpg2")&&r),r},null,null)),(t()(),r.Ra(46,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["cpg2"])),(t()(),r.Ra(48,0,null,null,3,"li",[],null,null,null,null,null)),(t()(),r.Ra(49,0,null,null,2,"a",[],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.routerLinkChunkProcessing("/biology/folc")&&r),r},null,null)),(t()(),r.Ra(50,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["folC"])),(t()(),r.Ra(52,0,null,null,3,"li",[],null,null,null,null,null)),(t()(),r.Ra(53,0,null,null,2,"a",[],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.routerLinkChunkProcessing("/biology/lee5")&&r),r},null,null)),(t()(),r.Ra(54,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["LEE5"])),(t()(),r.Ra(56,0,null,null,3,"li",[],null,null,null,null,null)),(t()(),r.Ra(57,0,null,null,2,"a",[],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.routerLinkChunkProcessing("/biology/ler")&&r),r},null,null)),(t()(),r.Ra(58,0,null,null,1,"i",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Ler"])),(t()(),r.Ra(60,0,null,null,3,"li",[],null,null,null,null,null)),(t()(),r.Ra(61,0,null,null,2,"a",[],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.routerLinkChunkProcessing("/biology/J23108")&&r),r},null,null)),(t()(),r.Ra(62,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Improved part"])),(t()(),r.Ra(64,0,null,null,3,"li",[],null,null,null,null,null)),(t()(),r.Ra(65,0,null,null,2,"a",[],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.routerLinkChunkProcessing("/biology/parts-collection")&&r),r},null,null)),(t()(),r.Ra(66,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Parts collection"])),(t()(),r.Ra(68,0,null,null,3,"li",[],null,null,null,null,null)),(t()(),r.Ra(69,0,null,null,2,"a",[],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.routerLinkChunkProcessing("/labnotebook")&&r),r},null,null)),(t()(),r.Ra(70,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Lab Notebook"])),(t()(),r.Ra(72,0,null,null,3,"li",[],null,null,null,null,null)),(t()(),r.Ra(73,0,null,null,2,"a",[],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.routerLinkChunkProcessing("/biology/hplc")&&r),r},null,null)),(t()(),r.Ra(74,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["HPLC Explorer"])),(t()(),r.Ra(76,0,null,null,3,"li",[],null,null,null,null,null)),(t()(),r.Ra(77,0,null,null,2,"a",[],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.routerLinkChunkProcessing("/modeling")&&r),r},null,null)),(t()(),r.Ra(78,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Model"])),(t()(),r.Ra(80,0,null,null,16,"li",[],null,null,null,null,null)),(t()(),r.Ra(81,0,null,null,2,"a",[],null,null,null,null,null)),(t()(),r.Ra(82,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Contribution"])),(t()(),r.Ra(84,0,null,null,12,"ul",[],null,null,null,null,null)),(t()(),r.Ra(85,0,null,null,3,"li",[],null,null,null,null,null)),(t()(),r.Ra(86,0,null,null,2,"a",[],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.routerLinkChunkProcessing("/biology/interlab")&&r),r},null,null)),(t()(),r.Ra(87,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Interlab"])),(t()(),r.Ra(89,0,null,null,3,"li",[],null,null,null,null,null)),(t()(),r.Ra(90,0,null,null,2,"a",[],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.routerLinkChunkProcessing("/software")&&r),r},null,null)),(t()(),r.Ra(91,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Software"])),(t()(),r.Ra(93,0,null,null,3,"li",[],null,null,null,null,null)),(t()(),r.Ra(94,0,null,null,2,"a",[],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.openWikiSourceBottomSheet()&&r),r},null,null)),(t()(),r.Ra(95,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Wiki source code"])),(t()(),r.Ra(97,0,null,null,3,"li",[],null,null,null,null,null)),(t()(),r.Ra(98,0,null,null,2,"a",[],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.routerLinkChunkProcessing("/human-practices")&&r),r},null,null)),(t()(),r.Ra(99,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Human practices"])),(t()(),r.Ra(101,0,null,null,3,"li",[],null,null,null,null,null)),(t()(),r.Ra(102,0,null,null,2,"a",[],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.routerLinkChunkProcessing("/achievements")&&r),r},null,null)),(t()(),r.Ra(103,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Achievements"])),(t()(),r.Ra(105,0,null,null,24,"li",[],null,null,null,null,null)),(t()(),r.Ra(106,0,null,null,2,"a",[],null,null,null,null,null)),(t()(),r.Ra(107,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Support"])),(t()(),r.Ra(109,0,null,null,20,"ul",[],null,null,null,null,null)),(t()(),r.Ra(110,0,null,null,3,"li",[],null,null,null,null,null)),(t()(),r.Ra(111,0,null,null,2,"a",[],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.routerLinkChunkProcessing("/team")&&r),r},null,null)),(t()(),r.Ra(112,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Team"])),(t()(),r.Ra(114,0,null,null,3,"li",[],null,null,null,null,null)),(t()(),r.Ra(115,0,null,null,2,"a",[],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.routerLinkChunkProcessing("/support")&&r),r},null,null)),(t()(),r.Ra(116,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Sponsors"])),(t()(),r.Ra(118,0,null,null,3,"li",[],null,null,null,null,null)),(t()(),r.Ra(119,0,null,null,2,"a",[],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.routerLinkChunkProcessing("/collaborations")&&r),r},null,null)),(t()(),r.Ra(120,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Collaborations"])),(t()(),r.Ra(122,0,null,null,3,"li",[],null,null,null,null,null)),(t()(),r.Ra(123,0,null,null,2,"a",[],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.routerLinkChunkProcessing("/attribution")&&r),r},null,null)),(t()(),r.Ra(124,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Attribution"])),(t()(),r.Ra(126,0,null,null,3,"li",[],null,null,null,null,null)),(t()(),r.Ra(127,0,null,null,2,"a",[],null,[[null,"click"]],function(t,e,n){var r=!0;return"click"===e&&(r=!1!==t.component.routerLinkChunkProcessing("/references")&&r),r},null,null)),(t()(),r.Ra(128,0,null,null,1,"span",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Bibliography"])),(t()(),r.Ra(130,0,null,null,6,"div",[],null,null,null,null,null)),r.Qa(131,278528,null,0,o.i,[r.s,r.t,r.k,r.E],{ngClass:[0,"ngClass"]},null),r.eb(132,{container:0,containerfrontpage:1}),(t()(),r.Ra(133,16777216,null,null,1,"router-outlet",[],null,null,null,null,null)),r.Qa(134,212992,null,0,R.q,[R.b,r.Q,r.j,[8,null],r.h],null,null),(t()(),r.Ia(16777216,null,null,1,null,Oe)),r.Qa(136,16384,null,0,o.k,[r.Q,r.N],{ngIf:[0,"ngIf"]},null)],function(t,e){var n=e.component;t(e,7,0),t(e,131,0,t(e,132,0,n.showBackHomeLogo,!n.showBackHomeLogo)),t(e,134,0),t(e,136,0,n.showBackHomeLogo)},function(t,e){t(e,6,0,r.bb(e,7).inline)})}var Te=r.Na("app-root",c,function(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,1,"app-root",[],null,null,null,Ee,je)),r.Qa(1,114688,null,0,c,[Re.a,R.n,u.a,y.a],null,null)],function(t,e){t(e,1,0)},null)},{},{},[]),Pe=r.Pa({encapsulation:2,styles:[],data:{}});function Ie(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,3,"div",[["class","titrebloc"]],null,null,null,null,null)),(t()(),r.Ra(1,0,null,null,0,"img",[["class","carretitrepincipal"],["src","http://2018.igem.org/wiki/images/f/fd/T--GO_Paris-Saclay--carretitreprinci.png"]],null,null,null,null,null)),(t()(),r.Ra(2,0,null,null,1,"h1",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["Our wiki's source code"])),(t()(),r.Ra(4,0,null,null,7,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["You can get the wiki sources here : "])),(t()(),r.Ra(6,0,null,null,5,"a",[["href","http://2018.igem.org/wiki/images/2/21/T--GO_Paris-Saclay--igem2018-wikisource_angularwiki.zip"],["mat-raised-button",""],["target","_blank"]],[[1,"tabindex",0],[1,"disabled",0],[1,"aria-disabled",0],[2,"_mat-animation-noopable",null]],[[null,"click"]],function(t,e,n){var i=!0;return"click"===e&&(i=!1!==r.bb(t,7)._haltDisabledEvents(n)&&i),i},T.c,T.a)),r.Qa(7,180224,null,0,P.a,[I.a,A.d,r.k,[2,M.a]],null,null),(t()(),r.Ra(8,0,null,0,2,"mat-icon",[["class","mat-icon"],["role","img"]],[[2,"mat-icon-inline",null]],null,null,w.b,w.a)),r.Qa(9,638976,null,0,x.a,[r.k,x.c,[8,null]],null,null),(t()(),r.jb(-1,0,["open_in_new"])),(t()(),r.jb(-1,0,[" Download source zip"])),(t()(),r.Ra(12,0,null,null,5,"p",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["This wiki uses Angular with some special magic to work on a wiki infrastructure. "])),(t()(),r.Ra(14,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.jb(-1,null,["You will need node.js, npm and Angular CLI to use this source."])),(t()(),r.Ra(16,0,null,null,0,"br",[],null,null,null,null,null)),(t()(),r.jb(-1,null,[" To get started : npm install, ng serve, and take a look at howto_deploy.md for tips on deploying to iGEM wiki."]))],function(t,e){t(e,9,0)},function(t,e){t(e,6,0,r.bb(e,7).disabled?-1:r.bb(e,7).tabIndex||0,r.bb(e,7).disabled||null,r.bb(e,7).disabled.toString(),"NoopAnimations"===r.bb(e,7)._animationMode),t(e,8,0,r.bb(e,9).inline)})}var Ae=r.Na("wikisource-sheet",h,function(t){return r.lb(0,[(t()(),r.Ra(0,0,null,null,1,"wikisource-sheet",[],null,null,null,Ie,Pe)),r.Qa(1,49152,null,0,h,[y.e],null,null)],null,null)},{},{},[]),Me=n("ZYjt"),De=n("NSYL"),Ne=n("ihYY"),Le=n("OzfB"),Fe=n("t/Na"),ze=n("M2Lx"),Ve=n("eDkP"),Be=n("LC5p"),He=n("YhbO"),Ge=n("4c35"),Ue=n("21Lb"),qe=n("hUWP"),Qe=n("3pJQ"),We=n("V9q+"),Ye=n("6blF"),Ze=function(){function t(t,e){this.router=t,this.chunkLoader=e}return t.prototype.canActivate=function(t,e){if(0==i.a.production)return console.log("ChunkGuard::CanActivate: "+e.url+" | prod : "+i.a.production),new Ye.a(function(t){t.next(!0),console.log("ChunkGuard::CanActivate::Observable<bool> : next(true) called."),t.complete(),console.log("ChunkGuard::CanActivate::Observable<bool> : complete called.")});var n=e.url;return console.log("ChunkGuard::CanActivate "+n),this.chunkLoader.asyncLoadPageChunk(n)},t.ngInjectableDef=r.U({factory:function(){return new t(r.Y(R.n),r.Y(u.a))},token:t,providedIn:"root"}),t}(),Ke=function(){},Xe=n("pZhM"),$e=n("qAlS"),Je=n("8ZXz"),tn=function(){},en=n("YSh2"),nn=r.Oa(a,[c],function(t){return r.Ya([r.Za(512,r.j,r.Da,[[8,[f.a,E,F,H,Z,vt,St,jt,le,ce,pe,Ce,ke.a,m.a,Ae,Te]],[3,r.j],r.x]),r.Za(5120,r.u,r.Ma,[[3,r.u]]),r.Za(4608,o.m,o.l,[r.u,[2,o.z]]),r.Za(5120,r.s,r.Ka,[]),r.Za(5120,r.t,r.La,[]),r.Za(4608,Me.c,Me.l,[o.c]),r.Za(6144,r.H,null,[Me.c]),r.Za(4608,Me.f,Me.h,[]),r.Za(5120,Me.d,function(t,e,n,r,i,o,l,a){return[new Me.j(t,e,n),new Me.o(r),new Me.n(i,o,l,a)]},[o.c,r.z,r.B,o.c,o.c,Me.f,r.Ea,[2,Me.g]]),r.Za(4608,Me.e,Me.e,[Me.d,r.z]),r.Za(135680,Me.m,Me.m,[o.c]),r.Za(4608,Me.k,Me.k,[Me.e,Me.m]),r.Za(5120,De.a,M.e,[]),r.Za(5120,De.c,M.f,[]),r.Za(4608,De.b,M.d,[o.c,De.a,De.c]),r.Za(5120,r.F,M.g,[Me.k,De.b,r.z]),r.Za(6144,Me.p,null,[Me.m]),r.Za(4608,r.O,r.O,[r.z]),r.Za(4608,Ne.b,M.c,[r.F,Me.b]),r.Za(4608,Le.k,Le.j,[Le.d,Le.h]),r.Za(5120,R.k,R.E,[R.C]),r.Za(5120,r.b,function(t,e,n){return[Le.n(t,e),n]},[o.c,r.B,R.k]),r.Za(5120,R.a,R.B,[R.n]),r.Za(4608,R.g,R.g,[]),r.Za(6144,R.i,null,[R.g]),r.Za(135680,R.r,R.r,[R.n,r.w,r.i,r.r,R.i]),r.Za(4608,R.h,R.h,[]),r.Za(5120,R.F,R.x,[R.n,o.v,R.j]),r.Za(4608,Fe.h,Fe.n,[o.c,r.B,Fe.l]),r.Za(4608,Fe.o,Fe.o,[Fe.h,Fe.m]),r.Za(5120,Fe.a,function(t){return[t]},[Fe.o]),r.Za(4608,ze.c,ze.c,[]),r.Za(4608,S.d,S.d,[]),r.Za(4608,Ve.c,Ve.c,[Ve.i,Ve.e,r.j,Ve.h,Ve.f,r.r,r.z,o.c,ct.b]),r.Za(5120,Ve.j,Ve.k,[Ve.c]),r.Za(4608,b.a,b.a,[Fe.c]),r.Za(5120,be,ye,[[3,be]]),r.Za(1073742336,o.b,o.b,[]),r.Za(1024,r.m,Me.q,[]),r.Za(1024,r.y,function(){return[R.w()]},[]),r.Za(512,R.C,R.C,[r.r]),r.Za(512,Fe.k,Fe.k,[]),r.Za(2048,Fe.i,null,[Fe.k]),r.Za(512,Fe.g,Fe.g,[Fe.i]),r.Za(2048,Fe.b,null,[Fe.g]),r.Za(512,Fe.f,Fe.j,[Fe.b,r.r]),r.Za(512,Fe.c,Fe.c,[Fe.f]),r.Za(512,l.a,l.a,[Fe.c]),r.Za(1024,r.d,function(t,e,n){return[Me.r(t),R.D(e),(r=n,function(){return r.loadPageAtInit()})];var r},[[2,r.y],R.C,l.a]),r.Za(512,r.e,r.e,[[2,r.d]]),r.Za(131584,r.g,r.g,[r.z,r.Ea,r.r,r.m,r.j,r.e]),r.Za(1073742336,r.f,r.f,[r.g]),r.Za(1073742336,Me.a,Me.a,[[3,Me.a]]),r.Za(1073742336,M.b,M.b,[]),r.Za(1073742336,ct.a,ct.a,[]),r.Za(1073742336,S.l,S.l,[[2,S.e]]),r.Za(1073742336,I.b,I.b,[]),r.Za(1073742336,S.w,S.w,[]),r.Za(1073742336,P.c,P.c,[]),r.Za(1073742336,x.b,x.b,[]),r.Za(1073742336,S.n,S.n,[]),r.Za(1073742336,S.u,S.u,[]),r.Za(1073742336,Be.a,Be.a,[]),r.Za(1073742336,_.d,_.d,[]),r.Za(1073742336,He.c,He.c,[]),r.Za(1073742336,Ge.g,Ge.g,[]),r.Za(1073742336,U.b,U.b,[]),r.Za(1073742336,Le.e,Le.e,[]),r.Za(1073742336,Ue.c,Ue.c,[]),r.Za(1073742336,qe.a,qe.a,[]),r.Za(1073742336,Qe.a,Qe.a,[]),r.Za(1073742336,We.a,We.a,[[2,Le.l],r.B]),r.Za(1024,R.v,R.z,[[3,R.n]]),r.Za(512,R.t,R.c,[]),r.Za(512,R.b,R.b,[]),r.Za(256,R.j,{useHash:!0},[]),r.Za(1024,o.h,R.y,[o.t,[2,o.a],R.j]),r.Za(512,o.g,o.g,[o.h]),r.Za(512,r.i,r.i,[]),r.Za(512,r.w,r.L,[r.i,[2,r.M]]),r.Za(1024,R.l,function(){return[[{path:"labnotebook/:pagepath",loadChildren:"./wiki-lightproxy/wiki-lightproxy-layer.module#WikiLightproxyLayerModule",canActivate:[Ze]},{path:"labnotebook",loadChildren:"./wiki-lightproxy/wiki-lightproxy-layer.module#WikiLightproxyLayerModule",canActivate:[Ze]},{path:"team",loadChildren:"./team-roster/team-roster-layer.module#TeamRosterLayerModule",canActivate:[Ze]},{path:"attribution",loadChildren:"./attribution/attribution-layer.module#AttributionLayerModule",canActivate:[Ze]},{path:"project",component:k,canActivate:[Ze]},{path:"biology",loadChildren:"./biology-section/biology-section-layer.module#BiologySectionLayerModule",canActivate:[Ze]},{path:"software",component:D,canActivate:[Ze]},{path:"modeling",component:z,canActivate:[Ze]},{path:"human-practices",component:Q,canActivate:[Ze]},{path:"collaborations",component:mt,canActivate:[Ze]},{path:"demonstrate",component:_t,canActivate:[Ze]},{path:"safety",component:Ct,canActivate:[Ze]},{path:"references",component:Qt,canActivate:[Ze]},{path:"achievements",component:ae,canActivate:[Ze]},{path:"background",component:he,canActivate:[Ze]},{path:"support",loadChildren:"./support-section/support-section-layer.module#SupportSectionLayerModule",canActivate:[Ze]},{path:"",component:we,canActivate:[Ze],pathMatch:"full"}]]},[]),r.Za(1024,R.n,R.A,[r.g,R.t,R.b,o.g,r.r,r.w,r.i,R.l,R.j,[2,R.s],[2,R.m]]),r.Za(1073742336,R.p,R.p,[[2,R.v],[2,R.n]]),r.Za(1073742336,Ke,Ke,[]),r.Za(1073742336,p.e,p.e,[]),r.Za(1073742336,Fe.e,Fe.e,[]),r.Za(1073742336,Fe.d,Fe.d,[]),r.Za(1073742336,Xe.a,Xe.a,[]),r.Za(1073742336,Et.p,Et.p,[]),r.Za(1073742336,Ot.m,Ot.m,[]),r.Za(1073742336,ze.d,ze.d,[]),r.Za(1073742336,It.d,It.d,[]),r.Za(1073742336,Bt,Bt,[]),r.Za(1073742336,qt,qt,[]),r.Za(1073742336,$e.a,$e.a,[]),r.Za(1073742336,Ve.g,Ve.g,[]),r.Za(1073742336,y.d,y.d,[]),r.Za(1073742336,Tt.d,Tt.d,[]),r.Za(1073742336,Je.a,Je.a,[]),r.Za(1073742336,st,st,[]),r.Za(1073742336,tn,tn,[]),r.Za(1024,r.c,r.Ja,[]),r.Za(1073742336,a,a,[r.B,r.c]),r.Za(256,r.Ca,!0,[]),r.Za(256,M.a,"BrowserAnimations",[]),r.Za(256,Fe.l,"XSRF-TOKEN",[]),r.Za(256,Fe.m,"X-XSRF-TOKEN",[]),r.Za(256,Tt.a,{separatorKeyCodes:[en.f]},[])])});i.a.production&&Object(r.V)(),Me.i().bootstrapModuleFactory(nn).catch(function(t){return console.log(t)})},zo3G:function(t,e,n){"use strict";var r=n("mrSG"),i=function(t){function e(e,n){var r=t.call(this,e,n)||this;return r.scheduler=e,r.work=n,r}return r.b(e,t),e.prototype.schedule=function(e,n){return void 0===n&&(n=0),n>0?t.prototype.schedule.call(this,e,n):(this.delay=n,this.state=e,this.scheduler.flush(this),this)},e.prototype.execute=function(e,n){return n>0||this.closed?t.prototype.execute.call(this,e,n):this._execute(e,n)},e.prototype.requestAsyncId=function(e,n,r){return void 0===r&&(r=0),null!==r&&r>0||null===r&&this.delay>0?t.prototype.requestAsyncId.call(this,e,n,r):e.flush(this)},e}(n("h9Dq").a),o=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r.b(e,t),e}(n("CS9Q").a);n.d(e,"a",function(){return l});var l=new o(i)},zotm:function(t,e,n){"use strict";var r=n("mrSG"),i=function(t){function e(e,n,r){var i=t.call(this)||this;return i.parent=e,i.outerValue=n,i.outerIndex=r,i.index=0,i}return r.b(e,t),e.prototype._next=function(t){this.parent.notifyNext(this.outerValue,t,this.outerIndex,this.index++,this)},e.prototype._error=function(t){this.parent.notifyError(t,this),this.unsubscribe()},e.prototype._complete=function(){this.parent.notifyComplete(this),this.unsubscribe()},e}(n("FFOo").a),o=n("Fxb1");function l(t,e,n,r){var l=new i(t,n,r);return Object(o.a)(e)(l)}n.d(e,"a",function(){return l})}},[[4,5]]]);