1
0
Fork 0
mirror of synced 2024-06-03 11:24:48 +12:00
appwrite/public/dist/scripts/app.js
2019-05-09 11:23:22 +03:00

292 lines
102 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(function(a,b){(function(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B=[].indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(b in this&&this[b]===a)return b;return-1};t=a.document,d="before",c="after",m="readyState",l="addEventListener",k="removeEventListener",g="dispatchEvent",q="XMLHttpRequest",h="FormData",n=["load","loadend","loadstart"],e=["progress","abort","error","timeout"],w=parseInt((/msie (\d+)/.exec(navigator.userAgent.toLowerCase())||[])[1]),isNaN(w)&&(w=parseInt((/trident\/.*; rv:(\d+)/.exec(navigator.userAgent.toLowerCase())||[])[1])),(A=Array.prototype).indexOf||(A.indexOf=function(a){var b,c,d,e;for(b=d=0,e=this.length;e>d;b=++d)if(c=this[b],c===a)return b;return-1}),y=function(a,b){return Array.prototype.slice.call(a,b)},s=function(a){return"returnValue"===a||"totalSize"===a||"position"===a},v=function(a,b){var c,d;for(c in a)if(d=a[c],!s(c))try{b[c]=a[c]}catch(e){}return b},x=function(a,b,c){var d,e,f,h;for(e=function(a){return function(d){var e,f,h;e={};for(f in d)s(f)||(h=d[f],e[f]=h===b?c:h);return c[g](a,e)}},f=0,h=a.length;h>f;f++)d=a[f],c._has(d)&&(b["on"+d]=e(d))},u=function(a){var b;if(null!=t.createEventObject)return b=t.createEventObject(),b.type=a,b;try{return new Event(a)}catch(c){return{type:a}}},f=function(a){var c,d,e;return d={},e=function(a){return d[a]||[]},c={},c[l]=function(a,c,f){d[a]=e(a),d[a].indexOf(c)>=0||(f=f===b?d[a].length:f,d[a].splice(f,0,c))},c[k]=function(a,c){var f;return a===b?void(d={}):(c===b&&(d[a]=[]),f=e(a).indexOf(c),void(-1!==f&&e(a).splice(f,1)))},c[g]=function(){var b,d,f,g,h,i,j,k;for(b=y(arguments),d=b.shift(),a||(b[0]=v(b[0],u(d))),g=c["on"+d],g&&g.apply(c,b),k=e(d).concat(e("*")),f=i=0,j=k.length;j>i;f=++i)h=k[f],h.apply(c,b)},c._has=function(a){return!(!d[a]&&!c["on"+a])},a&&(c.listeners=function(a){return y(e(a))},c.on=c[l],c.off=c[k],c.fire=c[g],c.once=function(a,b){var d;return d=function(){return c.off(a,d),b.apply(null,arguments)},c.on(a,d)},c.destroy=function(){return d={}}),c},z=f(!0),z.EventEmitter=f,z[d]=function(a,b){if(a.length<1||a.length>2)throw"invalid hook";return z[l](d,a,b)},z[c]=function(a,b){if(a.length<2||a.length>3)throw"invalid hook";return z[l](c,a,b)},z.enable=function(){a[q]=p,i&&(a[h]=o)},z.disable=function(){a[q]=z[q],i&&(a[h]=i)},r=z.headers=function(a,b){var c,d,e,f,g,h,i,j,k;switch(null==b&&(b={}),typeof a){case"object":d=[];for(e in a)g=a[e],f=e.toLowerCase(),d.push(""+f+": "+g);return d.join("\n");case"string":for(d=a.split("\n"),i=0,j=d.length;j>i;i++)c=d[i],/([^:]+):\s*(.+)/.test(c)&&(f=null!=(k=RegExp.$1)?k.toLowerCase():void 0,h=RegExp.$2,null==b[f]&&(b[f]=h));return b}},i=a[h],o=function(a){var b;this.fd=a?new i(a):new i,this.form=a,b=[],Object.defineProperty(this,"entries",{get:function(){var c;return c=a?y(a.querySelectorAll("input,select")).filter(function(a){var b;return"checkbox"!==(b=a.type)&&"radio"!==b||a.checked}).map(function(a){return[a.name,"file"===a.type?a.files:a.value]}):[],c.concat(b)}}),this.append=function(a){return function(){var c;return c=y(arguments),b.push(c),a.fd.append.apply(a.fd,c)}}(this)},i&&(z[h]=i,a[h]=o),j=a[q],z[q]=j,p=a[q]=function(){var a,b,h,i,j,k,p,s,t,u,y,A,C,D,E,F,G,H,I,J,K;a=-1,H=new z[q],y={},D=null,p=void 0,E=void 0,A=void 0,u=function(){var b,c,d,e;if(A.status=D||H.status,D===a&&10>w||(A.statusText=H.statusText),D!==a){e=r(H.getAllResponseHeaders());for(b in e)d=e[b],A.headers[b]||(c=b.toLowerCase(),A.headers[c]=d)}},t=function(){H.responseType&&"text"!==H.responseType?"document"===H.responseType?(A.xml=H.responseXML,A.data=H.responseXML):A.data=H.response:(A.text=H.responseText,A.data=H.responseText),"responseURL"in H&&(A.finalUrl=H.responseURL)},G=function(){k.status=A.status,k.statusText=A.statusText},F=function(){"text"in A&&(k.responseText=A.text),"xml"in A&&(k.responseXML=A.xml),"data"in A&&(k.response=A.data),"finalUrl"in A&&(k.responseURL=A.finalUrl)},i=function(a){for(;a>b&&4>b;)k[m]=++b,1===b&&k[g]("loadstart",{}),2===b&&G(),4===b&&(G(),F()),k[g]("readystatechange",{}),4===b&&setTimeout(h,0)},h=function(){p||k[g]("load",{}),k[g]("loadend",{}),p&&(k[m]=0)},b=0,C=function(a){var b,d;return 4!==a?void i(a):(b=z.listeners(c),d=function(){var a;return b.length?(a=b.shift(),2===a.length?(a(y,A),d()):3===a.length&&y.async?a(y,A,d):d()):i(4)},void d())},k=y.xhr=f(),H.onreadystatechange=function(){try{2===H[m]&&u()}catch(a){}4===H[m]&&(E=!1,u(),t()),C(H[m])},s=function(){p=!0},k[l]("error",s),k[l]("timeout",s),k[l]("abort",s),k[l]("progress",function(){3>b?C(3):k[g]("readystatechange",{})}),("withCredentials"in H||z.addWithCredentials)&&(k.withCredentials=!1),k.status=0,K=e.concat(n);for(I=0,J=K.length;J>I;I++)j=K[I],k["on"+j]=null;return k.open=function(a,c,d,e,f){b=0,p=!1,E=!1,y.headers={},y.headerNames={},y.status=0,A={},A.headers={},y.method=a,y.url=c,y.async=d!==!1,y.user=e,y.pass=f,C(1)},k.send=function(a){var b,c,f,g,h,i,j,l;for(l=["type","timeout","withCredentials"],i=0,j=l.length;j>i;i++)c=l[i],f="type"===c?"responseType":c,f in k&&(y[c]=k[f]);y.body=a,h=function(){var a,b,d,g,h,i;for(x(e,H,k),k.upload&&x(e.concat(n),H.upload,k.upload),E=!0,H.open(y.method,y.url,y.async,y.user,y.pass),h=["type","timeout","withCredentials"],d=0,g=h.length;g>d;d++)c=h[d],f="type"===c?"responseType":c,c in y&&(H[f]=y[c]);i=y.headers;for(a in i)b=i[a],a&&H.setRequestHeader(a,b);y.body instanceof o&&(y.body=y.body.fd),H.send(y.body)},b=z.listeners(d),(g=function(){var a,c;return b.length?(a=function(a){return"object"!=typeof a||"number"!=typeof a.status&&"number"!=typeof A.status?void g():(v(a,A),B.call(a,"data")<0&&(a.data=a.response||a.text),void C(4))},a.head=function(a){return v(a,A),C(2)},a.progress=function(a){return v(a,A),C(3)},c=b.shift(),1===c.length?a(c(y)):2===c.length&&y.async?c(y,a):a()):h()})()},k.abort=function(){D=a,E?H.abort():k[g]("abort",{})},k.setRequestHeader=function(a,b){var c,d;c=null!=a?a.toLowerCase():void 0,d=y.headerNames[c]=y.headerNames[c]||a,y.headers[d]&&(b=y.headers[d]+", "+b),y.headers[d]=b},k.getResponseHeader=function(a){var b;return b=null!=a?a.toLowerCase():void 0,A.headers[b]},k.getAllResponseHeaders=function(){return r(A.headers)},H.overrideMimeType&&(k.overrideMimeType=function(){return H.overrideMimeType.apply(H,arguments)}),H.upload&&(k.upload=y.upload=f()),k},"function"==typeof define&&define.amd?define("xhook",[],function(){return z}):(this.exports||this).xhook=z}).call(this,a);var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O;s=!1,D=function(a){var b,c;s||q();for(b in a)c=a[b],x("adding slave: "+b),D[b]=c},m={},n=function(a,b){var c;return m[a]?m[a]:(c=j.createElement("iframe"),c.id=c.name=o(),x("creating iframe "+c.id),c.src=""+a+b,c.setAttribute("style","display:none;"),j.body.appendChild(c),m[a]=c.contentWindow)},q=function(){var a,b,c;return s=!0,b=function(a,b){var c,d,e,f,g;return e=a[0],f=a[1],c=u(f,"Blob"),d=u(f,"File"),c||d?(g=new FileReader,g.onload=function(){return a[1]=null,d&&(a[2]=f.name),b(["XD_BLOB",a,this.result,f.type])},g.readAsArrayBuffer(f),1):0},a=function(a,c){var d;a.forEach(function(b,c){var d,e,f,g,h;if(e=b[0],f=b[1],u(f,"FileList"))for(a.splice(c,1),g=0,h=f.length;h>g;g++)d=f[g],a.splice(c,0,[e,d])}),d=0,a.forEach(function(e,f){d+=b(e,function(b){a[f]=b,0===--d&&c()})}),0===d&&c()},c=function(b,c){var d,e,f;return c.on("xhr-event",function(){return b.xhr.dispatchEvent.apply(null,arguments)}),c.on("xhr-upload-event",function(){return b.xhr.upload.dispatchEvent.apply(null,arguments)}),e=H(b),e.headers=b.headers,b.withCredentials&&(g.master&&(e.headers[g.master]=j.cookie),e.slaveCookie=g.slave),f=function(){return c.emit("request",e)},b.body&&(e.body=b.body,u(e.body,"FormData"))?(d=e.body.entries,e.body=["XD_FD",d],void a(d,f)):void f()},"addWithCredentials"in L||(L.addWithCredentials=!0),L.before(function(a,b){var d,e,f;return e=B(a.url),e&&e.origin!==i?D[e.origin]?(x("proxying request to slave: '"+e.origin+"'"),a.async===!1?(J("sync not supported"),b()):(d=n(e.origin,D[e.origin]),f=h(o(),d),f.on("response",function(a){return b(a),f.close()}),a.xhr.addEventListener("abort",function(){return f.emit("abort")}),void(f.ready?c(a,f):f.once("ready",function(){return c(a,f)})))):(e&&x("no slave matching: '"+e.origin+"'"),b()):b()})},t=!1,z=function(a){var b,c;t||r();for(b in a)c=a[b],x("adding master: "+b),z[b]=c},p=null,r=function(){return t=!0,x("handling incoming sockets..."),p=function(a,b){var c,d,e,f;"null"===a&&(a="*"),e=null;for(c in z){f=z[c];try{if(d=I(c),d.test(a)){e=I(f);break}}catch(g){}}return e?(b.once("request",function(a){var c,d,f,g,h,i,k,l,m,n,o;if(x("request: "+a.method+" "+a.url),i=B(a.url),!i||!e.test(i.path))return J("blocked request to path: '"+i.path+"' by regex: "+e),void b.close();l=new XMLHttpRequest,l.open(a.method,a.url),l.addEventListener("*",function(a){return b.emit("xhr-event",a.type,H(a))}),l.upload&&l.upload.addEventListener("*",function(a){return b.emit("xhr-upload-event",a.type,H(a))}),b.once("abort",function(){return l.abort()}),l.onreadystatechange=function(){var a;if(4===l.readyState){a={status:l.status,statusText:l.statusText,data:l.response,headers:L.headers(l.getAllResponseHeaders())};try{a.text=l.responseText}catch(c){}return b.emit("response",a)}},a.withCredentials&&(l.withCredentials=!0,a.slaveCookie&&(a.headers[a.slaveCookie]=j.cookie)),a.timeout&&(l.timeout=a.timeout),a.type&&(l.responseType=a.type),o=a.headers;for(h in o)k=o[h],l.setRequestHeader(h,k);if(a.body instanceof Array&&"XD_FD"===a.body[0]){for(g=new L.FormData,f=a.body[1],m=0,n=f.length;n>m;m++)c=f[m],"XD_BLOB"===c[0]&&4===c.length&&(d=new Blob([c[2]],{type:c[3]}),c=c[1],c[1]=d),g.append.apply(g,c);a.body=g}l.send(a.body||null)}),void x("slave listening for requests on socket: "+b.id)):void J("blocked request from: '"+a+"'")},a===a.parent?J("slaves must be in an iframe"):a.parent.postMessage("XDPING_"+d,"*")},e="XD_CHECK",F={},v=!0,h=function(a,b){var d,f,g,h,i,j;return i=!1,j=F[a]=L.EventEmitter(!0),j.id=a,j.once("close",function(){return j.destroy(),j.close()}),h=[],j.emit=function(){var b,c;b=E(arguments),c="string"==typeof b[1]?" -> "+b[1]:"",x("send socket: "+a+": "+b[0]+c),b.unshift(a),i?g(b):h.push(b)},g=function(a){v&&(a=JSON.stringify(a)),b.postMessage(a,"*")},j.close=function(){j.emit("close"),x("close socket: "+a),F[a]=null},j.once(e,function(b){for(v="string"==typeof b,i=j.ready=!0,j.emit("ready"),x("ready socket: "+a+" (emit #"+h.length+" pending)");h.length;)g(h.shift())}),f=0,d=function(){return function(){b.postMessage([a,e,{}],"*"),i||(f++>=K.timeout/c?(J("Timeout waiting on iframe socket"),k.fire("timeout"),j.fire("abort")):setTimeout(d,c))}}(this),setTimeout(d),x("new socket: "+a),j},A=function(b){return j.addEventListener?a.addEventListener("message",b):a.attachEvent("onmessage",b)},G=function(){return A(function(a){var c,e,f,g;if(c=a.data,"string"==typeof c){if(/^XDPING(_(V\d+))?$/.test(c)&&RegExp.$2!==d)return J("your master is not compatible with your slave, check your xdomain.js version");if(/^xdomain-/.test(c))c=c.split(",");else if(v)try{c=JSON.parse(c)}catch(i){return}}if(c instanceof Array&&(f=c.shift(),/^xdomain-/.test(f)&&(g=F[f],null!==g))){if(g===b){if(!p)return;g=h(f,a.source),p(a.origin,g)}e="string"==typeof c[1]?" -> "+c[1]:"",x("receive socket: "+f+": "+c[0]+e),g.fire.apply(g,c)}})},L=(this.exports||this).xhook,K=function(a){a&&(a.masters&&z(a.masters),a.slaves&&D(a.slaves))},K.masters=z,K.slaves=D,K.debug=!1,K.timeout=15e3,c=100,g=K.cookies={master:"Master-Cookie",slave:"Slave-Cookie"},j=a.document,w=a.location,i=K.origin=w.protocol+"//"+w.host,o=function(){return"xdomain-"+Math.round(Math.random()*Math.pow(2,32)).toString(16)},E=function(a,b){return Array.prototype.slice.call(a,b)},f=a.console||{},k=null,C=function(){k=L.EventEmitter(!0),K.on=k.on,K.off=k.off},L&&C(),y=function(a){return function(b){b="xdomain ("+i+"): "+b,k.fire(a,b),("log"!==a||K.debug)&&(a in K?K[a](b):a in f?f[a](b):"warn"===a&&alert(b))}},x=y("log"),J=y("warn"),O=["postMessage","JSON"];for(M=0,N=O.length;N>M;M++)if(l=O[M],!a[l])return void J("requires '"+l+"' and this browser does not support it");u=function(b,c){return c in a?b instanceof a[c]:!1},d="V1",B=K.parseUrl=function(a){return/^((https?:)?\/\/[^\/\?]+)(\/.*)?/.test(a)?{origin:(RegExp.$2?"":w.protocol)+RegExp.$1,path:RegExp.$3}:(x("failed to parse absolute url: "+a),null)},I=function(a){var b;return a instanceof RegExp?a:(b=a.toString().replace(/\W/g,function(a){return"\\"+a}).replace(/\\\*/g,".*"),new RegExp("^"+b+"$"))},H=function(a){var b,c,d,e;b={};for(c in a)"returnValue"!==c&&(d=a[c],"function"!=(e=typeof d)&&"object"!==e&&(b[c]=d));return b},function(){var a,b,c,d,e,f,g,h,i,k,l;for(a={debug:function(a){return"string"==typeof a?K.debug="false"!==a:void 0},slave:function(a){var b,c;if(a&&(b=B(a)))return c={},c[b.origin]=b.path,D(c)},master:function(a){var b,c;if(a&&(c="*"===a?{origin:"*",path:"*"}:B(a)))return b={},b[c.origin]=c.path.replace(/^\//,"")?c.path:"*",z(b)}},k=j.getElementsByTagName("script"),f=0,h=k.length;h>f;f++)if(e=k[f],/xdomain/.test(e.src))for(l=["","data-"],g=0,i=l.length;i>g;g++){d=l[g];for(c in a)(b=a[c])(e.getAttribute(d+c))}}(),G(),"function"==typeof define&&define.amd?define("xdomain",["xhook"],function(a){return L=a,C(),K}):(this.exports||this).xdomain=K}).call(this,window);xdomain.slaves({"https://appwrite.test":"/v1/proxy?v=1&project="+APP_ENV.PROJECT,"https://appwrite.io":"/v1/proxy?v=1&project="+APP_ENV.PROJECT});(function(window){window.AppwriteSDK=function(){let config={domain:'https://appwrite.io',version:'v1',project:0,locale:'en',mode:'default'};let http=function(document){let globalParams=[],globalHeaders=[];let addParam=function(url,param,value){let a=document.createElement('a'),regex=/(?:\?|&amp;|&)+([^=]+)(?:=([^&]*))*/g;let match,str=[];a.href=url;param=encodeURIComponent(param);while(match=regex.exec(a.search))
if(param!==match[1])str.push(match[1]+(match[2]?"="+match[2]:""));str.push(param+(value?"="+encodeURIComponent(value):""));a.search=str.join("&");return a.href;};let request=function(method,url,headers,payload,progress){let i;http.addGlobalHeader('X-Appwrite-Project',config.project);http.addGlobalHeader('X-Appwrite-Locale',config.locale);http.addGlobalHeader('X-Appwrite-Mode',config.mode);if(-1===['GET','POST','PUT','DELETE','TRACE','HEAD','OPTIONS','CONNECT','PATCH'].indexOf(method)){throw new Error('let method must contain a valid HTTP method name');}
if(typeof url!=='string'){throw new Error('let url must be of type string');}
if(typeof headers!=='object'){throw new Error('let headers must be of type object');}
if(typeof url!=='string'){throw new Error('let url must be of type string');}
for(i=0;i<globalParams.length;i++){url=addParam(url,globalParams[i].key,globalParams[i].value);}
let xmlhttp=new XMLHttpRequest(),key;let promise=new Promise(function(resolve,reject){xmlhttp.open(method,url,true);xmlhttp.setRequestHeader('Ajax','1');for(key in globalHeaders){if(globalHeaders.hasOwnProperty(key)){xmlhttp.setRequestHeader(globalHeaders[key].key,globalHeaders[key].value);}}
for(key in headers){if(headers.hasOwnProperty(key)){xmlhttp.setRequestHeader(key,headers[key]);}}
xmlhttp.onload=function(){if(4===xmlhttp.readyState&&399>=xmlhttp.status){resolve(xmlhttp.response);}
else{reject(new Error(xmlhttp.statusText));}};if(progress){xmlhttp.addEventListener('progress',progress);xmlhttp.upload.addEventListener('progress',progress,false);}
xmlhttp.onerror=function(){reject(new Error("Network Error"));};xmlhttp.send(payload);});promise.abort=function(){xmlhttp.abort();};return promise;};return{'get':function(url){return request('GET',url,{},'')},'post':function(url,headers,payload,progress){return request('POST',url,headers,payload,progress)},'put':function(url,headers,payload){return request('PUT',url,headers,payload)},'patch':function(url,headers,payload){return request('PATCH',url,headers,payload)},'delete':function(url){return request('DELETE',url,{},'')},'addGlobalParam':function(key,value){globalParams.push({key:key,value:value});},'addGlobalHeader':function(key,value){globalHeaders[key]={key:key,value:value};},'version':'1.0.0'}}(window.document);let iframe=function(method,url,params){let form=document.createElement('form');form.setAttribute('method',method);form.setAttribute('action',url);for(let key in params){if(params.hasOwnProperty(key)){let hiddenField=document.createElement("input");hiddenField.setAttribute("type","hidden");hiddenField.setAttribute("name",key);hiddenField.setAttribute("value",params[key]);form.appendChild(hiddenField);}}
document.body.appendChild(form);return form.submit();};let auth={register:function(email,password,name,redirect,success,failure){return iframe('post',config.domain+'/'+config.version+'/auth/register',{project:config.project,'email':email,'password':password,'name':name,'redirect':redirect,success:success,failure:failure});},confirm:function(userId,token){return http.post(config.domain+'/'+config.version+'/auth/register/confirm',{'Content-type':'application/json'},JSON.stringify({'userId':userId,'token':token}));},confirmResend:function(redirect){return http.post(config.domain+'/'+config.version+'/auth/register/confirm/resend',{'Content-type':'application/json'},JSON.stringify({'redirect':redirect}));},login:function(email,password,success,failure){return iframe('post',config.domain+'/'+config.version+'/auth/login',{project:config.project,email:email,password:password,success:success,failure:failure});},invite:function(team,name,email,roles,redirect){return http.post(config.domain+'/'+config.version+'/auth/invite',{'Content-type':'application/json'},JSON.stringify({'team':team,'name':name,'email':email,'roles':roles,'redirect':redirect}));},inviteResend:function(inviteId,redirect){return http.post(config.domain+'/'+config.version+'/auth/invite/resend',{'Content-type':'application/json'},JSON.stringify({'inviteId':inviteId,'redirect':redirect}));},join:function(inviteId,userId,secret,success,failure){return iframe('post',config.domain+'/'+config.version+'/auth/join',{project:config.project,inviteId:inviteId,userId:userId,secret:secret,success:success,failure:failure});},leave:function(inviteId){return http.delete(config.domain+'/'+config.version+'/auth/leave/'+inviteId);},loginWithFacebook:function(success,failure){return config.domain+'/'+config.version+'/oauth/facebook?project='+config.project+'&success='+encodeURI(success)+'&failure='+encodeURI(failure);},loginWithGithub:function(success,failure){return config.domain+'/'+config.version+'/oauth/github?project='+config.project+'&success='+encodeURI(success)+'&failure='+encodeURI(failure);},loginWithTwitter:function(success,failure){return config.domain+'/'+config.version+'/oauth/twitter?project='+config.project+'&success='+encodeURI(success)+'&failure='+encodeURI(failure);},loginWithLinkedIn:function(success,failure){return config.domain+'/'+config.version+'/oauth/linkedin?project='+config.project+'&success='+encodeURI(success)+'&failure='+encodeURI(failure);},logout:function(){return http.delete(config.domain+'/'+config.version+'/auth/logout');},logoutById:function(userId){return http.delete(config.domain+'/'+config.version+'/auth/logout/'+userId);},recovery:function(email,redirect){return http.post(config.domain+'/'+config.version+'/auth/recovery',{'Content-type':'application/json'},JSON.stringify({'email':email,'redirect':redirect}));},recoveryReset:function(userId,token,passwordA,passwordB){return http.put(config.domain+'/'+config.version+'/auth/recovery/reset',{'Content-type':'application/json'},JSON.stringify({'userId':userId,'token':token,'password-a':passwordA,'password-b':passwordB}));}};let account={get:function(){return http.get(config.domain+'/'+config.version+'/account');},prefs:function(){return http.get(config.domain+'/'+config.version+'/account/prefs');},sessions:function(){return http.get(config.domain+'/'+config.version+'/account/sessions');},security:function(){return http.get(config.domain+'/'+config.version+'/account/security');},updateName:function(name){return http.patch(config.domain+'/'+config.version+'/account/name',{'Content-type':'application/json'},JSON.stringify({'name':name}));},updateEmail:function(email,password){return http.patch(config.domain+'/'+config.version+'/account/email',{'Content-type':'application/json'},JSON.stringify({'email':email,'password':password}));},updatePassword:function(password,oldPassword){return http.patch(config.domain+'/'+config.version+'/account/password',{'Content-type':'application/json'},JSON.stringify({'password':password,'old-password':oldPassword}));},updatePrefs:function(prefs){return http.patch(config.domain+'/'+config.version+'/account/prefs',{'Content-type':'application/json'},JSON.stringify({'prefs':prefs}));},deactivate:function(){return http.delete(config.domain+'/'+config.version+'/account');},};let users={list:function(search,limit,offset){return http.get(config.domain+'/'+config.version+'/users?search='+search+'&limit='+limit+'&offset='+offset);},get:function(userId){return http.get(config.domain+'/'+config.version+'/users/'+userId);},getPrefs:function(userId){return http.get(config.domain+'/'+config.version+'/users/'+userId+'/prefs');},getSessions:function(userId){return http.get(config.domain+'/'+config.version+'/users/'+userId+'/sessions');},getLogs:function(userId){return http.get(config.domain+'/'+config.version+'/users/'+userId+'/logs');},create:function(email,password,name){return http.post(config.domain+'/'+config.version+'/users',{'Content-type':'application/json'},JSON.stringify({email:email,password:password,name:name}));},updateStatus:function(userId,status){return http.patch(config.domain+'/'+config.version+'/users/'+userId+'/status',{'Content-type':'application/json'},JSON.stringify({'status':status}));},delete:function(userId){return http.delete(config.domain+'/'+config.version+'/teams/'+userId);},deleteSession:function(userId,sessionId){return http.delete(config.domain+'/'+config.version+'/users/'+userId+'/sessions/'+sessionId);},deleteSessions:function(userId){return http.delete(config.domain+'/'+config.version+'/users/'+userId+'/sessions');}};let teams={list:function(search,limit,offset){return http.get(config.domain+'/'+config.version+'/teams?search='+search+'&limit='+limit+'&offset='+offset);},get:function(teamId){return http.get(config.domain+'/'+config.version+'/teams/'+teamId);},getMembers:function(teamId){return http.get(config.domain+'/'+config.version+'/teams/'+teamId+'/members');},create:function(name,parent){return http.post(config.domain+'/'+config.version+'/teams',{'Content-type':'application/json'},JSON.stringify({name:name,parent:parent}));},update:function(teamId,name){return http.put(config.domain+'/'+config.version+'/teams/'+teamId,{'Content-type':'application/json'},JSON.stringify({'name':name}));},delete:function(teamId){return http.delete(config.domain+'/'+config.version+'/teams/'+teamId);}};let storage={getDownload:function(fileId){return config.domain+'/'+config.version+'/storage/files/'+fileId+'/download?project='+config.project;},getPreview:function(fileId,token,width,height){let params=[];if(token){params.push('token='+token);}
if(width){params.push('width='+width);}
if(height){params.push('height='+height);}
if(0<params.length){params.unshift('');}
return config.domain+'/'+config.version+'/storage/files/'+fileId+'/preview/?project='+config.project+params.join('&');},create:function(data,progress){if(!data instanceof FormData){throw new Error('Upload method is expecting a FormData payload');}
return http.post(config.domain+'/'+config.version+'/storage/files',{},data,progress);},files:{list:function(search,limit,offset,orderType){return http.get(config.domain+'/'+config.version+'/storage/files?search='+search+'&limit='+limit+'&offset='+offset+'&orderType='+orderType);},get:function(fileId){return http.get(config.domain+'/'+config.version+'/storage/files/'+fileId);},delete:function(fileId){return http.delete(config.domain+'/'+config.version+'/storage/files/'+fileId);}}};let database={getCollection:function(collection,query){return http.get(config.domain+'/'+config.version+'/database/'+collection+((query)?'?':'')+query);},getDocument:function(collection,document){return http.get(config.domain+'/'+config.version+'/database/'+collection+'/'+document);},createDocument:function(collection,data,parentDocument,parentProperty,parentPropertyType){return http.post(config.domain+'/'+config.version+'/database/'+collection,{'Content-type':'application/json'},JSON.stringify({parentDocument:parentDocument,parentProperty:parentProperty,parentPropertyType:parentPropertyType,data:data}));},patchDocument:function(collection,document,data){return http.patch(config.domain+'/'+config.version+'/database/'+collection+'/'+document,{'Content-type':'application/json'},JSON.stringify({data:data}));},deleteDocument:function(collection,document){return http.delete(config.domain+'/'+config.version+'/database/'+collection+'/'+document);}};let projects={list:function(){return http.get(config.domain+'/'+config.version+'/projects');},get:function(projectId){return http.get(config.domain+'/'+config.version+'/projects/'+projectId);},getProjectUsage:function(projectId){return http.get(config.domain+'/'+config.version+'/projects/'+projectId+'/usage');},create:function(name,teamId,description,logo,url,clients,legalName,legalCountry,legalState,legalCity,legalAddress,legalTaxId){return http.post(config.domain+'/'+config.version+'/projects',{'Content-type':'application/json'},JSON.stringify({name:name,teamId:teamId,description:description,logo:logo,url:url,clients:clients,legalName:legalName,legalCountry:legalCountry,legalState:legalState,legalCity:legalCity,legalAddress:legalAddress,legalTaxId:legalTaxId}));},update:function(projectId,name,description,logo,url,clients,legalName,legalCountry,legalState,legalCity,legalAddress,legalTaxId){return http.patch(config.domain+'/'+config.version+'/projects/'+projectId,{'Content-type':'application/json'},JSON.stringify({name:name,description:description,logo:logo,url:url,clients:clients,legalName:legalName,legalCountry:legalCountry,legalState:legalState,legalCity:legalCity,legalAddress:legalAddress,legalTaxId:legalTaxId}));},updateOauth:function(projectId,provider,appId,secret){return http.patch(config.domain+'/'+config.version+'/projects/'+projectId+'/oauth',{'Content-type':'application/json'},JSON.stringify({provider:provider,appId:appId,secret:secret}));},webhooks:{list:function(projectId){return http.get(config.domain+'/'+config.version+'/projects/'+projectId+'/webhooks');},get:function(projectId,webhookId){return http.get(config.domain+'/'+config.version+'/projects/'+projectId+'/webhooks/'+webhookId);},create:function(projectId,name,events,url,security,httpUser,httpPass){return http.post(config.domain+'/'+config.version+'/projects/'+projectId+'/webhooks',{'Content-type':'application/json'},JSON.stringify({name:name,events:events,url:url,security:security,httpUser:httpUser,httpPass:httpPass}));},update:function(projectId,webhookId,name,events,url,security,httpUser,httpPass){return http.put(config.domain+'/'+config.version+'/projects/'+projectId+'/webhooks/'+webhookId,{'Content-type':'application/json'},JSON.stringify({name:name,events:events,url:url,security:security,httpUser:httpUser,httpPass:httpPass}));},delete:function(projectId,webhookId){return http.delete(config.domain+'/'+config.version+'/projects/'+projectId+'/webhooks/'+webhookId);}},tasks:{list:function(projectId){return http.get(config.domain+'/'+config.version+'/projects/'+projectId+'/tasks');},get:function(projectId,taskId){return http.get(config.domain+'/'+config.version+'/projects/'+projectId+'/tasks/'+taskId);},create:function(projectId,name,status,schedule,security,httpMethod,httpUrl,httpHeaders,httpUser,httpPass){return http.post(config.domain+'/'+config.version+'/projects/'+projectId+'/tasks',{'Content-type':'application/json'},JSON.stringify({name:name,status:status,schedule:schedule,security:security,httpMethod:httpMethod,httpUrl:httpUrl,httpHeaders:httpHeaders,httpUser:httpUser,httpPass:httpPass}));},update:function(projectId,taskId,name,status,schedule,security,httpMethod,httpUrl,httpHeaders,httpUser,httpPass){return http.put(config.domain+'/'+config.version+'/projects/'+projectId+'/tasks/'+taskId,{'Content-type':'application/json'},JSON.stringify({name:name,status:status,security:security,schedule:schedule,httpMethod:httpMethod,httpUrl:httpUrl,httpHeaders:httpHeaders,httpUser:httpUser,httpPass:httpPass}));},delete:function(projectId,taskId){return http.delete(config.domain+'/'+config.version+'/projects/'+projectId+'/tasks/'+taskId);}},keys:{list:function(projectId){return http.get(config.domain+'/'+config.version+'/projects/'+projectId+'/keys');},get:function(projectId,keyId){return http.get(config.domain+'/'+config.version+'/projects/'+projectId+'/keys/'+keyId);},create:function(projectId,name,scopes){return http.post(config.domain+'/'+config.version+'/projects/'+projectId+'/keys',{'Content-type':'application/json'},JSON.stringify({name:name,scopes:scopes}));},update:function(projectId,keyId,name,scopes){return http.put(config.domain+'/'+config.version+'/projects/'+projectId+'/keys/'+keyId,{'Content-type':'application/json'},JSON.stringify({name:name,scopes:scopes}));},delete:function(projectId,keyId){return http.delete(config.domain+'/'+config.version+'/projects/'+projectId+'/keys/'+keyId);}},platforms:{list:function(projectId){return http.get(config.domain+'/'+config.version+'/projects/'+projectId+'/platforms');},get:function(projectId,platformId){return http.get(config.domain+'/'+config.version+'/projects/'+projectId+'/platforms/'+platformId);},create:function(projectId,type,name,key,store,domains){return http.post(config.domain+'/'+config.version+'/projects/'+projectId+'/platforms',{'Content-type':'application/json'},JSON.stringify({type:type,name:name,key:key,store:store,domains:domains}));},update:function(projectId,platformId,name,key,store,domains){return http.put(config.domain+'/'+config.version+'/projects/'+projectId+'/platforms/'+platformId,{'Content-type':'application/json'},JSON.stringify({name:name,key:key,store:store,domains:domains}));},delete:function(projectId,platformId){return http.delete(config.domain+'/'+config.version+'/projects/'+projectId+'/platforms/'+platformId);}}};let billing={currencies:{list:function(){return http.get(config.domain+'/'+config.version+'/billing/currencies');},},vaults:{list:function(){return http.get(config.domain+'/'+config.version+'/billing/vaults');},get:function(vaultId){return http.get(config.domain+'/'+config.version+'/billing/vaults/'+vaultId);},getToken:function(){return http.get(config.domain+'/'+config.version+'/billing/vaults/token');},create:function(token,number,type,expireMonth,expireYear,cvv2,firstName,lastName,addressLine1,addressCity,addressCountryCode,addressPostalCode,addressState,addressPhone){return http.post(config.domain+'/'+config.version+'/billing/vaults',{'Content-type':'application/json'},JSON.stringify({'token':token,'number':number,'type':type,'expire-month':expireMonth,'expire-year':expireYear,'cvv2':cvv2,'first-name':firstName,'last-name':lastName,'address-line1':addressLine1,'address-city':addressCity,'address-country-code':addressCountryCode,'address-postal-code':addressPostalCode,'address-state':addressState,'address-phone':addressPhone}));},delete:function(vaultId){return http.delete(config.domain+'/'+config.version+'/billing/vaults/'+vaultId);}},plans:{list:function(){return http.get(config.domain+'/'+config.version+'/billing/plans');},get:function(planId){return http.get(config.domain+'/'+config.version+'/billing/plans/'+planId);},create:function(name,description,amount,currency,frequency,interval){return http.post(config.domain+'/'+config.version+'/billing/plans',{'Content-type':'application/json'},JSON.stringify({'name':name,'description':description,'amount':amount,'currency':currency,'frequency':frequency,'interval':interval}));},delete:function(planId){return http.delete(config.domain+'/'+config.version+'/billing/plans/'+planId);}},subscriptions:{list:function(){return http.get(config.domain+'/'+config.version+'/billing/subscriptions');},get:function(subscriptionId){return http.get(config.domain+'/'+config.version+'/billing/subscriptions/'+subscriptionId);},create:function(resource,plan,vault,team){return http.post(config.domain+'/'+config.version+'/billing/subscriptions',{'Content-type':'application/json'},JSON.stringify({'resource':resource,'plan':plan,'vault':vault,'team':team}));},update:function(subscriptionId,plan,vault){return http.put(config.domain+'/'+config.version+'/billing/subscriptions/'+subscriptionId,{'Content-type':'application/json'},JSON.stringify({'plan':plan,'vault':vault}));},delete:function(subscriptionId){return http.delete(config.domain+'/'+config.version+'/billing/subscriptions/'+subscriptionId);}},invoices:{list:function(){return http.get(config.domain+'/'+config.version+'/billing/invoices');},get:function(id){return http.get(config.domain+'/'+config.version+'/billing/invoices/'+id);},getForPrint:function(invoiceId){return config.domain+'/'+config.version+'/billing/invoices/'+invoiceId+'/print?project='+config.project;},getForDownload:function(invoiceId){return config.domain+'/'+config.version+'/billing/invoices/'+invoiceId+'/print?download=1&project='+config.project;}}};let geo={get:function(){return http.get(config.domain+'/'+config.version+'/locale');},countries:{list:function(){return http.get(config.domain+'/'+config.version+'/locale/countries');},eu:function(){return http.get(config.domain+'/'+config.version+'/locale/countries/eu');},phones:function(){return http.get(config.domain+'/'+config.version+'/locale/countries/phones');}}};return{config:config,users:users,auth:auth,account:account,database:database,storage:storage,teams:teams,projects:projects,billing:billing,geo:geo};};})(window);window.ls.error=function(){return function(error){alert(error);console.error('ERROR-APP',error);}};window.addEventListener('error',function(event){alert(event.error.message);console.error('ERROR-EVENT:',event.error.message,event.error.stack);});document.addEventListener('logout',function(){if(window.ls.router.getCurrent().view.scope==='console'){state.change('/auth/signin');}});document.addEventListener('http-get-401',function(){document.dispatchEvent(new CustomEvent('logout'));},true);(function(window){"use strict";window.ls.container.set('alerts',function(window){let service={};let counter=0;let event=new CustomEvent('alerted',{bubbles:false,cancelable:true});service.list=[];service.remove=function(id){let message=this.get(id);if(message&&message.remove&&typeof message.remove==='function'){message.remove();}
this.list=this.list.filter(function(obj){return obj.id!==parseInt(id);});window.document.dispatchEvent(event);};service.get=function(id){id=parseInt(id);let result=this.list.filter(function(obj){return obj.id===id;});if(result[0]){return result[0];}
return null;};service.send=function(message,time){let scope=this;message.id=counter++;scope.list.unshift(message);window.document.dispatchEvent(event);if(time>0){window.setTimeout(function(message){return function(){scope.remove(message.id)}}(message),time);}
return message.id;};return service;},true);})(window);(function(window){"use strict";window.ls.container.set('console',function(window){var sdk=new window.AppwriteSDK();sdk.config.domain='https://appwrite.io';sdk.config.domain=APP_ENV.API;sdk.config.project=0;sdk.config.locale=APP_ENV.LOCALE;return sdk;},true);})(window);(function(window){"use strict";window.ls.container.set('date',function(){function format(format,timestamp){var jsdate,f
var txtWords=['Sun','Mon','Tues','Wednes','Thurs','Fri','Satur','January','February','March','April','May','June','July','August','September','October','November','December']
var formatChr=/\\?(.?)/gi
var formatChrCb=function(t,s){return f[t]?f[t]():s}
var _pad=function(n,c){n=String(n)
while(n.length<c){n='0'+n}
return n}
f={d:function(){return _pad(f.j(),2)},D:function(){return f.l().slice(0,3)},j:function(){return jsdate.getDate()},l:function(){return txtWords[f.w()]+'day'},N:function(){return f.w()||7},S:function(){var j=f.j()
var i=j%10
if(i<=3&&parseInt((j%100)/10,10)===1){i=0}
return['st','nd','rd'][i-1]||'th'},w:function(){return jsdate.getDay()},z:function(){var a=new Date(f.Y(),f.n()-1,f.j())
var b=new Date(f.Y(),0,1)
return Math.round((a-b)/864e5)},W:function(){var a=new Date(f.Y(),f.n()-1,f.j()-f.N()+3)
var b=new Date(a.getFullYear(),0,4)
return _pad(1+Math.round((a-b)/864e5/7),2)},F:function(){return txtWords[6+f.n()]},m:function(){return _pad(f.n(),2)},M:function(){return f.F().slice(0,3)},n:function(){return jsdate.getMonth()+1},t:function(){return(new Date(f.Y(),f.n(),0)).getDate()},L:function(){var j=f.Y()
return j%4===0&j%100!==0|j%400===0},o:function(){var n=f.n()
var W=f.W()
var Y=f.Y()
return Y+(n===12&&W<9?1:n===1&&W>9?-1:0)},Y:function(){return jsdate.getFullYear()},y:function(){return f.Y().toString().slice(-2)},a:function(){return jsdate.getHours()>11?'pm':'am'},A:function(){return f.a().toUpperCase()},B:function(){var H=jsdate.getUTCHours()*36e2
var i=jsdate.getUTCMinutes()*60
var s=jsdate.getUTCSeconds()
return _pad(Math.floor((H+i+s+36e2)/86.4)%1e3,3)},g:function(){return f.G()%12||12},G:function(){return jsdate.getHours()},h:function(){return _pad(f.g(),2)},H:function(){return _pad(f.G(),2)},i:function(){return _pad(jsdate.getMinutes(),2)},s:function(){return _pad(jsdate.getSeconds(),2)},u:function(){return _pad(jsdate.getMilliseconds()*1000,6)},e:function(){var msg='Not supported (see source code of date() for timezone on how to add support)'
throw new Error(msg)},I:function(){var a=new Date(f.Y(),0)
var c=Date.UTC(f.Y(),0)
var b=new Date(f.Y(),6)
var d=Date.UTC(f.Y(),6)
return((a-c)!==(b-d))?1:0},O:function(){var tzo=jsdate.getTimezoneOffset()
var a=Math.abs(tzo)
return(tzo>0?'-':'+')+_pad(Math.floor(a/60)*100+a%60,4)},P:function(){var O=f.O()
return(O.substr(0,3)+':'+O.substr(3,2))},T:function(){return'UTC'},Z:function(){return-jsdate.getTimezoneOffset()*60},c:function(){return'Y-m-d\\TH:i:sP'.replace(formatChr,formatChrCb)},r:function(){return'D, d M Y H:i:s O'.replace(formatChr,formatChrCb)},U:function(){return jsdate/1000|0}}
var _date=function(format,timestamp){jsdate=(timestamp===undefined?new Date():(timestamp instanceof Date)?new Date(timestamp):new Date(timestamp*1000))
return format.replace(formatChr,formatChrCb)}
return _date(format,timestamp)}
function strtotime(text,now){var parsed
var match
var today
var year
var date
var days
var ranges
var len
var times
var regex
var i
var fail=false
if(!text){return fail}
text=text.replace(/^\s+|\s+$/g,'').replace(/\s{2,}/g,' ').replace(/[\t\r\n]/g,'').toLowerCase()
var pattern=new RegExp(['^(\\d{1,4})','([\\-\\.\\/:])','(\\d{1,2})','([\\-\\.\\/:])','(\\d{1,4})','(?:\\s(\\d{1,2}):(\\d{2})?:?(\\d{2})?)?','(?:\\s([A-Z]+)?)?$'].join(''))
match=text.match(pattern)
if(match&&match[2]===match[4]){if(match[1]>1901){switch(match[2]){case'-':if(match[3]>12||match[5]>31){return fail}
return new Date(match[1],parseInt(match[3],10)-1,match[5],match[6]||0,match[7]||0,match[8]||0,match[9]||0)/1000
case'.':return fail
case'/':if(match[3]>12||match[5]>31){return fail}
return new Date(match[1],parseInt(match[3],10)-1,match[5],match[6]||0,match[7]||0,match[8]||0,match[9]||0)/1000}}else if(match[5]>1901){switch(match[2]){case'-':if(match[3]>12||match[1]>31){return fail}
return new Date(match[5],parseInt(match[3],10)-1,match[1],match[6]||0,match[7]||0,match[8]||0,match[9]||0)/1000
case'.':if(match[3]>12||match[1]>31){return fail}
return new Date(match[5],parseInt(match[3],10)-1,match[1],match[6]||0,match[7]||0,match[8]||0,match[9]||0)/1000
case'/':if(match[1]>12||match[3]>31){return fail}
return new Date(match[5],parseInt(match[1],10)-1,match[3],match[6]||0,match[7]||0,match[8]||0,match[9]||0)/1000}}else{switch(match[2]){case'-':if(match[3]>12||match[5]>31||(match[1]<70&&match[1]>38)){return fail}
year=match[1]>=0&&match[1]<=38?+match[1]+2000:match[1]
return new Date(year,parseInt(match[3],10)-1,match[5],match[6]||0,match[7]||0,match[8]||0,match[9]||0)/1000
case'.':if(match[5]>=70){if(match[3]>12||match[1]>31){return fail}
return new Date(match[5],parseInt(match[3],10)-1,match[1],match[6]||0,match[7]||0,match[8]||0,match[9]||0)/1000}
if(match[5]<60&&!match[6]){if(match[1]>23||match[3]>59){return fail}
today=new Date()
return new Date(today.getFullYear(),today.getMonth(),today.getDate(),match[1]||0,match[3]||0,match[5]||0,match[9]||0)/1000}
return fail
case'/':if(match[1]>12||match[3]>31||(match[5]<70&&match[5]>38)){return fail}
year=match[5]>=0&&match[5]<=38?+match[5]+2000:match[5]
return new Date(year,parseInt(match[1],10)-1,match[3],match[6]||0,match[7]||0,match[8]||0,match[9]||0)/1000
case':':if(match[1]>23||match[3]>59||match[5]>59){return fail}
today=new Date()
return new Date(today.getFullYear(),today.getMonth(),today.getDate(),match[1]||0,match[3]||0,match[5]||0)/1000}}}
if(text==='now'){return now===null||isNaN(now)?new Date().getTime()/1000|0:now|0}
if(!isNaN(parsed=Date.parse(text))){return parsed/1000|0}
pattern=new RegExp(['^([0-9]{4}-[0-9]{2}-[0-9]{2})','[ t]','([0-9]{2}:[0-9]{2}:[0-9]{2}(\\.[0-9]+)?)','([\\+-][0-9]{2}(:[0-9]{2})?|z)'].join(''))
match=text.match(pattern)
if(match){if(match[4]==='z'){match[4]='Z'}else if(match[4].match(/^([+-][0-9]{2})$/)){match[4]=match[4]+':00'}
if(!isNaN(parsed=Date.parse(match[1]+'T'+match[2]+match[4]))){return parsed/1000|0}}
date=now?new Date(now*1000):new Date()
days={'sun':0,'mon':1,'tue':2,'wed':3,'thu':4,'fri':5,'sat':6}
ranges={'yea':'FullYear','mon':'Month','day':'Date','hou':'Hours','min':'Minutes','sec':'Seconds'}
function lastNext(type,range,modifier){var diff
var day=days[range]
if(typeof day!=='undefined'){diff=day-date.getDay()
if(diff===0){diff=7*modifier}else if(diff>0&&type==='last'){diff-=7}else if(diff<0&&type==='next'){diff+=7}
date.setDate(date.getDate()+diff)}}
function process(val){var splt=val.split(' ')
var type=splt[0]
var range=splt[1].substring(0,3)
var typeIsNumber=/\d+/.test(type)
var ago=splt[2]==='ago'
var num=(type==='last'?-1:1)*(ago?-1:1)
if(typeIsNumber){num*=parseInt(type,10)}
if(ranges.hasOwnProperty(range)&&!splt[1].match(/^mon(day|\.)?$/i)){return date['set'+ranges[range]](date['get'+ranges[range]]()+num)}
if(range==='wee'){return date.setDate(date.getDate()+(num*7))}
if(type==='next'||type==='last'){lastNext(type,range,num)}else if(!typeIsNumber){return false}
return true}
times='(years?|months?|weeks?|days?|hours?|minutes?|min|seconds?|sec'+'|sunday|sun\\.?|monday|mon\\.?|tuesday|tue\\.?|wednesday|wed\\.?'+'|thursday|thu\\.?|friday|fri\\.?|saturday|sat\\.?)'
regex='([+-]?\\d+\\s'+times+'|'+'(last|next)\\s'+times+')(\\sago)?'
match=text.match(new RegExp(regex,'gi'))
if(!match){return fail}
for(i=0,len=match.length;i<len;i++){if(!process(match[i])){return fail}}
return(date.getTime()/1000)}
return{format:format,strtotime:strtotime}}(),true);})(window);(function(window){"use strict";window.ls.container.set('di',function(){var list={'load':true};return{listen:function(event,callback){if(list[event]){callback();}
document.addEventListener(event,callback);},report:function(event){list[event]=true;},check:function(event){return(list[event]);},reset:function(){list={'load':true};},list:list};},true);})(window);(function(window){"use strict";window.ls.container.set('env',function(){return APP_ENV;},true);})(window);(function(window){"use strict";window.ls.container.set('markdown',function(window){var md=window.markdownit();function renderEm(tokens,idx,opts,_,slf){var token=tokens[idx];if(token.markup==='__'){token.tag='u';}
return slf.renderToken(tokens,idx,opts);}
md.renderer.rules.strong_open=renderEm;md.renderer.rules.strong_close=renderEm;return md;},true);})(window);(function(window){"use strict";window.ls.container.set('sdk',function(window,router){var sdk=new window.AppwriteSDK();sdk.config.domain=APP_ENV.API;sdk.config.project=router.params.project||null;sdk.config.locale=APP_ENV.LOCALE;sdk.config.mode='admin';return sdk;},false);})(window);(function(window){"use strict";window.ls.container.set('timezone',function(){return{convert:function(unixTime){var timezoneMinutes=new Date().getTimezoneOffset();timezoneMinutes=(timezoneMinutes===0)?0:-timezoneMinutes;return parseInt(unixTime)+(timezoneMinutes*60);}};},true);})(window);window.ls.router.add('/auth/signin',{template:'/auth/signin',scope:'home'}).add('/auth/signup',{template:'/auth/signup',scope:'home'}).add('/auth/recovery',{template:'/auth/recovery',scope:'home'}).add('/auth/recovery/reset',{template:'/auth/recovery/reset',scope:'home'}).add('/auth/confirm',{template:'/auth/confirm',scope:'home'}).add('/auth/join',{template:'/auth/join',scope:'home'}).add('/console',{template:'/console',scope:'console'}).add('/console/account',{template:'/console/account',scope:'console'}).add('/console/account/:tab',{template:'/console/account',scope:'console'}).add('/console/home',{template:'/console/home',scope:'console',project:true}).add('/console/home/:tab',{template:'/console/home',scope:'console',project:true}).add('/console/platforms/:platform',{template:function(window){return window.location.pathname;},scope:'console',project:true}).add('/console/notifications',{template:'/console/notifications',scope:'console'}).add('/console/settings',{template:'/console/settings',scope:'console',project:true}).add('/console/settings/:tab',{template:'/console/settings',scope:'console',project:true}).add('/console/database',{template:'/console/database',scope:'console',project:true}).add('/console/database/:tab',{template:'/console/database',scope:'console',project:true}).add('/console/storage',{template:'/console/storage',scope:'console',project:true}).add('/console/storage/:tab',{template:'/console/storage',scope:'console',project:true}).add('/console/users',{template:'/console/users',scope:'console',project:true}).add('/console/users/view',{template:'/console/users/view',scope:'console',project:true}).add('/console/users/view/:tab',{template:'/console/users/view',scope:'console',project:true}).add('/console/users/:tab',{template:'/console/users',scope:'console',project:true});let date=window.ls.container.get('date');let timezone=window.ls.container.get('timezone');let markdown=window.ls.container.get('markdown');window.ls.filter.add('lowerCase',function(value){return value.toLowerCase();}).add('date',function(value,options){return date.format('Y-m-d',value);}).add('date-time',function(value,options){return date.format('Y-m-d H:i',value);}).add('date-text',function(value,options){return date.format('d M Y',value);}).add('date-long',function(value,options){return date.format('l, j F, H:i',value);}).add('min2hum',function(value,options){if(value>=60){if(value%60===0){return Math.ceil(value/60)+' hours';}
else{return Math.ceil(value/60)+' hours and '+(value%60)+' minutes';}}
return value+' minutes';}).add('ms2hum',function(value,options){let temp=value;const years=Math.floor(temp/31536000),days=Math.floor((temp%=31536000)/86400),hours=Math.floor((temp%=86400)/3600),minutes=Math.floor((temp%=3600)/60),seconds=temp%60;if(days||hours||seconds||minutes){return(years?years+"y ":"")+
(days?days+"d ":"")+
(hours?hours+"h ":"")+
(minutes?minutes+"m ":"")+
Number.parseFloat(seconds).toFixed(0)+"s";}
return"< 1s";}).add('nl2p',function(value,options){let result="<p>"+value+"</p>";result=result.replace(/\r\n\r\n/g,"</p><p>").replace(/\n\n/g,"</p><p>");result=result.replace(/\r\n/g,"<br />").replace(/\n/g,"<br />");return result;}).add('markdown',function(value,options){return markdown.render(value);}).add('id2name',function(value,options){let members=container.get('members');if(members===null){return'';}
for(let y=0;y<members.length;y++){if(members[y]['$uid']===value){value=members[y].name;}}
return value;}).add('id2role',function(value,options){if(APP_ENV.ROLES[value]){return APP_ENV.ROLES[value];}
return'';}).add('humanFileSize',function(bytes){if(!bytes){return 0;}
let thresh=1000;if(Math.abs(bytes)<thresh){return bytes+' B';}
let units=['kB','MB','GB','TB','PB','EB','ZB','YB'];let u=-1;do{bytes/=thresh;++u;}while(Math.abs(bytes)>=thresh&&u<units.length-1);return bytes.toFixed(1)+'<span class="text-size-small unit">'+units[u]+'</span>';}).add('statsTotal',function(value){if(!value){return 0;}
value=abbreviate(value,1,false,false);return(value==='0')?'N/A':value;});function abbreviate(number,maxPlaces,forcePlaces,forceLetter){number=Number(number);forceLetter=forceLetter||false;if(forceLetter!==false){return annotate(number,maxPlaces,forcePlaces,forceLetter);}
let abbr;if(number>=1e12){abbr='T';}
else if(number>=1e9){abbr='B';}
else if(number>=1e6){abbr='M';}
else if(number>=1e3){abbr='K';}
else{abbr='';}
return annotate(number,maxPlaces,forcePlaces,abbr);}
function annotate(number,maxPlaces,forcePlaces,abbr){let rounded=0;switch(abbr){case'T':rounded=number/1e12;break;case'B':rounded=number/1e9;break;case'M':rounded=number/1e6;break;case'K':rounded=number/1e3;break;case'':rounded=number;break}
if(maxPlaces!==false){let test=new RegExp('\\.\\d{'+(maxPlaces+1)+',}$')
if(test.test((''+rounded))){rounded=rounded.toFixed(maxPlaces)}}
if(forcePlaces!==false){rounded=Number(rounded).toFixed(forcePlaces)}
return rounded+abbr}
window.ls.container.get('view').add({selector:'data-acl',controller:function(element,document,router,alerts){document.body.classList.remove('console');document.body.classList.remove('home');document.body.classList.add(router.getCurrent().view.scope);if(!router.getCurrent().view.project){document.body.classList.add('hide-nav');document.body.classList.remove('show-nav');}
else{document.body.classList.add('show-nav');document.body.classList.remove('hide-nav');}
if('/console'===router.getCurrent().path){document.body.classList.add('index');}
else{document.body.classList.remove('index');}}}).add({selector:'data-cookie-policy',repeat:false,controller:function(element,alerts,cookie){if(!cookie.get('cp-cookie-alert')){let text=element.dataset['cookiePolicy']||'';alerts.send({text:text,class:'cookie-alert',link:'/policy/cookies',remove:function(){cookie.set('cp-cookie-alert','true',365*10);}},0);}}}).add({selector:'data-login-fb',controller:function(element,console,expression){let success=expression.parse(element.dataset['success']||'');let failure=expression.parse(element.dataset['failure']||'');element.href=console.auth.loginWithFacebook(success,failure);}}).add({selector:'data-login-linkedin',controller:function(element,console,expression){let success=expression.parse(element.dataset['success']||'');let failure=expression.parse(element.dataset['failure']||'');element.href=console.auth.loginWithLinkedIn(success,failure);}}).add({selector:'data-login-github',controller:function(element,console,expression){let success=expression.parse(element.dataset['success']||'');let failure=expression.parse(element.dataset['failure']||'');element.href=console.auth.loginWithGithub(success,failure);}}).add({selector:'data-billing-invoice-print',controller:function(element,expression,sdk){let id=expression.parse(element.dataset['billingInvoicePrint']||'');element.href=sdk.billing.invoices.getForPrint(id);}}).add({selector:'data-billing-invoice-download',controller:function(element,expression,sdk){let id=expression.parse(element.dataset['billingInvoiceDownload']||'');element.href=sdk.billing.invoices.getForDownload(id);}}).add({selector:'data-auto-cc-master',controller:function(element,expression,document){let price=parseInt(expression.parse(element.dataset['autoCcMaster']||'0'));let check=function(){if(element.checked&&0===price){document.body.classList.add('free-plan');document.dispatchEvent(new CustomEvent('set-free-plan',{bubbles:false,cancelable:true}));}
else if(element.checked){document.body.classList.remove('free-plan');document.dispatchEvent(new CustomEvent('unset-free-plan',{bubbles:false,cancelable:true}));}};element.addEventListener('change',check);check();}}).add({selector:'data-auto-cc-slave',controller:function(element){document.addEventListener('set-free-plan',function(){element.checked=true;});document.addEventListener('unset-free-plan',function(){element.checked=false;});}}).add({selector:'data-ls-ui-alerts',controller:function(element,window,view){window.document.addEventListener('alerted',function(){view.render(element);},true);}}).add({selector:'data-ls-ui-alerts-delete',controller:function(document,element,alerts,expression){let message=expression.parse(element.dataset['message']);let remove=function(){alerts.remove(message);};element.addEventListener('click',remove);}}).add({selector:'data-ls-ui-chart-line',repeat:true,controller:function(element,document,expression){new Chartist.Line(element,{labels:['16.05','17.05','18.05','19.05','20.05'],series:[[12,9,7,8,5],[2,1,3.5,7,3],[1,3,4,5,6],[2,6,10,5,9],[3,1,1,8,3]]},{height:'300px',width:'100%',fullWidth:true,showArea:true,chartPadding:{right:30}});}}).add({selector:'data-ls-ui-chart-pie',repeat:true,controller:function(element,document,expression){new Chartist.Pie(element,{series:[20,10,30,40]},{donut:true,donutSolid:true,showLabel:true});}}).add({selector:'data-forms-headers',repeat:false,controller:function(element){let key=document.createElement('input');let value=document.createElement('input');let wrap=document.createElement('div');let cell1=document.createElement('div');let cell2=document.createElement('div');key.type='text';key.className='margin-bottom-no';key.placeholder='Key';value.type='text';value.className='margin-bottom-no';value.placeholder='Value';wrap.className='row thin margin-bottom-small';cell1.className='col span-6';cell2.className='col span-6';element.parentNode.insertBefore(wrap,element);cell1.appendChild(key);cell2.appendChild(value);wrap.appendChild(cell1);wrap.appendChild(cell2);key.addEventListener('input',function(){syncA();});value.addEventListener('input',function(){syncA();});element.addEventListener('change',function(){syncB();});let syncA=function(){element.value=key.value.toLowerCase()+':'+value.value.toLowerCase();};let syncB=function(){let split=element.value.toLowerCase().split(':');key.value=split[0]||'';value.value=split[1]||'';key.value=key.value.trim();value.value=value.value.trim();};syncB();}}).add({selector:'data-prism',repeat:false,controller:function(window,document,element,alerts){Prism.highlightElement(element);let copy=document.createElement('i');copy.className='icon-docs copy';copy.title='Copy to Clipboard';copy.addEventListener('click',function(){window.getSelection().removeAllRanges();let range=document.createRange();range.selectNode(element);window.getSelection().addRange(range);try{document.execCommand('copy');alerts.send({text:'Copied to clipboard',class:''},3000);}catch(err){alerts.send({text:"Failed to copy text ",class:'error'},3000);}
window.getSelection().removeAllRanges();});element.parentNode.parentNode.appendChild(copy);}}).add({selector:'data-code-example',repeat:false,controller:function(window,document,element,cookie){let prefix=element.dataset['codeExample']||'unknown';element.addEventListener('change',function(){select(element.value);});let select=function(value){for(let i=0;i<element.length;i++){document.body.classList.remove(prefix+'-'+element.options[i].value);}
document.body.classList.add(prefix+'-'+value);cookie.set('language-'+prefix,value,365);document.dispatchEvent(new CustomEvent('updated-language-'+prefix));};document.addEventListener('updated-language-'+prefix,function(){element.value=cookie.get('language-'+prefix);});let def=cookie.get('language-'+prefix)||element.options[0].value;select(def);element.value=def;}}).add({selector:'data-ls-ui-chart',repeat:false,controller:function(element,container,date,document){let child=document.createElement('canvas');child.width=500;child.height=175;let stats=container.get('usage');if(!stats||!stats['requests']||!stats['requests']['data']){return;}
let config={type:'line',data:{labels:[],datasets:[{label:'Requests',backgroundColor:'rgba(230, 248, 253, 0.3)',borderColor:'#29b5d9',borderWidth:2,data:[0,0,0,0,0,0,0],fill:true}]},options:{responsive:true,title:{display:false,text:'Stats'},legend:{display:false},tooltips:{mode:'index',intersect:false,caretPadding:0},hover:{mode:'nearest',intersect:true},scales:{xAxes:[{display:false}],yAxes:[{display:false,}]}}};for(let i=0;i<stats['requests']['data'].length;i++){config.data.datasets[0].data[i]=stats['requests']['data'][i].value;config.data.labels[i]=date.format('d F Y',stats['requests']['data'][i].date);}
let chart=container.get('chart');if(chart){}
element.innerHTML='';element.appendChild(child);container.set('chart',new Chart(child.getContext('2d'),config),true);element.dataset['canvas']=true;}});(function(window){"use strict";window.ls.container.get('view').add({selector:'data-appwrite',repeat:true,controller:function(element,view,container,form,alerts,expression,window,di,state){let action=element.dataset['appwrite'];let singleton=element.dataset['singleton'];let loaded=element.dataset['loaded'];let service=element.dataset['service']||action;let event=element.dataset['event'];let success=element.dataset['success']||'';let error=element.dataset['error']||'';let confirm=element.dataset['confirm']||'';let loading=element.dataset['loading']||'';let loaderId=null;let scope=element.dataset['scope']||'sdk';let debug=!!(element.dataset['debug']);if(debug)console.log('%c[service init]: '+action+' ('+service+')','color:red');if(loaded){return true;}
success=success.trim().split(',');error=error.trim().split(',');let resolve=function(target){let FN_ARGS=/^function\s*[^\(]*\(\s*([^\)]*)\)/m;let text=target.toString();let args=text.match(FN_ARGS)[1].split(',');let data=('FORM'===element.tagName)?form.toJson(element):{};if(debug)console.log('%c[form data]: ','color:green',data);return target.apply(target,args.map(function(value){let result=null;if(!value){return null;}
if(element.dataset['param'+value.charAt(0).toUpperCase()+value.slice(1)]){result=expression.parse(element.dataset['param'+value.charAt(0).toUpperCase()+value.slice(1)]);}
if(data[value]){result=data[value];}
if(!result){result='';}
if(debug)console.log('%c[param resolved]: ('+service+') '+value+'='+result,'color:#808080');return result;}));};let successes={none:function(){},'save':function(){return function(data){container.set(service.replace('.','-'),JSON.parse(data),true,true);};},'render':function(view){return function(data){try{container.set(service.replace('.','-'),JSON.parse(data),true,true);}catch(e){container.set(service.replace('.','-'),{},true,true);}
view.render(element);let rerender=element.dataset['successRerender']||'';element.setAttribute('data-success-rerender','');rerender=rerender.trim().split(',');for(let i=0;i<rerender.length;i++){if(''===rerender[i]){continue;}
document.addEventListener(rerender[i],function(event){console.log(event.type+' triggered rendering');if(element&&element.parentNode){console.log(event.type+' triggered rendering 2');view.render(element.parentNode);}})}}},'reset':function(){return function(){if('FORM'===element.tagName){return element.reset();}
throw new Error('This callback is only valid for forms');}},'empty':function(){return function(){container.set(service.replace('.','-'),{},true);view.render(element);}},'alert':function(alerts){return function(){let alert=element.dataset['successAlert']||'Success';alerts.send({text:alert,class:'success'},3000);}},'update':function(){return function(data){let service=element.dataset['successUpdate']||null;if(service){container.set(service,JSON.parse(data),true);}}},'redirect':function(state){return function(){let url=expression.parse(element.dataset['successRedirectUrl'])||'/';state.change(url);}},'trigger':function(document){return function(){let triggers=element.dataset['successTriggers']||'';triggers=triggers.trim().split(',');for(let i=0;i<triggers.length;i++){if(''===triggers[i]){continue;}
if(debug)console.log('%c[event triggered]: '+triggers[i],'color:green');di.report(triggers[i]);document.dispatchEvent(new CustomEvent(triggers[i]));}}}};let errors={none:function(){},'alert':function(alerts){return function(){let alert=element.dataset['errorAlert']||'Failure ('+action+')';alerts.send({text:alert,class:'error'},3000);}},'redirect':function(state){return function(){let url=expression.parse(element.dataset['errorRedirectUrl'])||'/';state.change(url);}},'render':function(view){return function(){container.set(service.replace('.','-'),{},true,true);view.render(element);let rerender=element.getAttribute('data-error-rerender')||'';element.setAttribute('data-error-rerender','');rerender=rerender.trim().split(',');for(let i=0;i<rerender.length;i++){if(''===rerender[i]){continue;}
document.addEventListener(rerender[i],function(){if(element&&element.parentNode){view.render(element.parentNode);}})}}},'trigger':function(document){return function(){let triggers=element.dataset['errorTriggers']||'';triggers=triggers.trim().split(',');for(let i=0;i<triggers.length;i++){if(''===triggers[i]){continue;}
di.report(triggers[i]);document.dispatchEvent(new CustomEvent(triggers[i]));}}}};let exec=function(event){if(debug)console.log('%c[executed]: '+scope+'.'+action,'color:yellow',event,element,document.body.contains(element));if(!document.body.contains(element)){element=undefined;return false;}
if(event){event.preventDefault();}
if(confirm){if(window.confirm(confirm)!==true){return false;}}
if(loading){loaderId=alerts.send({text:loading,class:''},0);}
if(element.$lsLock){return;}
element.$lsLock=true;let method=container.path(scope+'.'+action);if(!method){throw new Error('Method "'+scope+'.'+action+'" not found');}
let result=resolve(method);if(!result){return;}
result.then(function(data){if(loaderId!==null){alerts.remove(loaderId);}
if(!element){return;}
for(let i=0;i<success.length;i++){container.resolve(successes[success[i]])(data);}
element.$lsLock=false;},function(exception){if(loaderId!==null){alerts.remove(loaderId);}
if(!element){return;}
for(let i=0;i<error.length;i++){container.resolve(errors[error[i]])(exception);}
element.$lsLock=false;});};let events=event.trim().split(',');for(let y=0;y<events.length;y++){if(''===events[y]){continue;}
switch(events[y].trim()){case'empty':for(let i=0;i<success.length;i++){container.resolve(successes[success[i]])('{}');}
break;case'load':exec();break;case'none':break;case'click':case'change':case'keypress':case'keydown':case'keyup':case'input':case'submit':element.addEventListener(events[y],exec);element.setAttribute('data-event','none');break;default:di.listen(events[y],exec);element.setAttribute('data-event','none');}
if(debug)console.log('%cregistered: "'+events[y].trim()+'" ('+service+')','color:blue');}
if(singleton){element.dataset.loaded='true';}}});})(window);(function(window){window.ls.container.get('view').add({selector:'data-ls-count',template:false,repeat:true,controller:function(element){var count=parseInt(element.dataset['lsCount']||0);element.dataset['lsCount']=count+1;element.innerHTML=element.dataset['lsCount'];}});})(window);(function(window){window.ls.container.get('view').add({selector:'data-ls-wait',template:false,repeat:false,controller:function(element,di,view){let debug=(element.dataset['debug']);let event=element.dataset['lsWait']||'';let status=di.check(event);if(debug){console.log(di.list);}
if(status){element.$lsSkip=false;if(debug){console.log('No Wait for '+event);}
if(debug){element.style.background='green';}}
else{element.$lsSkip=true;if(debug){console.log('Wait for '+event);}
if(debug){element.style.background='yellow';}
di.listen(event,function(){element.$lsSkip=false;if(debug){console.log('Wait Over for '+event);}
if(debug){element.style.background='blue';}
view.render(element);});}}});})(window);(function(window){"use strict";window.ls.container.get('view').add({'selector':'data-analytics-event','controller':function(element){var action=element.getAttribute('data-event-action')||'click';element.addEventListener(action,function(){var category=element.getAttribute('data-event-category')||'undefined';var label=element.getAttribute('data-event-label')||'undefined';if(!ga){console.error('Google Analytics ga object is not available');}
ga('send',{hitType:'event',eventCategory:category,eventAction:action,eventLabel:label});});}});})(window);(function(window){"use strict";window.ls.container.get('view').add({'selector':'data-analytics-pageview','controller':function(window,router){if(!ga){console.error('Google Analytics ga object is not available');}
var company=router.params['company']||null;if(!company){}
ga('set','page',window.location.pathname);ga('set','dimension1',company);ga('send','pageview');}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-clone',repeat:false,controller:function(element,document,view){var template=element.innerHTML.toString();var label=element.dataset['label']||'Add';var icon=element.dataset['icon']||null;var target=element.dataset['target']||null;var first=parseInt(element.dataset['first']||1);var button=document.createElement('button');button.type='button';button.innerText=' '+label+' ';button.classList.add('margin-end');button.classList.add('margin-bottom-small');button.classList.add('reverse');if(icon){var iconElement=document.createElement('i');iconElement.className=icon;button.insertBefore(iconElement,button.firstChild);}
if(target){target=document.getElementById(target);}
button.addEventListener('click',function(){var clone=document.createElement(element.tagName);if(element.name){clone.name=element.name;}
clone.innerHTML=template;clone.className=element.className;view.render(clone);if(target){target.appendChild(clone);}
else{button.parentNode.insertBefore(clone,button);}
clone.querySelector('input').focus();Array.prototype.slice.call(clone.querySelectorAll('[data-remove]')).map(function(obj){obj.addEventListener('click',function(){clone.parentNode.removeChild(clone);obj.scrollIntoView({behavior:'smooth'});});});Array.prototype.slice.call(clone.querySelectorAll('[data-up]')).map(function(obj){obj.addEventListener('click',function(){if(clone.previousElementSibling){clone.parentNode.insertBefore(clone,clone.previousElementSibling);obj.scrollIntoView({behavior:'smooth'});}});});Array.prototype.slice.call(clone.querySelectorAll('[data-down]')).map(function(obj){obj.addEventListener('click',function(){if(clone.nextElementSibling){clone.parentNode.insertBefore(clone.nextElementSibling,clone);obj.scrollIntoView({behavior:'smooth'});}});});});element.parentNode.insertBefore(button,element.nextSibling);element.parentNode.removeChild(element);if(first){button.click();}}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-color',repeat:false,controller:function(element){var preview=document.createElement('div');var picker=document.createElement('input');picker.type='color';preview.className='color-preview';preview.appendChild(picker);picker.addEventListener('change',syncA);picker.addEventListener('input',syncA);element.addEventListener('input',update);element.addEventListener('change',update);function update(){if(element.validity.valid){preview.style.background=element.value;syncB();}}
function syncA(){element.value=picker.value;update();}
function syncB(){picker.value=element.value;}
element.parentNode.insertBefore(preview,element);update();syncB();}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-copy',controller:function(element,alerts,document,window){var button=window.document.createElement('i');button.type='button';button.className='icon-docs note copy';button.style.cursor='pointer';element.parentNode.insertBefore(button,element.nextSibling);var copy=function(event){window.getSelection().removeAllRanges();var range=document.createRange();range.selectNode(element);window.getSelection().addRange(range);try{document.execCommand('copy');alerts.send({text:'Copied to clipboard',class:''},3000);}catch(err){alerts.send({text:"Failed to copy text ",class:'error'},3000);}
window.getSelection().removeAllRanges();};button.addEventListener('click',copy);}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-draft',repeat:false,controller:function(element,expression){var key=expression.parse(element.dataset['formsDraft']||'');if(element.value===''){element.value=window.localStorage.getItem(key);}
element.addEventListener('input',function(){window.localStorage.setItem(key,element.value);});element.form.addEventListener('submit',function(){window.localStorage.removeItem(key);});}});})(window);(function(window){window.ls.container.get('view').add({selector:'data-forms-filter',controller:function(document,container,expression,element,form,di){let name=element.dataset['formsFilter']||'';let events=element.dataset['event']||'';let serialize=function(obj,prefix){let str=[],p;for(p in obj){if(obj.hasOwnProperty(p)){let k=prefix?prefix+"["+p+"]":p,v=obj[p];if(v===''){continue;}
str.push((v!==null&&typeof v==="object")?serialize(v,k):encodeURIComponent(k)+"="+encodeURIComponent(v));}}
return str.join("&");};let parse=function(filter){if(filter===''){return null;}
let operatorsMap=["!=",">=","<=","=",">","<"];let operator=null;for(let key=0;key<operatorsMap.length;key++){if(filter.indexOf(operatorsMap[key])>-1){operator=operatorsMap[key];}}
if(operator===null){throw new Error("Invalid operator");}
filter=filter.split(operator);if(filter.length!==2){throw new Error("Invalid filter expression");}
return{"key":filter[0],"value":filter[1],"operator":operator};};let flatten=function(params){let list={};for(let key in params){if(params.hasOwnProperty(key)){if(key!=='filters'){list[key]=params[key];}
else{for(let i=0;i<params[key].length;i++){let filter=parse(params[key][i]);if(null===filter){continue;}
list['filters-'+filter.key]=params[key][i];}}}}
return list;};let apply=function(params){let cached=container.get(name);cached=(cached)?cached.params:[];params=Object.assign(cached,params);container.set(name,{name:name,params:params,query:serialize(params),forward:parseInt(params.offset)+parseInt(params.limit),backward:parseInt(params.offset)-parseInt(params.limit),keys:flatten(params)},true,name);document.dispatchEvent(new CustomEvent(name+'-changed',{bubbles:false,cancelable:true}));di.report(name+'-changed');};switch(element.tagName){case'INPUT':break;case'TEXTAREA':break;case'BUTTON':element.addEventListener('click',function(){apply(JSON.parse(expression.parse(element.dataset['params']||'{}')));});break;case'FORM':element.addEventListener('input',function(){apply(form.toJson(element));});element.addEventListener('change',function(){apply(form.toJson(element));});element.addEventListener('reset',function(){setTimeout(function(){apply(form.toJson(element));},0);});events=events.trim().split(',');for(let y=0;y<events.length;y++){if(events[y]==='init'){element.addEventListener('rendered',function(){apply(form.toJson(element));},{once:true});}
else{di.listen(events[y],function(e){if(e){e.target.removeEventListener(e.type,arguments.callee);}
apply(form.toJson(element));});}
element.setAttribute('data-event','none');}
break;default:break;}}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-parent-down',repeat:false,controller:function(element){var target=element.dataset['target']||null;target=(target)?element.closest(target):element.parentNode;element.addEventListener('click',function(){if(target.nextElementSibling){target.parentNode.insertBefore(target.nextElementSibling,target);element.scrollIntoView({behavior:'smooth'});}});}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-parent-remove',repeat:false,controller:function(element){var target=element.dataset['target']||null;target=(target)?element.closest(target):element.parentNode;element.addEventListener('click',function(){target.parentNode.removeChild(target);element.scrollIntoView({behavior:'smooth'});});}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-parent-up',repeat:false,controller:function(element){var target=element.dataset['target']||null;target=(target)?element.closest(target):element.parentNode;element.addEventListener('click',function(){if(target.previousElementSibling){target.parentNode.insertBefore(target,target.previousElementSibling);element.scrollIntoView({behavior:'smooth'});}});}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-password-meter',repeat:false,controller:function(element,window){var calc=function(password){var score=0;if(!password)
return score;var letters=new window.Object();for(var i=0;i<password.length;i++){letters[password[i]]=(letters[password[i]]||0)+1;score+=5.0/letters[password[i]];}
var variations={digits:/\d/.test(password),lower:/[a-z]/.test(password),upper:/[A-Z]/.test(password),nonWords:/\W/.test(password)};var variationCount=0;for(var check in variations){if(variations.hasOwnProperty(check)){variationCount+=(variations[check]===true)?1:0;}}
score+=(variationCount-1)*10;return parseInt(score);};var callback=function(){var score=calc(this.value);if(''===this.value)
return meter.className='password-meter';if(score>60)
return meter.className='password-meter strong';if(score>30)
return meter.className='password-meter medium';if(score>=0)
return meter.className='password-meter weak';};var meter=window.document.createElement('div');meter.className='password-meter';element.parentNode.insertBefore(meter,element.nextSibling);element.addEventListener('change',callback);element.addEventListener('keypress',callback);element.addEventListener('keyup',callback);element.addEventListener('keydown',callback);}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-pell',repeat:false,controller:function(element,window,document,markdown){var div=document.createElement('div');element.className='pell hide';div.className='input pell';element.parentNode.insertBefore(div,element);element.tabIndex=-1;var turndownService=new TurndownService();turndownService.addRule('underline',{filter:['u'],replacement:function(content){return'__'+content+'__'}});var editor=window.pell.init({element:div,onChange:function onChange(html){element.value=turndownService.turndown(html);},defaultParagraphSeparator:'p',actions:[{name:'bold',icon:'<i class="icon-bold"></i>'},{name:'underline',icon:'<i class="icon-underline"></i>'},{name:'italic',icon:'<i class="icon-italic"></i>'},{name:'olist',icon:'<i class="icon-list-numbered"></i>'},{name:'ulist',icon:'<i class="icon-list-bullet"></i>'}]});element.addEventListener('change',function(){editor.content.innerHTML=markdown.render(element.value);});editor.content.setAttribute('placeholder',element.placeholder);editor.content.innerHTML=markdown.render(element.value);editor.content.tabIndex=0;editor.content.onkeydown=function preventTab(event){if(event.which===9){event.preventDefault();if(document.activeElement){var focussable=Array.prototype.filter.call(document.querySelectorAll('a:not([disabled]), button:not([disabled]), select:not([disabled]), input[type=text]:not([disabled]), input[type=checkbox]:not([disabled]), [tabindex]:not([disabled]):not([tabindex="-1"])'),function(element){return element.offsetWidth>0||element.offsetHeight>0||element===document.activeElement});var index=focussable.indexOf(document.activeElement);if(index>-1){if(event.shiftKey){var prevElement=focussable[index-1]||focussable[focussable.length-1];prevElement.focus();}
else{var nextElement=focussable[index+1]||focussable[0];nextElement.focus();}}}}};var clean=function(e){e.stopPropagation();e.preventDefault();var clipboardData=e.clipboardData||window.clipboardData;window.pell.exec('insertText',clipboardData.getData('Text'));return true;};div.addEventListener('paste',clean);div.addEventListener('drop',clean);}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-recaptcha',repeat:false,controller:function(element,document,window){var form=document.getElementById(element.dataset['formsRecaptcha']||'');var captcha=document.createElement('input');captcha.type='hidden';captcha.name='g-recaptcha-response';element.parentNode.insertBefore(captcha,element.nextSibling);var render=function(){window.grecaptcha.render(element,{'sitekey':element.dataset['sitekey']||'','size':'invisible','badge':'inline','callback':function(token){captcha.value=token;form.submit();}});};if(window.grecaptchaReady){render();}
else{document.addEventListener('recaptcha-loaded',render);}
form.addEventListener('submit',function(){if(''===captcha.value){event.preventDefault();window.grecaptcha.execute();}});}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-remove',repeat:false,controller:function(element){Array.prototype.slice.call(element.querySelectorAll('[data-remove]')).map(function(obj){obj.addEventListener('click',function(){element.parentNode.removeChild(element);});});}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-switch',repeat:false,controller:function(element){let input=window.document.createElement('input');input.type='checkbox';input.className='switch';let syncA=function(){element.value=(input.checked)?'on':'off';};let syncB=function(){input.checked=(element.value==='on');};input.addEventListener('input',syncA);input.addEventListener('change',syncA);element.addEventListener('input',syncB);element.addEventListener('change',syncB);syncA();element.parentNode.insertBefore(input,element);}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-text-count',repeat:false,controller:function(element){var counter=document.createElement('span');counter.className='counter';element.parentNode.insertBefore(counter,element.nextSibling);var count=function(){if(0<=element.maxLength){counter.innerText=(element.maxLength-element.value.length).toString()+' / '+element.maxLength;}
else{var words=(element.value!=='')?element.value.trim().split(' ').length:0;counter.innerText=words+' words and '+element.value.length.toString()+' chars';}};element.addEventListener('keyup',count);element.addEventListener('change',count);element.addEventListener('cut',count);element.addEventListener('paste',count);element.addEventListener('drop',count);count();}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-text-direction',repeat:false,controller:function(element){var rtlStock='^ا^ب^ت^ث^ج^ح^خ^د^ذ^ر^ز^س^ش^ص^ض^ط^ظ^ع^غ^ف^ق^ك^ل^م^ن^ه^و^ي^א^ב^ג^ד^ה^ו^ז^ח^ט^י^כ^ך^ל^מ^ם^נ^ן^ס^ע^פ^ף^צ^ץ^ק^ר^ש^ת^';var special=['\n',' ','״','"','_','\'','!','@','#','$','^','&','%','*','(',')','+','=','-','[',']','\\','/','{','}','|',':','<','>','?',',','.','0','1','2','3','4','5','6','7','8','9'];var setDirection=function(){var value=(element.value[0])?element.value:'';var direction='ltr';var align='left';for(var i=0;i<value.length;i++){if(-1===special.indexOf(value[i])){var firstChar=value[i];break;}}
if(-1<rtlStock.indexOf('^'+firstChar+'^')){direction='rtl';align='right';}
element.style.direction=direction;element.style.textAlign=align;};element.addEventListener('keyup',setDirection);element.addEventListener('change',setDirection);element.addEventListener('cut',setDirection);element.addEventListener('paste',setDirection);element.addEventListener('drop',setDirection);setDirection();}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-text-resize',repeat:false,controller:function(element,window){function resize(){var scrollLeft=window.pageXOffset||(window.document.documentElement||window.document.body.parentNode||window.document.body).scrollLeft;var scrollTop=window.pageYOffset||(window.document.documentElement||window.document.body.parentNode||window.document.body).scrollTop;var offset=element.offsetHeight-element.clientHeight;element.style.height='auto';element.style.height=element.scrollHeight+offset+'px';window.scrollTo(scrollLeft,scrollTop);}
element.addEventListener('keyup',resize);element.addEventListener('change',resize);element.addEventListener('cut',resize);element.addEventListener('paste',resize);element.addEventListener('drop',resize);window.addEventListener('resize',resize);resize();}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-upload',repeat:false,controller:function(element,window,container,alerts,expression){var scope=element.dataset['scope'];var label=element.dataset['label']||'Upload';var labelRemove=element.dataset['labelRemove']||'Remove';var accept=element.dataset['accept']||'';var required=(element.dataset['required']||false);var sdk=(scope==='sdk')?container.get('sdk'):container.get('console');var input=document.createElement('input');var upload=document.createElement('div');var progress=document.createElement('div');var image=document.createElement('img');var info=document.createElement('div');var reset=document.createElement('button');element.value='';input.type='file';input.accept=accept;input.required=required;upload.className='button margin-bottom';upload.innerHTML='<i class="icon icon-upload"></i> '+label;progress.style.background='green';progress.style.width='0%';progress.style.height='5px';image.src='';image.className='file-preview avatar huge margin-bottom-small';info.innerHTML='';reset.type='button';reset.className='tag pull-start';reset.innerHTML='<i class="icon icon-cancel"></i> '+labelRemove+'&nbsp;';reset.style.display='none';var humanFileSize=function(bytes,si){var thresh=si?1000:1024;if(Math.abs(bytes)<thresh){return bytes+' B';}
var units=si?['KB','MB','GB','TB','PB','EB','ZB','YB']:['KiB','MiB','GiB','TiB','PiB','EiB','ZiB','YiB'];var u=-1;do{bytes/=thresh;++u;}while(Math.abs(bytes)>=thresh&&u<units.length-1);return bytes.toFixed(1)+' '+units[u];};var onComplete=function(message){alerts.remove(message);input.disabled='';progress.style.width='0%';};var onProgress=function(event){var percentage=(event.lengthComputable)?Math.round(event.loaded*100/event.total):'0';progress.style.width=percentage+'%';};var preview=function(){if(element.value===element.getAttribute('data-old-value')){return null;}
element.setAttribute('data-old-value',element.value);if(element.value){image.src=sdk.storage.getPreview(element.value,null,300,300);reset.style.display='inline-block';}
else{image.src='data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D';info.innerHTML='';}};input.addEventListener('change',function(){var message=alerts.send({text:'Uploading...',class:''},0);var files=input.files;var formData=new FormData();var read=JSON.parse(expression.parse(element.dataset['read']||'[]'));var write=JSON.parse(expression.parse(element.dataset['write']||'[]'));for(var i=0;i<files.length;i++){var file=files[i];formData.append('files[]',file);}
for(var x=0;x<read.length;x++){formData.append('read[]',read[x]);}
for(var y=0;y<read.length;y++){formData.append('write[]',write[y]);}
sdk.storage.create(formData,onProgress).then(function(response){response=JSON.parse(response)[0];element.value=sdk.storage.getPreview(response.$uid,response.token);element.value=response.$uid;element.dispatchEvent(new window.Event('change'));onComplete(message);},function(error){alerts.send({text:'An error occurred!',class:''},3000);onComplete(message);});input.value='';input.disabled=true;});element.addEventListener('change',function(){preview();});reset.addEventListener('click',function(){element.value='';element.dispatchEvent(new window.Event('change'));});element.parentNode.insertBefore(image,element);element.parentNode.insertBefore(upload,element);element.parentNode.insertBefore(reset,element);element.parentNode.insertBefore(info,element);element.parentNode.insertBefore(progress,element);upload.appendChild(input);preview();}});})(window);(function(window){"use strict";window.ls.container.get('view').add({selector:'data-forms-upload-multi',repeat:false,controller:function(element,window,container,alerts,expression){var scope=element.dataset['scope'];var labelButton=element.dataset['labelButton']||'Upload';var labelLoading=element.dataset['labelLoading']||'Uploading...';var previewWidth=element.dataset['previewWidth']||null;var previewHeight=element.dataset['previewHeight']||200;var accept=element.dataset['accept']||'';var required=(element.dataset['required']||false);var multiple=(element.dataset['multiple']||false);var className=(element.dataset['class']||'upload');var max=parseInt((element.dataset['max']||4));var sdk=(scope==='sdk')?container.get('sdk'):container.get('console');var output=(element.value)?((multiple)?JSON.parse(element.value):[element.value]):[];var total=0;var wrapper=document.createElement('div');var input=document.createElement('input');var upload=document.createElement('div');var preview=document.createElement('ul');var progress=document.createElement('div');var count=document.createElement('div');wrapper.className=className;input.type='file';input.accept=accept;input.required=required;input.multiple=multiple;input.tabIndex=-1;count.className='count';upload.className='button reverse margin-bottom';upload.innerHTML='<i class="icon icon-upload"></i> '+labelButton;upload.tabIndex=0;preview.className='preview';progress.className='progress';progress.style.width='0%';progress.style.display='none';var humanFileSize=function(bytes,si){var thresh=si?1000:1024;if(Math.abs(bytes)<thresh){return bytes+' B';}
var units=si?['KB','MB','GB','TB','PB','EB','ZB','YB']:['KiB','MiB','GiB','TiB','PiB','EiB','ZiB','YiB'];var u=-1;do{bytes/=thresh;++u;}while(Math.abs(bytes)>=thresh&&u<units.length-1);return bytes.toFixed(1)+' '+units[u];};var onComplete=function(message){alerts.remove(message);input.disabled=false;upload.classList.remove('disabled');progress.style.width='0%';progress.style.display='none';};var onProgress=function(event){var percentage=(event.lengthComputable)?Math.round(event.loaded*100/event.total):'0';progress.style.display=(percentage!==0)?'block':'none';progress.style.width=percentage+'%';};var render=function(files){if(!Array.isArray(files)){files=[files];}
preview.innerHTML='';count.innerHTML='0 / '+max;files.map(function(obj){var file=document.createElement('li');var image=document.createElement('img');image.src=image.src=sdk.storage.getPreview(obj,null,previewWidth,previewHeight);file.className='file';file.tabIndex=0;file.appendChild(image);count.innerHTML=files.length+' / '+max;preview.appendChild(file);if((files.length>=max)){input.disabled=true;upload.classList.add('disabled');}
else{input.disabled=false;upload.classList.remove('disabled');}
var remove=(function(obj){return function(event){output=(Array.isArray(output))?output.filter(function(e){return e!==obj}):[];render(output);}})(obj);file.addEventListener('click',remove);file.addEventListener('keypress',remove);element.value=(multiple)?JSON.stringify(output):output[0];});};input.addEventListener('change',function(){var message=alerts.send({text:labelLoading,class:''},0);var files=input.files;var formData=new FormData();var read=JSON.parse(expression.parse(element.dataset['read']||'[]'));var write=JSON.parse(expression.parse(element.dataset['write']||'[]'));if(!multiple){output=[];}
for(var i=0;i<files.length;i++){if(output.length+(i+1)>max){break;}
var file=files[i];formData.append('files[]',file);total=total+file.size;}
for(var x=0;x<read.length;x++){formData.append('read[]',read[x]);}
for(var y=0;y<write.length;y++){formData.append('write[]',write[y]);}
sdk.storage.create(formData,onProgress).then(function(response){response=JSON.parse(response);response.map(function(obj){if(!Array.isArray(output)){throw new Error('Can\'t append new file to non array value');}
output[output.length]=obj['$uid'];});onComplete(message);render(output);},function(error){alerts.send({text:'An error occurred!',class:''},3000);onComplete(message);});input.disabled=true;});element.addEventListener('change',function(){if(!element.value){return;}
output=(multiple)?JSON.parse(element.value):[element.value];render(output);});upload.addEventListener('keypress',function(){input.click();});element.parentNode.insertBefore(wrapper,element);wrapper.appendChild(preview);wrapper.appendChild(progress);wrapper.appendChild(upload);if(multiple){wrapper.appendChild(count);}
upload.appendChild(input);render(output);}});})(window);(function(window){window.ls.container.get('view').add({'selector':'data-page-title','repeat':true,'controller':function(element,document,expression){document.title=expression.parse(element.getAttribute('data-page-title'))||document.title;}});})(window);(function(window){window.ls.container.get('view').add({selector:'data-setup',controller:function(element,console,form){element.addEventListener('submit',function(event){event.preventDefault();let formData=form.toJson(element);delete formData.vault;delete formData.plan;formData['name']=formData['name']||(element.dataset['defaultName']||'');console.teams.create(formData['name']||'').then(function(data){let team=JSON.parse(data)['$uid'];formData=JSON.parse(JSON.stringify(formData).replace(new RegExp('{{teamId}}','g'),team));console.projects.create(formData['name'],team).then(function(data){let project=JSON.parse(data);window.location.href='/console?project='+project['$uid'];},function(){throw new Error('Failed to setup project');});},function(){throw new Error('Setup failed creating project team');});})}});})(window);(function(window){window.ls.container.get('view').add({selector:'data-switch',controller:function(element,router,window,di){let debug=(element.dataset['debug']);let init=function(){if(debug){console.log('Changed: saved project for next redirect',element.value);}
window.localStorage.setItem('settings.project',element.value);di.reset();};let fallback=function(){if(debug){console.log('fallback init',element.value);}
if(router.getCurrent().view.scope!=='console'||!router.getCurrent().view.project){if(debug){console.log('Skip: not console state',element.value);}
return;}
if(router.params['project']){return;}
let project=window.localStorage.getItem('settings.project');if(project){di.reset();if(debug){console.log('last used project',project);}
return router.change('/console/home?project='+project,true);}
di.reset();if(debug){console.log('first project from list',element.options,element.$lsSkip);}
return router.change('/console/home?project='+element.options[0].value,true);};if(debug){console.log('switch init',element.options);}
element.addEventListener('change',function(){if(debug){console.log('change init',element.value);}
fallback();if(element.value&&element.value!==router.params['project']){if(debug){console.log('Changed: selected project from list');}
init();return router.change('/console/home?project='+element.value);}});fallback();init();}});})(window);(function(window){window.ls.container.get('view').add({repeat:true,selector:'data-ui-gravatar',controller:function(element,document,expression){let MD5=function(s){function L(k,d){return(k<<d)|(k>>>(32-d))}function K(G,k){let I,d,F,H,x;F=(G&2147483648);H=(k&2147483648);I=(G&1073741824);d=(k&1073741824);x=(G&1073741823)+(k&1073741823);if(I&d){return(x^2147483648^F^H)}if(I|d){if(x&1073741824){return(x^3221225472^F^H)}else{return(x^1073741824^F^H)}}else{return(x^F^H)}}function r(d,F,k){return(d&F)|((~d)&k)}function q(d,F,k){return(d&k)|(F&(~k))}function p(d,F,k){return(d^F^k)}function n(d,F,k){return(F^(d|(~k)))}function u(G,F,aa,Z,k,H,I){G=K(G,K(K(r(F,aa,Z),k),I));return K(L(G,H),F)}function f(G,F,aa,Z,k,H,I){G=K(G,K(K(q(F,aa,Z),k),I));return K(L(G,H),F)}function D(G,F,aa,Z,k,H,I){G=K(G,K(K(p(F,aa,Z),k),I));return K(L(G,H),F)}function t(G,F,aa,Z,k,H,I){G=K(G,K(K(n(F,aa,Z),k),I));return K(L(G,H),F)}function e(G){let Z;let F=G.length;let x=F+8;let k=(x-(x%64))/64;let I=(k+1)*16;let aa=Array(I-1);let d=0;let H=0;while(H<F){Z=(H-(H%4))/4;d=(H%4)*8;aa[Z]=(aa[Z]|(G.charCodeAt(H)<<d));H++}Z=(H-(H%4))/4;d=(H%4)*8;aa[Z]=aa[Z]|(128<<d);aa[I-2]=F<<3;aa[I-1]=F>>>29;return aa}function B(x){let k="",F="",G,d;for(d=0;d<=3;d++){G=(x>>>(d*8))&255;F="0"+G.toString(16);k=k+F.substr(F.length-2,2)}return k}function J(k){k=k.replace(/rn/g,"n");let d="";for(let F=0;F<k.length;F++){let x=k.charCodeAt(F);if(x<128){d+=String.fromCharCode(x)}else{if((x>127)&&(x<2048)){d+=String.fromCharCode((x>>6)|192);d+=String.fromCharCode((x&63)|128)}else{d+=String.fromCharCode((x>>12)|224);d+=String.fromCharCode(((x>>6)&63)|128);d+=String.fromCharCode((x&63)|128)}}}return d}let C=Array();let P,h,E,v,g,Y,X,W,V;let S=7,Q=12,N=17,M=22;let A=5,z=9,y=14,w=20;let o=4,m=11,l=16,j=23;let U=6,T=10,R=15,O=21;s=J(s);C=e(s);Y=1732584193;X=4023233417;W=2562383102;V=271733878;for(P=0;P<C.length;P+=16){h=Y;E=X;v=W;g=V;Y=u(Y,X,W,V,C[P+0],S,3614090360);V=u(V,Y,X,W,C[P+1],Q,3905402710);W=u(W,V,Y,X,C[P+2],N,606105819);X=u(X,W,V,Y,C[P+3],M,3250441966);Y=u(Y,X,W,V,C[P+4],S,4118548399);V=u(V,Y,X,W,C[P+5],Q,1200080426);W=u(W,V,Y,X,C[P+6],N,2821735955);X=u(X,W,V,Y,C[P+7],M,4249261313);Y=u(Y,X,W,V,C[P+8],S,1770035416);V=u(V,Y,X,W,C[P+9],Q,2336552879);W=u(W,V,Y,X,C[P+10],N,4294925233);X=u(X,W,V,Y,C[P+11],M,2304563134);Y=u(Y,X,W,V,C[P+12],S,1804603682);V=u(V,Y,X,W,C[P+13],Q,4254626195);W=u(W,V,Y,X,C[P+14],N,2792965006);X=u(X,W,V,Y,C[P+15],M,1236535329);Y=f(Y,X,W,V,C[P+1],A,4129170786);V=f(V,Y,X,W,C[P+6],z,3225465664);W=f(W,V,Y,X,C[P+11],y,643717713);X=f(X,W,V,Y,C[P+0],w,3921069994);Y=f(Y,X,W,V,C[P+5],A,3593408605);V=f(V,Y,X,W,C[P+10],z,38016083);W=f(W,V,Y,X,C[P+15],y,3634488961);X=f(X,W,V,Y,C[P+4],w,3889429448);Y=f(Y,X,W,V,C[P+9],A,568446438);V=f(V,Y,X,W,C[P+14],z,3275163606);W=f(W,V,Y,X,C[P+3],y,4107603335);X=f(X,W,V,Y,C[P+8],w,1163531501);Y=f(Y,X,W,V,C[P+13],A,2850285829);V=f(V,Y,X,W,C[P+2],z,4243563512);W=f(W,V,Y,X,C[P+7],y,1735328473);X=f(X,W,V,Y,C[P+12],w,2368359562);Y=D(Y,X,W,V,C[P+5],o,4294588738);V=D(V,Y,X,W,C[P+8],m,2272392833);W=D(W,V,Y,X,C[P+11],l,1839030562);X=D(X,W,V,Y,C[P+14],j,4259657740);Y=D(Y,X,W,V,C[P+1],o,2763975236);V=D(V,Y,X,W,C[P+4],m,1272893353);W=D(W,V,Y,X,C[P+7],l,4139469664);X=D(X,W,V,Y,C[P+10],j,3200236656);Y=D(Y,X,W,V,C[P+13],o,681279174);V=D(V,Y,X,W,C[P+0],m,3936430074);W=D(W,V,Y,X,C[P+3],l,3572445317);X=D(X,W,V,Y,C[P+6],j,76029189);Y=D(Y,X,W,V,C[P+9],o,3654602809);V=D(V,Y,X,W,C[P+12],m,3873151461);W=D(W,V,Y,X,C[P+15],l,530742520);X=D(X,W,V,Y,C[P+2],j,3299628645);Y=t(Y,X,W,V,C[P+0],U,4096336452);V=t(V,Y,X,W,C[P+7],T,1126891415);W=t(W,V,Y,X,C[P+14],R,2878612391);X=t(X,W,V,Y,C[P+5],O,4237533241);Y=t(Y,X,W,V,C[P+12],U,1700485571);V=t(V,Y,X,W,C[P+3],T,2399980690);W=t(W,V,Y,X,C[P+10],R,4293915773);X=t(X,W,V,Y,C[P+1],O,2240044497);Y=t(Y,X,W,V,C[P+8],U,1873313359);V=t(V,Y,X,W,C[P+15],T,4264355552);W=t(W,V,Y,X,C[P+6],R,2734768916);X=t(X,W,V,Y,C[P+13],O,1309151649);Y=t(Y,X,W,V,C[P+4],U,4149444226);V=t(V,Y,X,W,C[P+11],T,3174756917);W=t(W,V,Y,X,C[P+2],R,718787259);X=t(X,W,V,Y,C[P+9],O,3951481745);Y=K(Y,h);X=K(X,E);W=K(W,v);V=K(V,g)}let i=B(Y)+B(X)+B(W)+B(V);return i.toLowerCase()};let size=expression.parse(element.dataset['size']||'80');let empty=expression.parse(element.dataset['empty']||'');let email=expression.parse(element.dataset['uiGravatar']||empty);let name=expression.parse(element.dataset['name']||email);name=name.split(' ').map(function(n){if(!isNaN(parseFloat(n))&&isFinite(n)){return'';}
return n[0];}).join('')||'--';let def='https://ui-avatars.com/api/'+encodeURIComponent(name)+'/'+size+'';element.src='//www.gravatar.com/avatar/'+MD5(email)+'.jpg?s='+size+'&d='+encodeURIComponent(def);}});})(window);(function(window){window.ls.container.get('view').add({selector:'data-ui-highlight',controller:function(element,state,expression,document){let check=function(){let links=element.getElementsByTagName('a');let selected=null;let list=[];for(let i=0;i<links.length;i++){links[i].href=links[i].href||expression.parse(links[i].dataset['lsHref']||'');list.push(links[i]);}
list.sort(function(a,b){return a.pathname.length-b.pathname.length;});for(let i=0;i<list.length;i++){let href=list[i].href||expression.parse(list[i].dataset['lsHref']||'');if(list[i].pathname===window.location.pathname.substring(0,list[i].pathname.length)){list[i].classList.add('selected');if(selected!==null){list[selected].classList.remove('selected');}
selected=i;}
else{list[i].classList.remove('selected');}}};document.addEventListener('state-changed',check);check();}});})(window);(function(window){window.ls.container.get('view').add({selector:'data-ui-modal',controller:function(document,element,expression){let name=element.dataset['name']||null;let buttonText=expression.parse(element.dataset['buttonText']||'');let buttonClass=element.dataset['buttonClass']||'button-class';let buttonIcon=element.dataset['buttonIcon']||null;let buttonEvent=element.dataset['buttonEvent']||'';let buttonAlias=element.dataset['buttonAlias']||'';let buttonElement=(!buttonAlias)?document.createElement('button'):document.getElementById(buttonAlias);let openEvent=element.dataset['openEvent']||null;let background=document.getElementById('modal-bg');if(!background){background=document.createElement('div');background.id='modal-bg';background.className='modal-bg';document.body.appendChild(background);background.addEventListener('click',function(){document.dispatchEvent(new CustomEvent('modal-close',{bubbles:false,cancelable:true}));});}
if(!buttonAlias){buttonElement.innerText=buttonText;buttonElement.className=buttonClass;buttonElement.type='button';if(buttonIcon){let iconElement=document.createElement('i');iconElement.className=buttonIcon;buttonElement.insertBefore(iconElement,buttonElement.firstChild);}}
if(buttonEvent){buttonElement.addEventListener('click',function(){document.dispatchEvent(new CustomEvent(buttonEvent,{bubbles:false,cancelable:true}));});}
element.classList.add('modal');if(!buttonAlias){element.parentNode.insertBefore(buttonElement,element);}
let open=function(){document.documentElement.classList.add('modal-open');document.dispatchEvent(new CustomEvent('modal-open',{bubbles:false,cancelable:true}));element.classList.add('open');element.classList.remove('close');};if(name){document.querySelectorAll("[data-ui-modal-ref='"+name+"']").forEach(function(elem){elem.addEventListener('click',open);});}
if(openEvent){document.addEventListener(openEvent,open);}
buttonElement.addEventListener('click',open);document.addEventListener('keydown',function(event){if(event.which===27){document.dispatchEvent(new CustomEvent('modal-close',{bubbles:false,cancelable:true}));}});element.addEventListener('blur',function(){document.dispatchEvent(new CustomEvent('modal-close',{bubbles:false,cancelable:true}));});document.addEventListener('modal-close',function(){document.documentElement.classList.remove('modal-open');element.classList.add('close');element.classList.remove('open');});}});})(window);(function(window){window.ls.container.get('view').add({selector:'data-ls-ui-open',repeat:false,controller:function(element,window){let def=(element.classList.contains('open'))?'open':'close';let buttonClass=element.dataset['buttonClass'];let buttonText=element.dataset['buttonText']||'';let buttonIcon=element.dataset['buttonIcon']||'';let hover=element.hasAttribute('data-hover');let button=window.document.createElement('button');let isTouch=function(){return'ontouchstart'in window||navigator.maxTouchPoints;};button.innerText=buttonText;button.className=buttonClass;button.tabIndex=1;if(buttonIcon){let icon=window.document.createElement('i');icon.className=buttonIcon;button.insertBefore(icon,button.firstChild);}
if(def==='close'){element.classList.add('close');element.classList.remove('open');}
else{element.classList.add('open');element.classList.remove('close');}
button.addEventListener('click',function(){element.classList.toggle('open');element.classList.toggle('close');});if(hover&&!isTouch()){element.addEventListener('mouseover',function(){element.classList.add('open');element.classList.remove('close');});element.addEventListener('mouseout',function(){element.classList.add('close');element.classList.remove('open');});}
let close=function(){element.classList.add('close');element.classList.remove('open');};let closeDelay=function(){window.setTimeout(function(){close();},150);};let findParent=function(tagName,el){if((el.nodeName||el.tagName).toLowerCase()===tagName.toLowerCase()){return el;}
while(el=el.parentNode){if((el.nodeName||el.tagName).toLowerCase()===tagName.toLowerCase()){return el;}}
return null;};button.addEventListener('blur',closeDelay);element.addEventListener('click',function(event){let target=findParent('a',event.target);if(!target){return false;}
if(!target.href){return false;}
closeDelay();});element.insertBefore(button,element.firstChild);}});})(window);(function(window){window.ls.container.get('view').add({selector:'data-ls-ui-paging',repeat:true,controller:function(document,element,expression){var sum=expression.parse(element.dataset['sum'])||0;var offset=expression.parse(element.dataset['offset'])||0;var limit=expression.parse(element.dataset['limit'])||0;if(offset===0||limit===0){element.innerHTML='1 / 1';return true;}
var total=Math.ceil(sum/limit);var current=Math.ceil(offset/limit)+1;element.innerHTML=(total>0)?current+' / '+total:'';}});})(window);(function(window){window.ls.container.get('view').add({selector:'data-ui-phases',controller:function(element,window,document,expression,view){var tabs=document.createElement('ul');var container=document.createElement('div');var titles=Array.prototype.slice.call(element.getElementsByTagName('h2'));var next=Array.prototype.slice.call(element.querySelectorAll('[data-next]'));var previous=Array.prototype.slice.call(element.querySelectorAll('[data-previous]'));var position=0;for(var i=0;i<element.children.length;i++){var tabState=expression.parse(element.children[i].dataset['state']||'');if(tabState===window.location.pathname+window.location.search){position=i;}}
var setTab=function(index){var tabState=expression.parse(element.children[index].dataset['state']||'');if((tabState!=='')&&(tabState!==window.location.pathname+window.location.search)){window.history.pushState({},'',tabState);}
element.children[position].classList.remove('selected');element.children[index].classList.add('selected');tabs.children[position].classList.remove('selected');tabs.children[index].classList.add('selected');position=index;document.dispatchEvent(new CustomEvent('tab-changed'));};tabs.classList.add('tabs');container.classList.add('container');container.classList.add('close');container.dataset['lsUiOpen']='';container.dataset['buttonClass']='icon icon-down-dir';titles.map(function(obj,i){var title=document.createElement('li');title.innerHTML=obj.innerHTML;title.className=obj.className;title.tabIndex=0;tabs.appendChild(title);title.addEventListener('click',function(){setTab(i);});title.addEventListener('keyup',function(){if(event.which===13){setTab(i);}});});next.map(function(obj){obj.addEventListener('click',function(){setTab(position+1)});});previous.map(function(obj){obj.addEventListener('click',function(){setTab(position-1)});});setTab(position);container.appendChild(tabs);element.parentNode.insertBefore(container,element);}});})(window);(function(window){window.ls.container.get('view').add({selector:'data-ls-ui-scroll-to',repeat:false,controller:function(element,document,expression){var id=element.dataset['lsUiScrollTo']||'';element.addEventListener('click',function(){var anchorId=expression.parse(id)||null;if(anchorId){document.getElementById(anchorId).scrollIntoView({behavior:'smooth'});}});}});})(window);(function(window){window.ls.container.get('view').add({repeat:true,selector:'data-ui-slide',controller:function(element,window){var slides=element.getElementsByTagName('img');var paging=document.createElement('div');var interval=null;var auto=true;paging.className='paging';element.appendChild(paging);for(var i=0;i<slides.length;i++){var button=document.createElement('button');button.type='button';button.innerHTML=i.toString();button.className='dot';paging.appendChild(button);button.addEventListener('click',(function(i){return function(event){auto=false;window.clearTimeout(interval);move(i);}})(i));}
function move(index){for(var i=0;i<slides.length;i++){if(index===i){slides[index].classList.add('visible-fade');slides[index].classList.remove('hidden-fade');paging.children[i].className='selected';}
else{slides[i].classList.remove('visible-fade');slides[i].classList.add('hidden-fade');paging.children[i].className='';}}
index++;if(index>=i){index=0;}
if(auto){interval=window.setTimeout(function(){move(index++)},7000);}}
move(0);}});})(window);