| 12 |
- !function(e){var t={};function a(n){if(t[n])return t[n].exports;var s=t[n]={i:n,l:!1,exports:{}};return e[n].call(s.exports,s,s.exports,a),s.l=!0,s.exports}a.m=e,a.c=t,a.d=function(e,t,n){a.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p="",a(a.s=0)}({"./node_modules/babel-runtime/core-js/array/from.js":function(e,t,a){e.exports={default:a("./node_modules/core-js/library/fn/array/from.js"),__esModule:!0}},"./node_modules/babel-runtime/core-js/get-iterator.js":function(e,t,a){e.exports={default:a("./node_modules/core-js/library/fn/get-iterator.js"),__esModule:!0}},"./node_modules/babel-runtime/core-js/is-iterable.js":function(e,t,a){e.exports={default:a("./node_modules/core-js/library/fn/is-iterable.js"),__esModule:!0}},"./node_modules/babel-runtime/core-js/json/stringify.js":function(e,t,a){e.exports={default:a("./node_modules/core-js/library/fn/json/stringify.js"),__esModule:!0}},"./node_modules/babel-runtime/core-js/object/assign.js":function(e,t,a){e.exports={default:a("./node_modules/core-js/library/fn/object/assign.js"),__esModule:!0}},"./node_modules/babel-runtime/core-js/object/create.js":function(e,t,a){e.exports={default:a("./node_modules/core-js/library/fn/object/create.js"),__esModule:!0}},"./node_modules/babel-runtime/core-js/object/define-properties.js":function(e,t,a){e.exports={default:a("./node_modules/core-js/library/fn/object/define-properties.js"),__esModule:!0}},"./node_modules/babel-runtime/core-js/object/define-property.js":function(e,t,a){e.exports={default:a("./node_modules/core-js/library/fn/object/define-property.js"),__esModule:!0}},"./node_modules/babel-runtime/core-js/object/freeze.js":function(e,t,a){e.exports={default:a("./node_modules/core-js/library/fn/object/freeze.js"),__esModule:!0}},"./node_modules/babel-runtime/core-js/object/keys.js":function(e,t,a){e.exports={default:a("./node_modules/core-js/library/fn/object/keys.js"),__esModule:!0}},"./node_modules/babel-runtime/core-js/promise.js":function(e,t,a){e.exports={default:a("./node_modules/core-js/library/fn/promise.js"),__esModule:!0}},"./node_modules/babel-runtime/core-js/symbol.js":function(e,t,a){e.exports={default:a("./node_modules/core-js/library/fn/symbol/index.js"),__esModule:!0}},"./node_modules/babel-runtime/core-js/symbol/iterator.js":function(e,t,a){e.exports={default:a("./node_modules/core-js/library/fn/symbol/iterator.js"),__esModule:!0}},"./node_modules/babel-runtime/helpers/asyncToGenerator.js":function(e,t,a){"use strict";t.__esModule=!0;var n,s=a("./node_modules/babel-runtime/core-js/promise.js"),o=(n=s)&&n.__esModule?n:{default:n};t.default=function(e){return function(){var t=e.apply(this,arguments);return new o.default(function(e,a){return function n(s,r){try{var l=t[s](r),i=l.value}catch(e){return void a(e)}if(!l.done)return o.default.resolve(i).then(function(e){n("next",e)},function(e){n("throw",e)});e(i)}("next")})}}},"./node_modules/babel-runtime/helpers/defineProperty.js":function(e,t,a){"use strict";t.__esModule=!0;var n,s=a("./node_modules/babel-runtime/core-js/object/define-property.js"),o=(n=s)&&n.__esModule?n:{default:n};t.default=function(e,t,a){return t in e?(0,o.default)(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}},"./node_modules/babel-runtime/helpers/extends.js":function(e,t,a){"use strict";t.__esModule=!0;var n,s=a("./node_modules/babel-runtime/core-js/object/assign.js"),o=(n=s)&&n.__esModule?n:{default:n};t.default=o.default||function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e}},"./node_modules/babel-runtime/helpers/slicedToArray.js":function(e,t,a){"use strict";t.__esModule=!0;var n=o(a("./node_modules/babel-runtime/core-js/is-iterable.js")),s=o(a("./node_modules/babel-runtime/core-js/get-iterator.js"));function o(e){return e&&e.__esModule?e:{default:e}}t.default=function(){return function(e,t){if(Array.isArray(e))return e;if((0,n.default)(Object(e)))return function(e,t){var a=[],n=!0,o=!1,r=void 0;try{for(var l,i=(0,s.default)(e);!(n=(l=i.next()).done)&&(a.push(l.value),!t||a.length!==t);n=!0);}catch(e){o=!0,r=e}finally{try{!n&&i.return&&i.return()}finally{if(o)throw r}}return a}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()},"./node_modules/babel-runtime/helpers/taggedTemplateLiteral.js":function(e,t,a){"use strict";t.__esModule=!0;var n=o(a("./node_modules/babel-runtime/core-js/object/define-properties.js")),s=o(a("./node_modules/babel-runtime/core-js/object/freeze.js"));function o(e){return e&&e.__esModule?e:{default:e}}t.default=function(e,t){return(0,s.default)((0,n.default)(e,{raw:{value:(0,s.default)(t)}}))}},"./node_modules/babel-runtime/helpers/toArray.js":function(e,t,a){"use strict";t.__esModule=!0;var n,s=a("./node_modules/babel-runtime/core-js/array/from.js"),o=(n=s)&&n.__esModule?n:{default:n};t.default=function(e){return Array.isArray(e)?e:(0,o.default)(e)}},"./node_modules/babel-runtime/helpers/toConsumableArray.js":function(e,t,a){"use strict";t.__esModule=!0;var n,s=a("./node_modules/babel-runtime/core-js/array/from.js"),o=(n=s)&&n.__esModule?n:{default:n};t.default=function(e){if(Array.isArray(e)){for(var t=0,a=Array(e.length);t<e.length;t++)a[t]=e[t];return a}return(0,o.default)(e)}},"./node_modules/babel-runtime/helpers/typeof.js":function(e,t,a){"use strict";t.__esModule=!0;var n=r(a("./node_modules/babel-runtime/core-js/symbol/iterator.js")),s=r(a("./node_modules/babel-runtime/core-js/symbol.js")),o="function"==typeof s.default&&"symbol"==typeof n.default?function(e){return typeof e}:function(e){return e&&"function"==typeof s.default&&e.constructor===s.default&&e!==s.default.prototype?"symbol":typeof e};function r(e){return e&&e.__esModule?e:{default:e}}t.default="function"==typeof s.default&&"symbol"===o(n.default)?function(e){return void 0===e?"undefined":o(e)}:function(e){return e&&"function"==typeof s.default&&e.constructor===s.default&&e!==s.default.prototype?"symbol":void 0===e?"undefined":o(e)}},"./node_modules/babel-runtime/regenerator/index.js":function(e,t,a){e.exports=a("./node_modules/regenerator-runtime/runtime-module.js")},"./node_modules/core-js/library/fn/array/from.js":function(e,t,a){a("./node_modules/core-js/library/modules/es6.string.iterator.js"),a("./node_modules/core-js/library/modules/es6.array.from.js"),e.exports=a("./node_modules/core-js/library/modules/_core.js").Array.from},"./node_modules/core-js/library/fn/get-iterator.js":function(e,t,a){a("./node_modules/core-js/library/modules/web.dom.iterable.js"),a("./node_modules/core-js/library/modules/es6.string.iterator.js"),e.exports=a("./node_modules/core-js/library/modules/core.get-iterator.js")},"./node_modules/core-js/library/fn/is-iterable.js":function(e,t,a){a("./node_modules/core-js/library/modules/web.dom.iterable.js"),a("./node_modules/core-js/library/modules/es6.string.iterator.js"),e.exports=a("./node_modules/core-js/library/modules/core.is-iterable.js")},"./node_modules/core-js/library/fn/json/stringify.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_core.js"),s=n.JSON||(n.JSON={stringify:JSON.stringify});e.exports=function(e){return s.stringify.apply(s,arguments)}},"./node_modules/core-js/library/fn/object/assign.js":function(e,t,a){a("./node_modules/core-js/library/modules/es6.object.assign.js"),e.exports=a("./node_modules/core-js/library/modules/_core.js").Object.assign},"./node_modules/core-js/library/fn/object/create.js":function(e,t,a){a("./node_modules/core-js/library/modules/es6.object.create.js");var n=a("./node_modules/core-js/library/modules/_core.js").Object;e.exports=function(e,t){return n.create(e,t)}},"./node_modules/core-js/library/fn/object/define-properties.js":function(e,t,a){a("./node_modules/core-js/library/modules/es6.object.define-properties.js");var n=a("./node_modules/core-js/library/modules/_core.js").Object;e.exports=function(e,t){return n.defineProperties(e,t)}},"./node_modules/core-js/library/fn/object/define-property.js":function(e,t,a){a("./node_modules/core-js/library/modules/es6.object.define-property.js");var n=a("./node_modules/core-js/library/modules/_core.js").Object;e.exports=function(e,t,a){return n.defineProperty(e,t,a)}},"./node_modules/core-js/library/fn/object/freeze.js":function(e,t,a){a("./node_modules/core-js/library/modules/es6.object.freeze.js"),e.exports=a("./node_modules/core-js/library/modules/_core.js").Object.freeze},"./node_modules/core-js/library/fn/object/keys.js":function(e,t,a){a("./node_modules/core-js/library/modules/es6.object.keys.js"),e.exports=a("./node_modules/core-js/library/modules/_core.js").Object.keys},"./node_modules/core-js/library/fn/promise.js":function(e,t,a){a("./node_modules/core-js/library/modules/es6.object.to-string.js"),a("./node_modules/core-js/library/modules/es6.string.iterator.js"),a("./node_modules/core-js/library/modules/web.dom.iterable.js"),a("./node_modules/core-js/library/modules/es6.promise.js"),a("./node_modules/core-js/library/modules/es7.promise.finally.js"),a("./node_modules/core-js/library/modules/es7.promise.try.js"),e.exports=a("./node_modules/core-js/library/modules/_core.js").Promise},"./node_modules/core-js/library/fn/symbol/index.js":function(e,t,a){a("./node_modules/core-js/library/modules/es6.symbol.js"),a("./node_modules/core-js/library/modules/es6.object.to-string.js"),a("./node_modules/core-js/library/modules/es7.symbol.async-iterator.js"),a("./node_modules/core-js/library/modules/es7.symbol.observable.js"),e.exports=a("./node_modules/core-js/library/modules/_core.js").Symbol},"./node_modules/core-js/library/fn/symbol/iterator.js":function(e,t,a){a("./node_modules/core-js/library/modules/es6.string.iterator.js"),a("./node_modules/core-js/library/modules/web.dom.iterable.js"),e.exports=a("./node_modules/core-js/library/modules/_wks-ext.js").f("iterator")},"./node_modules/core-js/library/modules/_a-function.js":function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},"./node_modules/core-js/library/modules/_add-to-unscopables.js":function(e,t){e.exports=function(){}},"./node_modules/core-js/library/modules/_an-instance.js":function(e,t){e.exports=function(e,t,a,n){if(!(e instanceof t)||void 0!==n&&n in e)throw TypeError(a+": incorrect invocation!");return e}},"./node_modules/core-js/library/modules/_an-object.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_is-object.js");e.exports=function(e){if(!n(e))throw TypeError(e+" is not an object!");return e}},"./node_modules/core-js/library/modules/_array-includes.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_to-iobject.js"),s=a("./node_modules/core-js/library/modules/_to-length.js"),o=a("./node_modules/core-js/library/modules/_to-absolute-index.js");e.exports=function(e){return function(t,a,r){var l,i=n(t),c=s(i.length),d=o(r,c);if(e&&a!=a){for(;c>d;)if((l=i[d++])!=l)return!0}else for(;c>d;d++)if((e||d in i)&&i[d]===a)return e||d||0;return!e&&-1}}},"./node_modules/core-js/library/modules/_classof.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_cof.js"),s=a("./node_modules/core-js/library/modules/_wks.js")("toStringTag"),o="Arguments"==n(function(){return arguments}());e.exports=function(e){var t,a,r;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(a=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),s))?a:o?n(t):"Object"==(r=n(t))&&"function"==typeof t.callee?"Arguments":r}},"./node_modules/core-js/library/modules/_cof.js":function(e,t){var a={}.toString;e.exports=function(e){return a.call(e).slice(8,-1)}},"./node_modules/core-js/library/modules/_core.js":function(e,t){var a=e.exports={version:"2.5.6"};"number"==typeof __e&&(__e=a)},"./node_modules/core-js/library/modules/_create-property.js":function(e,t,a){"use strict";var n=a("./node_modules/core-js/library/modules/_object-dp.js"),s=a("./node_modules/core-js/library/modules/_property-desc.js");e.exports=function(e,t,a){t in e?n.f(e,t,s(0,a)):e[t]=a}},"./node_modules/core-js/library/modules/_ctx.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_a-function.js");e.exports=function(e,t,a){if(n(e),void 0===t)return e;switch(a){case 1:return function(a){return e.call(t,a)};case 2:return function(a,n){return e.call(t,a,n)};case 3:return function(a,n,s){return e.call(t,a,n,s)}}return function(){return e.apply(t,arguments)}}},"./node_modules/core-js/library/modules/_defined.js":function(e,t){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},"./node_modules/core-js/library/modules/_descriptors.js":function(e,t,a){e.exports=!a("./node_modules/core-js/library/modules/_fails.js")(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},"./node_modules/core-js/library/modules/_dom-create.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_is-object.js"),s=a("./node_modules/core-js/library/modules/_global.js").document,o=n(s)&&n(s.createElement);e.exports=function(e){return o?s.createElement(e):{}}},"./node_modules/core-js/library/modules/_enum-bug-keys.js":function(e,t){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},"./node_modules/core-js/library/modules/_enum-keys.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_object-keys.js"),s=a("./node_modules/core-js/library/modules/_object-gops.js"),o=a("./node_modules/core-js/library/modules/_object-pie.js");e.exports=function(e){var t=n(e),a=s.f;if(a)for(var r,l=a(e),i=o.f,c=0;l.length>c;)i.call(e,r=l[c++])&&t.push(r);return t}},"./node_modules/core-js/library/modules/_export.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_global.js"),s=a("./node_modules/core-js/library/modules/_core.js"),o=a("./node_modules/core-js/library/modules/_ctx.js"),r=a("./node_modules/core-js/library/modules/_hide.js"),l=a("./node_modules/core-js/library/modules/_has.js"),i=function(e,t,a){var c,d,u,p=e&i.F,m=e&i.G,f=e&i.S,g=e&i.P,h=e&i.B,v=e&i.W,b=m?s:s[t]||(s[t]={}),y=b.prototype,_=m?n:f?n[t]:(n[t]||{}).prototype;for(c in m&&(a=t),a)(d=!p&&_&&void 0!==_[c])&&l(b,c)||(u=d?_[c]:a[c],b[c]=m&&"function"!=typeof _[c]?a[c]:h&&d?o(u,n):v&&_[c]==u?function(e){var t=function(t,a,n){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,a)}return new e(t,a,n)}return e.apply(this,arguments)};return t.prototype=e.prototype,t}(u):g&&"function"==typeof u?o(Function.call,u):u,g&&((b.virtual||(b.virtual={}))[c]=u,e&i.R&&y&&!y[c]&&r(y,c,u)))};i.F=1,i.G=2,i.S=4,i.P=8,i.B=16,i.W=32,i.U=64,i.R=128,e.exports=i},"./node_modules/core-js/library/modules/_fails.js":function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},"./node_modules/core-js/library/modules/_for-of.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_ctx.js"),s=a("./node_modules/core-js/library/modules/_iter-call.js"),o=a("./node_modules/core-js/library/modules/_is-array-iter.js"),r=a("./node_modules/core-js/library/modules/_an-object.js"),l=a("./node_modules/core-js/library/modules/_to-length.js"),i=a("./node_modules/core-js/library/modules/core.get-iterator-method.js"),c={},d={};(t=e.exports=function(e,t,a,u,p){var m,f,g,h,v=p?function(){return e}:i(e),b=n(a,u,t?2:1),y=0;if("function"!=typeof v)throw TypeError(e+" is not iterable!");if(o(v)){for(m=l(e.length);m>y;y++)if((h=t?b(r(f=e[y])[0],f[1]):b(e[y]))===c||h===d)return h}else for(g=v.call(e);!(f=g.next()).done;)if((h=s(g,b,f.value,t))===c||h===d)return h}).BREAK=c,t.RETURN=d},"./node_modules/core-js/library/modules/_global.js":function(e,t){var a=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=a)},"./node_modules/core-js/library/modules/_has.js":function(e,t){var a={}.hasOwnProperty;e.exports=function(e,t){return a.call(e,t)}},"./node_modules/core-js/library/modules/_hide.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_object-dp.js"),s=a("./node_modules/core-js/library/modules/_property-desc.js");e.exports=a("./node_modules/core-js/library/modules/_descriptors.js")?function(e,t,a){return n.f(e,t,s(1,a))}:function(e,t,a){return e[t]=a,e}},"./node_modules/core-js/library/modules/_html.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_global.js").document;e.exports=n&&n.documentElement},"./node_modules/core-js/library/modules/_ie8-dom-define.js":function(e,t,a){e.exports=!a("./node_modules/core-js/library/modules/_descriptors.js")&&!a("./node_modules/core-js/library/modules/_fails.js")(function(){return 7!=Object.defineProperty(a("./node_modules/core-js/library/modules/_dom-create.js")("div"),"a",{get:function(){return 7}}).a})},"./node_modules/core-js/library/modules/_invoke.js":function(e,t){e.exports=function(e,t,a){var n=void 0===a;switch(t.length){case 0:return n?e():e.call(a);case 1:return n?e(t[0]):e.call(a,t[0]);case 2:return n?e(t[0],t[1]):e.call(a,t[0],t[1]);case 3:return n?e(t[0],t[1],t[2]):e.call(a,t[0],t[1],t[2]);case 4:return n?e(t[0],t[1],t[2],t[3]):e.call(a,t[0],t[1],t[2],t[3])}return e.apply(a,t)}},"./node_modules/core-js/library/modules/_iobject.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_cof.js");e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==n(e)?e.split(""):Object(e)}},"./node_modules/core-js/library/modules/_is-array-iter.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_iterators.js"),s=a("./node_modules/core-js/library/modules/_wks.js")("iterator"),o=Array.prototype;e.exports=function(e){return void 0!==e&&(n.Array===e||o[s]===e)}},"./node_modules/core-js/library/modules/_is-array.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_cof.js");e.exports=Array.isArray||function(e){return"Array"==n(e)}},"./node_modules/core-js/library/modules/_is-object.js":function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},"./node_modules/core-js/library/modules/_iter-call.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_an-object.js");e.exports=function(e,t,a,s){try{return s?t(n(a)[0],a[1]):t(a)}catch(t){var o=e.return;throw void 0!==o&&n(o.call(e)),t}}},"./node_modules/core-js/library/modules/_iter-create.js":function(e,t,a){"use strict";var n=a("./node_modules/core-js/library/modules/_object-create.js"),s=a("./node_modules/core-js/library/modules/_property-desc.js"),o=a("./node_modules/core-js/library/modules/_set-to-string-tag.js"),r={};a("./node_modules/core-js/library/modules/_hide.js")(r,a("./node_modules/core-js/library/modules/_wks.js")("iterator"),function(){return this}),e.exports=function(e,t,a){e.prototype=n(r,{next:s(1,a)}),o(e,t+" Iterator")}},"./node_modules/core-js/library/modules/_iter-define.js":function(e,t,a){"use strict";var n=a("./node_modules/core-js/library/modules/_library.js"),s=a("./node_modules/core-js/library/modules/_export.js"),o=a("./node_modules/core-js/library/modules/_redefine.js"),r=a("./node_modules/core-js/library/modules/_hide.js"),l=a("./node_modules/core-js/library/modules/_iterators.js"),i=a("./node_modules/core-js/library/modules/_iter-create.js"),c=a("./node_modules/core-js/library/modules/_set-to-string-tag.js"),d=a("./node_modules/core-js/library/modules/_object-gpo.js"),u=a("./node_modules/core-js/library/modules/_wks.js")("iterator"),p=!([].keys&&"next"in[].keys()),m=function(){return this};e.exports=function(e,t,a,f,g,h,v){i(a,t,f);var b,y,_,w=function(e){if(!p&&e in A)return A[e];switch(e){case"keys":case"values":return function(){return new a(this,e)}}return function(){return new a(this,e)}},x=t+" Iterator",j="values"==g,k=!1,A=e.prototype,S=A[u]||A["@@iterator"]||g&&A[g],M=S||w(g),P=g?j?w("entries"):M:void 0,E="Array"==t&&A.entries||S;if(E&&(_=d(E.call(new e)))!==Object.prototype&&_.next&&(c(_,x,!0),n||"function"==typeof _[u]||r(_,u,m)),j&&S&&"values"!==S.name&&(k=!0,M=function(){return S.call(this)}),n&&!v||!p&&!k&&A[u]||r(A,u,M),l[t]=M,l[x]=m,g)if(b={values:j?M:w("values"),keys:h?M:w("keys"),entries:P},v)for(y in b)y in A||o(A,y,b[y]);else s(s.P+s.F*(p||k),t,b);return b}},"./node_modules/core-js/library/modules/_iter-detect.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_wks.js")("iterator"),s=!1;try{var o=[7][n]();o.return=function(){s=!0},Array.from(o,function(){throw 2})}catch(e){}e.exports=function(e,t){if(!t&&!s)return!1;var a=!1;try{var o=[7],r=o[n]();r.next=function(){return{done:a=!0}},o[n]=function(){return r},e(o)}catch(e){}return a}},"./node_modules/core-js/library/modules/_iter-step.js":function(e,t){e.exports=function(e,t){return{value:t,done:!!e}}},"./node_modules/core-js/library/modules/_iterators.js":function(e,t){e.exports={}},"./node_modules/core-js/library/modules/_library.js":function(e,t){e.exports=!0},"./node_modules/core-js/library/modules/_meta.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_uid.js")("meta"),s=a("./node_modules/core-js/library/modules/_is-object.js"),o=a("./node_modules/core-js/library/modules/_has.js"),r=a("./node_modules/core-js/library/modules/_object-dp.js").f,l=0,i=Object.isExtensible||function(){return!0},c=!a("./node_modules/core-js/library/modules/_fails.js")(function(){return i(Object.preventExtensions({}))}),d=function(e){r(e,n,{value:{i:"O"+ ++l,w:{}}})},u=e.exports={KEY:n,NEED:!1,fastKey:function(e,t){if(!s(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!o(e,n)){if(!i(e))return"F";if(!t)return"E";d(e)}return e[n].i},getWeak:function(e,t){if(!o(e,n)){if(!i(e))return!0;if(!t)return!1;d(e)}return e[n].w},onFreeze:function(e){return c&&u.NEED&&i(e)&&!o(e,n)&&d(e),e}}},"./node_modules/core-js/library/modules/_microtask.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_global.js"),s=a("./node_modules/core-js/library/modules/_task.js").set,o=n.MutationObserver||n.WebKitMutationObserver,r=n.process,l=n.Promise,i="process"==a("./node_modules/core-js/library/modules/_cof.js")(r);e.exports=function(){var e,t,a,c=function(){var n,s;for(i&&(n=r.domain)&&n.exit();e;){s=e.fn,e=e.next;try{s()}catch(n){throw e?a():t=void 0,n}}t=void 0,n&&n.enter()};if(i)a=function(){r.nextTick(c)};else if(!o||n.navigator&&n.navigator.standalone)if(l&&l.resolve){var d=l.resolve(void 0);a=function(){d.then(c)}}else a=function(){s.call(n,c)};else{var u=!0,p=document.createTextNode("");new o(c).observe(p,{characterData:!0}),a=function(){p.data=u=!u}}return function(n){var s={fn:n,next:void 0};t&&(t.next=s),e||(e=s,a()),t=s}}},"./node_modules/core-js/library/modules/_new-promise-capability.js":function(e,t,a){"use strict";var n=a("./node_modules/core-js/library/modules/_a-function.js");e.exports.f=function(e){return new function(e){var t,a;this.promise=new e(function(e,n){if(void 0!==t||void 0!==a)throw TypeError("Bad Promise constructor");t=e,a=n}),this.resolve=n(t),this.reject=n(a)}(e)}},"./node_modules/core-js/library/modules/_object-assign.js":function(e,t,a){"use strict";var n=a("./node_modules/core-js/library/modules/_object-keys.js"),s=a("./node_modules/core-js/library/modules/_object-gops.js"),o=a("./node_modules/core-js/library/modules/_object-pie.js"),r=a("./node_modules/core-js/library/modules/_to-object.js"),l=a("./node_modules/core-js/library/modules/_iobject.js"),i=Object.assign;e.exports=!i||a("./node_modules/core-js/library/modules/_fails.js")(function(){var e={},t={},a=Symbol(),n="abcdefghijklmnopqrst";return e[a]=7,n.split("").forEach(function(e){t[e]=e}),7!=i({},e)[a]||Object.keys(i({},t)).join("")!=n})?function(e,t){for(var a=r(e),i=arguments.length,c=1,d=s.f,u=o.f;i>c;)for(var p,m=l(arguments[c++]),f=d?n(m).concat(d(m)):n(m),g=f.length,h=0;g>h;)u.call(m,p=f[h++])&&(a[p]=m[p]);return a}:i},"./node_modules/core-js/library/modules/_object-create.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_an-object.js"),s=a("./node_modules/core-js/library/modules/_object-dps.js"),o=a("./node_modules/core-js/library/modules/_enum-bug-keys.js"),r=a("./node_modules/core-js/library/modules/_shared-key.js")("IE_PROTO"),l=function(){},i=function(){var e,t=a("./node_modules/core-js/library/modules/_dom-create.js")("iframe"),n=o.length;for(t.style.display="none",a("./node_modules/core-js/library/modules/_html.js").appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),i=e.F;n--;)delete i.prototype[o[n]];return i()};e.exports=Object.create||function(e,t){var a;return null!==e?(l.prototype=n(e),a=new l,l.prototype=null,a[r]=e):a=i(),void 0===t?a:s(a,t)}},"./node_modules/core-js/library/modules/_object-dp.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_an-object.js"),s=a("./node_modules/core-js/library/modules/_ie8-dom-define.js"),o=a("./node_modules/core-js/library/modules/_to-primitive.js"),r=Object.defineProperty;t.f=a("./node_modules/core-js/library/modules/_descriptors.js")?Object.defineProperty:function(e,t,a){if(n(e),t=o(t,!0),n(a),s)try{return r(e,t,a)}catch(e){}if("get"in a||"set"in a)throw TypeError("Accessors not supported!");return"value"in a&&(e[t]=a.value),e}},"./node_modules/core-js/library/modules/_object-dps.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_object-dp.js"),s=a("./node_modules/core-js/library/modules/_an-object.js"),o=a("./node_modules/core-js/library/modules/_object-keys.js");e.exports=a("./node_modules/core-js/library/modules/_descriptors.js")?Object.defineProperties:function(e,t){s(e);for(var a,r=o(t),l=r.length,i=0;l>i;)n.f(e,a=r[i++],t[a]);return e}},"./node_modules/core-js/library/modules/_object-gopd.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_object-pie.js"),s=a("./node_modules/core-js/library/modules/_property-desc.js"),o=a("./node_modules/core-js/library/modules/_to-iobject.js"),r=a("./node_modules/core-js/library/modules/_to-primitive.js"),l=a("./node_modules/core-js/library/modules/_has.js"),i=a("./node_modules/core-js/library/modules/_ie8-dom-define.js"),c=Object.getOwnPropertyDescriptor;t.f=a("./node_modules/core-js/library/modules/_descriptors.js")?c:function(e,t){if(e=o(e),t=r(t,!0),i)try{return c(e,t)}catch(e){}if(l(e,t))return s(!n.f.call(e,t),e[t])}},"./node_modules/core-js/library/modules/_object-gopn-ext.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_to-iobject.js"),s=a("./node_modules/core-js/library/modules/_object-gopn.js").f,o={}.toString,r="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];e.exports.f=function(e){return r&&"[object Window]"==o.call(e)?function(e){try{return s(e)}catch(e){return r.slice()}}(e):s(n(e))}},"./node_modules/core-js/library/modules/_object-gopn.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_object-keys-internal.js"),s=a("./node_modules/core-js/library/modules/_enum-bug-keys.js").concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return n(e,s)}},"./node_modules/core-js/library/modules/_object-gops.js":function(e,t){t.f=Object.getOwnPropertySymbols},"./node_modules/core-js/library/modules/_object-gpo.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_has.js"),s=a("./node_modules/core-js/library/modules/_to-object.js"),o=a("./node_modules/core-js/library/modules/_shared-key.js")("IE_PROTO"),r=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=s(e),n(e,o)?e[o]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?r:null}},"./node_modules/core-js/library/modules/_object-keys-internal.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_has.js"),s=a("./node_modules/core-js/library/modules/_to-iobject.js"),o=a("./node_modules/core-js/library/modules/_array-includes.js")(!1),r=a("./node_modules/core-js/library/modules/_shared-key.js")("IE_PROTO");e.exports=function(e,t){var a,l=s(e),i=0,c=[];for(a in l)a!=r&&n(l,a)&&c.push(a);for(;t.length>i;)n(l,a=t[i++])&&(~o(c,a)||c.push(a));return c}},"./node_modules/core-js/library/modules/_object-keys.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_object-keys-internal.js"),s=a("./node_modules/core-js/library/modules/_enum-bug-keys.js");e.exports=Object.keys||function(e){return n(e,s)}},"./node_modules/core-js/library/modules/_object-pie.js":function(e,t){t.f={}.propertyIsEnumerable},"./node_modules/core-js/library/modules/_object-sap.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_export.js"),s=a("./node_modules/core-js/library/modules/_core.js"),o=a("./node_modules/core-js/library/modules/_fails.js");e.exports=function(e,t){var a=(s.Object||{})[e]||Object[e],r={};r[e]=t(a),n(n.S+n.F*o(function(){a(1)}),"Object",r)}},"./node_modules/core-js/library/modules/_perform.js":function(e,t){e.exports=function(e){try{return{e:!1,v:e()}}catch(e){return{e:!0,v:e}}}},"./node_modules/core-js/library/modules/_promise-resolve.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_an-object.js"),s=a("./node_modules/core-js/library/modules/_is-object.js"),o=a("./node_modules/core-js/library/modules/_new-promise-capability.js");e.exports=function(e,t){if(n(e),s(t)&&t.constructor===e)return t;var a=o.f(e);return(0,a.resolve)(t),a.promise}},"./node_modules/core-js/library/modules/_property-desc.js":function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},"./node_modules/core-js/library/modules/_redefine-all.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_hide.js");e.exports=function(e,t,a){for(var s in t)a&&e[s]?e[s]=t[s]:n(e,s,t[s]);return e}},"./node_modules/core-js/library/modules/_redefine.js":function(e,t,a){e.exports=a("./node_modules/core-js/library/modules/_hide.js")},"./node_modules/core-js/library/modules/_set-species.js":function(e,t,a){"use strict";var n=a("./node_modules/core-js/library/modules/_global.js"),s=a("./node_modules/core-js/library/modules/_core.js"),o=a("./node_modules/core-js/library/modules/_object-dp.js"),r=a("./node_modules/core-js/library/modules/_descriptors.js"),l=a("./node_modules/core-js/library/modules/_wks.js")("species");e.exports=function(e){var t="function"==typeof s[e]?s[e]:n[e];r&&t&&!t[l]&&o.f(t,l,{configurable:!0,get:function(){return this}})}},"./node_modules/core-js/library/modules/_set-to-string-tag.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_object-dp.js").f,s=a("./node_modules/core-js/library/modules/_has.js"),o=a("./node_modules/core-js/library/modules/_wks.js")("toStringTag");e.exports=function(e,t,a){e&&!s(e=a?e:e.prototype,o)&&n(e,o,{configurable:!0,value:t})}},"./node_modules/core-js/library/modules/_shared-key.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_shared.js")("keys"),s=a("./node_modules/core-js/library/modules/_uid.js");e.exports=function(e){return n[e]||(n[e]=s(e))}},"./node_modules/core-js/library/modules/_shared.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_core.js"),s=a("./node_modules/core-js/library/modules/_global.js"),o=s["__core-js_shared__"]||(s["__core-js_shared__"]={});(e.exports=function(e,t){return o[e]||(o[e]=void 0!==t?t:{})})("versions",[]).push({version:n.version,mode:a("./node_modules/core-js/library/modules/_library.js")?"pure":"global",copyright:"© 2018 Denis Pushkarev (zloirock.ru)"})},"./node_modules/core-js/library/modules/_species-constructor.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_an-object.js"),s=a("./node_modules/core-js/library/modules/_a-function.js"),o=a("./node_modules/core-js/library/modules/_wks.js")("species");e.exports=function(e,t){var a,r=n(e).constructor;return void 0===r||void 0==(a=n(r)[o])?t:s(a)}},"./node_modules/core-js/library/modules/_string-at.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_to-integer.js"),s=a("./node_modules/core-js/library/modules/_defined.js");e.exports=function(e){return function(t,a){var o,r,l=String(s(t)),i=n(a),c=l.length;return i<0||i>=c?e?"":void 0:(o=l.charCodeAt(i))<55296||o>56319||i+1===c||(r=l.charCodeAt(i+1))<56320||r>57343?e?l.charAt(i):o:e?l.slice(i,i+2):r-56320+(o-55296<<10)+65536}}},"./node_modules/core-js/library/modules/_task.js":function(e,t,a){var n,s,o,r=a("./node_modules/core-js/library/modules/_ctx.js"),l=a("./node_modules/core-js/library/modules/_invoke.js"),i=a("./node_modules/core-js/library/modules/_html.js"),c=a("./node_modules/core-js/library/modules/_dom-create.js"),d=a("./node_modules/core-js/library/modules/_global.js"),u=d.process,p=d.setImmediate,m=d.clearImmediate,f=d.MessageChannel,g=d.Dispatch,h=0,v={},b=function(){var e=+this;if(v.hasOwnProperty(e)){var t=v[e];delete v[e],t()}},y=function(e){b.call(e.data)};p&&m||(p=function(e){for(var t=[],a=1;arguments.length>a;)t.push(arguments[a++]);return v[++h]=function(){l("function"==typeof e?e:Function(e),t)},n(h),h},m=function(e){delete v[e]},"process"==a("./node_modules/core-js/library/modules/_cof.js")(u)?n=function(e){u.nextTick(r(b,e,1))}:g&&g.now?n=function(e){g.now(r(b,e,1))}:f?(o=(s=new f).port2,s.port1.onmessage=y,n=r(o.postMessage,o,1)):d.addEventListener&&"function"==typeof postMessage&&!d.importScripts?(n=function(e){d.postMessage(e+"","*")},d.addEventListener("message",y,!1)):n="onreadystatechange"in c("script")?function(e){i.appendChild(c("script")).onreadystatechange=function(){i.removeChild(this),b.call(e)}}:function(e){setTimeout(r(b,e,1),0)}),e.exports={set:p,clear:m}},"./node_modules/core-js/library/modules/_to-absolute-index.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_to-integer.js"),s=Math.max,o=Math.min;e.exports=function(e,t){return(e=n(e))<0?s(e+t,0):o(e,t)}},"./node_modules/core-js/library/modules/_to-integer.js":function(e,t){var a=Math.ceil,n=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?n:a)(e)}},"./node_modules/core-js/library/modules/_to-iobject.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_iobject.js"),s=a("./node_modules/core-js/library/modules/_defined.js");e.exports=function(e){return n(s(e))}},"./node_modules/core-js/library/modules/_to-length.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_to-integer.js"),s=Math.min;e.exports=function(e){return e>0?s(n(e),9007199254740991):0}},"./node_modules/core-js/library/modules/_to-object.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_defined.js");e.exports=function(e){return Object(n(e))}},"./node_modules/core-js/library/modules/_to-primitive.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_is-object.js");e.exports=function(e,t){if(!n(e))return e;var a,s;if(t&&"function"==typeof(a=e.toString)&&!n(s=a.call(e)))return s;if("function"==typeof(a=e.valueOf)&&!n(s=a.call(e)))return s;if(!t&&"function"==typeof(a=e.toString)&&!n(s=a.call(e)))return s;throw TypeError("Can't convert object to primitive value")}},"./node_modules/core-js/library/modules/_uid.js":function(e,t){var a=0,n=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++a+n).toString(36))}},"./node_modules/core-js/library/modules/_user-agent.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_global.js").navigator;e.exports=n&&n.userAgent||""},"./node_modules/core-js/library/modules/_wks-define.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_global.js"),s=a("./node_modules/core-js/library/modules/_core.js"),o=a("./node_modules/core-js/library/modules/_library.js"),r=a("./node_modules/core-js/library/modules/_wks-ext.js"),l=a("./node_modules/core-js/library/modules/_object-dp.js").f;e.exports=function(e){var t=s.Symbol||(s.Symbol=o?{}:n.Symbol||{});"_"==e.charAt(0)||e in t||l(t,e,{value:r.f(e)})}},"./node_modules/core-js/library/modules/_wks-ext.js":function(e,t,a){t.f=a("./node_modules/core-js/library/modules/_wks.js")},"./node_modules/core-js/library/modules/_wks.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_shared.js")("wks"),s=a("./node_modules/core-js/library/modules/_uid.js"),o=a("./node_modules/core-js/library/modules/_global.js").Symbol,r="function"==typeof o;(e.exports=function(e){return n[e]||(n[e]=r&&o[e]||(r?o:s)("Symbol."+e))}).store=n},"./node_modules/core-js/library/modules/core.get-iterator-method.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_classof.js"),s=a("./node_modules/core-js/library/modules/_wks.js")("iterator"),o=a("./node_modules/core-js/library/modules/_iterators.js");e.exports=a("./node_modules/core-js/library/modules/_core.js").getIteratorMethod=function(e){if(void 0!=e)return e[s]||e["@@iterator"]||o[n(e)]}},"./node_modules/core-js/library/modules/core.get-iterator.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_an-object.js"),s=a("./node_modules/core-js/library/modules/core.get-iterator-method.js");e.exports=a("./node_modules/core-js/library/modules/_core.js").getIterator=function(e){var t=s(e);if("function"!=typeof t)throw TypeError(e+" is not iterable!");return n(t.call(e))}},"./node_modules/core-js/library/modules/core.is-iterable.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_classof.js"),s=a("./node_modules/core-js/library/modules/_wks.js")("iterator"),o=a("./node_modules/core-js/library/modules/_iterators.js");e.exports=a("./node_modules/core-js/library/modules/_core.js").isIterable=function(e){var t=Object(e);return void 0!==t[s]||"@@iterator"in t||o.hasOwnProperty(n(t))}},"./node_modules/core-js/library/modules/es6.array.from.js":function(e,t,a){"use strict";var n=a("./node_modules/core-js/library/modules/_ctx.js"),s=a("./node_modules/core-js/library/modules/_export.js"),o=a("./node_modules/core-js/library/modules/_to-object.js"),r=a("./node_modules/core-js/library/modules/_iter-call.js"),l=a("./node_modules/core-js/library/modules/_is-array-iter.js"),i=a("./node_modules/core-js/library/modules/_to-length.js"),c=a("./node_modules/core-js/library/modules/_create-property.js"),d=a("./node_modules/core-js/library/modules/core.get-iterator-method.js");s(s.S+s.F*!a("./node_modules/core-js/library/modules/_iter-detect.js")(function(e){Array.from(e)}),"Array",{from:function(e){var t,a,s,u,p=o(e),m="function"==typeof this?this:Array,f=arguments.length,g=f>1?arguments[1]:void 0,h=void 0!==g,v=0,b=d(p);if(h&&(g=n(g,f>2?arguments[2]:void 0,2)),void 0==b||m==Array&&l(b))for(a=new m(t=i(p.length));t>v;v++)c(a,v,h?g(p[v],v):p[v]);else for(u=b.call(p),a=new m;!(s=u.next()).done;v++)c(a,v,h?r(u,g,[s.value,v],!0):s.value);return a.length=v,a}})},"./node_modules/core-js/library/modules/es6.array.iterator.js":function(e,t,a){"use strict";var n=a("./node_modules/core-js/library/modules/_add-to-unscopables.js"),s=a("./node_modules/core-js/library/modules/_iter-step.js"),o=a("./node_modules/core-js/library/modules/_iterators.js"),r=a("./node_modules/core-js/library/modules/_to-iobject.js");e.exports=a("./node_modules/core-js/library/modules/_iter-define.js")(Array,"Array",function(e,t){this._t=r(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,a=this._i++;return!e||a>=e.length?(this._t=void 0,s(1)):s(0,"keys"==t?a:"values"==t?e[a]:[a,e[a]])},"values"),o.Arguments=o.Array,n("keys"),n("values"),n("entries")},"./node_modules/core-js/library/modules/es6.object.assign.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_export.js");n(n.S+n.F,"Object",{assign:a("./node_modules/core-js/library/modules/_object-assign.js")})},"./node_modules/core-js/library/modules/es6.object.create.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_export.js");n(n.S,"Object",{create:a("./node_modules/core-js/library/modules/_object-create.js")})},"./node_modules/core-js/library/modules/es6.object.define-properties.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_export.js");n(n.S+n.F*!a("./node_modules/core-js/library/modules/_descriptors.js"),"Object",{defineProperties:a("./node_modules/core-js/library/modules/_object-dps.js")})},"./node_modules/core-js/library/modules/es6.object.define-property.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_export.js");n(n.S+n.F*!a("./node_modules/core-js/library/modules/_descriptors.js"),"Object",{defineProperty:a("./node_modules/core-js/library/modules/_object-dp.js").f})},"./node_modules/core-js/library/modules/es6.object.freeze.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_is-object.js"),s=a("./node_modules/core-js/library/modules/_meta.js").onFreeze;a("./node_modules/core-js/library/modules/_object-sap.js")("freeze",function(e){return function(t){return e&&n(t)?e(s(t)):t}})},"./node_modules/core-js/library/modules/es6.object.keys.js":function(e,t,a){var n=a("./node_modules/core-js/library/modules/_to-object.js"),s=a("./node_modules/core-js/library/modules/_object-keys.js");a("./node_modules/core-js/library/modules/_object-sap.js")("keys",function(){return function(e){return s(n(e))}})},"./node_modules/core-js/library/modules/es6.object.to-string.js":function(e,t){},"./node_modules/core-js/library/modules/es6.promise.js":function(e,t,a){"use strict";var n,s,o,r,l=a("./node_modules/core-js/library/modules/_library.js"),i=a("./node_modules/core-js/library/modules/_global.js"),c=a("./node_modules/core-js/library/modules/_ctx.js"),d=a("./node_modules/core-js/library/modules/_classof.js"),u=a("./node_modules/core-js/library/modules/_export.js"),p=a("./node_modules/core-js/library/modules/_is-object.js"),m=a("./node_modules/core-js/library/modules/_a-function.js"),f=a("./node_modules/core-js/library/modules/_an-instance.js"),g=a("./node_modules/core-js/library/modules/_for-of.js"),h=a("./node_modules/core-js/library/modules/_species-constructor.js"),v=a("./node_modules/core-js/library/modules/_task.js").set,b=a("./node_modules/core-js/library/modules/_microtask.js")(),y=a("./node_modules/core-js/library/modules/_new-promise-capability.js"),_=a("./node_modules/core-js/library/modules/_perform.js"),w=a("./node_modules/core-js/library/modules/_user-agent.js"),x=a("./node_modules/core-js/library/modules/_promise-resolve.js"),j=i.TypeError,k=i.process,A=k&&k.versions,S=A&&A.v8||"",M=i.Promise,P="process"==d(k),E=function(){},C=s=y.f,T=!!function(){try{var e=M.resolve(1),t=(e.constructor={})[a("./node_modules/core-js/library/modules/_wks.js")("species")]=function(e){e(E,E)};return(P||"function"==typeof PromiseRejectionEvent)&&e.then(E)instanceof t&&0!==S.indexOf("6.6")&&-1===w.indexOf("Chrome/66")}catch(e){}}(),I=function(e){var t;return!(!p(e)||"function"!=typeof(t=e.then))&&t},D=function(e,t){if(!e._n){e._n=!0;var a=e._c;b(function(){for(var n=e._v,s=1==e._s,o=0,r=function(t){var a,o,r,l=s?t.ok:t.fail,i=t.resolve,c=t.reject,d=t.domain;try{l?(s||(2==e._h&&R(e),e._h=1),!0===l?a=n:(d&&d.enter(),a=l(n),d&&(d.exit(),r=!0)),a===t.promise?c(j("Promise-chain cycle")):(o=I(a))?o.call(a,i,c):i(a)):c(n)}catch(e){d&&!r&&d.exit(),c(e)}};a.length>o;)r(a[o++]);e._c=[],e._n=!1,t&&!e._h&&O(e)})}},O=function(e){v.call(i,function(){var t,a,n,s=e._v,o=L(e);if(o&&(t=_(function(){P?k.emit("unhandledRejection",s,e):(a=i.onunhandledrejection)?a({promise:e,reason:s}):(n=i.console)&&n.error&&n.error("Unhandled promise rejection",s)}),e._h=P||L(e)?2:1),e._a=void 0,o&&t.e)throw t.v})},L=function(e){return 1!==e._h&&0===(e._a||e._c).length},R=function(e){v.call(i,function(){var t;P?k.emit("rejectionHandled",e):(t=i.onrejectionhandled)&&t({promise:e,reason:e._v})})},N=function(e){var t=this;t._d||(t._d=!0,(t=t._w||t)._v=e,t._s=2,t._a||(t._a=t._c.slice()),D(t,!0))},$=function(e){var t,a=this;if(!a._d){a._d=!0,a=a._w||a;try{if(a===e)throw j("Promise can't be resolved itself");(t=I(e))?b(function(){var n={_w:a,_d:!1};try{t.call(e,c($,n,1),c(N,n,1))}catch(e){N.call(n,e)}}):(a._v=e,a._s=1,D(a,!1))}catch(e){N.call({_w:a,_d:!1},e)}}};T||(M=function(e){f(this,M,"Promise","_h"),m(e),n.call(this);try{e(c($,this,1),c(N,this,1))}catch(e){N.call(this,e)}},(n=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=a("./node_modules/core-js/library/modules/_redefine-all.js")(M.prototype,{then:function(e,t){var a=C(h(this,M));return a.ok="function"!=typeof e||e,a.fail="function"==typeof t&&t,a.domain=P?k.domain:void 0,this._c.push(a),this._a&&this._a.push(a),this._s&&D(this,!1),a.promise},catch:function(e){return this.then(void 0,e)}}),o=function(){var e=new n;this.promise=e,this.resolve=c($,e,1),this.reject=c(N,e,1)},y.f=C=function(e){return e===M||e===r?new o(e):s(e)}),u(u.G+u.W+u.F*!T,{Promise:M}),a("./node_modules/core-js/library/modules/_set-to-string-tag.js")(M,"Promise"),a("./node_modules/core-js/library/modules/_set-species.js")("Promise"),r=a("./node_modules/core-js/library/modules/_core.js").Promise,u(u.S+u.F*!T,"Promise",{reject:function(e){var t=C(this);return(0,t.reject)(e),t.promise}}),u(u.S+u.F*(l||!T),"Promise",{resolve:function(e){return x(l&&this===r?M:this,e)}}),u(u.S+u.F*!(T&&a("./node_modules/core-js/library/modules/_iter-detect.js")(function(e){M.all(e).catch(E)})),"Promise",{all:function(e){var t=this,a=C(t),n=a.resolve,s=a.reject,o=_(function(){var a=[],o=0,r=1;g(e,!1,function(e){var l=o++,i=!1;a.push(void 0),r++,t.resolve(e).then(function(e){i||(i=!0,a[l]=e,--r||n(a))},s)}),--r||n(a)});return o.e&&s(o.v),a.promise},race:function(e){var t=this,a=C(t),n=a.reject,s=_(function(){g(e,!1,function(e){t.resolve(e).then(a.resolve,n)})});return s.e&&n(s.v),a.promise}})},"./node_modules/core-js/library/modules/es6.string.iterator.js":function(e,t,a){"use strict";var n=a("./node_modules/core-js/library/modules/_string-at.js")(!0);a("./node_modules/core-js/library/modules/_iter-define.js")(String,"String",function(e){this._t=String(e),this._i=0},function(){var e,t=this._t,a=this._i;return a>=t.length?{value:void 0,done:!0}:(e=n(t,a),this._i+=e.length,{value:e,done:!1})})},"./node_modules/core-js/library/modules/es6.symbol.js":function(e,t,a){"use strict";var n=a("./node_modules/core-js/library/modules/_global.js"),s=a("./node_modules/core-js/library/modules/_has.js"),o=a("./node_modules/core-js/library/modules/_descriptors.js"),r=a("./node_modules/core-js/library/modules/_export.js"),l=a("./node_modules/core-js/library/modules/_redefine.js"),i=a("./node_modules/core-js/library/modules/_meta.js").KEY,c=a("./node_modules/core-js/library/modules/_fails.js"),d=a("./node_modules/core-js/library/modules/_shared.js"),u=a("./node_modules/core-js/library/modules/_set-to-string-tag.js"),p=a("./node_modules/core-js/library/modules/_uid.js"),m=a("./node_modules/core-js/library/modules/_wks.js"),f=a("./node_modules/core-js/library/modules/_wks-ext.js"),g=a("./node_modules/core-js/library/modules/_wks-define.js"),h=a("./node_modules/core-js/library/modules/_enum-keys.js"),v=a("./node_modules/core-js/library/modules/_is-array.js"),b=a("./node_modules/core-js/library/modules/_an-object.js"),y=a("./node_modules/core-js/library/modules/_is-object.js"),_=a("./node_modules/core-js/library/modules/_to-iobject.js"),w=a("./node_modules/core-js/library/modules/_to-primitive.js"),x=a("./node_modules/core-js/library/modules/_property-desc.js"),j=a("./node_modules/core-js/library/modules/_object-create.js"),k=a("./node_modules/core-js/library/modules/_object-gopn-ext.js"),A=a("./node_modules/core-js/library/modules/_object-gopd.js"),S=a("./node_modules/core-js/library/modules/_object-dp.js"),M=a("./node_modules/core-js/library/modules/_object-keys.js"),P=A.f,E=S.f,C=k.f,T=n.Symbol,I=n.JSON,D=I&&I.stringify,O=m("_hidden"),L=m("toPrimitive"),R={}.propertyIsEnumerable,N=d("symbol-registry"),$=d("symbols"),F=d("op-symbols"),U=Object.prototype,z="function"==typeof T,V=n.QObject,B=!V||!V.prototype||!V.prototype.findChild,K=o&&c(function(){return 7!=j(E({},"a",{get:function(){return E(this,"a",{value:7}).a}})).a})?function(e,t,a){var n=P(U,t);n&&delete U[t],E(e,t,a),n&&e!==U&&E(U,t,n)}:E,q=function(e){var t=$[e]=j(T.prototype);return t._k=e,t},G=z&&"symbol"==typeof T.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof T},H=function(e,t,a){return e===U&&H(F,t,a),b(e),t=w(t,!0),b(a),s($,t)?(a.enumerable?(s(e,O)&&e[O][t]&&(e[O][t]=!1),a=j(a,{enumerable:x(0,!1)})):(s(e,O)||E(e,O,x(1,{})),e[O][t]=!0),K(e,t,a)):E(e,t,a)},W=function(e,t){b(e);for(var a,n=h(t=_(t)),s=0,o=n.length;o>s;)H(e,a=n[s++],t[a]);return e},Y=function(e){var t=R.call(this,e=w(e,!0));return!(this===U&&s($,e)&&!s(F,e))&&(!(t||!s(this,e)||!s($,e)||s(this,O)&&this[O][e])||t)},X=function(e,t){if(e=_(e),t=w(t,!0),e!==U||!s($,t)||s(F,t)){var a=P(e,t);return!a||!s($,t)||s(e,O)&&e[O][t]||(a.enumerable=!0),a}},Z=function(e){for(var t,a=C(_(e)),n=[],o=0;a.length>o;)s($,t=a[o++])||t==O||t==i||n.push(t);return n},Q=function(e){for(var t,a=e===U,n=C(a?F:_(e)),o=[],r=0;n.length>r;)!s($,t=n[r++])||a&&!s(U,t)||o.push($[t]);return o};z||(l((T=function(){if(this instanceof T)throw TypeError("Symbol is not a constructor!");var e=p(arguments.length>0?arguments[0]:void 0),t=function(a){this===U&&t.call(F,a),s(this,O)&&s(this[O],e)&&(this[O][e]=!1),K(this,e,x(1,a))};return o&&B&&K(U,e,{configurable:!0,set:t}),q(e)}).prototype,"toString",function(){return this._k}),A.f=X,S.f=H,a("./node_modules/core-js/library/modules/_object-gopn.js").f=k.f=Z,a("./node_modules/core-js/library/modules/_object-pie.js").f=Y,a("./node_modules/core-js/library/modules/_object-gops.js").f=Q,o&&!a("./node_modules/core-js/library/modules/_library.js")&&l(U,"propertyIsEnumerable",Y,!0),f.f=function(e){return q(m(e))}),r(r.G+r.W+r.F*!z,{Symbol:T});for(var J="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),ee=0;J.length>ee;)m(J[ee++]);for(var te=M(m.store),ae=0;te.length>ae;)g(te[ae++]);r(r.S+r.F*!z,"Symbol",{for:function(e){return s(N,e+="")?N[e]:N[e]=T(e)},keyFor:function(e){if(!G(e))throw TypeError(e+" is not a symbol!");for(var t in N)if(N[t]===e)return t},useSetter:function(){B=!0},useSimple:function(){B=!1}}),r(r.S+r.F*!z,"Object",{create:function(e,t){return void 0===t?j(e):W(j(e),t)},defineProperty:H,defineProperties:W,getOwnPropertyDescriptor:X,getOwnPropertyNames:Z,getOwnPropertySymbols:Q}),I&&r(r.S+r.F*(!z||c(function(){var e=T();return"[null]"!=D([e])||"{}"!=D({a:e})||"{}"!=D(Object(e))})),"JSON",{stringify:function(e){for(var t,a,n=[e],s=1;arguments.length>s;)n.push(arguments[s++]);if(a=t=n[1],(y(t)||void 0!==e)&&!G(e))return v(t)||(t=function(e,t){if("function"==typeof a&&(t=a.call(this,e,t)),!G(t))return t}),n[1]=t,D.apply(I,n)}}),T.prototype[L]||a("./node_modules/core-js/library/modules/_hide.js")(T.prototype,L,T.prototype.valueOf),u(T,"Symbol"),u(Math,"Math",!0),u(n.JSON,"JSON",!0)},"./node_modules/core-js/library/modules/es7.promise.finally.js":function(e,t,a){"use strict";var n=a("./node_modules/core-js/library/modules/_export.js"),s=a("./node_modules/core-js/library/modules/_core.js"),o=a("./node_modules/core-js/library/modules/_global.js"),r=a("./node_modules/core-js/library/modules/_species-constructor.js"),l=a("./node_modules/core-js/library/modules/_promise-resolve.js");n(n.P+n.R,"Promise",{finally:function(e){var t=r(this,s.Promise||o.Promise),a="function"==typeof e;return this.then(a?function(a){return l(t,e()).then(function(){return a})}:e,a?function(a){return l(t,e()).then(function(){throw a})}:e)}})},"./node_modules/core-js/library/modules/es7.promise.try.js":function(e,t,a){"use strict";var n=a("./node_modules/core-js/library/modules/_export.js"),s=a("./node_modules/core-js/library/modules/_new-promise-capability.js"),o=a("./node_modules/core-js/library/modules/_perform.js");n(n.S,"Promise",{try:function(e){var t=s.f(this),a=o(e);return(a.e?t.reject:t.resolve)(a.v),t.promise}})},"./node_modules/core-js/library/modules/es7.symbol.async-iterator.js":function(e,t,a){a("./node_modules/core-js/library/modules/_wks-define.js")("asyncIterator")},"./node_modules/core-js/library/modules/es7.symbol.observable.js":function(e,t,a){a("./node_modules/core-js/library/modules/_wks-define.js")("observable")},"./node_modules/core-js/library/modules/web.dom.iterable.js":function(e,t,a){a("./node_modules/core-js/library/modules/es6.array.iterator.js");for(var n=a("./node_modules/core-js/library/modules/_global.js"),s=a("./node_modules/core-js/library/modules/_hide.js"),o=a("./node_modules/core-js/library/modules/_iterators.js"),r=a("./node_modules/core-js/library/modules/_wks.js")("toStringTag"),l="CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,TextTrackList,TouchList".split(","),i=0;i<l.length;i++){var c=l[i],d=n[c],u=d&&d.prototype;u&&!u[r]&&s(u,r,c),o[c]=o.Array}},"./node_modules/lodash/_DataView.js":function(e,t,a){var n=a("./node_modules/lodash/_getNative.js")(a("./node_modules/lodash/_root.js"),"DataView");e.exports=n},"./node_modules/lodash/_Hash.js":function(e,t,a){var n=a("./node_modules/lodash/_hashClear.js"),s=a("./node_modules/lodash/_hashDelete.js"),o=a("./node_modules/lodash/_hashGet.js"),r=a("./node_modules/lodash/_hashHas.js"),l=a("./node_modules/lodash/_hashSet.js");function i(e){var t=-1,a=null==e?0:e.length;for(this.clear();++t<a;){var n=e[t];this.set(n[0],n[1])}}i.prototype.clear=n,i.prototype.delete=s,i.prototype.get=o,i.prototype.has=r,i.prototype.set=l,e.exports=i},"./node_modules/lodash/_LazyWrapper.js":function(e,t,a){var n=a("./node_modules/lodash/_baseCreate.js"),s=a("./node_modules/lodash/_baseLodash.js"),o=4294967295;function r(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=o,this.__views__=[]}r.prototype=n(s.prototype),r.prototype.constructor=r,e.exports=r},"./node_modules/lodash/_ListCache.js":function(e,t,a){var n=a("./node_modules/lodash/_listCacheClear.js"),s=a("./node_modules/lodash/_listCacheDelete.js"),o=a("./node_modules/lodash/_listCacheGet.js"),r=a("./node_modules/lodash/_listCacheHas.js"),l=a("./node_modules/lodash/_listCacheSet.js");function i(e){var t=-1,a=null==e?0:e.length;for(this.clear();++t<a;){var n=e[t];this.set(n[0],n[1])}}i.prototype.clear=n,i.prototype.delete=s,i.prototype.get=o,i.prototype.has=r,i.prototype.set=l,e.exports=i},"./node_modules/lodash/_LodashWrapper.js":function(e,t,a){var n=a("./node_modules/lodash/_baseCreate.js"),s=a("./node_modules/lodash/_baseLodash.js");function o(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}o.prototype=n(s.prototype),o.prototype.constructor=o,e.exports=o},"./node_modules/lodash/_Map.js":function(e,t,a){var n=a("./node_modules/lodash/_getNative.js")(a("./node_modules/lodash/_root.js"),"Map");e.exports=n},"./node_modules/lodash/_MapCache.js":function(e,t,a){var n=a("./node_modules/lodash/_mapCacheClear.js"),s=a("./node_modules/lodash/_mapCacheDelete.js"),o=a("./node_modules/lodash/_mapCacheGet.js"),r=a("./node_modules/lodash/_mapCacheHas.js"),l=a("./node_modules/lodash/_mapCacheSet.js");function i(e){var t=-1,a=null==e?0:e.length;for(this.clear();++t<a;){var n=e[t];this.set(n[0],n[1])}}i.prototype.clear=n,i.prototype.delete=s,i.prototype.get=o,i.prototype.has=r,i.prototype.set=l,e.exports=i},"./node_modules/lodash/_Promise.js":function(e,t,a){var n=a("./node_modules/lodash/_getNative.js")(a("./node_modules/lodash/_root.js"),"Promise");e.exports=n},"./node_modules/lodash/_Set.js":function(e,t,a){var n=a("./node_modules/lodash/_getNative.js")(a("./node_modules/lodash/_root.js"),"Set");e.exports=n},"./node_modules/lodash/_SetCache.js":function(e,t,a){var n=a("./node_modules/lodash/_MapCache.js"),s=a("./node_modules/lodash/_setCacheAdd.js"),o=a("./node_modules/lodash/_setCacheHas.js");function r(e){var t=-1,a=null==e?0:e.length;for(this.__data__=new n;++t<a;)this.add(e[t])}r.prototype.add=r.prototype.push=s,r.prototype.has=o,e.exports=r},"./node_modules/lodash/_Stack.js":function(e,t,a){var n=a("./node_modules/lodash/_ListCache.js"),s=a("./node_modules/lodash/_stackClear.js"),o=a("./node_modules/lodash/_stackDelete.js"),r=a("./node_modules/lodash/_stackGet.js"),l=a("./node_modules/lodash/_stackHas.js"),i=a("./node_modules/lodash/_stackSet.js");function c(e){var t=this.__data__=new n(e);this.size=t.size}c.prototype.clear=s,c.prototype.delete=o,c.prototype.get=r,c.prototype.has=l,c.prototype.set=i,e.exports=c},"./node_modules/lodash/_Symbol.js":function(e,t,a){var n=a("./node_modules/lodash/_root.js").Symbol;e.exports=n},"./node_modules/lodash/_Uint8Array.js":function(e,t,a){var n=a("./node_modules/lodash/_root.js").Uint8Array;e.exports=n},"./node_modules/lodash/_WeakMap.js":function(e,t,a){var n=a("./node_modules/lodash/_getNative.js")(a("./node_modules/lodash/_root.js"),"WeakMap");e.exports=n},"./node_modules/lodash/_apply.js":function(e,t){e.exports=function(e,t,a){switch(a.length){case 0:return e.call(t);case 1:return e.call(t,a[0]);case 2:return e.call(t,a[0],a[1]);case 3:return e.call(t,a[0],a[1],a[2])}return e.apply(t,a)}},"./node_modules/lodash/_arrayAggregator.js":function(e,t){e.exports=function(e,t,a,n){for(var s=-1,o=null==e?0:e.length;++s<o;){var r=e[s];t(n,r,a(r),e)}return n}},"./node_modules/lodash/_arrayEach.js":function(e,t){e.exports=function(e,t){for(var a=-1,n=null==e?0:e.length;++a<n&&!1!==t(e[a],a,e););return e}},"./node_modules/lodash/_arrayFilter.js":function(e,t){e.exports=function(e,t){for(var a=-1,n=null==e?0:e.length,s=0,o=[];++a<n;){var r=e[a];t(r,a,e)&&(o[s++]=r)}return o}},"./node_modules/lodash/_arrayIncludes.js":function(e,t,a){var n=a("./node_modules/lodash/_baseIndexOf.js");e.exports=function(e,t){return!(null==e||!e.length)&&n(e,t,0)>-1}},"./node_modules/lodash/_arrayIncludesWith.js":function(e,t){e.exports=function(e,t,a){for(var n=-1,s=null==e?0:e.length;++n<s;)if(a(t,e[n]))return!0;return!1}},"./node_modules/lodash/_arrayLikeKeys.js":function(e,t,a){var n=a("./node_modules/lodash/_baseTimes.js"),s=a("./node_modules/lodash/isArguments.js"),o=a("./node_modules/lodash/isArray.js"),r=a("./node_modules/lodash/isBuffer.js"),l=a("./node_modules/lodash/_isIndex.js"),i=a("./node_modules/lodash/isTypedArray.js"),c=Object.prototype.hasOwnProperty;e.exports=function(e,t){var a=o(e),d=!a&&s(e),u=!a&&!d&&r(e),p=!a&&!d&&!u&&i(e),m=a||d||u||p,f=m?n(e.length,String):[],g=f.length;for(var h in e)!t&&!c.call(e,h)||m&&("length"==h||u&&("offset"==h||"parent"==h)||p&&("buffer"==h||"byteLength"==h||"byteOffset"==h)||l(h,g))||f.push(h);return f}},"./node_modules/lodash/_arrayMap.js":function(e,t){e.exports=function(e,t){for(var a=-1,n=null==e?0:e.length,s=Array(n);++a<n;)s[a]=t(e[a],a,e);return s}},"./node_modules/lodash/_arrayPush.js":function(e,t){e.exports=function(e,t){for(var a=-1,n=t.length,s=e.length;++a<n;)e[s+a]=t[a];return e}},"./node_modules/lodash/_arrayReduce.js":function(e,t){e.exports=function(e,t,a,n){var s=-1,o=null==e?0:e.length;for(n&&o&&(a=e[++s]);++s<o;)a=t(a,e[s],s,e);return a}},"./node_modules/lodash/_arraySome.js":function(e,t){e.exports=function(e,t){for(var a=-1,n=null==e?0:e.length;++a<n;)if(t(e[a],a,e))return!0;return!1}},"./node_modules/lodash/_assignValue.js":function(e,t,a){var n=a("./node_modules/lodash/_baseAssignValue.js"),s=a("./node_modules/lodash/eq.js"),o=Object.prototype.hasOwnProperty;e.exports=function(e,t,a){var r=e[t];o.call(e,t)&&s(r,a)&&(void 0!==a||t in e)||n(e,t,a)}},"./node_modules/lodash/_assocIndexOf.js":function(e,t,a){var n=a("./node_modules/lodash/eq.js");e.exports=function(e,t){for(var a=e.length;a--;)if(n(e[a][0],t))return a;return-1}},"./node_modules/lodash/_baseAggregator.js":function(e,t,a){var n=a("./node_modules/lodash/_baseEach.js");e.exports=function(e,t,a,s){return n(e,function(e,n,o){t(s,e,a(e),o)}),s}},"./node_modules/lodash/_baseAssign.js":function(e,t,a){var n=a("./node_modules/lodash/_copyObject.js"),s=a("./node_modules/lodash/keys.js");e.exports=function(e,t){return e&&n(t,s(t),e)}},"./node_modules/lodash/_baseAssignIn.js":function(e,t,a){var n=a("./node_modules/lodash/_copyObject.js"),s=a("./node_modules/lodash/keysIn.js");e.exports=function(e,t){return e&&n(t,s(t),e)}},"./node_modules/lodash/_baseAssignValue.js":function(e,t,a){var n=a("./node_modules/lodash/_defineProperty.js");e.exports=function(e,t,a){"__proto__"==t&&n?n(e,t,{configurable:!0,enumerable:!0,value:a,writable:!0}):e[t]=a}},"./node_modules/lodash/_baseClone.js":function(e,t,a){var n=a("./node_modules/lodash/_Stack.js"),s=a("./node_modules/lodash/_arrayEach.js"),o=a("./node_modules/lodash/_assignValue.js"),r=a("./node_modules/lodash/_baseAssign.js"),l=a("./node_modules/lodash/_baseAssignIn.js"),i=a("./node_modules/lodash/_cloneBuffer.js"),c=a("./node_modules/lodash/_copyArray.js"),d=a("./node_modules/lodash/_copySymbols.js"),u=a("./node_modules/lodash/_copySymbolsIn.js"),p=a("./node_modules/lodash/_getAllKeys.js"),m=a("./node_modules/lodash/_getAllKeysIn.js"),f=a("./node_modules/lodash/_getTag.js"),g=a("./node_modules/lodash/_initCloneArray.js"),h=a("./node_modules/lodash/_initCloneByTag.js"),v=a("./node_modules/lodash/_initCloneObject.js"),b=a("./node_modules/lodash/isArray.js"),y=a("./node_modules/lodash/isBuffer.js"),_=a("./node_modules/lodash/isMap.js"),w=a("./node_modules/lodash/isObject.js"),x=a("./node_modules/lodash/isSet.js"),j=a("./node_modules/lodash/keys.js"),k=1,A=2,S=4,M="[object Arguments]",P="[object Function]",E="[object GeneratorFunction]",C="[object Object]",T={};T[M]=T["[object Array]"]=T["[object ArrayBuffer]"]=T["[object DataView]"]=T["[object Boolean]"]=T["[object Date]"]=T["[object Float32Array]"]=T["[object Float64Array]"]=T["[object Int8Array]"]=T["[object Int16Array]"]=T["[object Int32Array]"]=T["[object Map]"]=T["[object Number]"]=T[C]=T["[object RegExp]"]=T["[object Set]"]=T["[object String]"]=T["[object Symbol]"]=T["[object Uint8Array]"]=T["[object Uint8ClampedArray]"]=T["[object Uint16Array]"]=T["[object Uint32Array]"]=!0,T["[object Error]"]=T[P]=T["[object WeakMap]"]=!1,e.exports=function e(t,a,I,D,O,L){var R,N=a&k,$=a&A,F=a&S;if(I&&(R=O?I(t,D,O,L):I(t)),void 0!==R)return R;if(!w(t))return t;var U=b(t);if(U){if(R=g(t),!N)return c(t,R)}else{var z=f(t),V=z==P||z==E;if(y(t))return i(t,N);if(z==C||z==M||V&&!O){if(R=$||V?{}:v(t),!N)return $?u(t,l(R,t)):d(t,r(R,t))}else{if(!T[z])return O?t:{};R=h(t,z,N)}}L||(L=new n);var B=L.get(t);if(B)return B;if(L.set(t,R),x(t))return t.forEach(function(n){R.add(e(n,a,I,n,t,L))}),R;if(_(t))return t.forEach(function(n,s){R.set(s,e(n,a,I,s,t,L))}),R;var K=F?$?m:p:$?keysIn:j,q=U?void 0:K(t);return s(q||t,function(n,s){q&&(n=t[s=n]),o(R,s,e(n,a,I,s,t,L))}),R}},"./node_modules/lodash/_baseCreate.js":function(e,t,a){var n=a("./node_modules/lodash/isObject.js"),s=Object.create,o=function(){function e(){}return function(t){if(!n(t))return{};if(s)return s(t);e.prototype=t;var a=new e;return e.prototype=void 0,a}}();e.exports=o},"./node_modules/lodash/_baseDelay.js":function(e,t){var a="Expected a function";e.exports=function(e,t,n){if("function"!=typeof e)throw new TypeError(a);return setTimeout(function(){e.apply(void 0,n)},t)}},"./node_modules/lodash/_baseDifference.js":function(e,t,a){var n=a("./node_modules/lodash/_SetCache.js"),s=a("./node_modules/lodash/_arrayIncludes.js"),o=a("./node_modules/lodash/_arrayIncludesWith.js"),r=a("./node_modules/lodash/_arrayMap.js"),l=a("./node_modules/lodash/_baseUnary.js"),i=a("./node_modules/lodash/_cacheHas.js"),c=200;e.exports=function(e,t,a,d){var u=-1,p=s,m=!0,f=e.length,g=[],h=t.length;if(!f)return g;a&&(t=r(t,l(a))),d?(p=o,m=!1):t.length>=c&&(p=i,m=!1,t=new n(t));e:for(;++u<f;){var v=e[u],b=null==a?v:a(v);if(v=d||0!==v?v:0,m&&b==b){for(var y=h;y--;)if(t[y]===b)continue e;g.push(v)}else p(t,b,d)||g.push(v)}return g}},"./node_modules/lodash/_baseEach.js":function(e,t,a){var n=a("./node_modules/lodash/_baseForOwn.js"),s=a("./node_modules/lodash/_createBaseEach.js")(n);e.exports=s},"./node_modules/lodash/_baseFilter.js":function(e,t,a){var n=a("./node_modules/lodash/_baseEach.js");e.exports=function(e,t){var a=[];return n(e,function(e,n,s){t(e,n,s)&&a.push(e)}),a}},"./node_modules/lodash/_baseFindIndex.js":function(e,t){e.exports=function(e,t,a,n){for(var s=e.length,o=a+(n?1:-1);n?o--:++o<s;)if(t(e[o],o,e))return o;return-1}},"./node_modules/lodash/_baseFlatten.js":function(e,t,a){var n=a("./node_modules/lodash/_arrayPush.js"),s=a("./node_modules/lodash/_isFlattenable.js");e.exports=function e(t,a,o,r,l){var i=-1,c=t.length;for(o||(o=s),l||(l=[]);++i<c;){var d=t[i];a>0&&o(d)?a>1?e(d,a-1,o,r,l):n(l,d):r||(l[l.length]=d)}return l}},"./node_modules/lodash/_baseFor.js":function(e,t,a){var n=a("./node_modules/lodash/_createBaseFor.js")();e.exports=n},"./node_modules/lodash/_baseForOwn.js":function(e,t,a){var n=a("./node_modules/lodash/_baseFor.js"),s=a("./node_modules/lodash/keys.js");e.exports=function(e,t){return e&&n(e,t,s)}},"./node_modules/lodash/_baseGet.js":function(e,t,a){var n=a("./node_modules/lodash/_castPath.js"),s=a("./node_modules/lodash/_toKey.js");e.exports=function(e,t){for(var a=0,o=(t=n(t,e)).length;null!=e&&a<o;)e=e[s(t[a++])];return a&&a==o?e:void 0}},"./node_modules/lodash/_baseGetAllKeys.js":function(e,t,a){var n=a("./node_modules/lodash/_arrayPush.js"),s=a("./node_modules/lodash/isArray.js");e.exports=function(e,t,a){var o=t(e);return s(e)?o:n(o,a(e))}},"./node_modules/lodash/_baseGetTag.js":function(e,t,a){var n=a("./node_modules/lodash/_Symbol.js"),s=a("./node_modules/lodash/_getRawTag.js"),o=a("./node_modules/lodash/_objectToString.js"),r="[object Null]",l="[object Undefined]",i=n?n.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?l:r:i&&i in Object(e)?s(e):o(e)}},"./node_modules/lodash/_baseHasIn.js":function(e,t){e.exports=function(e,t){return null!=e&&t in Object(e)}},"./node_modules/lodash/_baseIndexOf.js":function(e,t,a){var n=a("./node_modules/lodash/_baseFindIndex.js"),s=a("./node_modules/lodash/_baseIsNaN.js"),o=a("./node_modules/lodash/_strictIndexOf.js");e.exports=function(e,t,a){return t==t?o(e,t,a):n(e,s,a)}},"./node_modules/lodash/_baseIntersection.js":function(e,t,a){var n=a("./node_modules/lodash/_SetCache.js"),s=a("./node_modules/lodash/_arrayIncludes.js"),o=a("./node_modules/lodash/_arrayIncludesWith.js"),r=a("./node_modules/lodash/_arrayMap.js"),l=a("./node_modules/lodash/_baseUnary.js"),i=a("./node_modules/lodash/_cacheHas.js"),c=Math.min;e.exports=function(e,t,a){for(var d=a?o:s,u=e[0].length,p=e.length,m=p,f=Array(p),g=1/0,h=[];m--;){var v=e[m];m&&t&&(v=r(v,l(t))),g=c(v.length,g),f[m]=!a&&(t||u>=120&&v.length>=120)?new n(m&&v):void 0}v=e[0];var b=-1,y=f[0];e:for(;++b<u&&h.length<g;){var _=v[b],w=t?t(_):_;if(_=a||0!==_?_:0,!(y?i(y,w):d(h,w,a))){for(m=p;--m;){var x=f[m];if(!(x?i(x,w):d(e[m],w,a)))continue e}y&&y.push(w),h.push(_)}}return h}},"./node_modules/lodash/_baseIsArguments.js":function(e,t,a){var n=a("./node_modules/lodash/_baseGetTag.js"),s=a("./node_modules/lodash/isObjectLike.js"),o="[object Arguments]";e.exports=function(e){return s(e)&&n(e)==o}},"./node_modules/lodash/_baseIsEqual.js":function(e,t,a){var n=a("./node_modules/lodash/_baseIsEqualDeep.js"),s=a("./node_modules/lodash/isObjectLike.js");e.exports=function e(t,a,o,r,l){return t===a||(null==t||null==a||!s(t)&&!s(a)?t!=t&&a!=a:n(t,a,o,r,e,l))}},"./node_modules/lodash/_baseIsEqualDeep.js":function(e,t,a){var n=a("./node_modules/lodash/_Stack.js"),s=a("./node_modules/lodash/_equalArrays.js"),o=a("./node_modules/lodash/_equalByTag.js"),r=a("./node_modules/lodash/_equalObjects.js"),l=a("./node_modules/lodash/_getTag.js"),i=a("./node_modules/lodash/isArray.js"),c=a("./node_modules/lodash/isBuffer.js"),d=a("./node_modules/lodash/isTypedArray.js"),u=1,p="[object Arguments]",m="[object Array]",f="[object Object]",g=Object.prototype.hasOwnProperty;e.exports=function(e,t,a,h,v,b){var y=i(e),_=i(t),w=y?m:l(e),x=_?m:l(t),j=(w=w==p?f:w)==f,k=(x=x==p?f:x)==f,A=w==x;if(A&&c(e)){if(!c(t))return!1;y=!0,j=!1}if(A&&!j)return b||(b=new n),y||d(e)?s(e,t,a,h,v,b):o(e,t,w,a,h,v,b);if(!(a&u)){var S=j&&g.call(e,"__wrapped__"),M=k&&g.call(t,"__wrapped__");if(S||M){var P=S?e.value():e,E=M?t.value():t;return b||(b=new n),v(P,E,a,h,b)}}return!!A&&(b||(b=new n),r(e,t,a,h,v,b))}},"./node_modules/lodash/_baseIsMap.js":function(e,t,a){var n=a("./node_modules/lodash/_getTag.js"),s=a("./node_modules/lodash/isObjectLike.js"),o="[object Map]";e.exports=function(e){return s(e)&&n(e)==o}},"./node_modules/lodash/_baseIsMatch.js":function(e,t,a){var n=a("./node_modules/lodash/_Stack.js"),s=a("./node_modules/lodash/_baseIsEqual.js"),o=1,r=2;e.exports=function(e,t,a,l){var i=a.length,c=i,d=!l;if(null==e)return!c;for(e=Object(e);i--;){var u=a[i];if(d&&u[2]?u[1]!==e[u[0]]:!(u[0]in e))return!1}for(;++i<c;){var p=(u=a[i])[0],m=e[p],f=u[1];if(d&&u[2]){if(void 0===m&&!(p in e))return!1}else{var g=new n;if(l)var h=l(m,f,p,e,t,g);if(!(void 0===h?s(f,m,o|r,l,g):h))return!1}}return!0}},"./node_modules/lodash/_baseIsNaN.js":function(e,t){e.exports=function(e){return e!=e}},"./node_modules/lodash/_baseIsNative.js":function(e,t,a){var n=a("./node_modules/lodash/isFunction.js"),s=a("./node_modules/lodash/_isMasked.js"),o=a("./node_modules/lodash/isObject.js"),r=a("./node_modules/lodash/_toSource.js"),l=/^\[object .+?Constructor\]$/,i=Function.prototype,c=Object.prototype,d=i.toString,u=c.hasOwnProperty,p=RegExp("^"+d.call(u).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");e.exports=function(e){return!(!o(e)||s(e))&&(n(e)?p:l).test(r(e))}},"./node_modules/lodash/_baseIsSet.js":function(e,t,a){var n=a("./node_modules/lodash/_getTag.js"),s=a("./node_modules/lodash/isObjectLike.js"),o="[object Set]";e.exports=function(e){return s(e)&&n(e)==o}},"./node_modules/lodash/_baseIsTypedArray.js":function(e,t,a){var n=a("./node_modules/lodash/_baseGetTag.js"),s=a("./node_modules/lodash/isLength.js"),o=a("./node_modules/lodash/isObjectLike.js"),r={};r["[object Float32Array]"]=r["[object Float64Array]"]=r["[object Int8Array]"]=r["[object Int16Array]"]=r["[object Int32Array]"]=r["[object Uint8Array]"]=r["[object Uint8ClampedArray]"]=r["[object Uint16Array]"]=r["[object Uint32Array]"]=!0,r["[object Arguments]"]=r["[object Array]"]=r["[object ArrayBuffer]"]=r["[object Boolean]"]=r["[object DataView]"]=r["[object Date]"]=r["[object Error]"]=r["[object Function]"]=r["[object Map]"]=r["[object Number]"]=r["[object Object]"]=r["[object RegExp]"]=r["[object Set]"]=r["[object String]"]=r["[object WeakMap]"]=!1,e.exports=function(e){return o(e)&&s(e.length)&&!!r[n(e)]}},"./node_modules/lodash/_baseIteratee.js":function(e,t,a){var n=a("./node_modules/lodash/_baseMatches.js"),s=a("./node_modules/lodash/_baseMatchesProperty.js"),o=a("./node_modules/lodash/identity.js"),r=a("./node_modules/lodash/isArray.js"),l=a("./node_modules/lodash/property.js");e.exports=function(e){return"function"==typeof e?e:null==e?o:"object"==typeof e?r(e)?s(e[0],e[1]):n(e):l(e)}},"./node_modules/lodash/_baseKeys.js":function(e,t,a){var n=a("./node_modules/lodash/_isPrototype.js"),s=a("./node_modules/lodash/_nativeKeys.js"),o=Object.prototype.hasOwnProperty;e.exports=function(e){if(!n(e))return s(e);var t=[];for(var a in Object(e))o.call(e,a)&&"constructor"!=a&&t.push(a);return t}},"./node_modules/lodash/_baseKeysIn.js":function(e,t,a){var n=a("./node_modules/lodash/isObject.js"),s=a("./node_modules/lodash/_isPrototype.js"),o=a("./node_modules/lodash/_nativeKeysIn.js"),r=Object.prototype.hasOwnProperty;e.exports=function(e){if(!n(e))return o(e);var t=s(e),a=[];for(var l in e)("constructor"!=l||!t&&r.call(e,l))&&a.push(l);return a}},"./node_modules/lodash/_baseLodash.js":function(e,t){e.exports=function(){}},"./node_modules/lodash/_baseMap.js":function(e,t,a){var n=a("./node_modules/lodash/_baseEach.js"),s=a("./node_modules/lodash/isArrayLike.js");e.exports=function(e,t){var a=-1,o=s(e)?Array(e.length):[];return n(e,function(e,n,s){o[++a]=t(e,n,s)}),o}},"./node_modules/lodash/_baseMatches.js":function(e,t,a){var n=a("./node_modules/lodash/_baseIsMatch.js"),s=a("./node_modules/lodash/_getMatchData.js"),o=a("./node_modules/lodash/_matchesStrictComparable.js");e.exports=function(e){var t=s(e);return 1==t.length&&t[0][2]?o(t[0][0],t[0][1]):function(a){return a===e||n(a,e,t)}}},"./node_modules/lodash/_baseMatchesProperty.js":function(e,t,a){var n=a("./node_modules/lodash/_baseIsEqual.js"),s=a("./node_modules/lodash/get.js"),o=a("./node_modules/lodash/hasIn.js"),r=a("./node_modules/lodash/_isKey.js"),l=a("./node_modules/lodash/_isStrictComparable.js"),i=a("./node_modules/lodash/_matchesStrictComparable.js"),c=a("./node_modules/lodash/_toKey.js"),d=1,u=2;e.exports=function(e,t){return r(e)&&l(t)?i(c(e),t):function(a){var r=s(a,e);return void 0===r&&r===t?o(a,e):n(t,r,d|u)}}},"./node_modules/lodash/_baseOrderBy.js":function(e,t,a){var n=a("./node_modules/lodash/_arrayMap.js"),s=a("./node_modules/lodash/_baseIteratee.js"),o=a("./node_modules/lodash/_baseMap.js"),r=a("./node_modules/lodash/_baseSortBy.js"),l=a("./node_modules/lodash/_baseUnary.js"),i=a("./node_modules/lodash/_compareMultiple.js"),c=a("./node_modules/lodash/identity.js");e.exports=function(e,t,a){var d=-1;t=n(t.length?t:[c],l(s));var u=o(e,function(e,a,s){return{criteria:n(t,function(t){return t(e)}),index:++d,value:e}});return r(u,function(e,t){return i(e,t,a)})}},"./node_modules/lodash/_basePick.js":function(e,t,a){var n=a("./node_modules/lodash/_basePickBy.js"),s=a("./node_modules/lodash/hasIn.js");e.exports=function(e,t){return n(e,t,function(t,a){return s(e,a)})}},"./node_modules/lodash/_basePickBy.js":function(e,t,a){var n=a("./node_modules/lodash/_baseGet.js"),s=a("./node_modules/lodash/_baseSet.js"),o=a("./node_modules/lodash/_castPath.js");e.exports=function(e,t,a){for(var r=-1,l=t.length,i={};++r<l;){var c=t[r],d=n(e,c);a(d,c)&&s(i,o(c,e),d)}return i}},"./node_modules/lodash/_baseProperty.js":function(e,t){e.exports=function(e){return function(t){return null==t?void 0:t[e]}}},"./node_modules/lodash/_basePropertyDeep.js":function(e,t,a){var n=a("./node_modules/lodash/_baseGet.js");e.exports=function(e){return function(t){return n(t,e)}}},"./node_modules/lodash/_basePropertyOf.js":function(e,t){e.exports=function(e){return function(t){return null==e?void 0:e[t]}}},"./node_modules/lodash/_baseRange.js":function(e,t){var a=Math.ceil,n=Math.max;e.exports=function(e,t,s,o){for(var r=-1,l=n(a((t-e)/(s||1)),0),i=Array(l);l--;)i[o?l:++r]=e,e+=s;return i}},"./node_modules/lodash/_baseReduce.js":function(e,t){e.exports=function(e,t,a,n,s){return s(e,function(e,s,o){a=n?(n=!1,e):t(a,e,s,o)}),a}},"./node_modules/lodash/_baseRest.js":function(e,t,a){var n=a("./node_modules/lodash/identity.js"),s=a("./node_modules/lodash/_overRest.js"),o=a("./node_modules/lodash/_setToString.js");e.exports=function(e,t){return o(s(e,t,n),e+"")}},"./node_modules/lodash/_baseSet.js":function(e,t,a){var n=a("./node_modules/lodash/_assignValue.js"),s=a("./node_modules/lodash/_castPath.js"),o=a("./node_modules/lodash/_isIndex.js"),r=a("./node_modules/lodash/isObject.js"),l=a("./node_modules/lodash/_toKey.js");e.exports=function(e,t,a,i){if(!r(e))return e;for(var c=-1,d=(t=s(t,e)).length,u=d-1,p=e;null!=p&&++c<d;){var m=l(t[c]),f=a;if(c!=u){var g=p[m];void 0===(f=i?i(g,m,p):void 0)&&(f=r(g)?g:o(t[c+1])?[]:{})}n(p,m,f),p=p[m]}return e}},"./node_modules/lodash/_baseSetData.js":function(e,t,a){var n=a("./node_modules/lodash/identity.js"),s=a("./node_modules/lodash/_metaMap.js"),o=s?function(e,t){return s.set(e,t),e}:n;e.exports=o},"./node_modules/lodash/_baseSetToString.js":function(e,t,a){var n=a("./node_modules/lodash/constant.js"),s=a("./node_modules/lodash/_defineProperty.js"),o=a("./node_modules/lodash/identity.js"),r=s?function(e,t){return s(e,"toString",{configurable:!0,enumerable:!1,value:n(t),writable:!0})}:o;e.exports=r},"./node_modules/lodash/_baseSlice.js":function(e,t){e.exports=function(e,t,a){var n=-1,s=e.length;t<0&&(t=-t>s?0:s+t),(a=a>s?s:a)<0&&(a+=s),s=t>a?0:a-t>>>0,t>>>=0;for(var o=Array(s);++n<s;)o[n]=e[n+t];return o}},"./node_modules/lodash/_baseSome.js":function(e,t,a){var n=a("./node_modules/lodash/_baseEach.js");e.exports=function(e,t){var a;return n(e,function(e,n,s){return!(a=t(e,n,s))}),!!a}},"./node_modules/lodash/_baseSortBy.js":function(e,t){e.exports=function(e,t){var a=e.length;for(e.sort(t);a--;)e[a]=e[a].value;return e}},"./node_modules/lodash/_baseTimes.js":function(e,t){e.exports=function(e,t){for(var a=-1,n=Array(e);++a<e;)n[a]=t(a);return n}},"./node_modules/lodash/_baseToString.js":function(e,t,a){var n=a("./node_modules/lodash/_Symbol.js"),s=a("./node_modules/lodash/_arrayMap.js"),o=a("./node_modules/lodash/isArray.js"),r=a("./node_modules/lodash/isSymbol.js"),l=1/0,i=n?n.prototype:void 0,c=i?i.toString:void 0;e.exports=function e(t){if("string"==typeof t)return t;if(o(t))return s(t,e)+"";if(r(t))return c?c.call(t):"";var a=t+"";return"0"==a&&1/t==-l?"-0":a}},"./node_modules/lodash/_baseUnary.js":function(e,t){e.exports=function(e){return function(t){return e(t)}}},"./node_modules/lodash/_baseUniq.js":function(e,t,a){var n=a("./node_modules/lodash/_SetCache.js"),s=a("./node_modules/lodash/_arrayIncludes.js"),o=a("./node_modules/lodash/_arrayIncludesWith.js"),r=a("./node_modules/lodash/_cacheHas.js"),l=a("./node_modules/lodash/_createSet.js"),i=a("./node_modules/lodash/_setToArray.js"),c=200;e.exports=function(e,t,a){var d=-1,u=s,p=e.length,m=!0,f=[],g=f;if(a)m=!1,u=o;else if(p>=c){var h=t?null:l(e);if(h)return i(h);m=!1,u=r,g=new n}else g=t?[]:f;e:for(;++d<p;){var v=e[d],b=t?t(v):v;if(v=a||0!==v?v:0,m&&b==b){for(var y=g.length;y--;)if(g[y]===b)continue e;t&&g.push(b),f.push(v)}else u(g,b,a)||(g!==f&&g.push(b),f.push(v))}return f}},"./node_modules/lodash/_baseValues.js":function(e,t,a){var n=a("./node_modules/lodash/_arrayMap.js");e.exports=function(e,t){return n(t,function(t){return e[t]})}},"./node_modules/lodash/_cacheHas.js":function(e,t){e.exports=function(e,t){return e.has(t)}},"./node_modules/lodash/_castArrayLikeObject.js":function(e,t,a){var n=a("./node_modules/lodash/isArrayLikeObject.js");e.exports=function(e){return n(e)?e:[]}},"./node_modules/lodash/_castFunction.js":function(e,t,a){var n=a("./node_modules/lodash/identity.js");e.exports=function(e){return"function"==typeof e?e:n}},"./node_modules/lodash/_castPath.js":function(e,t,a){var n=a("./node_modules/lodash/isArray.js"),s=a("./node_modules/lodash/_isKey.js"),o=a("./node_modules/lodash/_stringToPath.js"),r=a("./node_modules/lodash/toString.js");e.exports=function(e,t){return n(e)?e:s(e,t)?[e]:o(r(e))}},"./node_modules/lodash/_cloneArrayBuffer.js":function(e,t,a){var n=a("./node_modules/lodash/_Uint8Array.js");e.exports=function(e){var t=new e.constructor(e.byteLength);return new n(t).set(new n(e)),t}},"./node_modules/lodash/_cloneBuffer.js":function(e,t,a){(function(e){var n=a("./node_modules/lodash/_root.js"),s="object"==typeof t&&t&&!t.nodeType&&t,o=s&&"object"==typeof e&&e&&!e.nodeType&&e,r=o&&o.exports===s?n.Buffer:void 0,l=r?r.allocUnsafe:void 0;e.exports=function(e,t){if(t)return e.slice();var a=e.length,n=l?l(a):new e.constructor(a);return e.copy(n),n}}).call(t,a("./node_modules/webpack/buildin/module.js")(e))},"./node_modules/lodash/_cloneDataView.js":function(e,t,a){var n=a("./node_modules/lodash/_cloneArrayBuffer.js");e.exports=function(e,t){var a=t?n(e.buffer):e.buffer;return new e.constructor(a,e.byteOffset,e.byteLength)}},"./node_modules/lodash/_cloneRegExp.js":function(e,t){var a=/\w*$/;e.exports=function(e){var t=new e.constructor(e.source,a.exec(e));return t.lastIndex=e.lastIndex,t}},"./node_modules/lodash/_cloneSymbol.js":function(e,t,a){var n=a("./node_modules/lodash/_Symbol.js"),s=n?n.prototype:void 0,o=s?s.valueOf:void 0;e.exports=function(e){return o?Object(o.call(e)):{}}},"./node_modules/lodash/_cloneTypedArray.js":function(e,t,a){var n=a("./node_modules/lodash/_cloneArrayBuffer.js");e.exports=function(e,t){var a=t?n(e.buffer):e.buffer;return new e.constructor(a,e.byteOffset,e.length)}},"./node_modules/lodash/_compareAscending.js":function(e,t,a){var n=a("./node_modules/lodash/isSymbol.js");e.exports=function(e,t){if(e!==t){var a=void 0!==e,s=null===e,o=e==e,r=n(e),l=void 0!==t,i=null===t,c=t==t,d=n(t);if(!i&&!d&&!r&&e>t||r&&l&&c&&!i&&!d||s&&l&&c||!a&&c||!o)return 1;if(!s&&!r&&!d&&e<t||d&&a&&o&&!s&&!r||i&&a&&o||!l&&o||!c)return-1}return 0}},"./node_modules/lodash/_compareMultiple.js":function(e,t,a){var n=a("./node_modules/lodash/_compareAscending.js");e.exports=function(e,t,a){for(var s=-1,o=e.criteria,r=t.criteria,l=o.length,i=a.length;++s<l;){var c=n(o[s],r[s]);if(c)return s>=i?c:c*("desc"==a[s]?-1:1)}return e.index-t.index}},"./node_modules/lodash/_composeArgs.js":function(e,t){var a=Math.max;e.exports=function(e,t,n,s){for(var o=-1,r=e.length,l=n.length,i=-1,c=t.length,d=a(r-l,0),u=Array(c+d),p=!s;++i<c;)u[i]=t[i];for(;++o<l;)(p||o<r)&&(u[n[o]]=e[o]);for(;d--;)u[i++]=e[o++];return u}},"./node_modules/lodash/_composeArgsRight.js":function(e,t){var a=Math.max;e.exports=function(e,t,n,s){for(var o=-1,r=e.length,l=-1,i=n.length,c=-1,d=t.length,u=a(r-i,0),p=Array(u+d),m=!s;++o<u;)p[o]=e[o];for(var f=o;++c<d;)p[f+c]=t[c];for(;++l<i;)(m||o<r)&&(p[f+n[l]]=e[o++]);return p}},"./node_modules/lodash/_copyArray.js":function(e,t){e.exports=function(e,t){var a=-1,n=e.length;for(t||(t=Array(n));++a<n;)t[a]=e[a];return t}},"./node_modules/lodash/_copyObject.js":function(e,t,a){var n=a("./node_modules/lodash/_assignValue.js"),s=a("./node_modules/lodash/_baseAssignValue.js");e.exports=function(e,t,a,o){var r=!a;a||(a={});for(var l=-1,i=t.length;++l<i;){var c=t[l],d=o?o(a[c],e[c],c,a,e):void 0;void 0===d&&(d=e[c]),r?s(a,c,d):n(a,c,d)}return a}},"./node_modules/lodash/_copySymbols.js":function(e,t,a){var n=a("./node_modules/lodash/_copyObject.js"),s=a("./node_modules/lodash/_getSymbols.js");e.exports=function(e,t){return n(e,s(e),t)}},"./node_modules/lodash/_copySymbolsIn.js":function(e,t,a){var n=a("./node_modules/lodash/_copyObject.js"),s=a("./node_modules/lodash/_getSymbolsIn.js");e.exports=function(e,t){return n(e,s(e),t)}},"./node_modules/lodash/_coreJsData.js":function(e,t,a){var n=a("./node_modules/lodash/_root.js")["__core-js_shared__"];e.exports=n},"./node_modules/lodash/_countHolders.js":function(e,t){e.exports=function(e,t){for(var a=e.length,n=0;a--;)e[a]===t&&++n;return n}},"./node_modules/lodash/_createAggregator.js":function(e,t,a){var n=a("./node_modules/lodash/_arrayAggregator.js"),s=a("./node_modules/lodash/_baseAggregator.js"),o=a("./node_modules/lodash/_baseIteratee.js"),r=a("./node_modules/lodash/isArray.js");e.exports=function(e,t){return function(a,l){var i=r(a)?n:s,c=t?t():{};return i(a,e,o(l,2),c)}}},"./node_modules/lodash/_createAssigner.js":function(e,t,a){var n=a("./node_modules/lodash/_baseRest.js"),s=a("./node_modules/lodash/_isIterateeCall.js");e.exports=function(e){return n(function(t,a){var n=-1,o=a.length,r=o>1?a[o-1]:void 0,l=o>2?a[2]:void 0;for(r=e.length>3&&"function"==typeof r?(o--,r):void 0,l&&s(a[0],a[1],l)&&(r=o<3?void 0:r,o=1),t=Object(t);++n<o;){var i=a[n];i&&e(t,i,n,r)}return t})}},"./node_modules/lodash/_createBaseEach.js":function(e,t,a){var n=a("./node_modules/lodash/isArrayLike.js");e.exports=function(e,t){return function(a,s){if(null==a)return a;if(!n(a))return e(a,s);for(var o=a.length,r=t?o:-1,l=Object(a);(t?r--:++r<o)&&!1!==s(l[r],r,l););return a}}},"./node_modules/lodash/_createBaseFor.js":function(e,t){e.exports=function(e){return function(t,a,n){for(var s=-1,o=Object(t),r=n(t),l=r.length;l--;){var i=r[e?l:++s];if(!1===a(o[i],i,o))break}return t}}},"./node_modules/lodash/_createBind.js":function(e,t,a){var n=a("./node_modules/lodash/_createCtor.js"),s=a("./node_modules/lodash/_root.js"),o=1;e.exports=function(e,t,a){var r=t&o,l=n(e);return function t(){return(this&&this!==s&&this instanceof t?l:e).apply(r?a:this,arguments)}}},"./node_modules/lodash/_createCtor.js":function(e,t,a){var n=a("./node_modules/lodash/_baseCreate.js"),s=a("./node_modules/lodash/isObject.js");e.exports=function(e){return function(){var t=arguments;switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3]);case 5:return new e(t[0],t[1],t[2],t[3],t[4]);case 6:return new e(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new e(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var a=n(e.prototype),o=e.apply(a,t);return s(o)?o:a}}},"./node_modules/lodash/_createCurry.js":function(e,t,a){var n=a("./node_modules/lodash/_apply.js"),s=a("./node_modules/lodash/_createCtor.js"),o=a("./node_modules/lodash/_createHybrid.js"),r=a("./node_modules/lodash/_createRecurry.js"),l=a("./node_modules/lodash/_getHolder.js"),i=a("./node_modules/lodash/_replaceHolders.js"),c=a("./node_modules/lodash/_root.js");e.exports=function(e,t,a){var d=s(e);return function s(){for(var u=arguments.length,p=Array(u),m=u,f=l(s);m--;)p[m]=arguments[m];var g=u<3&&p[0]!==f&&p[u-1]!==f?[]:i(p,f);return(u-=g.length)<a?r(e,t,o,s.placeholder,void 0,p,g,void 0,void 0,a-u):n(this&&this!==c&&this instanceof s?d:e,this,p)}}},"./node_modules/lodash/_createFind.js":function(e,t,a){var n=a("./node_modules/lodash/_baseIteratee.js"),s=a("./node_modules/lodash/isArrayLike.js"),o=a("./node_modules/lodash/keys.js");e.exports=function(e){return function(t,a,r){var l=Object(t);if(!s(t)){var i=n(a,3);t=o(t),a=function(e){return i(l[e],e,l)}}var c=e(t,a,r);return c>-1?l[i?t[c]:c]:void 0}}},"./node_modules/lodash/_createFlow.js":function(e,t,a){var n=a("./node_modules/lodash/_LodashWrapper.js"),s=a("./node_modules/lodash/_flatRest.js"),o=a("./node_modules/lodash/_getData.js"),r=a("./node_modules/lodash/_getFuncName.js"),l=a("./node_modules/lodash/isArray.js"),i=a("./node_modules/lodash/_isLaziable.js"),c="Expected a function",d=8,u=32,p=128,m=256;e.exports=function(e){return s(function(t){var a=t.length,s=a,f=n.prototype.thru;for(e&&t.reverse();s--;){var g=t[s];if("function"!=typeof g)throw new TypeError(c);if(f&&!h&&"wrapper"==r(g))var h=new n([],!0)}for(s=h?s:a;++s<a;){g=t[s];var v=r(g),b="wrapper"==v?o(g):void 0;h=b&&i(b[0])&&b[1]==(p|d|u|m)&&!b[4].length&&1==b[9]?h[r(b[0])].apply(h,b[3]):1==g.length&&i(g)?h[v]():h.thru(g)}return function(){var e=arguments,n=e[0];if(h&&1==e.length&&l(n))return h.plant(n).value();for(var s=0,o=a?t[s].apply(this,e):n;++s<a;)o=t[s].call(this,o);return o}})}},"./node_modules/lodash/_createHybrid.js":function(e,t,a){var n=a("./node_modules/lodash/_composeArgs.js"),s=a("./node_modules/lodash/_composeArgsRight.js"),o=a("./node_modules/lodash/_countHolders.js"),r=a("./node_modules/lodash/_createCtor.js"),l=a("./node_modules/lodash/_createRecurry.js"),i=a("./node_modules/lodash/_getHolder.js"),c=a("./node_modules/lodash/_reorder.js"),d=a("./node_modules/lodash/_replaceHolders.js"),u=a("./node_modules/lodash/_root.js"),p=1,m=2,f=8,g=16,h=128,v=512;e.exports=function e(t,a,b,y,_,w,x,j,k,A){var S=a&h,M=a&p,P=a&m,E=a&(f|g),C=a&v,T=P?void 0:r(t);return function p(){for(var m=arguments.length,f=Array(m),g=m;g--;)f[g]=arguments[g];if(E)var h=i(p),v=o(f,h);if(y&&(f=n(f,y,_,E)),w&&(f=s(f,w,x,E)),m-=v,E&&m<A){var I=d(f,h);return l(t,a,e,p.placeholder,b,f,I,j,k,A-m)}var D=M?b:this,O=P?D[t]:t;return m=f.length,j?f=c(f,j):C&&m>1&&f.reverse(),S&&k<m&&(f.length=k),this&&this!==u&&this instanceof p&&(O=T||r(O)),O.apply(D,f)}}},"./node_modules/lodash/_createPartial.js":function(e,t,a){var n=a("./node_modules/lodash/_apply.js"),s=a("./node_modules/lodash/_createCtor.js"),o=a("./node_modules/lodash/_root.js"),r=1;e.exports=function(e,t,a,l){var i=t&r,c=s(e);return function t(){for(var s=-1,r=arguments.length,d=-1,u=l.length,p=Array(u+r),m=this&&this!==o&&this instanceof t?c:e;++d<u;)p[d]=l[d];for(;r--;)p[d++]=arguments[++s];return n(m,i?a:this,p)}}},"./node_modules/lodash/_createRange.js":function(e,t,a){var n=a("./node_modules/lodash/_baseRange.js"),s=a("./node_modules/lodash/_isIterateeCall.js"),o=a("./node_modules/lodash/toFinite.js");e.exports=function(e){return function(t,a,r){return r&&"number"!=typeof r&&s(t,a,r)&&(a=r=void 0),t=o(t),void 0===a?(a=t,t=0):a=o(a),r=void 0===r?t<a?1:-1:o(r),n(t,a,r,e)}}},"./node_modules/lodash/_createRecurry.js":function(e,t,a){var n=a("./node_modules/lodash/_isLaziable.js"),s=a("./node_modules/lodash/_setData.js"),o=a("./node_modules/lodash/_setWrapToString.js"),r=1,l=2,i=4,c=8,d=32,u=64;e.exports=function(e,t,a,p,m,f,g,h,v,b){var y=t&c;t|=y?d:u,(t&=~(y?u:d))&i||(t&=~(r|l));var _=[e,t,m,y?f:void 0,y?g:void 0,y?void 0:f,y?void 0:g,h,v,b],w=a.apply(void 0,_);return n(e)&&s(w,_),w.placeholder=p,o(w,e,t)}},"./node_modules/lodash/_createSet.js":function(e,t,a){var n=a("./node_modules/lodash/_Set.js"),s=a("./node_modules/lodash/noop.js"),o=a("./node_modules/lodash/_setToArray.js"),r=n&&1/o(new n([,-0]))[1]==1/0?function(e){return new n(e)}:s;e.exports=r},"./node_modules/lodash/_createWrap.js":function(e,t,a){var n=a("./node_modules/lodash/_baseSetData.js"),s=a("./node_modules/lodash/_createBind.js"),o=a("./node_modules/lodash/_createCurry.js"),r=a("./node_modules/lodash/_createHybrid.js"),l=a("./node_modules/lodash/_createPartial.js"),i=a("./node_modules/lodash/_getData.js"),c=a("./node_modules/lodash/_mergeData.js"),d=a("./node_modules/lodash/_setData.js"),u=a("./node_modules/lodash/_setWrapToString.js"),p=a("./node_modules/lodash/toInteger.js"),m="Expected a function",f=1,g=2,h=8,v=16,b=32,y=64,_=Math.max;e.exports=function(e,t,a,w,x,j,k,A){var S=t&g;if(!S&&"function"!=typeof e)throw new TypeError(m);var M=w?w.length:0;if(M||(t&=~(b|y),w=x=void 0),k=void 0===k?k:_(p(k),0),A=void 0===A?A:p(A),M-=x?x.length:0,t&y){var P=w,E=x;w=x=void 0}var C=S?void 0:i(e),T=[e,t,a,w,x,P,E,j,k,A];if(C&&c(T,C),e=T[0],t=T[1],a=T[2],w=T[3],x=T[4],!(A=T[9]=void 0===T[9]?S?0:e.length:_(T[9]-M,0))&&t&(h|v)&&(t&=~(h|v)),t&&t!=f)I=t==h||t==v?o(e,t,A):t!=b&&t!=(f|b)||x.length?r.apply(void 0,T):l(e,t,a,w);else var I=s(e,t,a);return u((C?n:d)(I,T),e,t)}},"./node_modules/lodash/_defineProperty.js":function(e,t,a){var n=a("./node_modules/lodash/_getNative.js"),s=function(){try{var e=n(Object,"defineProperty");return e({},"",{}),e}catch(e){}}();e.exports=s},"./node_modules/lodash/_equalArrays.js":function(e,t,a){var n=a("./node_modules/lodash/_SetCache.js"),s=a("./node_modules/lodash/_arraySome.js"),o=a("./node_modules/lodash/_cacheHas.js"),r=1,l=2;e.exports=function(e,t,a,i,c,d){var u=a&r,p=e.length,m=t.length;if(p!=m&&!(u&&m>p))return!1;var f=d.get(e);if(f&&d.get(t))return f==t;var g=-1,h=!0,v=a&l?new n:void 0;for(d.set(e,t),d.set(t,e);++g<p;){var b=e[g],y=t[g];if(i)var _=u?i(y,b,g,t,e,d):i(b,y,g,e,t,d);if(void 0!==_){if(_)continue;h=!1;break}if(v){if(!s(t,function(e,t){if(!o(v,t)&&(b===e||c(b,e,a,i,d)))return v.push(t)})){h=!1;break}}else if(b!==y&&!c(b,y,a,i,d)){h=!1;break}}return d.delete(e),d.delete(t),h}},"./node_modules/lodash/_equalByTag.js":function(e,t,a){var n=a("./node_modules/lodash/_Symbol.js"),s=a("./node_modules/lodash/_Uint8Array.js"),o=a("./node_modules/lodash/eq.js"),r=a("./node_modules/lodash/_equalArrays.js"),l=a("./node_modules/lodash/_mapToArray.js"),i=a("./node_modules/lodash/_setToArray.js"),c=1,d=2,u="[object Boolean]",p="[object Date]",m="[object Error]",f="[object Map]",g="[object Number]",h="[object RegExp]",v="[object Set]",b="[object String]",y="[object Symbol]",_="[object ArrayBuffer]",w="[object DataView]",x=n?n.prototype:void 0,j=x?x.valueOf:void 0;e.exports=function(e,t,a,n,x,k,A){switch(a){case w:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case _:return!(e.byteLength!=t.byteLength||!k(new s(e),new s(t)));case u:case p:case g:return o(+e,+t);case m:return e.name==t.name&&e.message==t.message;case h:case b:return e==t+"";case f:var S=l;case v:var M=n&c;if(S||(S=i),e.size!=t.size&&!M)return!1;var P=A.get(e);if(P)return P==t;n|=d,A.set(e,t);var E=r(S(e),S(t),n,x,k,A);return A.delete(e),E;case y:if(j)return j.call(e)==j.call(t)}return!1}},"./node_modules/lodash/_equalObjects.js":function(e,t,a){var n=a("./node_modules/lodash/_getAllKeys.js"),s=1,o=Object.prototype.hasOwnProperty;e.exports=function(e,t,a,r,l,i){var c=a&s,d=n(e),u=d.length;if(u!=n(t).length&&!c)return!1;for(var p=u;p--;){var m=d[p];if(!(c?m in t:o.call(t,m)))return!1}var f=i.get(e);if(f&&i.get(t))return f==t;var g=!0;i.set(e,t),i.set(t,e);for(var h=c;++p<u;){var v=e[m=d[p]],b=t[m];if(r)var y=c?r(b,v,m,t,e,i):r(v,b,m,e,t,i);if(!(void 0===y?v===b||l(v,b,a,r,i):y)){g=!1;break}h||(h="constructor"==m)}if(g&&!h){var _=e.constructor,w=t.constructor;_!=w&&"constructor"in e&&"constructor"in t&&!("function"==typeof _&&_ instanceof _&&"function"==typeof w&&w instanceof w)&&(g=!1)}return i.delete(e),i.delete(t),g}},"./node_modules/lodash/_flatRest.js":function(e,t,a){var n=a("./node_modules/lodash/flatten.js"),s=a("./node_modules/lodash/_overRest.js"),o=a("./node_modules/lodash/_setToString.js");e.exports=function(e){return o(s(e,void 0,n),e+"")}},"./node_modules/lodash/_freeGlobal.js":function(e,t,a){(function(t){var a="object"==typeof t&&t&&t.Object===Object&&t;e.exports=a}).call(t,a("./node_modules/webpack/buildin/global.js"))},"./node_modules/lodash/_getAllKeys.js":function(e,t,a){var n=a("./node_modules/lodash/_baseGetAllKeys.js"),s=a("./node_modules/lodash/_getSymbols.js"),o=a("./node_modules/lodash/keys.js");e.exports=function(e){return n(e,o,s)}},"./node_modules/lodash/_getAllKeysIn.js":function(e,t,a){var n=a("./node_modules/lodash/_baseGetAllKeys.js"),s=a("./node_modules/lodash/_getSymbolsIn.js"),o=a("./node_modules/lodash/keysIn.js");e.exports=function(e){return n(e,o,s)}},"./node_modules/lodash/_getData.js":function(e,t,a){var n=a("./node_modules/lodash/_metaMap.js"),s=a("./node_modules/lodash/noop.js"),o=n?function(e){return n.get(e)}:s;e.exports=o},"./node_modules/lodash/_getFuncName.js":function(e,t,a){var n=a("./node_modules/lodash/_realNames.js"),s=Object.prototype.hasOwnProperty;e.exports=function(e){for(var t=e.name+"",a=n[t],o=s.call(n,t)?a.length:0;o--;){var r=a[o],l=r.func;if(null==l||l==e)return r.name}return t}},"./node_modules/lodash/_getHolder.js":function(e,t){e.exports=function(e){return e.placeholder}},"./node_modules/lodash/_getMapData.js":function(e,t,a){var n=a("./node_modules/lodash/_isKeyable.js");e.exports=function(e,t){var a=e.__data__;return n(t)?a["string"==typeof t?"string":"hash"]:a.map}},"./node_modules/lodash/_getMatchData.js":function(e,t,a){var n=a("./node_modules/lodash/_isStrictComparable.js"),s=a("./node_modules/lodash/keys.js");e.exports=function(e){for(var t=s(e),a=t.length;a--;){var o=t[a],r=e[o];t[a]=[o,r,n(r)]}return t}},"./node_modules/lodash/_getNative.js":function(e,t,a){var n=a("./node_modules/lodash/_baseIsNative.js"),s=a("./node_modules/lodash/_getValue.js");e.exports=function(e,t){var a=s(e,t);return n(a)?a:void 0}},"./node_modules/lodash/_getPrototype.js":function(e,t,a){var n=a("./node_modules/lodash/_overArg.js")(Object.getPrototypeOf,Object);e.exports=n},"./node_modules/lodash/_getRawTag.js":function(e,t,a){var n=a("./node_modules/lodash/_Symbol.js"),s=Object.prototype,o=s.hasOwnProperty,r=s.toString,l=n?n.toStringTag:void 0;e.exports=function(e){var t=o.call(e,l),a=e[l];try{e[l]=void 0;var n=!0}catch(e){}var s=r.call(e);return n&&(t?e[l]=a:delete e[l]),s}},"./node_modules/lodash/_getSymbols.js":function(e,t,a){var n=a("./node_modules/lodash/_arrayFilter.js"),s=a("./node_modules/lodash/stubArray.js"),o=Object.prototype.propertyIsEnumerable,r=Object.getOwnPropertySymbols,l=r?function(e){return null==e?[]:(e=Object(e),n(r(e),function(t){return o.call(e,t)}))}:s;e.exports=l},"./node_modules/lodash/_getSymbolsIn.js":function(e,t,a){var n=a("./node_modules/lodash/_arrayPush.js"),s=a("./node_modules/lodash/_getPrototype.js"),o=a("./node_modules/lodash/_getSymbols.js"),r=a("./node_modules/lodash/stubArray.js"),l=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)n(t,o(e)),e=s(e);return t}:r;e.exports=l},"./node_modules/lodash/_getTag.js":function(e,t,a){var n=a("./node_modules/lodash/_DataView.js"),s=a("./node_modules/lodash/_Map.js"),o=a("./node_modules/lodash/_Promise.js"),r=a("./node_modules/lodash/_Set.js"),l=a("./node_modules/lodash/_WeakMap.js"),i=a("./node_modules/lodash/_baseGetTag.js"),c=a("./node_modules/lodash/_toSource.js"),d=c(n),u=c(s),p=c(o),m=c(r),f=c(l),g=i;(n&&"[object DataView]"!=g(new n(new ArrayBuffer(1)))||s&&"[object Map]"!=g(new s)||o&&"[object Promise]"!=g(o.resolve())||r&&"[object Set]"!=g(new r)||l&&"[object WeakMap]"!=g(new l))&&(g=function(e){var t=i(e),a="[object Object]"==t?e.constructor:void 0,n=a?c(a):"";if(n)switch(n){case d:return"[object DataView]";case u:return"[object Map]";case p:return"[object Promise]";case m:return"[object Set]";case f:return"[object WeakMap]"}return t}),e.exports=g},"./node_modules/lodash/_getValue.js":function(e,t){e.exports=function(e,t){return null==e?void 0:e[t]}},"./node_modules/lodash/_getWrapDetails.js":function(e,t){var a=/\{\n\/\* \[wrapped with (.+)\] \*/,n=/,? & /;e.exports=function(e){var t=e.match(a);return t?t[1].split(n):[]}},"./node_modules/lodash/_hasPath.js":function(e,t,a){var n=a("./node_modules/lodash/_castPath.js"),s=a("./node_modules/lodash/isArguments.js"),o=a("./node_modules/lodash/isArray.js"),r=a("./node_modules/lodash/_isIndex.js"),l=a("./node_modules/lodash/isLength.js"),i=a("./node_modules/lodash/_toKey.js");e.exports=function(e,t,a){for(var c=-1,d=(t=n(t,e)).length,u=!1;++c<d;){var p=i(t[c]);if(!(u=null!=e&&a(e,p)))break;e=e[p]}return u||++c!=d?u:!!(d=null==e?0:e.length)&&l(d)&&r(p,d)&&(o(e)||s(e))}},"./node_modules/lodash/_hashClear.js":function(e,t,a){var n=a("./node_modules/lodash/_nativeCreate.js");e.exports=function(){this.__data__=n?n(null):{},this.size=0}},"./node_modules/lodash/_hashDelete.js":function(e,t){e.exports=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}},"./node_modules/lodash/_hashGet.js":function(e,t,a){var n=a("./node_modules/lodash/_nativeCreate.js"),s="__lodash_hash_undefined__",o=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;if(n){var a=t[e];return a===s?void 0:a}return o.call(t,e)?t[e]:void 0}},"./node_modules/lodash/_hashHas.js":function(e,t,a){var n=a("./node_modules/lodash/_nativeCreate.js"),s=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;return n?void 0!==t[e]:s.call(t,e)}},"./node_modules/lodash/_hashSet.js":function(e,t,a){var n=a("./node_modules/lodash/_nativeCreate.js"),s="__lodash_hash_undefined__";e.exports=function(e,t){var a=this.__data__;return this.size+=this.has(e)?0:1,a[e]=n&&void 0===t?s:t,this}},"./node_modules/lodash/_initCloneArray.js":function(e,t){var a=Object.prototype.hasOwnProperty;e.exports=function(e){var t=e.length,n=new e.constructor(t);return t&&"string"==typeof e[0]&&a.call(e,"index")&&(n.index=e.index,n.input=e.input),n}},"./node_modules/lodash/_initCloneByTag.js":function(e,t,a){var n=a("./node_modules/lodash/_cloneArrayBuffer.js"),s=a("./node_modules/lodash/_cloneDataView.js"),o=a("./node_modules/lodash/_cloneRegExp.js"),r=a("./node_modules/lodash/_cloneSymbol.js"),l=a("./node_modules/lodash/_cloneTypedArray.js"),i="[object Boolean]",c="[object Date]",d="[object Map]",u="[object Number]",p="[object RegExp]",m="[object Set]",f="[object String]",g="[object Symbol]",h="[object ArrayBuffer]",v="[object DataView]",b="[object Float32Array]",y="[object Float64Array]",_="[object Int8Array]",w="[object Int16Array]",x="[object Int32Array]",j="[object Uint8Array]",k="[object Uint8ClampedArray]",A="[object Uint16Array]",S="[object Uint32Array]";e.exports=function(e,t,a){var M=e.constructor;switch(t){case h:return n(e);case i:case c:return new M(+e);case v:return s(e,a);case b:case y:case _:case w:case x:case j:case k:case A:case S:return l(e,a);case d:return new M;case u:case f:return new M(e);case p:return o(e);case m:return new M;case g:return r(e)}}},"./node_modules/lodash/_initCloneObject.js":function(e,t,a){var n=a("./node_modules/lodash/_baseCreate.js"),s=a("./node_modules/lodash/_getPrototype.js"),o=a("./node_modules/lodash/_isPrototype.js");e.exports=function(e){return"function"!=typeof e.constructor||o(e)?{}:n(s(e))}},"./node_modules/lodash/_insertWrapDetails.js":function(e,t){var a=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/;e.exports=function(e,t){var n=t.length;if(!n)return e;var s=n-1;return t[s]=(n>1?"& ":"")+t[s],t=t.join(n>2?", ":" "),e.replace(a,"{\n/* [wrapped with "+t+"] */\n")}},"./node_modules/lodash/_isFlattenable.js":function(e,t,a){var n=a("./node_modules/lodash/_Symbol.js"),s=a("./node_modules/lodash/isArguments.js"),o=a("./node_modules/lodash/isArray.js"),r=n?n.isConcatSpreadable:void 0;e.exports=function(e){return o(e)||s(e)||!!(r&&e&&e[r])}},"./node_modules/lodash/_isIndex.js":function(e,t){var a=9007199254740991,n=/^(?:0|[1-9]\d*)$/;e.exports=function(e,t){var s=typeof e;return!!(t=null==t?a:t)&&("number"==s||"symbol"!=s&&n.test(e))&&e>-1&&e%1==0&&e<t}},"./node_modules/lodash/_isIterateeCall.js":function(e,t,a){var n=a("./node_modules/lodash/eq.js"),s=a("./node_modules/lodash/isArrayLike.js"),o=a("./node_modules/lodash/_isIndex.js"),r=a("./node_modules/lodash/isObject.js");e.exports=function(e,t,a){if(!r(a))return!1;var l=typeof t;return!!("number"==l?s(a)&&o(t,a.length):"string"==l&&t in a)&&n(a[t],e)}},"./node_modules/lodash/_isKey.js":function(e,t,a){var n=a("./node_modules/lodash/isArray.js"),s=a("./node_modules/lodash/isSymbol.js"),o=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,r=/^\w*$/;e.exports=function(e,t){if(n(e))return!1;var a=typeof e;return!("number"!=a&&"symbol"!=a&&"boolean"!=a&&null!=e&&!s(e))||r.test(e)||!o.test(e)||null!=t&&e in Object(t)}},"./node_modules/lodash/_isKeyable.js":function(e,t){e.exports=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e}},"./node_modules/lodash/_isLaziable.js":function(e,t,a){var n=a("./node_modules/lodash/_LazyWrapper.js"),s=a("./node_modules/lodash/_getData.js"),o=a("./node_modules/lodash/_getFuncName.js"),r=a("./node_modules/lodash/wrapperLodash.js");e.exports=function(e){var t=o(e),a=r[t];if("function"!=typeof a||!(t in n.prototype))return!1;if(e===a)return!0;var l=s(a);return!!l&&e===l[0]}},"./node_modules/lodash/_isMasked.js":function(e,t,a){var n,s=a("./node_modules/lodash/_coreJsData.js"),o=(n=/[^.]+$/.exec(s&&s.keys&&s.keys.IE_PROTO||""))?"Symbol(src)_1."+n:"";e.exports=function(e){return!!o&&o in e}},"./node_modules/lodash/_isPrototype.js":function(e,t){var a=Object.prototype;e.exports=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||a)}},"./node_modules/lodash/_isStrictComparable.js":function(e,t,a){var n=a("./node_modules/lodash/isObject.js");e.exports=function(e){return e==e&&!n(e)}},"./node_modules/lodash/_listCacheClear.js":function(e,t){e.exports=function(){this.__data__=[],this.size=0}},"./node_modules/lodash/_listCacheDelete.js":function(e,t,a){var n=a("./node_modules/lodash/_assocIndexOf.js"),s=Array.prototype.splice;e.exports=function(e){var t=this.__data__,a=n(t,e);return!(a<0||(a==t.length-1?t.pop():s.call(t,a,1),--this.size,0))}},"./node_modules/lodash/_listCacheGet.js":function(e,t,a){var n=a("./node_modules/lodash/_assocIndexOf.js");e.exports=function(e){var t=this.__data__,a=n(t,e);return a<0?void 0:t[a][1]}},"./node_modules/lodash/_listCacheHas.js":function(e,t,a){var n=a("./node_modules/lodash/_assocIndexOf.js");e.exports=function(e){return n(this.__data__,e)>-1}},"./node_modules/lodash/_listCacheSet.js":function(e,t,a){var n=a("./node_modules/lodash/_assocIndexOf.js");e.exports=function(e,t){var a=this.__data__,s=n(a,e);return s<0?(++this.size,a.push([e,t])):a[s][1]=t,this}},"./node_modules/lodash/_mapCacheClear.js":function(e,t,a){var n=a("./node_modules/lodash/_Hash.js"),s=a("./node_modules/lodash/_ListCache.js"),o=a("./node_modules/lodash/_Map.js");e.exports=function(){this.size=0,this.__data__={hash:new n,map:new(o||s),string:new n}}},"./node_modules/lodash/_mapCacheDelete.js":function(e,t,a){var n=a("./node_modules/lodash/_getMapData.js");e.exports=function(e){var t=n(this,e).delete(e);return this.size-=t?1:0,t}},"./node_modules/lodash/_mapCacheGet.js":function(e,t,a){var n=a("./node_modules/lodash/_getMapData.js");e.exports=function(e){return n(this,e).get(e)}},"./node_modules/lodash/_mapCacheHas.js":function(e,t,a){var n=a("./node_modules/lodash/_getMapData.js");e.exports=function(e){return n(this,e).has(e)}},"./node_modules/lodash/_mapCacheSet.js":function(e,t,a){var n=a("./node_modules/lodash/_getMapData.js");e.exports=function(e,t){var a=n(this,e),s=a.size;return a.set(e,t),this.size+=a.size==s?0:1,this}},"./node_modules/lodash/_mapToArray.js":function(e,t){e.exports=function(e){var t=-1,a=Array(e.size);return e.forEach(function(e,n){a[++t]=[n,e]}),a}},"./node_modules/lodash/_matchesStrictComparable.js":function(e,t){e.exports=function(e,t){return function(a){return null!=a&&a[e]===t&&(void 0!==t||e in Object(a))}}},"./node_modules/lodash/_memoizeCapped.js":function(e,t,a){var n=a("./node_modules/lodash/memoize.js"),s=500;e.exports=function(e){var t=n(e,function(e){return a.size===s&&a.clear(),e}),a=t.cache;return t}},"./node_modules/lodash/_mergeData.js":function(e,t,a){var n=a("./node_modules/lodash/_composeArgs.js"),s=a("./node_modules/lodash/_composeArgsRight.js"),o=a("./node_modules/lodash/_replaceHolders.js"),r="__lodash_placeholder__",l=1,i=2,c=4,d=8,u=128,p=256,m=Math.min;e.exports=function(e,t){var a=e[1],f=t[1],g=a|f,h=g<(l|i|u),v=f==u&&a==d||f==u&&a==p&&e[7].length<=t[8]||f==(u|p)&&t[7].length<=t[8]&&a==d;if(!h&&!v)return e;f&l&&(e[2]=t[2],g|=a&l?0:c);var b=t[3];if(b){var y=e[3];e[3]=y?n(y,b,t[4]):b,e[4]=y?o(e[3],r):t[4]}return(b=t[5])&&(y=e[5],e[5]=y?s(y,b,t[6]):b,e[6]=y?o(e[5],r):t[6]),(b=t[7])&&(e[7]=b),f&u&&(e[8]=null==e[8]?t[8]:m(e[8],t[8])),null==e[9]&&(e[9]=t[9]),e[0]=t[0],e[1]=g,e}},"./node_modules/lodash/_metaMap.js":function(e,t,a){var n=a("./node_modules/lodash/_WeakMap.js"),s=n&&new n;e.exports=s},"./node_modules/lodash/_nativeCreate.js":function(e,t,a){var n=a("./node_modules/lodash/_getNative.js")(Object,"create");e.exports=n},"./node_modules/lodash/_nativeKeys.js":function(e,t,a){var n=a("./node_modules/lodash/_overArg.js")(Object.keys,Object);e.exports=n},"./node_modules/lodash/_nativeKeysIn.js":function(e,t){e.exports=function(e){var t=[];if(null!=e)for(var a in Object(e))t.push(a);return t}},"./node_modules/lodash/_nodeUtil.js":function(e,t,a){(function(e){var n=a("./node_modules/lodash/_freeGlobal.js"),s="object"==typeof t&&t&&!t.nodeType&&t,o=s&&"object"==typeof e&&e&&!e.nodeType&&e,r=o&&o.exports===s&&n.process,l=function(){try{var e=o&&o.require&&o.require("util").types;return e||r&&r.binding&&r.binding("util")}catch(e){}}();e.exports=l}).call(t,a("./node_modules/webpack/buildin/module.js")(e))},"./node_modules/lodash/_objectToString.js":function(e,t){var a=Object.prototype.toString;e.exports=function(e){return a.call(e)}},"./node_modules/lodash/_overArg.js":function(e,t){e.exports=function(e,t){return function(a){return e(t(a))}}},"./node_modules/lodash/_overRest.js":function(e,t,a){var n=a("./node_modules/lodash/_apply.js"),s=Math.max;e.exports=function(e,t,a){return t=s(void 0===t?e.length-1:t,0),function(){for(var o=arguments,r=-1,l=s(o.length-t,0),i=Array(l);++r<l;)i[r]=o[t+r];r=-1;for(var c=Array(t+1);++r<t;)c[r]=o[r];return c[t]=a(i),n(e,this,c)}}},"./node_modules/lodash/_realNames.js":function(e,t){e.exports={}},"./node_modules/lodash/_reorder.js":function(e,t,a){var n=a("./node_modules/lodash/_copyArray.js"),s=a("./node_modules/lodash/_isIndex.js"),o=Math.min;e.exports=function(e,t){for(var a=e.length,r=o(t.length,a),l=n(e);r--;){var i=t[r];e[r]=s(i,a)?l[i]:void 0}return e}},"./node_modules/lodash/_replaceHolders.js":function(e,t){var a="__lodash_placeholder__";e.exports=function(e,t){for(var n=-1,s=e.length,o=0,r=[];++n<s;){var l=e[n];l!==t&&l!==a||(e[n]=a,r[o++]=n)}return r}},"./node_modules/lodash/_root.js":function(e,t,a){var n=a("./node_modules/lodash/_freeGlobal.js"),s="object"==typeof self&&self&&self.Object===Object&&self,o=n||s||Function("return this")();e.exports=o},"./node_modules/lodash/_setCacheAdd.js":function(e,t){var a="__lodash_hash_undefined__";e.exports=function(e){return this.__data__.set(e,a),this}},"./node_modules/lodash/_setCacheHas.js":function(e,t){e.exports=function(e){return this.__data__.has(e)}},"./node_modules/lodash/_setData.js":function(e,t,a){var n=a("./node_modules/lodash/_baseSetData.js"),s=a("./node_modules/lodash/_shortOut.js")(n);e.exports=s},"./node_modules/lodash/_setToArray.js":function(e,t){e.exports=function(e){var t=-1,a=Array(e.size);return e.forEach(function(e){a[++t]=e}),a}},"./node_modules/lodash/_setToString.js":function(e,t,a){var n=a("./node_modules/lodash/_baseSetToString.js"),s=a("./node_modules/lodash/_shortOut.js")(n);e.exports=s},"./node_modules/lodash/_setWrapToString.js":function(e,t,a){var n=a("./node_modules/lodash/_getWrapDetails.js"),s=a("./node_modules/lodash/_insertWrapDetails.js"),o=a("./node_modules/lodash/_setToString.js"),r=a("./node_modules/lodash/_updateWrapDetails.js");e.exports=function(e,t,a){var l=t+"";return o(e,s(l,r(n(l),a)))}},"./node_modules/lodash/_shortOut.js":function(e,t){var a=800,n=16,s=Date.now;e.exports=function(e){var t=0,o=0;return function(){var r=s(),l=n-(r-o);if(o=r,l>0){if(++t>=a)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}},"./node_modules/lodash/_stackClear.js":function(e,t,a){var n=a("./node_modules/lodash/_ListCache.js");e.exports=function(){this.__data__=new n,this.size=0}},"./node_modules/lodash/_stackDelete.js":function(e,t){e.exports=function(e){var t=this.__data__,a=t.delete(e);return this.size=t.size,a}},"./node_modules/lodash/_stackGet.js":function(e,t){e.exports=function(e){return this.__data__.get(e)}},"./node_modules/lodash/_stackHas.js":function(e,t){e.exports=function(e){return this.__data__.has(e)}},"./node_modules/lodash/_stackSet.js":function(e,t,a){var n=a("./node_modules/lodash/_ListCache.js"),s=a("./node_modules/lodash/_Map.js"),o=a("./node_modules/lodash/_MapCache.js"),r=200;e.exports=function(e,t){var a=this.__data__;if(a instanceof n){var l=a.__data__;if(!s||l.length<r-1)return l.push([e,t]),this.size=++a.size,this;a=this.__data__=new o(l)}return a.set(e,t),this.size=a.size,this}},"./node_modules/lodash/_strictIndexOf.js":function(e,t){e.exports=function(e,t,a){for(var n=a-1,s=e.length;++n<s;)if(e[n]===t)return n;return-1}},"./node_modules/lodash/_stringToPath.js":function(e,t,a){var n=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,s=/\\(\\)?/g,o=a("./node_modules/lodash/_memoizeCapped.js")(function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(n,function(e,a,n,o){t.push(n?o.replace(s,"$1"):a||e)}),t});e.exports=o},"./node_modules/lodash/_toKey.js":function(e,t,a){var n=a("./node_modules/lodash/isSymbol.js"),s=1/0;e.exports=function(e){if("string"==typeof e||n(e))return e;var t=e+"";return"0"==t&&1/e==-s?"-0":t}},"./node_modules/lodash/_toSource.js":function(e,t){var a=Function.prototype.toString;e.exports=function(e){if(null!=e){try{return a.call(e)}catch(e){}try{return e+""}catch(e){}}return""}},"./node_modules/lodash/_unescapeHtmlChar.js":function(e,t,a){var n=a("./node_modules/lodash/_basePropertyOf.js")({"&":"&","<":"<",">":">",""":'"',"'":"'"});e.exports=n},"./node_modules/lodash/_updateWrapDetails.js":function(e,t,a){var n=a("./node_modules/lodash/_arrayEach.js"),s=a("./node_modules/lodash/_arrayIncludes.js"),o=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]];e.exports=function(e,t){return n(o,function(a){var n="_."+a[0];t&a[1]&&!s(e,n)&&e.push(n)}),e.sort()}},"./node_modules/lodash/_wrapperClone.js":function(e,t,a){var n=a("./node_modules/lodash/_LazyWrapper.js"),s=a("./node_modules/lodash/_LodashWrapper.js"),o=a("./node_modules/lodash/_copyArray.js");e.exports=function(e){if(e instanceof n)return e.clone();var t=new s(e.__wrapped__,e.__chain__);return t.__actions__=o(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}},"./node_modules/lodash/ary.js":function(e,t,a){var n=a("./node_modules/lodash/_createWrap.js"),s=128;e.exports=function(e,t,a){return t=a?void 0:t,t=e&&null==t?e.length:t,n(e,s,void 0,void 0,void 0,void 0,t)}},"./node_modules/lodash/assignIn.js":function(e,t,a){var n=a("./node_modules/lodash/_copyObject.js"),s=a("./node_modules/lodash/_createAssigner.js"),o=a("./node_modules/lodash/keysIn.js"),r=s(function(e,t){n(t,o(t),e)});e.exports=r},"./node_modules/lodash/clone.js":function(e,t,a){var n=a("./node_modules/lodash/_baseClone.js"),s=4;e.exports=function(e){return n(e,s)}},"./node_modules/lodash/constant.js":function(e,t){e.exports=function(e){return function(){return e}}},"./node_modules/lodash/countBy.js":function(e,t,a){var n=a("./node_modules/lodash/_baseAssignValue.js"),s=a("./node_modules/lodash/_createAggregator.js"),o=Object.prototype.hasOwnProperty,r=s(function(e,t,a){o.call(e,a)?++e[a]:n(e,a,1)});e.exports=r},"./node_modules/lodash/curry.js":function(e,t,a){var n=a("./node_modules/lodash/_createWrap.js"),s=8;function o(e,t,a){var r=n(e,s,void 0,void 0,void 0,void 0,void 0,t=a?void 0:t);return r.placeholder=o.placeholder,r}o.placeholder={},e.exports=o},"./node_modules/lodash/debounce.js":function(e,t,a){var n=a("./node_modules/lodash/isObject.js"),s=a("./node_modules/lodash/now.js"),o=a("./node_modules/lodash/toNumber.js"),r="Expected a function",l=Math.max,i=Math.min;e.exports=function(e,t,a){var c,d,u,p,m,f,g=0,h=!1,v=!1,b=!0;if("function"!=typeof e)throw new TypeError(r);function y(t){var a=c,n=d;return c=d=void 0,g=t,p=e.apply(n,a)}function _(e){var a=e-f;return void 0===f||a>=t||a<0||v&&e-g>=u}function w(){var e=s();if(_(e))return x(e);m=setTimeout(w,function(e){var a=t-(e-f);return v?i(a,u-(e-g)):a}(e))}function x(e){return m=void 0,b&&c?y(e):(c=d=void 0,p)}function j(){var e=s(),a=_(e);if(c=arguments,d=this,f=e,a){if(void 0===m)return function(e){return g=e,m=setTimeout(w,t),h?y(e):p}(f);if(v)return m=setTimeout(w,t),y(f)}return void 0===m&&(m=setTimeout(w,t)),p}return t=o(t)||0,n(a)&&(h=!!a.leading,u=(v="maxWait"in a)?l(o(a.maxWait)||0,t):u,b="trailing"in a?!!a.trailing:b),j.cancel=function(){void 0!==m&&clearTimeout(m),g=0,c=f=d=m=void 0},j.flush=function(){return void 0===m?p:x(s())},j}},"./node_modules/lodash/defer.js":function(e,t,a){var n=a("./node_modules/lodash/_baseDelay.js"),s=a("./node_modules/lodash/_baseRest.js")(function(e,t){return n(e,1,t)});e.exports=s},"./node_modules/lodash/delay.js":function(e,t,a){var n=a("./node_modules/lodash/_baseDelay.js"),s=a("./node_modules/lodash/_baseRest.js"),o=a("./node_modules/lodash/toNumber.js"),r=s(function(e,t,a){return n(e,o(t)||0,a)});e.exports=r},"./node_modules/lodash/difference.js":function(e,t,a){var n=a("./node_modules/lodash/_baseDifference.js"),s=a("./node_modules/lodash/_baseFlatten.js"),o=a("./node_modules/lodash/_baseRest.js"),r=a("./node_modules/lodash/isArrayLikeObject.js"),l=o(function(e,t){return r(e)?n(e,s(t,1,r,!0)):[]});e.exports=l},"./node_modules/lodash/each.js":function(e,t,a){e.exports=a("./node_modules/lodash/forEach.js")},"./node_modules/lodash/eq.js":function(e,t){e.exports=function(e,t){return e===t||e!=e&&t!=t}},"./node_modules/lodash/extend.js":function(e,t,a){e.exports=a("./node_modules/lodash/assignIn.js")},"./node_modules/lodash/filter.js":function(e,t,a){var n=a("./node_modules/lodash/_arrayFilter.js"),s=a("./node_modules/lodash/_baseFilter.js"),o=a("./node_modules/lodash/_baseIteratee.js"),r=a("./node_modules/lodash/isArray.js");e.exports=function(e,t){return(r(e)?n:s)(e,o(t,3))}},"./node_modules/lodash/find.js":function(e,t,a){var n=a("./node_modules/lodash/_createFind.js")(a("./node_modules/lodash/findIndex.js"));e.exports=n},"./node_modules/lodash/findIndex.js":function(e,t,a){var n=a("./node_modules/lodash/_baseFindIndex.js"),s=a("./node_modules/lodash/_baseIteratee.js"),o=a("./node_modules/lodash/toInteger.js"),r=Math.max;e.exports=function(e,t,a){var l=null==e?0:e.length;if(!l)return-1;var i=null==a?0:o(a);return i<0&&(i=r(l+i,0)),n(e,s(t,3),i)}},"./node_modules/lodash/flatten.js":function(e,t,a){var n=a("./node_modules/lodash/_baseFlatten.js");e.exports=function(e){return null!=e&&e.length?n(e,1):[]}},"./node_modules/lodash/flow.js":function(e,t,a){var n=a("./node_modules/lodash/_createFlow.js")();e.exports=n},"./node_modules/lodash/forEach.js":function(e,t,a){var n=a("./node_modules/lodash/_arrayEach.js"),s=a("./node_modules/lodash/_baseEach.js"),o=a("./node_modules/lodash/_castFunction.js"),r=a("./node_modules/lodash/isArray.js");e.exports=function(e,t){return(r(e)?n:s)(e,o(t))}},"./node_modules/lodash/fp/_baseConvert.js":function(e,t,a){var n=a("./node_modules/lodash/fp/_mapping.js"),s=a("./node_modules/lodash/fp/placeholder.js"),o=Array.prototype.push;function r(e,t){return 2==t?function(t,a){return e(t,a)}:function(t){return e(t)}}function l(e){for(var t=e?e.length:0,a=Array(t);t--;)a[t]=e[t];return a}function i(e,t){return function(){var a=arguments.length;if(a){for(var n=Array(a);a--;)n[a]=arguments[a];var s=n[0]=t.apply(void 0,n);return e.apply(void 0,n),s}}}e.exports=function e(t,a,c,d){var u,p="function"==typeof a,m=a===Object(a);if(m&&(d=c,c=a,a=void 0),null==c)throw new TypeError;d||(d={});var f={cap:!("cap"in d)||d.cap,curry:!("curry"in d)||d.curry,fixed:!("fixed"in d)||d.fixed,immutable:!("immutable"in d)||d.immutable,rearg:!("rearg"in d)||d.rearg},g="curry"in d&&d.curry,h="fixed"in d&&d.fixed,v="rearg"in d&&d.rearg,b=p?c:s,y=p?c.runInContext():void 0,_=p?c:{ary:t.ary,assign:t.assign,clone:t.clone,curry:t.curry,forEach:t.forEach,isArray:t.isArray,isError:t.isError,isFunction:t.isFunction,isWeakMap:t.isWeakMap,iteratee:t.iteratee,keys:t.keys,rearg:t.rearg,toInteger:t.toInteger,toPath:t.toPath},w=_.ary,x=_.assign,j=_.clone,k=_.curry,A=_.forEach,S=_.isArray,M=_.isError,P=_.isFunction,E=_.isWeakMap,C=_.keys,T=_.rearg,I=_.toInteger,D=_.toPath,O=C(n.aryMethod),L={castArray:function(e){return function(){var t=arguments[0];return S(t)?e(l(t)):e.apply(void 0,arguments)}},iteratee:function(e){return function(){var t=arguments[0],a=arguments[1],n=e(t,a),s=n.length;return f.cap&&"number"==typeof a?(a=a>2?a-2:1,s&&s<=a?n:r(n,a)):n}},mixin:function(e){return function(t){var a=this;if(!P(a))return e(a,Object(t));var n=[];return A(C(t),function(e){P(t[e])&&n.push([e,a.prototype[e]])}),e(a,Object(t)),A(n,function(e){var t=e[1];P(t)?a.prototype[e[0]]=t:delete a.prototype[e[0]]}),a}},nthArg:function(e){return function(t){var a=t<0?1:I(t)+1;return k(e(t),a)}},rearg:function(e){return function(t,a){var n=a?a.length:0;return k(e(t,a),n)}},runInContext:function(a){return function(n){return e(t,a(n),d)}}};function R(e,t){if(f.cap){var a=n.iterateeRearg[e];if(a)return function(e,t){return z(e,function(e){var a=t.length;return function(e,t){return 2==t?function(t,a){return e.apply(void 0,arguments)}:function(t){return e.apply(void 0,arguments)}}(T(r(e,a),t),a)})}(t,a);var s=!p&&n.iterateeAry[e];if(s)return function(e,t){return z(e,function(e){return"function"==typeof e?r(e,t):e})}(t,s)}return t}function N(e,t,a){if(f.fixed&&(h||!n.skipFixed[e])){var s=n.methodSpread[e],r=s&&s.start;return void 0===r?w(t,a):function(e,t){return function(){for(var a=arguments.length,n=a-1,s=Array(a);a--;)s[a]=arguments[a];var r=s[t],l=s.slice(0,t);return r&&o.apply(l,r),t!=n&&o.apply(l,s.slice(t+1)),e.apply(this,l)}}(t,r)}return t}function $(e,t,a){return f.rearg&&a>1&&(v||!n.skipRearg[e])?T(t,n.methodRearg[e]||n.aryRearg[a]):t}function F(e,t){for(var a=-1,n=(t=D(t)).length,s=n-1,o=j(Object(e)),r=o;null!=r&&++a<n;){var l=t[a],i=r[l];null==i||P(i)||M(i)||E(i)||(r[l]=j(a==s?i:Object(i))),r=r[l]}return o}function U(t,a){var s=n.aliasToReal[t]||t,o=n.remap[s]||s,r=d;return function(t){var n=p?y:_,l=p?y[o]:a,i=x(x({},r),t);return e(n,s,l,i)}}function z(e,t){return function(){var a=arguments.length;if(!a)return e();for(var n=Array(a);a--;)n[a]=arguments[a];var s=f.rearg?0:a-1;return n[s]=t(n[s]),e.apply(void 0,n)}}function V(e,t){var a,s=n.aliasToReal[e]||e,o=t,r=L[s];return r?o=r(t):f.immutable&&(n.mutate.array[s]?o=i(t,l):n.mutate.object[s]?o=i(t,function(e){return function(t){return e({},t)}}(t)):n.mutate.set[s]&&(o=i(t,F))),A(O,function(e){return A(n.aryMethod[e],function(t){if(s==t){var r=n.methodSpread[s],l=r&&r.afterRearg;return a=l?N(s,$(s,o,e),e):$(s,N(s,o,e),e),a=R(s,a),i=a,c=e,a=g||f.curry&&c>1?k(i,c):i,!1}var i,c}),!a}),a||(a=o),a==t&&(a=g?k(a,1):function(){return t.apply(this,arguments)}),a.convert=U(s,t),n.placeholder[s]&&(u=!0,a.placeholder=t.placeholder=b),a}if(!m)return V(a,c);var B=c,K=[];return A(O,function(e){A(n.aryMethod[e],function(e){var t=B[n.remap[e]||e];t&&K.push([e,V(e,t)])})}),A(C(B),function(e){var t=B[e];if("function"==typeof t){for(var a=K.length;a--;)if(K[a][0]==e)return;t.convert=U(e,t),K.push([e,t])}}),A(K,function(e){B[e[0]]=e[1]}),B.convert=function(e){return B.runInContext.convert(e)(void 0)},u&&(B.placeholder=b),A(C(B),function(e){A(n.realToAlias[e]||[],function(t){B[t]=B[e]})}),B}},"./node_modules/lodash/fp/_falseOptions.js":function(e,t){e.exports={cap:!1,curry:!1,fixed:!1,immutable:!1,rearg:!1}},"./node_modules/lodash/fp/_mapping.js":function(e,t){t.aliasToReal={each:"forEach",eachRight:"forEachRight",entries:"toPairs",entriesIn:"toPairsIn",extend:"assignIn",extendAll:"assignInAll",extendAllWith:"assignInAllWith",extendWith:"assignInWith",first:"head",conforms:"conformsTo",matches:"isMatch",property:"get",__:"placeholder",F:"stubFalse",T:"stubTrue",all:"every",allPass:"overEvery",always:"constant",any:"some",anyPass:"overSome",apply:"spread",assoc:"set",assocPath:"set",complement:"negate",compose:"flowRight",contains:"includes",dissoc:"unset",dissocPath:"unset",dropLast:"dropRight",dropLastWhile:"dropRightWhile",equals:"isEqual",identical:"eq",indexBy:"keyBy",init:"initial",invertObj:"invert",juxt:"over",omitAll:"omit",nAry:"ary",path:"get",pathEq:"matchesProperty",pathOr:"getOr",paths:"at",pickAll:"pick",pipe:"flow",pluck:"map",prop:"get",propEq:"matchesProperty",propOr:"getOr",props:"at",symmetricDifference:"xor",symmetricDifferenceBy:"xorBy",symmetricDifferenceWith:"xorWith",takeLast:"takeRight",takeLastWhile:"takeRightWhile",unapply:"rest",unnest:"flatten",useWith:"overArgs",where:"conformsTo",whereEq:"isMatch",zipObj:"zipObject"},t.aryMethod={1:["assignAll","assignInAll","attempt","castArray","ceil","create","curry","curryRight","defaultsAll","defaultsDeepAll","floor","flow","flowRight","fromPairs","invert","iteratee","memoize","method","mergeAll","methodOf","mixin","nthArg","over","overEvery","overSome","rest","reverse","round","runInContext","spread","template","trim","trimEnd","trimStart","uniqueId","words","zipAll"],2:["add","after","ary","assign","assignAllWith","assignIn","assignInAllWith","at","before","bind","bindAll","bindKey","chunk","cloneDeepWith","cloneWith","concat","conformsTo","countBy","curryN","curryRightN","debounce","defaults","defaultsDeep","defaultTo","delay","difference","divide","drop","dropRight","dropRightWhile","dropWhile","endsWith","eq","every","filter","find","findIndex","findKey","findLast","findLastIndex","findLastKey","flatMap","flatMapDeep","flattenDepth","forEach","forEachRight","forIn","forInRight","forOwn","forOwnRight","get","groupBy","gt","gte","has","hasIn","includes","indexOf","intersection","invertBy","invoke","invokeMap","isEqual","isMatch","join","keyBy","lastIndexOf","lt","lte","map","mapKeys","mapValues","matchesProperty","maxBy","meanBy","merge","mergeAllWith","minBy","multiply","nth","omit","omitBy","overArgs","pad","padEnd","padStart","parseInt","partial","partialRight","partition","pick","pickBy","propertyOf","pull","pullAll","pullAt","random","range","rangeRight","rearg","reject","remove","repeat","restFrom","result","sampleSize","some","sortBy","sortedIndex","sortedIndexOf","sortedLastIndex","sortedLastIndexOf","sortedUniqBy","split","spreadFrom","startsWith","subtract","sumBy","take","takeRight","takeRightWhile","takeWhile","tap","throttle","thru","times","trimChars","trimCharsEnd","trimCharsStart","truncate","union","uniqBy","uniqWith","unset","unzipWith","without","wrap","xor","zip","zipObject","zipObjectDeep"],3:["assignInWith","assignWith","clamp","differenceBy","differenceWith","findFrom","findIndexFrom","findLastFrom","findLastIndexFrom","getOr","includesFrom","indexOfFrom","inRange","intersectionBy","intersectionWith","invokeArgs","invokeArgsMap","isEqualWith","isMatchWith","flatMapDepth","lastIndexOfFrom","mergeWith","orderBy","padChars","padCharsEnd","padCharsStart","pullAllBy","pullAllWith","rangeStep","rangeStepRight","reduce","reduceRight","replace","set","slice","sortedIndexBy","sortedLastIndexBy","transform","unionBy","unionWith","update","xorBy","xorWith","zipWith"],4:["fill","setWith","updateWith"]},t.aryRearg={2:[1,0],3:[2,0,1],4:[3,2,0,1]},t.iterateeAry={dropRightWhile:1,dropWhile:1,every:1,filter:1,find:1,findFrom:1,findIndex:1,findIndexFrom:1,findKey:1,findLast:1,findLastFrom:1,findLastIndex:1,findLastIndexFrom:1,findLastKey:1,flatMap:1,flatMapDeep:1,flatMapDepth:1,forEach:1,forEachRight:1,forIn:1,forInRight:1,forOwn:1,forOwnRight:1,map:1,mapKeys:1,mapValues:1,partition:1,reduce:2,reduceRight:2,reject:1,remove:1,some:1,takeRightWhile:1,takeWhile:1,times:1,transform:2},t.iterateeRearg={mapKeys:[1],reduceRight:[1,0]},t.methodRearg={assignInAllWith:[1,0],assignInWith:[1,2,0],assignAllWith:[1,0],assignWith:[1,2,0],differenceBy:[1,2,0],differenceWith:[1,2,0],getOr:[2,1,0],intersectionBy:[1,2,0],intersectionWith:[1,2,0],isEqualWith:[1,2,0],isMatchWith:[2,1,0],mergeAllWith:[1,0],mergeWith:[1,2,0],padChars:[2,1,0],padCharsEnd:[2,1,0],padCharsStart:[2,1,0],pullAllBy:[2,1,0],pullAllWith:[2,1,0],rangeStep:[1,2,0],rangeStepRight:[1,2,0],setWith:[3,1,2,0],sortedIndexBy:[2,1,0],sortedLastIndexBy:[2,1,0],unionBy:[1,2,0],unionWith:[1,2,0],updateWith:[3,1,2,0],xorBy:[1,2,0],xorWith:[1,2,0],zipWith:[1,2,0]},t.methodSpread={assignAll:{start:0},assignAllWith:{start:0},assignInAll:{start:0},assignInAllWith:{start:0},defaultsAll:{start:0},defaultsDeepAll:{start:0},invokeArgs:{start:2},invokeArgsMap:{start:2},mergeAll:{start:0},mergeAllWith:{start:0},partial:{start:1},partialRight:{start:1},without:{start:1},zipAll:{start:0}},t.mutate={array:{fill:!0,pull:!0,pullAll:!0,pullAllBy:!0,pullAllWith:!0,pullAt:!0,remove:!0,reverse:!0},object:{assign:!0,assignAll:!0,assignAllWith:!0,assignIn:!0,assignInAll:!0,assignInAllWith:!0,assignInWith:!0,assignWith:!0,defaults:!0,defaultsAll:!0,defaultsDeep:!0,defaultsDeepAll:!0,merge:!0,mergeAll:!0,mergeAllWith:!0,mergeWith:!0},set:{set:!0,setWith:!0,unset:!0,update:!0,updateWith:!0}},t.placeholder={bind:!0,bindKey:!0,curry:!0,curryRight:!0,partial:!0,partialRight:!0},t.realToAlias=function(){var e=Object.prototype.hasOwnProperty,a=t.aliasToReal,n={};for(var s in a){var o=a[s];e.call(n,o)?n[o].push(s):n[o]=[s]}return n}(),t.remap={assignAll:"assign",assignAllWith:"assignWith",assignInAll:"assignIn",assignInAllWith:"assignInWith",curryN:"curry",curryRightN:"curryRight",defaultsAll:"defaults",defaultsDeepAll:"defaultsDeep",findFrom:"find",findIndexFrom:"findIndex",findLastFrom:"findLast",findLastIndexFrom:"findLastIndex",getOr:"get",includesFrom:"includes",indexOfFrom:"indexOf",invokeArgs:"invoke",invokeArgsMap:"invokeMap",lastIndexOfFrom:"lastIndexOf",mergeAll:"merge",mergeAllWith:"mergeWith",padChars:"pad",padCharsEnd:"padEnd",padCharsStart:"padStart",propertyOf:"get",rangeStep:"range",rangeStepRight:"rangeRight",restFrom:"rest",spreadFrom:"spread",trimChars:"trim",trimCharsEnd:"trimEnd",trimCharsStart:"trimStart",zipAll:"zip"},t.skipFixed={castArray:!0,flow:!0,flowRight:!0,iteratee:!0,mixin:!0,rearg:!0,runInContext:!0},t.skipRearg={add:!0,assign:!0,assignIn:!0,bind:!0,bindKey:!0,concat:!0,difference:!0,divide:!0,eq:!0,gt:!0,gte:!0,isEqual:!0,lt:!0,lte:!0,matchesProperty:!0,merge:!0,multiply:!0,overArgs:!0,partial:!0,partialRight:!0,propertyOf:!0,random:!0,range:!0,rangeRight:!0,subtract:!0,zip:!0,zipObject:!0,zipObjectDeep:!0}},"./node_modules/lodash/fp/_util.js":function(e,t,a){e.exports={ary:a("./node_modules/lodash/ary.js"),assign:a("./node_modules/lodash/_baseAssign.js"),clone:a("./node_modules/lodash/clone.js"),curry:a("./node_modules/lodash/curry.js"),forEach:a("./node_modules/lodash/_arrayEach.js"),isArray:a("./node_modules/lodash/isArray.js"),isError:a("./node_modules/lodash/isError.js"),isFunction:a("./node_modules/lodash/isFunction.js"),isWeakMap:a("./node_modules/lodash/isWeakMap.js"),iteratee:a("./node_modules/lodash/iteratee.js"),keys:a("./node_modules/lodash/_baseKeys.js"),rearg:a("./node_modules/lodash/rearg.js"),toInteger:a("./node_modules/lodash/toInteger.js"),toPath:a("./node_modules/lodash/toPath.js")}},"./node_modules/lodash/fp/convert.js":function(e,t,a){var n=a("./node_modules/lodash/fp/_baseConvert.js"),s=a("./node_modules/lodash/fp/_util.js");e.exports=function(e,t,a){return n(s,e,t,a)}},"./node_modules/lodash/fp/each.js":function(e,t,a){e.exports=a("./node_modules/lodash/fp/forEach.js")},"./node_modules/lodash/fp/filter.js":function(e,t,a){var n=a("./node_modules/lodash/fp/convert.js")("filter",a("./node_modules/lodash/filter.js"));n.placeholder=a("./node_modules/lodash/fp/placeholder.js"),e.exports=n},"./node_modules/lodash/fp/flow.js":function(e,t,a){var n=a("./node_modules/lodash/fp/convert.js")("flow",a("./node_modules/lodash/flow.js"));n.placeholder=a("./node_modules/lodash/fp/placeholder.js"),e.exports=n},"./node_modules/lodash/fp/forEach.js":function(e,t,a){var n=a("./node_modules/lodash/fp/convert.js")("forEach",a("./node_modules/lodash/forEach.js"));n.placeholder=a("./node_modules/lodash/fp/placeholder.js"),e.exports=n},"./node_modules/lodash/fp/head.js":function(e,t,a){var n=a("./node_modules/lodash/fp/convert.js")("head",a("./node_modules/lodash/head.js"),a("./node_modules/lodash/fp/_falseOptions.js"));n.placeholder=a("./node_modules/lodash/fp/placeholder.js"),e.exports=n},"./node_modules/lodash/fp/map.js":function(e,t,a){var n=a("./node_modules/lodash/fp/convert.js")("map",a("./node_modules/lodash/map.js"));n.placeholder=a("./node_modules/lodash/fp/placeholder.js"),e.exports=n},"./node_modules/lodash/fp/placeholder.js":function(e,t){e.exports={}},"./node_modules/lodash/fp/reduce.js":function(e,t,a){var n=a("./node_modules/lodash/fp/convert.js")("reduce",a("./node_modules/lodash/reduce.js"));n.placeholder=a("./node_modules/lodash/fp/placeholder.js"),e.exports=n},"./node_modules/lodash/fp/sortBy.js":function(e,t,a){var n=a("./node_modules/lodash/fp/convert.js")("sortBy",a("./node_modules/lodash/sortBy.js"));n.placeholder=a("./node_modules/lodash/fp/placeholder.js"),e.exports=n},"./node_modules/lodash/fp/take.js":function(e,t,a){var n=a("./node_modules/lodash/fp/convert.js")("take",a("./node_modules/lodash/take.js"));n.placeholder=a("./node_modules/lodash/fp/placeholder.js"),e.exports=n},"./node_modules/lodash/get.js":function(e,t,a){var n=a("./node_modules/lodash/_baseGet.js");e.exports=function(e,t,a){var s=null==e?void 0:n(e,t);return void 0===s?a:s}},"./node_modules/lodash/groupBy.js":function(e,t,a){var n=a("./node_modules/lodash/_baseAssignValue.js"),s=a("./node_modules/lodash/_createAggregator.js"),o=Object.prototype.hasOwnProperty,r=s(function(e,t,a){o.call(e,a)?e[a].push(t):n(e,a,[t])});e.exports=r},"./node_modules/lodash/hasIn.js":function(e,t,a){var n=a("./node_modules/lodash/_baseHasIn.js"),s=a("./node_modules/lodash/_hasPath.js");e.exports=function(e,t){return null!=e&&s(e,t,n)}},"./node_modules/lodash/head.js":function(e,t){e.exports=function(e){return e&&e.length?e[0]:void 0}},"./node_modules/lodash/identity.js":function(e,t){e.exports=function(e){return e}},"./node_modules/lodash/includes.js":function(e,t,a){var n=a("./node_modules/lodash/_baseIndexOf.js"),s=a("./node_modules/lodash/isArrayLike.js"),o=a("./node_modules/lodash/isString.js"),r=a("./node_modules/lodash/toInteger.js"),l=a("./node_modules/lodash/values.js"),i=Math.max;e.exports=function(e,t,a,c){e=s(e)?e:l(e),a=a&&!c?r(a):0;var d=e.length;return a<0&&(a=i(d+a,0)),o(e)?a<=d&&e.indexOf(t,a)>-1:!!d&&n(e,t,a)>-1}},"./node_modules/lodash/intersection.js":function(e,t,a){var n=a("./node_modules/lodash/_arrayMap.js"),s=a("./node_modules/lodash/_baseIntersection.js"),o=a("./node_modules/lodash/_baseRest.js"),r=a("./node_modules/lodash/_castArrayLikeObject.js"),l=o(function(e){var t=n(e,r);return t.length&&t[0]===e[0]?s(t):[]});e.exports=l},"./node_modules/lodash/isArguments.js":function(e,t,a){var n=a("./node_modules/lodash/_baseIsArguments.js"),s=a("./node_modules/lodash/isObjectLike.js"),o=Object.prototype,r=o.hasOwnProperty,l=o.propertyIsEnumerable,i=n(function(){return arguments}())?n:function(e){return s(e)&&r.call(e,"callee")&&!l.call(e,"callee")};e.exports=i},"./node_modules/lodash/isArray.js":function(e,t){var a=Array.isArray;e.exports=a},"./node_modules/lodash/isArrayLike.js":function(e,t,a){var n=a("./node_modules/lodash/isFunction.js"),s=a("./node_modules/lodash/isLength.js");e.exports=function(e){return null!=e&&s(e.length)&&!n(e)}},"./node_modules/lodash/isArrayLikeObject.js":function(e,t,a){var n=a("./node_modules/lodash/isArrayLike.js"),s=a("./node_modules/lodash/isObjectLike.js");e.exports=function(e){return s(e)&&n(e)}},"./node_modules/lodash/isBuffer.js":function(e,t,a){(function(e){var n=a("./node_modules/lodash/_root.js"),s=a("./node_modules/lodash/stubFalse.js"),o="object"==typeof t&&t&&!t.nodeType&&t,r=o&&"object"==typeof e&&e&&!e.nodeType&&e,l=r&&r.exports===o?n.Buffer:void 0,i=(l?l.isBuffer:void 0)||s;e.exports=i}).call(t,a("./node_modules/webpack/buildin/module.js")(e))},"./node_modules/lodash/isEmpty.js":function(e,t,a){var n=a("./node_modules/lodash/_baseKeys.js"),s=a("./node_modules/lodash/_getTag.js"),o=a("./node_modules/lodash/isArguments.js"),r=a("./node_modules/lodash/isArray.js"),l=a("./node_modules/lodash/isArrayLike.js"),i=a("./node_modules/lodash/isBuffer.js"),c=a("./node_modules/lodash/_isPrototype.js"),d=a("./node_modules/lodash/isTypedArray.js"),u="[object Map]",p="[object Set]",m=Object.prototype.hasOwnProperty;e.exports=function(e){if(null==e)return!0;if(l(e)&&(r(e)||"string"==typeof e||"function"==typeof e.splice||i(e)||d(e)||o(e)))return!e.length;var t=s(e);if(t==u||t==p)return!e.size;if(c(e))return!n(e).length;for(var a in e)if(m.call(e,a))return!1;return!0}},"./node_modules/lodash/isEqual.js":function(e,t,a){var n=a("./node_modules/lodash/_baseIsEqual.js");e.exports=function(e,t){return n(e,t)}},"./node_modules/lodash/isError.js":function(e,t,a){var n=a("./node_modules/lodash/_baseGetTag.js"),s=a("./node_modules/lodash/isObjectLike.js"),o=a("./node_modules/lodash/isPlainObject.js"),r="[object DOMException]",l="[object Error]";e.exports=function(e){if(!s(e))return!1;var t=n(e);return t==l||t==r||"string"==typeof e.message&&"string"==typeof e.name&&!o(e)}},"./node_modules/lodash/isFunction.js":function(e,t,a){var n=a("./node_modules/lodash/_baseGetTag.js"),s=a("./node_modules/lodash/isObject.js"),o="[object AsyncFunction]",r="[object Function]",l="[object GeneratorFunction]",i="[object Proxy]";e.exports=function(e){if(!s(e))return!1;var t=n(e);return t==r||t==l||t==o||t==i}},"./node_modules/lodash/isLength.js":function(e,t){var a=9007199254740991;e.exports=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=a}},"./node_modules/lodash/isMap.js":function(e,t,a){var n=a("./node_modules/lodash/_baseIsMap.js"),s=a("./node_modules/lodash/_baseUnary.js"),o=a("./node_modules/lodash/_nodeUtil.js"),r=o&&o.isMap,l=r?s(r):n;e.exports=l},"./node_modules/lodash/isNaN.js":function(e,t,a){var n=a("./node_modules/lodash/isNumber.js");e.exports=function(e){return n(e)&&e!=+e}},"./node_modules/lodash/isNumber.js":function(e,t,a){var n=a("./node_modules/lodash/_baseGetTag.js"),s=a("./node_modules/lodash/isObjectLike.js"),o="[object Number]";e.exports=function(e){return"number"==typeof e||s(e)&&n(e)==o}},"./node_modules/lodash/isObject.js":function(e,t){e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},"./node_modules/lodash/isObjectLike.js":function(e,t){e.exports=function(e){return null!=e&&"object"==typeof e}},"./node_modules/lodash/isPlainObject.js":function(e,t,a){var n=a("./node_modules/lodash/_baseGetTag.js"),s=a("./node_modules/lodash/_getPrototype.js"),o=a("./node_modules/lodash/isObjectLike.js"),r="[object Object]",l=Function.prototype,i=Object.prototype,c=l.toString,d=i.hasOwnProperty,u=c.call(Object);e.exports=function(e){if(!o(e)||n(e)!=r)return!1;var t=s(e);if(null===t)return!0;var a=d.call(t,"constructor")&&t.constructor;return"function"==typeof a&&a instanceof a&&c.call(a)==u}},"./node_modules/lodash/isSet.js":function(e,t,a){var n=a("./node_modules/lodash/_baseIsSet.js"),s=a("./node_modules/lodash/_baseUnary.js"),o=a("./node_modules/lodash/_nodeUtil.js"),r=o&&o.isSet,l=r?s(r):n;e.exports=l},"./node_modules/lodash/isString.js":function(e,t,a){var n=a("./node_modules/lodash/_baseGetTag.js"),s=a("./node_modules/lodash/isArray.js"),o=a("./node_modules/lodash/isObjectLike.js"),r="[object String]";e.exports=function(e){return"string"==typeof e||!s(e)&&o(e)&&n(e)==r}},"./node_modules/lodash/isSymbol.js":function(e,t,a){var n=a("./node_modules/lodash/_baseGetTag.js"),s=a("./node_modules/lodash/isObjectLike.js"),o="[object Symbol]";e.exports=function(e){return"symbol"==typeof e||s(e)&&n(e)==o}},"./node_modules/lodash/isTypedArray.js":function(e,t,a){var n=a("./node_modules/lodash/_baseIsTypedArray.js"),s=a("./node_modules/lodash/_baseUnary.js"),o=a("./node_modules/lodash/_nodeUtil.js"),r=o&&o.isTypedArray,l=r?s(r):n;e.exports=l},"./node_modules/lodash/isWeakMap.js":function(e,t,a){var n=a("./node_modules/lodash/_getTag.js"),s=a("./node_modules/lodash/isObjectLike.js"),o="[object WeakMap]";e.exports=function(e){return s(e)&&n(e)==o}},"./node_modules/lodash/iteratee.js":function(e,t,a){var n=a("./node_modules/lodash/_baseClone.js"),s=a("./node_modules/lodash/_baseIteratee.js"),o=1;e.exports=function(e){return s("function"==typeof e?e:n(e,o))}},"./node_modules/lodash/keys.js":function(e,t,a){var n=a("./node_modules/lodash/_arrayLikeKeys.js"),s=a("./node_modules/lodash/_baseKeys.js"),o=a("./node_modules/lodash/isArrayLike.js");e.exports=function(e){return o(e)?n(e):s(e)}},"./node_modules/lodash/keysIn.js":function(e,t,a){var n=a("./node_modules/lodash/_arrayLikeKeys.js"),s=a("./node_modules/lodash/_baseKeysIn.js"),o=a("./node_modules/lodash/isArrayLike.js");e.exports=function(e){return o(e)?n(e,!0):s(e)}},"./node_modules/lodash/last.js":function(e,t){e.exports=function(e){var t=null==e?0:e.length;return t?e[t-1]:void 0}},"./node_modules/lodash/map.js":function(e,t,a){var n=a("./node_modules/lodash/_arrayMap.js"),s=a("./node_modules/lodash/_baseIteratee.js"),o=a("./node_modules/lodash/_baseMap.js"),r=a("./node_modules/lodash/isArray.js");e.exports=function(e,t){return(r(e)?n:o)(e,s(t,3))}},"./node_modules/lodash/memoize.js":function(e,t,a){var n=a("./node_modules/lodash/_MapCache.js"),s="Expected a function";function o(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError(s);var a=function(){var n=arguments,s=t?t.apply(this,n):n[0],o=a.cache;if(o.has(s))return o.get(s);var r=e.apply(this,n);return a.cache=o.set(s,r)||o,r};return a.cache=new(o.Cache||n),a}o.Cache=n,e.exports=o},"./node_modules/lodash/noop.js":function(e,t){e.exports=function(){}},"./node_modules/lodash/now.js":function(e,t,a){var n=a("./node_modules/lodash/_root.js");e.exports=function(){return n.Date.now()}},"./node_modules/lodash/pick.js":function(e,t,a){var n=a("./node_modules/lodash/_basePick.js"),s=a("./node_modules/lodash/_flatRest.js")(function(e,t){return null==e?{}:n(e,t)});e.exports=s},"./node_modules/lodash/property.js":function(e,t,a){var n=a("./node_modules/lodash/_baseProperty.js"),s=a("./node_modules/lodash/_basePropertyDeep.js"),o=a("./node_modules/lodash/_isKey.js"),r=a("./node_modules/lodash/_toKey.js");e.exports=function(e){return o(e)?n(r(e)):s(e)}},"./node_modules/lodash/range.js":function(e,t,a){var n=a("./node_modules/lodash/_createRange.js")();e.exports=n},"./node_modules/lodash/rearg.js":function(e,t,a){var n=a("./node_modules/lodash/_createWrap.js"),s=a("./node_modules/lodash/_flatRest.js")(function(e,t){return n(e,256,void 0,void 0,void 0,t)});e.exports=s},"./node_modules/lodash/reduce.js":function(e,t,a){var n=a("./node_modules/lodash/_arrayReduce.js"),s=a("./node_modules/lodash/_baseEach.js"),o=a("./node_modules/lodash/_baseIteratee.js"),r=a("./node_modules/lodash/_baseReduce.js"),l=a("./node_modules/lodash/isArray.js");e.exports=function(e,t,a){var i=l(e)?n:r,c=arguments.length<3;return i(e,o(t,4),a,c,s)}},"./node_modules/lodash/some.js":function(e,t,a){var n=a("./node_modules/lodash/_arraySome.js"),s=a("./node_modules/lodash/_baseIteratee.js"),o=a("./node_modules/lodash/_baseSome.js"),r=a("./node_modules/lodash/isArray.js"),l=a("./node_modules/lodash/_isIterateeCall.js");e.exports=function(e,t,a){var i=r(e)?n:o;return a&&l(e,t,a)&&(t=void 0),i(e,s(t,3))}},"./node_modules/lodash/sortBy.js":function(e,t,a){var n=a("./node_modules/lodash/_baseFlatten.js"),s=a("./node_modules/lodash/_baseOrderBy.js"),o=a("./node_modules/lodash/_baseRest.js"),r=a("./node_modules/lodash/_isIterateeCall.js"),l=o(function(e,t){if(null==e)return[];var a=t.length;return a>1&&r(e,t[0],t[1])?t=[]:a>2&&r(t[0],t[1],t[2])&&(t=[t[0]]),s(e,n(t,1),[])});e.exports=l},"./node_modules/lodash/stubArray.js":function(e,t){e.exports=function(){return[]}},"./node_modules/lodash/stubFalse.js":function(e,t){e.exports=function(){return!1}},"./node_modules/lodash/take.js":function(e,t,a){var n=a("./node_modules/lodash/_baseSlice.js"),s=a("./node_modules/lodash/toInteger.js");e.exports=function(e,t,a){return e&&e.length?(t=a||void 0===t?1:s(t),n(e,0,t<0?0:t)):[]}},"./node_modules/lodash/toFinite.js":function(e,t,a){var n=a("./node_modules/lodash/toNumber.js"),s=1/0,o=1.7976931348623157e308;e.exports=function(e){return e?(e=n(e))===s||e===-s?(e<0?-1:1)*o:e==e?e:0:0===e?e:0}},"./node_modules/lodash/toInteger.js":function(e,t,a){var n=a("./node_modules/lodash/toFinite.js");e.exports=function(e){var t=n(e),a=t%1;return t==t?a?t-a:t:0}},"./node_modules/lodash/toNumber.js":function(e,t,a){var n=a("./node_modules/lodash/isObject.js"),s=a("./node_modules/lodash/isSymbol.js"),o=NaN,r=/^\s+|\s+$/g,l=/^[-+]0x[0-9a-f]+$/i,i=/^0b[01]+$/i,c=/^0o[0-7]+$/i,d=parseInt;e.exports=function(e){if("number"==typeof e)return e;if(s(e))return o;if(n(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=n(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(r,"");var a=i.test(e);return a||c.test(e)?d(e.slice(2),a?2:8):l.test(e)?o:+e}},"./node_modules/lodash/toPath.js":function(e,t,a){var n=a("./node_modules/lodash/_arrayMap.js"),s=a("./node_modules/lodash/_copyArray.js"),o=a("./node_modules/lodash/isArray.js"),r=a("./node_modules/lodash/isSymbol.js"),l=a("./node_modules/lodash/_stringToPath.js"),i=a("./node_modules/lodash/_toKey.js"),c=a("./node_modules/lodash/toString.js");e.exports=function(e){return o(e)?n(e,i):r(e)?[e]:s(l(c(e)))}},"./node_modules/lodash/toString.js":function(e,t,a){var n=a("./node_modules/lodash/_baseToString.js");e.exports=function(e){return null==e?"":n(e)}},"./node_modules/lodash/unescape.js":function(e,t,a){var n=a("./node_modules/lodash/toString.js"),s=a("./node_modules/lodash/_unescapeHtmlChar.js"),o=/&(?:amp|lt|gt|quot|#39);/g,r=RegExp(o.source);e.exports=function(e){return(e=n(e))&&r.test(e)?e.replace(o,s):e}},"./node_modules/lodash/union.js":function(e,t,a){var n=a("./node_modules/lodash/_baseFlatten.js"),s=a("./node_modules/lodash/_baseRest.js"),o=a("./node_modules/lodash/_baseUniq.js"),r=a("./node_modules/lodash/isArrayLikeObject.js"),l=s(function(e){return o(n(e,1,r,!0))});e.exports=l},"./node_modules/lodash/uniq.js":function(e,t,a){var n=a("./node_modules/lodash/_baseUniq.js");e.exports=function(e){return e&&e.length?n(e):[]}},"./node_modules/lodash/uniqBy.js":function(e,t,a){var n=a("./node_modules/lodash/_baseIteratee.js"),s=a("./node_modules/lodash/_baseUniq.js");e.exports=function(e,t){return e&&e.length?s(e,n(t,2)):[]}},"./node_modules/lodash/values.js":function(e,t,a){var n=a("./node_modules/lodash/_baseValues.js"),s=a("./node_modules/lodash/keys.js");e.exports=function(e){return null==e?[]:n(e,s(e))}},"./node_modules/lodash/without.js":function(e,t,a){var n=a("./node_modules/lodash/_baseDifference.js"),s=a("./node_modules/lodash/_baseRest.js"),o=a("./node_modules/lodash/isArrayLikeObject.js"),r=s(function(e,t){return o(e)?n(e,t):[]});e.exports=r},"./node_modules/lodash/wrapperLodash.js":function(e,t,a){var n=a("./node_modules/lodash/_LazyWrapper.js"),s=a("./node_modules/lodash/_LodashWrapper.js"),o=a("./node_modules/lodash/_baseLodash.js"),r=a("./node_modules/lodash/isArray.js"),l=a("./node_modules/lodash/isObjectLike.js"),i=a("./node_modules/lodash/_wrapperClone.js"),c=Object.prototype.hasOwnProperty;function d(e){if(l(e)&&!r(e)&&!(e instanceof n)){if(e instanceof s)return e;if(c.call(e,"__wrapped__"))return i(e)}return new s(e)}d.prototype=o.prototype,d.prototype.constructor=d,e.exports=d},"./node_modules/regenerator-runtime/runtime-module.js":function(e,t,a){var n=function(){return this}()||Function("return this")(),s=n.regeneratorRuntime&&Object.getOwnPropertyNames(n).indexOf("regeneratorRuntime")>=0,o=s&&n.regeneratorRuntime;if(n.regeneratorRuntime=void 0,e.exports=a("./node_modules/regenerator-runtime/runtime.js"),s)n.regeneratorRuntime=o;else try{delete n.regeneratorRuntime}catch(e){n.regeneratorRuntime=void 0}},"./node_modules/regenerator-runtime/runtime.js":function(e,t){!function(t){"use strict";var a,n=Object.prototype,s=n.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},r=o.iterator||"@@iterator",l=o.asyncIterator||"@@asyncIterator",i=o.toStringTag||"@@toStringTag",c="object"==typeof e,d=t.regeneratorRuntime;if(d)c&&(e.exports=d);else{(d=t.regeneratorRuntime=c?e.exports:{}).wrap=_;var u="suspendedStart",p="suspendedYield",m="executing",f="completed",g={},h={};h[r]=function(){return this};var v=Object.getPrototypeOf,b=v&&v(v(T([])));b&&b!==n&&s.call(b,r)&&(h=b);var y=k.prototype=x.prototype=Object.create(h);j.prototype=y.constructor=k,k.constructor=j,k[i]=j.displayName="GeneratorFunction",d.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===j||"GeneratorFunction"===(t.displayName||t.name))},d.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,k):(e.__proto__=k,i in e||(e[i]="GeneratorFunction")),e.prototype=Object.create(y),e},d.awrap=function(e){return{__await:e}},A(S.prototype),S.prototype[l]=function(){return this},d.AsyncIterator=S,d.async=function(e,t,a,n){var s=new S(_(e,t,a,n));return d.isGeneratorFunction(t)?s:s.next().then(function(e){return e.done?e.value:s.next()})},A(y),y[i]="Generator",y[r]=function(){return this},y.toString=function(){return"[object Generator]"},d.keys=function(e){var t=[];for(var a in e)t.push(a);return t.reverse(),function a(){for(;t.length;){var n=t.pop();if(n in e)return a.value=n,a.done=!1,a}return a.done=!0,a}},d.values=T,C.prototype={constructor:C,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=a,this.done=!1,this.delegate=null,this.method="next",this.arg=a,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&s.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=a)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function n(n,s){return l.type="throw",l.arg=e,t.next=n,s&&(t.method="next",t.arg=a),!!s}for(var o=this.tryEntries.length-1;o>=0;--o){var r=this.tryEntries[o],l=r.completion;if("root"===r.tryLoc)return n("end");if(r.tryLoc<=this.prev){var i=s.call(r,"catchLoc"),c=s.call(r,"finallyLoc");if(i&&c){if(this.prev<r.catchLoc)return n(r.catchLoc,!0);if(this.prev<r.finallyLoc)return n(r.finallyLoc)}else if(i){if(this.prev<r.catchLoc)return n(r.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<r.finallyLoc)return n(r.finallyLoc)}}}},abrupt:function(e,t){for(var a=this.tryEntries.length-1;a>=0;--a){var n=this.tryEntries[a];if(n.tryLoc<=this.prev&&s.call(n,"finallyLoc")&&this.prev<n.finallyLoc){var o=n;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var r=o?o.completion:{};return r.type=e,r.arg=t,o?(this.method="next",this.next=o.finallyLoc,g):this.complete(r)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),g},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var a=this.tryEntries[t];if(a.finallyLoc===e)return this.complete(a.completion,a.afterLoc),E(a),g}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var a=this.tryEntries[t];if(a.tryLoc===e){var n=a.completion;if("throw"===n.type){var s=n.arg;E(a)}return s}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:T(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=a),g}}}function _(e,t,a,n){var s=t&&t.prototype instanceof x?t:x,o=Object.create(s.prototype),r=new C(n||[]);return o._invoke=function(e,t,a){var n=u;return function(s,o){if(n===m)throw new Error("Generator is already running");if(n===f){if("throw"===s)throw o;return I()}for(a.method=s,a.arg=o;;){var r=a.delegate;if(r){var l=M(r,a);if(l){if(l===g)continue;return l}}if("next"===a.method)a.sent=a._sent=a.arg;else if("throw"===a.method){if(n===u)throw n=f,a.arg;a.dispatchException(a.arg)}else"return"===a.method&&a.abrupt("return",a.arg);n=m;var i=w(e,t,a);if("normal"===i.type){if(n=a.done?f:p,i.arg===g)continue;return{value:i.arg,done:a.done}}"throw"===i.type&&(n=f,a.method="throw",a.arg=i.arg)}}}(e,a,r),o}function w(e,t,a){try{return{type:"normal",arg:e.call(t,a)}}catch(e){return{type:"throw",arg:e}}}function x(){}function j(){}function k(){}function A(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function S(e){var t;this._invoke=function(a,n){function o(){return new Promise(function(t,o){!function t(a,n,o,r){var l=w(e[a],e,n);if("throw"!==l.type){var i=l.arg,c=i.value;return c&&"object"==typeof c&&s.call(c,"__await")?Promise.resolve(c.__await).then(function(e){t("next",e,o,r)},function(e){t("throw",e,o,r)}):Promise.resolve(c).then(function(e){i.value=e,o(i)},r)}r(l.arg)}(a,n,t,o)})}return t=t?t.then(o,o):o()}}function M(e,t){var n=e.iterator[t.method];if(n===a){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=a,M(e,t),"throw"===t.method))return g;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return g}var s=w(n,e.iterator,t.arg);if("throw"===s.type)return t.method="throw",t.arg=s.arg,t.delegate=null,g;var o=s.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=a),t.delegate=null,g):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,g)}function P(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function C(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(P,this),this.reset(!0)}function T(e){if(e){var t=e[r];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,o=function t(){for(;++n<e.length;)if(s.call(e,n))return t.value=e[n],t.done=!1,t;return t.value=a,t.done=!0,t};return o.next=o}}return{next:I}}function I(){return{value:a,done:!0}}}(function(){return this}()||Function("return this")())},"./node_modules/webpack/buildin/global.js":function(e,t){var a;a=function(){return this}();try{a=a||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(a=window)}e.exports=a},"./node_modules/webpack/buildin/module.js":function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},"./src/app/address/helpers/addressKeysView.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getUserKeys=t.getAddressKeys=void 0;var n=o(a("./node_modules/babel-runtime/core-js/object/keys.js")),s=o(a("./node_modules/lodash/find.js"));function o(e){return e&&e.__esModule?e:{default:e}}var r=t.getAddressKeys=function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).reduce(function(e,t){var a=t.Keys,n=void 0===a?[]:a,s=t.ID,o=void 0===s?"":s,r=t.Email,l=void 0===r?"":r,i=t.Order;if(!n.length)return e;var c=n[0],d={order:i,addressID:o,email:l,fingerprint:c.fingerprint,created:c.created,bitSize:c.bitSize,publicKey:c.PublicKey,keys:n};return e.push(d),e},[])};t.getUserKeys=function(e,t){var a=e.Keys.reduce(function(e,a){var n=function(e,t){return(0,s.default)(e,function(e){var a=e.Keys,n=void 0===a?[]:a;return(0,s.default)(n,function(e){return e.fingerprint===t})})}(t,a.fingerprint);if(!n)return e;var o=n.ID,r=n.DisplayName,l=n.Order;return e[r]||(e[r]={ID:o,Email:r,Order:l,Keys:[]}),e[r].Keys.push(a),e},{}),o=(0,n.default)(a).map(function(e){return a[e]});return r(o)}},"./src/app/analytics/index.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(a("./src/app/analytics/services/analytics.js")),s=o(a("./src/app/analytics/services/eventListener.js"));function o(e){return e&&e.__esModule?e:{default:e}}t.default=angular.module("proton.analytics",[]).run(["analytics","eventListener",function(e,t){e.init(),t.init()}]).factory("analytics",n.default).factory("eventListener",s.default).name},"./src/app/analytics/services/analytics.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/babel-runtime/core-js/promise.js"),o=(n=s)&&n.__esModule?n:{default:n};function r(e,t){var a=e.statsConfig,n=a.isEnabled,s=a.cookieDomain,r=void 0===s?"":s,l=a.domains,i=void 0===l?[]:l,c=a.statsHost,d=void 0===c?"":c,u=a.siteId,p=void 0===u?-1:u,m=a.abSiteId,f=void 0===m?-1:m;if(!n)return{init:angular.noop,trackGoals:angular.noop,trackPage:angular.noop};var g=[],h={};window.piwikAsyncInit=function(){h.tracker=window.Piwik.getTracker("//"+d+"/"+t.TRACKER_ROUTE,p),h.tracker.setCookieDomain(r),h.tracker.setDomains(i),h.tracker.enableCrossDomainLinking(),h.tracker.setCustomVariable(1,"siteFrontEndId",f,"visit"),h.tracker.setCustomVariable(3,"siteFrontEndClient",e.clientID+"_"+e.app_version,"visit"),h.tracker.setCustomVariable(1,"enablePMRequestCombiner","yes","page"),g.forEach(function(e){return e(h.tracker)})};var v=document.createElement("script");function b(){return h.tracker?o.default.resolve(h.tracker):new o.default(function(e){g.push(e)})}return v.type="text/javascript",v.async=!0,v.defer=!0,v.src="https://"+d+"/"+t.PIWIK_SCRIPT,document.head.appendChild(v),{init:angular.noop,trackGoals:function(e){b().then(function(t){t.trackGoal(e)})},trackPage:function(e){var t=e.url,a=e.referrer,n=e.title;b().then(function(e){e.setDocumentTitle(n),e.setReferrerUrl(a),e.setCustomUrl(t),e.trackPageView()})}}}r.$inject=["CONFIG","CONSTANTS"],t.default=r},"./src/app/analytics/services/eventListener.js":function(e,t,a){"use strict";function n(e,t,a,n,s){var o=["signup","secured.dashboard","login","secured.inbox"],r={lastLocation:document.referrer},l=n().on;return l("$stateChangeSuccess",function(e,t){var n=r.lastLocation;if(r.lastLocation=location.href,o.includes(t.name)){var l=function(e){return document.domain+"/"+s.find(e,!1)}(t);a.trackPage({title:l,referrer:n,url:location.href})}}),l("signup",function(t,n){var s=n.type,o=n.data;if("user.subscription.finished"===s){var r=o.plan||{Name:"free"},l=[e.METRIC_GOALS.SIGNUP_ALL];"free"===r.Name?l.push(e.METRIC_GOALS.SIGNUP_FREE):l.push(e.METRIC_GOALS.SIGNUP_PAID),"plus"===r.Name&&l.push(e.METRIC_GOALS.SIGNUP_PLUS),"visionary"===r.Name&&l.push(e.METRIC_GOALS.SIGNUP_VISIONARY),a.trackGoals(l)}}),{init:angular.noop}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["CONSTANTS","CONFIG","analytics","dispatchers","pageTitlesModel"],t.default=n},"./src/app/app.js":function(e,t,a){"use strict";var n=A(a("./node_modules/lodash/debounce.js")),s=A(a("./src/app/paginator/index.js")),o=A(a("./src/app/analytics/index.js")),r=A(a("./src/app/authentication/index.js")),l=A(a("./src/app/browserSupport/index.js")),i=A(a("./src/app/bugReport/index.js")),c=A(a("./src/app/commons/index.js")),d=A(a("./src/app/core/index.js")),u=A(a("./src/app/domains/index.js")),p=A(a("./src/app/formUtils/index.js")),m=A(a("./src/app/keys/index.js")),f=A(a("./src/app/members/index.js")),g=A(a("./src/app/organization/index.js")),h=A(a("./src/app/outside/index.js")),v=A(a("./src/app/payment/index.js")),b=A(a("./src/app/settings/index.js")),y=A(a("./src/app/ui/index.js")),_=A(a("./src/app/user/index.js")),w=A(a("./src/app/utils/index.js")),x=A(a("./src/app/config.js")),j=A(a("./src/app/constants.js")),k=A(a("./src/app/routes.js"));function A(e){return e&&e.__esModule?e:{default:e}}a("./src/sass/app.scss");var S=a("./src/templates recursive \\.html$");S.keys().forEach(S),angular.module("proton",["gettext","cgNotify","ngCookies","ngMessages","ngSanitize","ui.router","oc.lazyLoad","templates-app",s.default,o.default,r.default,l.default,i.default,c.default,d.default,u.default,p.default,m.default,f.default,g.default,h.default,v.default,b.default,y.default,_.default,w.default,j.default,k.default]).constant("CONFIG",x.default).config(["urlProvider","CONFIG","notificationProvider",function(e,t,n){e.setBaseUrl(t.apiUrl),n.template(a("./src/templates/notifications/base.tpl.html"))}]).run(["$rootScope","$state","logoutManager","authentication","networkActivityTracker","CONSTANTS","tools","lazyLoader",function(e,t,a,s,o,r,l,i){FastClick.attach(document.body),i.app(),window.addEventListener("resize",(0,n.default)(l.mobileResponsive,50)),window.addEventListener("orientationchange",l.mobileResponsive),l.mobileResponsive(),e.showWelcome=!0,window.svg4everybody(),e.networkActivity=o}]).config(["$httpProvider","CONFIG",function(e,t){e.interceptors.push("authHttpResponseInterceptor"),e.interceptors.push("formatResponseInterceptor"),e.defaults.headers.common["x-pm-appversion"]="Web_"+t.app_version,e.defaults.headers.common["x-pm-apiversion"]=t.api_version,e.defaults.headers.common.Accept="application/vnd.protonmail.v1+json",e.defaults.withCredentials=!0,angular.isUndefined(e.defaults.headers.get)&&(e.defaults.headers.get={}),e.defaults.headers.get["Cache-Control"]="no-cache",e.defaults.headers.get.Pragma="no-cache"}]).run(["$rootScope","$location","$state","authentication","$log","dispatchers","networkActivityTracker","AppModel",function(e,t,a,n,s,o,r,l){var i=o().on;i("$stateChangeStart",function(t,o){r.clear();var l="login"===o.name,i="login.sub"===o.name,c="upgrade"===o.name,d=o.name.includes("support"),u="account"===o.name,p="signup"===o.name||"pre-invite"===o.name,m="login.unlock"===o.name,f=o.name.includes("eo"),g=o.name.includes("reset"),h="printer"===o.name,v="pgp"===o.name;if(!m||!e.isLoggedIn)return e.isLoggedIn&&!e.isLocked&&m?(s.debug("appjs:($rootScope.isLoggedIn && !$rootScope.isLocked && isUnlock)"),t.preventDefault(),void a.go("secured.inbox")):void(l||i||d||u||p||f||c||g||h||v?s.debug("appjs:(isLogin || isSub || isSupport || isAccount || isSignup || isOutside || isUpgrade || isReset || isPrinter || isPgp)"):n.isLoggedIn()||(t.preventDefault(),a.go("login")));s.debug("appjs:(isUnlock && $rootScope.isLoggedIn)")}),i("$stateChangeSuccess",function(){l.set("requestTimeout",!1),$(".tooltip").not(void 0).hide(),$(".navbar-toggle").click(),$("#loading_pm, #pm_slow, #pm_slow2").remove()})}]).run(["$state","dispatchers",function(e,t){(0,t().on)("$stateChangeError",function(t,a,n,s){for(var o=arguments.length,r=Array(o>4?o-4:0),l=4;l<o;l++)r[l-4]=arguments[l];e.go("support.message"),console.warn("stateChangeError",t,a,n,s,r),console.error(r[1])})}]).run(["consoleMessage",function(e){return e()}]).config(["$logProvider","$compileProvider","$qProvider","CONFIG",function(e,t,a,n){var s=n.debug||!1;e.debugEnabled(s),t.debugInfoEnabled(s),a.errorOnUnhandledRejections(s)}])},"./src/app/authentication/controllers/login.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/babel-runtime/core-js/promise.js"),o=(n=s)&&n.__esModule?n:{default:n},r=a("./src/helpers/browser.js");function l(e,t,a,n,s,l,i,c,d,u,p,m,f,g,h,v,b,y,_,w){var x=p(),j=x.on,k=x.unsubscribe;function A(){n.error=null,h.closeAll()}function S(){var e=document.getElementById("password");e.focus(),e.select()}function M(){var e=document.getElementById("twoFactorCode");e.focus(),e.select()}function P(){n.password="",n.twoFactorCode=""}function E(a,o,r,i){g.track(f.loginWithCredentials({Username:a,Password:o,TwoFactorCode:r},i).then(function(n){if(s.debug("loginWithCredentials:result.data ",n),angular.isDefined(n.data)&&angular.isDefined(n.data.Code)&&401===n.data.Code)S(),h({message:n.data.ErrorDescription,classes:"notification-danger"});else if(n.data&&10002===n.data.Code){var r=void 0;r=n.data.Error?n.data.Error:"Your account has been disabled.",h({message:r,classes:"notification-danger"})}else if(n.data&&void 0===n.data.PrivateKey)f.receivedCredentials({AccessToken:n.data.AccessToken,RefreshToken:n.data.RefreshToken,UID:n.data.Uid,ExpiresIn:n.data.ExpiresIn,EventID:n.data.EventID}),f.setAuthCookie(n.data).then(function(){e.isLoggedIn=!0,t.go("login.setup")}).catch(function(e){h({message:e.message,classes:"notification-danger"}),t.go("login")});else if(n.data&&n.data.AccessToken){e.isLoggedIn=!0;var l={username:a,password:o,authResponse:n.data};1===n.data.PasswordMode&&b.set("domoArigato",!0),_.setItem("creds",l),t.go("login.unlock")}else if(n.data&&5003===n.data.Code);else if(n.data&&n.data.Error){var i=n.data.ErrorDescription?n.data.ErrorDescription:n.data.Error;h({message:i,classes:"notification-danger"}),P()}else h({message:"Unable to log you in.",classes:"notification-danger"}),P()},function(e){void 0===e.message&&(e.message="Sorry, our login server is down. Please try again later."),n.twoFactor=0,l(S,100,!1),h({message:e.message,classes:"notification-danger"}),console.error(e),P()}))}function C(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return f.unlockWithPassword(a,n).then(function(a){return s.debug("unlockWithPassword:resp"+a),f.setAuthCookie(n).then(function(a){s.debug("setAuthCookie:resp"+a),e.isLoggedIn=f.isLoggedIn(),e.isLocked=f.isLocked(),e.isSecure=f.isSecured(),t.go("secured.inbox")})}).catch(function(e){s.error("login.unlock",e),S(),h({message:e.message,classes:"notification-danger"})})}n.twoFactor=0,n.showOld="old.protonmail.com"!==window.location.hostname,n.domoArigato=!0,j("AppModel",function(e,t){var a=t.type,s=t.data;switch(a){case"domoArigato":n.domoArigato=s.value}}),n.$on("$destroy",k),n.displayHelpModal=function(){v.activate({params:{close:function(){v.deactivate()}}})},n.enterLoginPassword=function(e){e.preventDefault(),angular.element("input").blur(),angular.element("#pm_login").attr({action:"/*"}),A();var t=n.username,a=void 0===t?"":t,s=n.password,r=void 0===s?"":s;try{if(!a||!r)throw new Error(m.getString("Please enter your username and password",null,"Login error"));var i=a.toLowerCase();if(!y.encode_utf8(r))throw new Error(m.getString("Your password is missing",null,"Login error"));g.track(w.info(i).then(function(e){n.initialInfoResponse=e,0===e.data.TwoFactor?E(i,r,null,n.initialInfoResponse):(n.twoFactor=1,l(M,100,!1))},function(e){return o.default.reject(e)}))}catch(e){var c=e.message;h({message:c,classes:"notification-danger"})}},n.enterTwoFactor=function(e){e.preventDefault(),angular.isUndefined(n.twoFactorCode)||0===n.twoFactorCode.length?h({message:m.getString("Please enter your two-factor passcode",null,"Error"),classes:"notification-danger"}):E(n.username,n.password,n.twoFactorCode,n.initialInfoResponse)},n.unlock=function(e){e.preventDefault(),angular.element("[type=password]").blur();var t=n.mailboxPassword;A(),g.track(C(t,n.creds.authResponse))},n.reset=function(){e.isLoggedIn=!1,t.go("support.reset-password")},b.set("domoArigato",!0),e.isLoggedIn=!t.is("login"),l(function(){return $("#username").focus()},30,!1),"help"===c.hash()&&n.displayHelpModal(),!1===(0,r.hasSessionStorage)()&&h({message:m.getString('You are in Private Mode or have Session Storage disabled.\nPlease deactivate Private Mode and then reload the page.\n<a href="https://protonmail.com/support/knowledge-base/enabling-cookies/" target="_blank">More information here</a>.',null,"Error"),classes:"notification-danger",duration:"0"}),!1===(0,r.hasCookie)()&&h({message:m.getString('Cookies are disabled.\nPlease activate it and then reload the page.\n<a href="https://protonmail.com/support/knowledge-base/enabling-cookies/" target="_blank">More information here</a>.',null,"Error"),classes:"notification-danger",duration:"0"}),function(){if(n.creds=_.getItem("creds"),t.is("login.unlock")){if(!n.creds)return t.go("login");if(!n.creds.authResponse)return _.setItem("creds",n.creds),t.go("login");if(1===n.creds.authResponse.PasswordMode)return C(n.creds.password,n.creds.authResponse);b.set("domoArigato",!1)}else if(t.is("login.sub")){var a=window.location.href.split("/"),s=a[0]+"//"+a[2];window.addEventListener("message",function a(n){n.origin===s&&(window.removeEventListener("message",a),f.savePassword(n.data.MailboxPassword),f.saveAuthData({UID:n.data.UID}),e.isSecure=!0,e.isLoggedIn=!0,t.go("secured.inbox"))}),window.opener.postMessage("ready",s)}else{if(!n.creds||!n.creds.username||!n.creds.password)return void delete n.creds;w.info(n.creds.username).then(function(e){0===e.data.TwoFactor?E(n.creds.username,n.creds.password,null,e):(n.twoFactor=1,n.initialInfoResponse=e,l(M,100,!1))}).catch(function(e){console.log(e)})}}()}l.$inject=["$rootScope","$state","$stateParams","$scope","$log","$timeout","$http","$location","CONSTANTS","CONFIG","dispatchers","gettextCatalog","authentication","networkActivityTracker","notify","helpLoginModal","AppModel","pmcw","tempStorage","srp"],t.default=l},"./src/app/authentication/directives/loginForm.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default=function(){return{replace:!0,templateUrl:a("./src/templates/authentication/loginForm.tpl.html")}}},"./src/app/authentication/directives/loginTwoFactorForm.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default=function(){return{replace:!0,templateUrl:a("./src/templates/authentication/loginTwoFactorForm.tpl.html")}}},"./src/app/authentication/directives/twoFaField.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){return{restrict:"E",replace:!0,templateUrl:a("./src/templates/authentication/twoFaField.tpl.html")}}},"./src/app/authentication/index.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=x(a("./src/app/authentication/controllers/login.js")),s=x(a("./src/app/authentication/directives/loginForm.js")),o=x(a("./src/app/authentication/directives/loginTwoFactorForm.js")),r=x(a("./src/app/authentication/directives/twoFaField.js")),l=x(a("./src/app/authentication/interceptors/authHttpResponseInterceptor.js")),i=x(a("./src/app/authentication/modals/helpLoginModal.js")),c=x(a("./src/app/authentication/modals/oldPasswordModal.js")),d=x(a("./src/app/authentication/modals/loginPasswordModal.js")),u=x(a("./src/app/authentication/providers/pmcw.js")),p=x(a("./src/app/authentication/services/auth.js")),m=x(a("./src/app/authentication/services/authApi.js")),f=x(a("./src/app/authentication/services/handle401.js")),g=x(a("./src/app/authentication/services/handle403.js")),h=x(a("./src/app/authentication/services/handle9001.js")),v=x(a("./src/app/authentication/services/handle10003.js")),b=x(a("./src/app/authentication/services/logoutManager.js")),y=x(a("./src/app/authentication/services/passwords.js")),_=x(a("./src/app/authentication/services/srp.js")),w=x(a("./src/app/authentication/services/upgradePassword.js"));function x(e){return e&&e.__esModule?e:{default:e}}t.default=angular.module("proton.authentication",["proton.constants","proton.utils","proton.keys"]).run(["$rootScope","authentication",function(e,t){t.detectAuthenticationState(),e.isLoggedIn=t.isLoggedIn(),e.isLocked=t.isLocked(),e.isSecure=t.isSecured()}]).controller("LoginController",n.default).directive("loginForm",s.default).directive("loginTwoFactorForm",o.default).directive("twoFaField",r.default).factory("authHttpResponseInterceptor",l.default).factory("helpLoginModal",i.default).factory("oldPasswordModal",c.default).factory("loginPasswordModal",d.default).factory("logoutManager",b.default).provider("pmcw",u.default).factory("authentication",p.default).factory("authApi",m.default).factory("handle401",f.default).factory("handle403",g.default).factory("handle9001",h.default).factory("handle10003",v.default).factory("passwords",y.default).factory("srp",_.default).factory("upgradePassword",w.default).name},"./src/app/authentication/interceptors/authHttpResponseInterceptor.js":function(e,t,a){"use strict";function n(e,t,a,n,s){var o=!1,r=!1,l=void 0,i=function(e){return t.get("notification").error(e)};return{response:function(a){var s;if(/^(?!.*templates)/.test(a.config.url)&&n.set("onLine",!0),!l&&(s=t.get("gettextCatalog"),l={newVersion:s.getString("A new version of ProtonMail is available. Please refresh this page."),nonIntegerVersion:s.getString("Non-integer API version requested.",null,"Error"),unsupported:s.getString("Unsupported API version.",null,"Error"),offline:s.getString("The ProtonMail API is offline: ",null,"Error"),noInternet:s.getString("No Internet connection found.",null,"Error"),noServer:s.getString("Could not connect to server.",null,"Error"),timeout:s.getString("Request timed out, please try again.",null,"Error"),noReachProton:s.getString("ProtonMail cannot be reached right now, please try again later.",null,"Error")}),o&&(o.close(),o=!1),angular.isDefined(a.data)&&angular.isDefined(a.data.Code))if(5003===a.data.Code)r&&r.close(),r=t.get("notify")({classes:"notification-info noclose",message:l.newVersion,duration:"0"});else if(5004===a.data.Code)i(l.nonIntegerVersion);else if(5005===a.data.Code)i(l.unsupported);else if(7001===a.data.Code)i(l.offline+a.data.Error);else if(9001===a.data.Code){return t.get("handle9001")(a.config)}return a||e.when(a)},responseError:function(a){if(0!==a.status&&-1!==a.status||s.isCancelledRequest(a)){if(401===a.status)return t.get("handle401")(a);if(403===a.status)return t.get("handle403")(a.config);504===a.status?(o=i(l.timeout),n.set("requestTimeout",!0)):[408,503].indexOf(a.status)>-1&&(o=i(l.noReachProton))}else{var r=!0===navigator.onLine?"noServer":"noInternet";i(l[r]),n.set("onLine",!1)}return e.reject(a)}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$q","$injector","$rootScope","AppModel","networkUtils"],t.default=n},"./src/app/authentication/modals/helpLoginModal.js":function(e,t,a){"use strict";function n(e){return e({controllerAs:"ctrl",templateUrl:a("./src/templates/authentication/modals/helpLoginModal.tpl.html"),controller:["params",function(e){this.cancel=e.close}]})}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["pmModal"],t.default=n},"./src/app/authentication/modals/loginPasswordModal.js":function(e,t,a){"use strict";function n(e,t,n,s,o){return t({controllerAs:"ctrl",templateUrl:a("./src/templates/authentication/modals/loginPassword.tpl.html"),controller:["params",function(t){var a=this;if(this.loginPassword="",this.twoFactorCode="",this.userPasswordMode=o.get("PasswordMode"),this.submit=function(){return t.submit(a.loginPassword,a.twoFactorCode)},this.cancel=function(){return t.cancel()},t.hasTwoFactor)this.hasTwoFactor=1===t.hasTwoFactor;else{var r=n.info().then(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data,t=void 0===e?{}:e;a.hasTwoFactor=1===t.TwoFactor});s.track(r)}e(function(){return document.getElementById("loginPassword").focus()},100,!1)}]})}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$timeout","pmModal","srp","networkActivityTracker","userSettingsModel"],t.default=n},"./src/app/authentication/modals/oldPasswordModal.js":function(e,t,a){"use strict";function n(e,t){return e({controllerAs:"ctrl",templateUrl:a("./src/templates/authentication/modals/oldPasswordModal.tpl.html"),controller:["params",function(e){var a=this;this.cancel=e.cancel,this.submit=function(){return e.submit(a.password)},this.passwordMode=t.get("PasswordMode"),this.password="",setTimeout(function(){return document.getElementById("password").focus()},100)}]})}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["pmModal","userSettingsModel"],t.default=n},"./src/app/authentication/providers/pmcw.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/babel-runtime/core-js/promise.js"),o=(n=s)&&n.__esModule?n:{default:n};t.default=function(){pmcrypto.checkMailboxPassword=function(e,t,a){return new o.default(function(n,s){return void 0===e?s(new Error("Missing private key.")):void 0===t?s(new Error("Missing Mailbox Password.")):void pmcrypto.decryptPrivateKey(e,t).then(function(e){var o=pmcrypto.getMessage(a);pmcrypto.decryptMessage({message:o,privateKey:e}).then(function(e){var a=e.data;return n({password:t,token:a})}).catch(function(){return s(new Error("Unable to get Access Token."))})}).catch(function(){return s(new Error("Wrong Mailbox Password."))})})},this.$get=function(){return pmcrypto}}},"./src/app/authentication/services/auth.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=l(a("./node_modules/babel-runtime/helpers/defineProperty.js")),s=l(a("./node_modules/babel-runtime/core-js/promise.js")),o=l(a("./node_modules/lodash/pick.js")),r=l(a("./node_modules/lodash/each.js"));function l(e){return e&&e.__esModule?e:{default:e}}function i(e,t,a,l,i,c,d,u,p,m,f,g,h,v,b,y,_,w,x,j,k,A,S,M,P,E,C,T){var I,D={},O=g.OAUTH_KEY,L=g.FREE_USER_ROLE,R=g.MAILBOX_PASSWORD_KEY,N={headersSet:!1,setAuthHeaders:function(){this.headersSet=!0,e.defaults.headers.common["x-pm-uid"]=N.data.UID,N.data.AccessToken?e.defaults.headers.common.Authorization="Bearer "+N.data.AccessToken:e.defaults.headers.common.Authorization=void 0},fetchUserInfo:function(){var e=k.get().then(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;return(void 0===e?{}:e).User}).then(function(e){if(0===e.Keys.length)return c.go("login.setup"),s.default.resolve(e);e.subuser=angular.isDefined(e.OrganizationPrivateKey);return l.all({settings:d.get("settingsApi").fetch(),mailSettings:d.get("settingsMailApi").fetch(),contacts:d.get("contactEmails").load(),addresses:d.get("addressesModel").fetch(e),fix:e.Role===L&&e.Subscribed?M.generateOrganization(z.getPassword()).then(function(e){return{DisplayName:"My Organization",PrivateKey:e.privateKeyArmored}}).then(function(e){return j.create(e)}):s.default.resolve(),organizationKey:e.subuser?w.decryptPrivateKey(e.OrganizationPrivateKey,z.getPassword()):s.default.resolve()}).then(function(t){var a=t.organizationKey,n=t.addresses;return{user:e,organizationKey:a,addresses:n}}).then(function(e){var t=e.user,a=e.organizationKey,n=e.addresses;return M.decryptUser(t,n,a,z.getPassword()).then(function(e){return function(e){z.clearKeys(),(0,r.default)(e,function(e){var t=e.address,a=e.key,n=e.pkg;z.storeKey(t.ID,a.ID,n)})}(e.keys),t}).catch(function(e){throw u(e),e})})});return _.track(e)}};function $(e){a.debug("saveAuthData",e),x.setItem(O+":UID",e.UID),N.data=(0,o.default)(e,"UID","AccessToken","RefreshToken"),N.setAuthHeaders()}function F(e){x.setItem(R,w.encode_utf8_base64(e))}function U(e){var t=d.get("eventManager");$(e),t.setEventID(e.EventID)}var z=(I={user:{},saveAuthData:$,savePassword:F,receivedCredentials:U,detectAuthenticationState:function(){var e=x.getItem(O+":UID"),t=x.getItem(O+":SessionToken");e?(N.data={UID:e},N.setAuthHeaders()):t&&(N.data={UID:w.decode_base64(t)},x.setItem(O+":UID",N.data.UID),x.removeItem(O+":SessionToken"),N.setAuthHeaders())}},(0,n.default)(I,"savePassword",function(e){this.user&&this.user.OrganizationPrivateKey||x.setItem(R,w.encode_utf8_base64(e))}),(0,n.default)(I,"getPassword",function(){var e=x.getItem(R);return e?w.decode_utf8_base64(e):void 0}),(0,n.default)(I,"randomString",function(e){var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",a=void 0,n="",s="[object Opera]"===Object.prototype.toString.call(window.opera);if(window.crypto&&window.crypto.getRandomValues){var o=new Uint32Array(e);for(window.crypto.getRandomValues(o),a=0;a<e;a++)n+=t[o[a]%t.length];return n}if(s){for(a=0;a<e;a++)n+=t[Math.floor(Math.random()*t.length)];return n}return this.semiRandomString(e)}),(0,n.default)(I,"semiRandomString",function(e){for(var t="",a=0;a++<e;)t+="0123456789ABCDEF"[Math.floor(16*Math.random())];return t}),(0,n.default)(I,"getPrivateKeys",function(e){return D[e]}),(0,n.default)(I,"getPublicKeys",function(e){return D[e].map(function(e){return e.toPublic()})}),(0,n.default)(I,"storeKey",function(e,t,a){a.ID=t,D[e]=D[e]||[],D[e].push(a)}),(0,n.default)(I,"clearKeys",function(){D={}}),(0,n.default)(I,"getRefreshCookie",function(){return a.debug("getRefreshCookie"),p.refresh({}).then(function(e){return a.debug(e),$(e.data),e})}),(0,n.default)(I,"setAuthCookie",function(t){return a.debug("setAuthCookie"),p.cookies({ResponseType:"token",ClientID:f.clientID,GrantType:"refresh_token",RefreshToken:t.RefreshToken,Uid:t.UID,RedirectURI:"https://protonmail.com",State:this.randomString(24)}).then(function(t){return a.debug(t),a.debug("/auth/cookies:",t),a.debug("/auth/cookies1: resolved"),P.set("domoArigato",!0),a.debug("/auth/cookies2: resolved"),a.debug("headers change",e.defaults.headers),$(t.data),i.isLocked=!1,t}).catch(function(e){var t=e.data,n=void 0===t?{}:t;throw a.error("setAuthCookie2",e),u(n.Error||e),new Error(n.Error||"Error setting authentication cookies.")})}),(0,n.default)(I,"loginWithCredentials",function(t,a){var n=l.defer();return t.Username&&t.Password?(delete e.defaults.headers.common.Accept,S.performSRPRequest("POST","/auth",{Username:t.Username,ClientID:f.clientID,ClientSecret:f.clientSecret},t,a).then(function(e){e.authVersion<A.currentAuthVersion?S.getPasswordParams(t.Password).then(function(t){b.store(t),n.resolve(e)}):n.resolve(e)},function(e){console.error(e),n.reject({message:e.error_description})})):n.reject({message:"Username and Password are required to login"}),n.promise}),(0,n.default)(I,"existingSession",function(){return!(!N.data||!N.data.UID)}),(0,n.default)(I,"isLoggedIn",function(){var e=this.existingSession();return e&&!1===N.headersSet&&N.setAuthHeaders(),e}),(0,n.default)(I,"isLocked",function(){return!1===this.isLoggedIn()||angular.isUndefined(this.getPassword())}),(0,n.default)(I,"hasPaidMail",function(){return 1&this.user.Subscribed}),(0,n.default)(I,"hasPaidVpn",function(){return 4&this.user.Subscribed}),(0,n.default)(I,"isSecured",function(){return this.isLoggedIn()&&angular.isDefined(this.getPassword())}),(0,n.default)(I,"state",function(){return this.isLoggedIn()?this.isLocked()?"login.unlock":null:"login"}),(0,n.default)(I,"redirectIfNecessary",function(){var e=this.state();e&&c.go(e)}),(0,n.default)(I,"logout",function(e){var t=this,a=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=x.getItem(O+":UID"),s=function(){t.clearData(),!0===e&&c.go("login")};i.loggingOut=!0,a&&n?p.revoke().then(s,s):s()}),(0,n.default)(I,"clearData",function(){try{e.defaults.headers.common["x-pm-session"]=void 0,e.defaults.headers.common.Authorization=void 0,e.defaults.headers.common["x-pm-uid"]=void 0,x.clear(),delete N.data,D={},N.headersSet=!1,this.user={},window.onbeforeunload=void 0,i.loggingOut=!1,i.isLoggedIn=this.isLoggedIn(),i.isLocked=this.isLocked(),i.isSecure=this.isSecured(),P.set("domoArigato",!1),P.set("loggedIn",!1),d.get("contactEmails").clear()}catch(e){}}),(0,n.default)(I,"unlockWithPassword",function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=t.PrivateKey,n=void 0===a?"":a,s=t.AccessToken,o=void 0===s?"":s,r=t.RefreshToken,i=void 0===r?"":r,c=t.Uid,d=void 0===c?"":c,u=t.ExpiresIn,p=void 0===u?0:u,m=t.EventID,f=void 0===m?"":m,g=t.KeySalt,h=void 0===g?"":g,v=l.defer();return e?(E.setItem("plainMailboxPass",e),A.computeKeyPassword(e,h).then(function(e){return w.checkMailboxPassword(n,e,o)}).then(function(e){var t=e.token;F(e.password),U({AccessToken:t,RefreshToken:i,UID:d,ExpiresIn:p,EventID:f}),b.send(),v.resolve(200)},function(){v.reject({message:"Wrong decryption password."})})):v.reject({message:"Password is required."}),v.promise}),(0,n.default)(I,"fetchUserInfo",function(){var e=this;return N.fetchUserInfo().then(function(t){t.DisplayName||(t.DisplayName=t.Name),i.isLoggedIn=!0,e.user=t,i.user=t;var a=E.getItem("plainMailboxPass");return E.removeItem("plainMailboxPass"),!a||t.OrganizationPrivateKey||m(t)?t:(P.set("upgradingKeys",!0),T({mailboxPassword:a,oldSaltedPassword:e.getPassword(),user:t}).then(function(){return s.default.resolve(t)}))}).catch(function(e){throw c.go("support.message"),e})}),(0,n.default)(I,"params",function(e){return e}),I);return z}i.$inject=["$http","$location","$log","$q","$rootScope","$state","$injector","$exceptionHandler","authApi","checkKeysFormat","CONFIG","CONSTANTS","errorReporter","gettextCatalog","upgradePassword","Key","networkActivityTracker","pmcw","secureSessionStorage","organizationApi","User","passwords","srp","setupKeys","AppModel","tempStorage","sanitize","upgradeKeys"],t.default=i},"./src/app/authentication/services/authApi.js":function(e,t,a){"use strict";function n(e,t){var a=t.build("auth");return{authenticate:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e.post(a(),t)},refresh:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e.post(a("refresh"),t)},cookies:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e.post(a("cookies"),t)},info:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e.post(a("info"),t)},modulus:function(){return e.get(a("modulus"))},revoke:function(){return e.delete(a())},revokeOthers:function(){return e.delete(a("others"))}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$http","url"],t.default=n},"./src/app/authentication/services/handle10003.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=a("./src/app/constants.js");function s(e){return function(){(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).Code===n.ERROR_AUTH_ACCOUNT_DISABLED&&e.activate({params:{close:function(){e.deactivate()}}})}}s.$inject=["abuseFraudModal"],t.default=s},"./src/app/authentication/services/handle401.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(a("./node_modules/babel-runtime/core-js/promise.js")),s=o(a("./node_modules/lodash/extend.js"));function o(e){return e&&e.__esModule?e:{default:e}}function r(e,t){var a=null,o=function(){return a=null},r=function(e){return t.logout(!0,!1),n.default.reject(e)};return function(l){return t.existingSession()?(a||(a=t.getRefreshCookie().then(o).catch(r)),a.then(function(){return t=l.config,(0,s.default)(t.headers,e.defaults.headers.common),e(t);var t}).catch(function(){return n.default.reject(l)})):r(l)}}r.$inject=["$http","authentication"],t.default=r},"./src/app/authentication/services/handle403.js":function(e,t,a){"use strict";function n(e,t,a,n,s,o){return function(s){var r=t.defer();return a.activate({params:{submit:function(t,l){var i=n.unlock({Password:t,TwoFactorCode:l}).then(function(){a.deactivate(),r.resolve(e(s))});o.track(i)},cancel:function(){a.deactivate(),r.reject(new Error("loginPassword:cancel"))}}}),r.promise}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$http","$q","loginPasswordModal","User","authentication","networkActivityTracker"],t.default=n},"./src/app/authentication/services/handle9001.js":function(e,t,a){"use strict";function n(e,t,a){return function(n){var s=e.defer();return a.activate({params:{close:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];a.deactivate(),e?s.resolve(t(n)):s.resolve()}}}),s.promise}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$q","$http","humanVerificationModal"],t.default=n},"./src/app/authentication/services/logoutManager.js":function(e,t,a){"use strict";function n(e,t,a){var n=t(["logout"]),s=n.dispatcher;return(0,n.on)("$stateChangeSuccess",function(t,n){var o=n.name;-1===o.indexOf("secured")&&-1===["login.setup"].indexOf(o)&&(a.stop(),e.isLoggedIn()&&e.logout(),s.logout())}),{}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["authentication","dispatchers","eventManager"],t.default=n},"./src/app/authentication/services/passwords.js":function(e,t,a){"use strict";function n(e,t,a){function n(t,a){var n=e.defer();return dcodeIO.bcrypt.hash(t,a,function(e,t){"string"!=typeof t?n.reject(e):n.resolve(t)}),n.promise}function s(e){return e.replace(/\.|-|_/g,"").toLowerCase()}function o(e){return openpgp.util.concatUint8Array([openpgp.crypto.hash.sha512(pmcrypto.binaryStringToArray(e+"\0")),openpgp.crypto.hash.sha512(pmcrypto.binaryStringToArray(e+"")),openpgp.crypto.hash.sha512(pmcrypto.binaryStringToArray(e+"")),openpgp.crypto.hash.sha512(pmcrypto.binaryStringToArray(e+""))])}var r={4:function(e,t,a){return r[3](e,t,a)},3:function(e,t,a){var s=pmcrypto.binaryStringToArray(t+"proton");return n(e,"$2y$10$"+dcodeIO.bcrypt.encodeBase64(s,16)).then(function(e){return o(e+pmcrypto.arrayToBinaryString(a))})},2:function(e,t,a){return r[1](e,s(t),a)},1:function(e,t,a){for(var s=openpgp.crypto.hash.md5(pmcrypto.binaryStringToArray(pmcrypto.encode_utf8(t.toLowerCase()))),r="",l=0;l<s.length;l++){var i=s[l].toString(16);1===i.length&&(i="0"+i),r+=i}return n(e,"$2y$10$"+r).then(function(e){return o(e+pmcrypto.arrayToBinaryString(a))})},0:function(e,t,a){var n=pmcrypto.encode_base64(pmcrypto.arrayToBinaryString(openpgp.crypto.hash.sha512(pmcrypto.binaryStringToArray(t.toLowerCase()+pmcrypto.encode_utf8(e)))));return r[1](n,t,a)}};return{currentAuthVersion:4,cleanUsername:s,expandHash:o,hashPassword:function(a,n,s,o,l){switch(a){case 4:case 3:return r[a](n,s,l);case 2:case 1:case 0:return r[a](n,o,l);default:e.reject({message:t.getString("Unsupported auth version",null,"Error")})}},computeKeyPassword:function(t,a){if(a&&a.length){var s=pmcrypto.binaryStringToArray(pmcrypto.decode_base64(a));return n(t,"$2y$10$"+dcodeIO.bcrypt.encodeBase64(s,16)).then(function(e){return e.slice(29)})}var o=e.defer();return o.resolve(t),o.promise},generateKeySalt:function(){return pmcrypto.encode_base64(pmcrypto.arrayToBinaryString(a.getRandomValues(new Uint8Array(16))))}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$q","gettextCatalog","webcrypto"],t.default=n},"./src/app/authentication/services/srp.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(a("./node_modules/babel-runtime/core-js/promise.js")),s=o(a("./node_modules/lodash/extend.js"));function o(e){return e&&e.__esModule?e:{default:e}}function r(e,t,a,o,r,l,i){function c(e,t,a,n,s,o){return p(n.Username).then(function(r){return d(r,e,t,a,n,s,o)})}function d(t,l,c,d,u,p,m){function f(e){return o.expandHash(pmcrypto.arrayToBinaryString(e))}var g,h=void 0,v=t.data.SRPSession,b=pmcrypto.binaryStringToArray(pmcrypto.decode_base64(openpgp.cleartext.readArmored(t.data.Modulus).getText())),y=pmcrypto.binaryStringToArray(pmcrypto.decode_base64(t.data.ServerEphemeral)),_=t.data.Version;if((g=0===_)&&(_=m),_<3&&(u.Username=t.data.Username),2===_&&o.cleanUsername(u.Username)!==o.cleanUsername(t.data.Username)||_<=1&&u.Username.toLowerCase()!==t.data.Username.toLowerCase())return n.default.reject({error_description:"Please login with just your ProtonMail username (without @protonmail.com or @protonmail.ch)."});var w="";return _>=3&&(w=pmcrypto.decode_base64(t.data.Salt)),o.hashPassword(_,u.Password,w,u.Username,b).then(function(t){if("Success"!==(h=function(e,t,n,s,o){function r(e){for(var t=new Uint8Array(e.length),a=0;a<e.length;a++)t[e.length-a-1]=e[a];return new asmCrypto.BigNumber(t)}function l(t){for(var a=t.toBytes(),n=new Uint8Array(e/8),s=0;s<a.length;s++)n[a.length-s-1]=a[s];return n}var i=new asmCrypto.BigNumber(2),c=r(t(openpgp.util.concatUint8Array([l(i),n])));n=r(n),o=r(o),s=r(s);var d=n.subtract(1);if(n.bitLength!==e)return{Type:"Error",Description:"SRP modulus has incorrect size"};if((c=(n=new asmCrypto.Modulus(n)).reduce(c)).compare(1)<=0||c.compare(d)>=0)return{Type:"Error",Description:"SRP multiplier is out of bounds"};if(i.compare(1)<=0||i.compare(d)>=0)return{Type:"Error",Description:"SRP generator is out of bounds"};if(o.compare(1)<=0||o.compare(d)>=0)return{Type:"Error",Description:"SRP server ephemeral is out of bounds"};var u=void 0,p=void 0,m=void 0;do{do{u=r(a.getRandomValues(new Uint8Array(e/8)))}while(u.compare(2*e)<=0);p=n.power(i,u),m=r(t(openpgp.util.concatUint8Array([l(p),l(o)])))}while(0===m.compare(0));var f=o.subtract(n.reduce(n.power(i,s).multiply(c)));f.compare(0)<0&&(f=f.add(n));var g=m.multiply(s).add(u).divide(n.subtract(1)).remainder,h=n.power(f,g),v=t(openpgp.util.concatUint8Array([l(p),l(o),l(h)])),b=t(openpgp.util.concatUint8Array([l(p),v,l(h)]));return{Type:"Success",ClientEphemeral:l(p),ClientProof:v,ExpectedServerProof:b}}(2048,f,b,t,y)).Type)return n.default.reject({error_description:h.Description});var o={method:l,url:r.get()+c,data:(0,s.default)(d,{SRPSession:v,ClientEphemeral:pmcrypto.encode_base64(pmcrypto.arrayToBinaryString(h.ClientEphemeral)),ClientProof:pmcrypto.encode_base64(pmcrypto.arrayToBinaryString(h.ClientProof)),TwoFactorCode:u.TwoFactorCode})};return angular.isDefined(p)&&(o.headers=p),e(o)},function(e){return n.default.reject({error_description:e.message})}).then(function(e){return pmcrypto.encode_base64(pmcrypto.arrayToBinaryString(h.ExpectedServerProof))===e.data.ServerProof?n.default.resolve((0,s.default)(e,{authVersion:_})):n.default.reject({error_description:"Invalid server authentication"})},function(e){var t=(e||{}).data,a=void 0===t?{}:t;return i(a),a.Error?n.default.reject({error_description:a.Error,usedFallback:g}):n.default.reject(e)})}function u(e){return l.modulus().then(function(){var t=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data,n=void 0===t?{}:t,s=pmcrypto.binaryStringToArray(pmcrypto.decode_base64(openpgp.cleartext.readArmored(n.Modulus).getText())),r=pmcrypto.arrayToBinaryString(a.getRandomValues(new Uint8Array(10)));return o.hashPassword(o.currentAuthVersion,e,r,void 0,s).then(function(e){var t=function(e,t,a){function n(e){for(var t=new Uint8Array(e.length),a=0;a<e.length;a++)t[e.length-a-1]=e[a];return new asmCrypto.BigNumber(t)}var s=new asmCrypto.BigNumber(2);return a=new asmCrypto.Modulus(n(a)),t=n(t),function(t){for(var a=t.toBytes(),n=new Uint8Array(e/8),s=0;s<a.length;s++)n[a.length-s-1]=a[s];return n}(a.power(s,t))}(2048,e,s);return{Auth:{Version:o.currentAuthVersion,ModulusID:n.ModulusID,Salt:pmcrypto.encode_base64(r),Verifier:pmcrypto.encode_base64(pmcrypto.arrayToBinaryString(t))}}})}).catch(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.data,a=void 0===t?{}:t;if(a.Error)return n.default.reject({error_description:a.Error});throw e})}function p(e){return l.info({Username:e,ClientID:t.clientID,ClientSecret:t.clientSecret})}return{randomVerifier:u,info:p,performSRPRequest:function(e,t,a,s,r,l){return(r?d(r,e,t,a,s,l,2):c(e,t,a,s,l,2)).catch(function(r){return!0===r.usedFallback&&o.cleanUsername(s.Username)!==s.Username.toLowerCase()?c(e,t,a,s,l,1):n.default.reject(r)}).catch(function(o){return!0===o.usedFallback?c(e,t,a,s,l,0):n.default.reject(o)})},getPasswordParams:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return u(e).then(function(e){return(0,s.default)({},t,e)})}}}r.$inject=["$http","CONFIG","webcrypto","passwords","url","authApi","handle10003"],t.default=r},"./src/app/authentication/services/upgradePassword.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/babel-runtime/core-js/promise.js"),o=(n=s)&&n.__esModule?n:{default:n};function r(e,t){var a="auth",n=6e5;return{store:function(e){t.setItem(a,e,n)},send:function(){var n=t.getItem(a);return n?(t.removeItem(a),e.passwordUpgrade(n)):o.default.resolve()}}}r.$inject=["settingsApi","tempStorage"],t.default=r},"./src/app/browserSupport/index.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(a("./src/app/browserSupport/services/browserFixes.js")),s=o(a("./src/app/browserSupport/services/safari.js"));function o(e){return e&&e.__esModule?e:{default:e}}t.default=angular.module("proton.browserSupport",[]).run(["browserFixes",function(e){return e.init()}]).factory("browserFixes",n.default).factory("safari",s.default).name},"./src/app/browserSupport/services/browserFixes.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/lodash/each.js"),o=(n=s)&&n.__esModule?n:{default:n};function r(e){var t=[e];return{init:function(){(0,o.default)(t,function(e){e.isCurrentBrowser()&&e.applyFixes()})}}}r.$inject=["safari"],t.default=r},"./src/app/browserSupport/services/safari.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/lodash/each.js"),o=(n=s)&&n.__esModule?n:{default:n},r=a("./src/helpers/browser.js");t.default=function(){var e=[function(){$(document).on("click.fixSafariDownloadBug",function(e){var t=e.target;t&&"A"===t.tagName&&"_blank"===t.getAttribute("target")&&t.hasAttribute("href")&&(e.preventDefault(),window.open(t.href))})}];return{isCurrentBrowser:r.isSafari,applyFixes:function(){return(0,o.default)(e,function(e){return e()})}}}},"./src/app/bugReport/directives/newBugReport.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(e){return{replace:!0,templateUrl:a("./src/templates/bugReport/newBugReport.tpl.html"),link:function(t,a){var n=function(){e.$emit("bugReport",{type:"new",data:{}})};a.on("click",n),t.$on("$destroy",function(){a.off("click",n)})}}};n.$inject=["$rootScope"],t.default=n},"./src/app/bugReport/factories/bugReportModel.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(a("./node_modules/babel-runtime/regenerator/index.js")),s=o(a("./node_modules/babel-runtime/helpers/asyncToGenerator.js"));function o(e){return e&&e.__esModule?e:{default:e}}function r(e,t,a){(0,a().on)("bugReport",function(e,a){var n,s,r=a.type,l=a.data;"new"===r&&(n=(void 0===l?{}:l).content,s=void 0===n?"":n,t.activate(o(s)))});var o=function(a){return{params:{form:e.getForm(),content:a,submit:function(){var a=(0,s.default)(n.default.mark(function a(s){var o;return n.default.wrap(function(a){for(;;)switch(a.prev=a.next){case 0:return t.deactivate(),a.next=3,e.toFormData(s);case 3:o=a.sent,e.report(o);case 5:case"end":return a.stop()}},a,this)}));return function(e){return a.apply(this,arguments)}}(),cancel:function(){t.deactivate()}}}};return{init:angular.noop}}r.$inject=["bugReportApi","bugModal","dispatchers"],t.default=r},"./src/app/bugReport/index.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=l(a("./src/app/bugReport/directives/newBugReport.js")),s=l(a("./src/app/bugReport/factories/bugReportModel.js")),o=l(a("./src/app/bugReport/services/Report.js")),r=l(a("./src/app/bugReport/services/bugReportApi.js"));function l(e){return e&&e.__esModule?e:{default:e}}t.default=angular.module("proton.bugReport",[]).run(["bugReportModel",function(e){return e.init()}]).directive("newBugReport",n.default).factory("bugReportModel",s.default).factory("Report",o.default).factory("bugReportApi",r.default).name},"./src/app/bugReport/services/Report.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(a("./node_modules/babel-runtime/core-js/promise.js")),s=o(a("./node_modules/lodash/extend.js"));function o(e){return e&&e.__esModule?e:{default:e}}function r(e,t,a){var o=t.build("reports"),r=a.getString("Error communicating with the server",null,"Report bug request"),l=function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;return void 0===e?{}:e};return{crash:function(t){return e.post(o("crash"),t)},bug:function(t){var a,n=t instanceof FormData?{transformRequest:angular.identity,headers:{"Content-Type":void 0}}:void 0;return e.post(o("bug"),t,n).then(l).catch((a=r,function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;throw new Error((void 0===e?{}:e).Error||a)}))},uploadScreenshot:function(e,t){return new n.default(function(a,n){$.ajax({url:"https://api.imgur.com/3/image",headers:{Authorization:"Client-ID 864920c2f37d63f"},type:"POST",data:{image:e},dataType:"json",success:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data,o=void 0===e?{}:e;if(o.link)return a((0,s.default)({},t,{Description:t.Description+"\n\n\n\n"+o.link}));n()},error:n})})}}}r.$inject=["$http","url","gettextCatalog"],t.default=r},"./src/app/bugReport/services/bugReportApi.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=g(a("./node_modules/babel-runtime/regenerator/index.js")),s=g(a("./node_modules/babel-runtime/helpers/asyncToGenerator.js")),o=g(a("./node_modules/babel-runtime/core-js/promise.js")),r=g(a("./node_modules/babel-runtime/helpers/slicedToArray.js")),l=g(a("./node_modules/babel-runtime/helpers/defineProperty.js")),i=g(a("./node_modules/lodash/reduce.js")),c=g(a("./node_modules/lodash/extend.js")),d=g(a("./node_modules/lodash/sortBy.js")),u=a("./src/app/constants.js"),p=a("./src/helpers/browser.js"),m=a("./src/helpers/fileHelper.js"),f=a("./src/helpers/imageHelper.js");function g(e){return e&&e.__esModule?e:{default:e}}function h(e,t,a,g,h,v,b,y){var _,w,x,j=this,k=u.CONSTANTS.ROW_MODE,A=u.CONSTANTS.COLUMN_MODE,S=u.CONSTANTS.MESSAGE_VIEW_MODE,M=u.CONSTANTS.CONVERSATION_VIEW_MODE,P=u.CONSTANTS.CLIENT_TYPE,E=u.CONSTANTS.MAX_SIZE_SCREENSHOT,C={layout:(_={},(0,l.default)(_,k,"row"),(0,l.default)(_,A,"column"),_),view:(w={},(0,l.default)(w,S,"row"),(0,l.default)(w,M,"column"),w)},T=function(){var e,a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=a.ViewLayout,s=void 0===n?"":n,o=a.ViewMode,r=void 0===o?"":o,l=(0,p.getOS)(),i=(0,p.getBrowser)(),c=(0,p.getDevice)();return{OS:l.name,OSVersion:l.version||"",Browser:i.name,BrowserVersion:i.version,Client:"Angular",ClientVersion:t.app_version,ClientType:P,ViewLayout:(e=s,C.layout[e]||"unknown"),ViewMode:function(e){return C.view[e]||"undefined"}(r),DeviceName:c.vendor,DeviceModel:c.model}},I=(x=(0,s.default)(n.default.mark(function t(a){return n.default.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.bug(a);case 2:y.success(v.getString("Bug reported",null,"Bug report successfully"));case 3:case"end":return t.stop()}},t,j)})),function(e){return x.apply(this,arguments)});return{getForm:function(){var e=h.user.Name,t=void 0===e?"":e,n=(0,d.default)(g.get(),"Order"),s=(0,r.default)(n,1)[0],o=(s=void 0===s?{}:s).Email,l=void 0===o?"":o;return(0,c.default)(T(h.user),{Resolution:window.innerHeight+" x "+window.innerWidth,Title:"[Angular] Bug ["+a.$current.name+"]",Description:"",Username:t,Email:l})},report:function(e){var t=I(e);return b.track(t),t},getClient:T,crash:function(t){var n=(0,c.default)(T(h.user),{Debug:{state:a.$current.name,error:t}});return e.crash(n).catch(angular.noop)},toFormData:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=(0,i.default)(e,function(e,t,a){if(t instanceof FileList||t instanceof Array){for(var n=function(a){var n=t[a],s=function(e){return(0,m.toBase64)(e).then(function(t){return(0,f.downSize)(t,E,e.type)})}(n).then(function(t){e.formData.append(n.name,(0,f.toBlob)(t),n.name)});e.promises.push(s)},s=0;s<t.length;s++)n(s);return e}return e.formData.append(a,t),e},{promises:[],formData:new FormData}),a=t.promises,n=t.formData;return o.default.all(a).then(function(){return n}).catch(function(){return n})}}}h.$inject=["Report","CONFIG","$state","addressesModel","authentication","gettextCatalog","networkActivityTracker","notification"],t.default=h},"./src/app/commons/directives/appConfigBody.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=a("./src/app/constants.js");function s(e,t,a){var s=function(){return"appConfigBody-"+(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"")},o={mobile:s("is-mobile"),tablet:s("is-tablet"),requestTimeout:s("request-timeout"),tourActive:s("tourActive"),activeComposer:s("activeComposer"),maximizedComposer:s("maximizedComposer"),modalOpen:s("modalOpen"),showSidebar:s("showSidebar"),commandPalette:s("commandPalette"),rows:s("rows")};return{link:function(s,r){var l=t(),i=l.on,c=l.unsubscribe;e.is("mobile")&&r[0].classList.add(o.mobile),e.is("tablet")&&r[0].classList.add(o.tablet);var d=function(){var e=a.get().ViewLayout===n.CONSTANTS.ROW_MODE?"add":"remove";r[0].classList[e](o.rows)};i("AppModel",function(e,t){var a=t.type,n=t.data,s=o[a];s&&function(e){var t=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).value?"add":"remove";_rAF(function(){return r[0].classList[t](e)})}(s,n)}),i("mailSettings",function(e,t){var a=t.type;"updated"===(void 0===a?"":a)&&d()}),d(),i("$stateChangeSuccess",function(e,t){r[0].id=t.name.replace(/[.]+/g,"-")}),s.$on("$destroy",c)}}}s.$inject=["AppModel","dispatchers","mailSettingsModel"],t.default=s},"./src/app/commons/directives/appCopyright.js":function(e,t,a){"use strict";function n(e,t){var a=t.getString("ProtonMail.com - Made globally, hosted in Switzerland.",null,"copyright");return{replace:!0,template:'<span class="appCopyright-container">'+e.year+" "+a+"</span>"}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["CONFIG","gettextCatalog"],t.default=n},"./src/app/commons/directives/copy.js":function(e,t,a){"use strict";function n(e,t){var a={copy:e.getString("Copy to your clipboard",null),copied:e.getString("Copied to clipboard",null)};return{restrict:"E",replace:!0,scope:{value:"="},template:'\n <button class="copy-button" type="button" data-tooltip="'+a.copy+'">\n <span class="copy-icon"></span>\n </button>\n ',link:function(e,n){var s=new Clipboard(n[0],{text:function(){return e.value}});s.on("success",function(){n.attr("data-tooltip",a.copied),t.success(a.copied)}),s.on("error",function(){n.addClass("error")}),e.$on("$destroy",function(){return s.destroy()})}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["gettextCatalog","notification"],t.default=n},"./src/app/commons/directives/lazyInject.js":function(e,t,a){"use strict";function n(e,t){return{restrict:"A",link:function(a,n,s){var o=s.lazyInject;e.get(o,{cache:t}).then(function(e){return e.data}).then(function(e){n[0].innerHTML=e})}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$http","$templateCache"],t.default=n},"./src/app/commons/directives/translateAttribute.js":function(e,t,a){"use strict";function n(e){function t(e,t,a){if(!e)throw new Error("You should add a "+t+" attribute whenever you add a "+a+" attribute.")}var a,n,s,o=(a=/([:\-_]+(.))/g,n=/^moz([A-Z])/,s=/^(x[:\-_]|data[:\-_])/i,e.replace(s,"").replace(a,function(e,t,a,n){return n?a.toUpperCase():a}).replace(n,"Moz$1"));return["gettextCatalog","$parse","$animate","$compile",function(a,n,s,r){return{restrict:"A",terminal:!0,priority:1e3,compile:function(s,l){if(!l[o+"Translate"])throw new Error("Missing "+o+"-translate attribute!");t(!l[o+"TranslatePlural"]||l[o+"TranslateN"],o+"translate-n",o+"translate-plural"),t(!l[o+"TranslateN"]||l[o+"TranslatePlural"],o+"translate-plural",o+"translate-n");var i=l[o+"Translate"],c=l[o+"TranslatePlural"],d=l[o+"TranslateContext"];return{pre:function(t,s,l){var u=l[o+"TranslateN"],p=u?angular.noop:n(u),m=null;function f(){var n=void 0;c?((t=m||(m=t.$new())).$count=p(t),n=a.getPlural(t.$count,i,c,null,d)):n=a.getString(i,null,d),n!==l[o]&&s[0].setAttribute(e,n)}u&&t.$watch(u,f),t.$on("gettextLanguageChanged",f),f(),s.removeAttr(e+"-translate"),r(s)(t)}}}}}]}Object.defineProperty(t,"__esModule",{value:!0}),t.default={placeholder:n("placeholder"),title:n("title"),tooltip:n("pt-tooltip")}},"./src/app/commons/factories/AppModel.js":function(e,t,a){"use strict";function n(e){var t={};return{is:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return!!t[e]},set:function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",n=arguments[1],s=t[a];t[a]=n,s!==n&&function(t){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};e.$emit("AppModel",{type:t,data:a})}(a,{value:n})},store:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",a=arguments[1];return t[e]=a},get:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return t[e]}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$rootScope"],t.default=n},"./src/app/commons/factories/pmModal.js":function(e,t,a){"use strict";function n(e,t,a,n,s,o,r,l,i,c,d){var u=$("#body");function p(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];c.get("Hotkeys")&&s.get("hotkeys")[e?"bind":"unbind"]()}return function(s){if(!(!s.template^!s.templateUrl))throw new Error("Expected modal to have exactly one of either template or templateUrl");var c=s.controller||null,m=s.controllerAs,f=angular.element(s.container||document.body),g=null,h=void 0,v=void 0,b=n(),y=b.on,_=b.unsubscribe;function w(){return g?(_(),e.leave(g).then(function(){g&&(Mousetrap.unbind("escape"),p(),v&&v.$destroy(),(v[m].$onDestroy||angular.noop)(),v=null,g.remove(),g=null,i.set("modalOpen",!1),$(".modal-backdrop").remove())})):r.when()}return h=s.template?r.when(s.template):l.get(s.templateUrl,{cache:d}).then(function(e){return e.data}),{activate:function(n){return h.then(function(s){g||function(n,s){if(0===(g=angular.element(n)).length)throw new Error("The template contains no elements; you need to wrap text nodes");if(v=a.$new(!0),c){s||(s={}),s.$scope=v;var r=o(c,s);m&&(v[m]=r)}else if(s)for(var l in s)v[l]=s[l];t(g)(v),e.enter(g,f)}(s,n),u.append('<div class="modal-backdrop fade in"></div>'),i.set("modalOpen",!0);var r=setTimeout(function(){$(".modal").addClass("in"),window.scrollTo(0,0),p(!1),Mousetrap.bind("escape",function(){var e=(n.params||{}).onEscape;(void 0===e?w:e)()}),clearTimeout(r)},100);y("logout",function(){w()})})},deactivate:w,active:function(){return!!g}}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$animate","$compile","$rootScope","dispatchers","$injector","$controller","$q","$http","AppModel","mailSettingsModel","$templateCache"],t.default=n},"./src/app/commons/factories/tempStorage.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/babel-runtime/core-js/object/keys.js"),o=(n=s)&&n.__esModule?n:{default:n};function r(e){var t={},a={};function n(e){return function(){delete t[e]}}function s(t){a[t]&&(e.cancel(a[t]),delete a[t])}return{getItem:function(e){if(angular.isString(e)&&t[e]){s(e);var a=t[e];return n(e)(),a}return null},setItem:function(o,r){var l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1e4;angular.isString(o)&&(s(o),t[o]=r,a[o]=e(n(o),l,!1))},removeItem:function(e){angular.isString(e)&&t[e]&&(s(e),delete t[e])},clear:function(){(0,o.default)(a).forEach(s),t={}}}}r.$inject=["$timeout"],t.default=r},"./src/app/commons/index.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=D(a("./src/app/commons/directives/appConfigBody.js")),s=D(a("./src/app/commons/directives/appCopyright.js")),o=D(a("./src/app/commons/directives/copy.js")),r=D(a("./src/app/commons/factories/AppModel.js")),l=D(a("./src/app/commons/factories/pmModal.js")),i=D(a("./src/app/commons/factories/tempStorage.js")),c=D(a("./src/app/commons/models/address.js")),d=D(a("./src/app/commons/models/eo.js")),u=D(a("./src/app/commons/models/events.js")),p=D(a("./src/app/commons/models/filter.js")),m=D(a("./src/app/commons/models/incomingDefault.js")),f=D(a("./src/app/commons/models/invite.js")),g=D(a("./src/app/commons/models/key.js")),h=D(a("./src/app/commons/models/label.js")),v=D(a("./src/app/commons/models/logs.js")),b=D(a("./src/app/commons/models/memberKey.js")),y=D(a("./src/app/commons/models/payment.js")),_=D(a("./src/app/commons/models/reset.js")),w=D(a("./src/app/commons/models/user.js")),x=D(a("./src/app/commons/providers/notification.js")),j=D(a("./src/app/commons/providers/url.js")),k=D(a("./src/app/commons/services/dispatchers.js")),A=D(a("./src/app/commons/services/errorReporter.js")),S=D(a("./src/app/commons/services/i18nLoader.js")),M=D(a("./src/app/commons/services/networkActivityTracker.js")),P=D(a("./src/app/commons/services/networkUtils.js")),E=D(a("./src/app/commons/services/secureSessionStorage.js")),C=D(a("./src/app/commons/services/webcrypto.js")),T=D(a("./src/app/commons/directives/translateAttribute.js")),I=D(a("./src/app/commons/directives/lazyInject.js"));function D(e){return e&&e.__esModule?e:{default:e}}t.default=angular.module("proton.commons",[]).directive("appConfigBody",n.default).directive("appCopyright",s.default).directive("copy",o.default).factory("AppModel",r.default).factory("pmModal",l.default).factory("tempStorage",i.default).factory("Address",c.default).factory("Eo",d.default).factory("Events",u.default).factory("Filter",p.default).factory("IncomingDefault",m.default).factory("Invite",f.default).factory("Key",g.default).factory("Label",h.default).factory("Logs",v.default).factory("MemberKey",b.default).factory("Payment",y.default).factory("Reset",_.default).factory("User",w.default).provider("notification",x.default).provider("url",j.default).factory("dispatchers",k.default).factory("errorReporter",A.default).factory("i18nLoader",S.default).factory("networkActivityTracker",M.default).factory("networkUtils",P.default).factory("secureSessionStorage",E.default).factory("webcrypto",C.default).directive("placeholderTranslate",T.default.placeholder).directive("titleTranslate",T.default.title).directive("lazyInject",I.default).directive("ptTooltipTranslate",T.default.tooltip).name},"./src/app/commons/models/address.js":function(e,t,a){"use strict";function n(e,t,a){var n={ERROR_UPDATE:a.getString("Error during updating",null,"Error"),ERROR_ORDER:a.getString("Unable to save your changes, please try again.",null,"Error"),ERROR_DELETE:a.getString("Error during deletion",null,"Error"),ERROR_DISABLE:a.getString("Error during disable request",null,"Error"),ERROR_ENABLE:a.getString("Error during enable request",null,"Error"),ERROR_CREATE:a.getString("Address creation failed",null,"Error"),ERROR_QUERY:a.getString("Error during query addresses",null,"Error"),ERROR_GET:a.getString("Error during get address",null,"Error")},s=t.build("addresses"),o=function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;return void 0===e?{}:e},r=function(e){return function(t){var a=t.data;throw new Error((void 0===a?{}:a).Error||e)}};return{create:function(t){return e.post(s(),t).then(o).catch(r(n.ERROR_CREATE))},setup:function(t){return e.post(s("setup"),t)},edit:function(t,a){return e.put(s(t),a).then(o).catch(r(n.ERROR_UPDATE))},enable:function(t){return e.put(s(t,"enable")).then(o).catch(r(n.ERROR_ENABLE))},disable:function(t){return e.put(s(t,"disable")).then(o).catch(r(n.ERROR_DISABLE))},remove:function(t){return e.delete(s(t)).then(o).catch(r(n.ERROR_DELETE))},order:function(t){return e.put(s("order"),t).then(o).catch(r(n.ERROR_ORDER))},query:function(){return e.get(s()).then(o).catch(r(n.ERROR_QUERY))},get:function(t){return e.get(s(t)).then(o).catch(r(n.ERROR_GET))}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$http","url","gettextCatalog"],t.default=n},"./src/app/commons/models/eo.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(a("./node_modules/babel-runtime/core-js/promise.js")),s=r(a("./node_modules/babel-runtime/core-js/object/keys.js")),o=r(a("./node_modules/lodash/each.js"));function r(e){return e&&e.__esModule?e:{default:e}}function l(e,t,a){var r=t.build("eo");return{token:function(t){return e.get(r("token",encodeURIComponent(t)),{headers:{"Content-Type":"application/json;charset=utf-8",Accept:"application/vnd.protonmail.v1+json"}})},message:function(t,a){return e.get(r("message"),{headers:{Authorization:t,"x-eo-uid":a}})},attachment:function(t,a,n){return e.get(r("attachment",n),{responseType:"arraybuffer",headers:{Authorization:t,"x-eo-uid":a}})},reply:function(e,t,l){var i=new FormData,c=new XMLHttpRequest;return(0,s.default)(l||{}).forEach(function(e){Array.isArray(l[e])?(0,o.default)(l[e],function(t){return i.append(e,t)}):i.append(e+"",l[e])}),new n.default(function(n,s){c.onload=function(){var e=function(e){var t=function(e){return{json:e,isInvalid:arguments.length>1&&void 0!==arguments[1]&&arguments[1]}};try{return t(JSON.parse(e.responseText))}catch(a){return t({Error:"JSON parsing error: "+e.responseText},!0)}}(c),t=e.json,a=e.isInvalid;if(200!==c.status)return s(new Error("Unable to send the message"));if(t.Error){var o=a?"Unable to send the message.":t.Error;return s(new Error(o))}n("Message send")},c.open("post",r("reply"),!0),c.setRequestHeader("X-Requested-With","XMLHttpRequest"),c.setRequestHeader("Accept","application/vnd.protonmail.v1+json"),c.setRequestHeader("x-pm-appversion","Web_"+a.app_version),c.setRequestHeader("x-pm-apiversion",a.api_version),c.setRequestHeader("Authorization",e),c.setRequestHeader("x-eo-uid",t),c.send(i)})}}}l.$inject=["$http","url","CONFIG"],t.default=l},"./src/app/commons/models/events.js":function(e,t,a){"use strict";function n(e,t){var a=t.build("events");return{get:function(t){return e.get(a(t))},getLatestID:function(){return e.get(a("latest"))}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$http","url"],t.default=n},"./src/app/commons/models/filter.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(a("./node_modules/lodash/isEqual.js")),s=o(a("./node_modules/lodash/each.js"));function o(e){return e&&e.__esModule?e:{default:e}}function r(e,t){function a(e){return angular.isDefined(e.Simple)&&(e.Tree=Sieve.toTree(e.Simple)),angular.toJson(e)}return{create:function(n){return e.post(t.get()+"/filters",n,{transformRequest:a})},check:function(n){return e.post(t.get()+"/filters/check",n,{transformRequest:a})},query:function(){return e.get(t.get()+"/filters").then(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data,t=void 0===e?{}:e;return(0,s.default)(t.Filters,function(e){var t=Sieve.fromTree(e.Tree);(0,n.default)(e.Tree,Sieve.toTree(t))?e.Simple=t:delete e.Simple}),t})},update:function(n){return e.put(t.get()+"/filters/"+n.ID,n,{transformRequest:a})},enable:function(a){return e.put(t.get()+"/filters/"+a.ID+"/enable")},disable:function(a){return e.put(t.get()+"/filters/"+a.ID+"/disable")},order:function(a){return e.put(t.get()+"/filters/order",a)},delete:function(a){return e.delete(t.get()+"/filters/"+a.ID)},clear:function(){return e.delete(t.get()+"/filters")}}}r.$inject=["$http","url"],t.default=r},"./src/app/commons/models/incomingDefault.js":function(e,t,a){"use strict";function n(e,t){var a=t.build("incomingdefaults");return{get:function(t){return e.get(a(),{params:t})},add:function(t){return e.post(a(),t)},update:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e.put(a(t.ID),t)},delete:function(t){return e.put(a("delete"),t)},clear:function(){return e.delete(a())}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$http","url"],t.default=n},"./src/app/commons/models/invite.js":function(e,t,a){"use strict";function n(e,t){var a=t.build("invites");return{check:function(t,n,s){return e.post(a("check"),{Token:t,Selector:n,Type:s})}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$http","url"],t.default=n},"./src/app/commons/models/key.js":function(e,t,a){"use strict";function n(e,t,a){var n=t.build("keys");return{create:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e.post(n(),t)},setup:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return s.length?a.getPasswordParams(s,t).then(function(t){return e.post(n("setup"),t)}):e.post(n("setup"),t)},reset:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return s.length?a.getPasswordParams(s,t).then(function(t){return e.post(n("reset"),t)}):e.post(n("reset"),t)},order:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e.post(n("order"),t)},activate:function(t){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.put(n(t,"activate"),a)},upgrade:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return s.length?a.getPasswordParams(s,t).then(function(t){return e.put(n("private","upgrade"),t)}):e.put(n("private","upgrade"),t)},private:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return s.length?a.getPasswordParams(s,t).then(function(t){return e.put(n("private"),t)}):e.put(n("private"),t)},delete:function(t){return e.delete(n(t))},salts:function(){return e.get(n("salts"))},reactivate:function(t,a){return e.put(n(t),a)}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$http","url","srp"],t.default=n},"./src/app/commons/models/label.js":function(e,t,a){"use strict";function n(e,t){return{query:function(){return e.get(t.get()+"/labels")},apply:function(a,n){return e.put(t.get()+"/labels/apply/"+a,n)},remove:function(a,n){return e.put(t.get()+"/labels/remove/"+a,n)},order:function(a){return e.put(t.get()+"/labels/order",a)},update:function(a){return e.put(t.get()+"/labels/"+a.ID,a)},create:function(a){return e.post(t.get()+"/labels",a)},delete:function(a){return e.delete(t.get()+"/labels/"+a)}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$http","url"],t.default=n},"./src/app/commons/models/logs.js":function(e,t,a){"use strict";function n(e,t){var a=t.build("logs");return{get:function(){return e.get(a("auth"))},clear:function(){return e.delete(a("auth"))}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$http","url"],t.default=n},"./src/app/commons/models/memberKey.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/lodash/extend.js"),o=(n=s)&&n.__esModule?n:{default:n};function r(e,t,a){return{create:function(a){return e.post(t.get()+"/memberkeys",a)},setup:function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return a.randomVerifier(s).then(function(a){return e.post(t.get()+"/memberkeys/setup",(0,o.default)(n,a))})},order:function(a){return e.post(t.get()+"/memberkeys/order",a)},update:function(a,n){return e.put(t.get()+"/memberkeys"+a,n)},delete:function(a){return e.delete(t.get()+"/memberkeys/"+a)}}}r.$inject=["$http","url","srp"],t.default=r},"./src/app/commons/models/payment.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(a("./node_modules/babel-runtime/core-js/promise.js")),s=o(a("./node_modules/lodash/find.js"));function o(e){return e&&e.__esModule?e:{default:e}}function r(e,t,a,o,r){var l=a.build("payments"),i=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e.Payment?e.Payment:e.PaymentMethod?e.PaymentMethod:e};function c(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.PaymentMethodID,a=i(e);return new n.default(function(n,s){try{if(void 0===t&&"card"===a.Type)return o.getFingerprint(function(t){a.Fingerprint=t,n(e)});n(e)}catch(e){s(e)}})}return{credit:function(t){return c(t).then(function(t){return e.post(l("credit"),t)})},donate:function(t){return c(t).then(function(t){return e.post(l("donate"),t)})},paypal:function(t){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.post(l("paypal"),t,a)},validateCredit:function(t){return e.post(l("credit","check"),t)},validateVerify:function(t){return e.post(l("verify","check"),t)},invoices:function(t){return e.get(l("invoices"),{params:t})},invoice:function(t){return e.get(l("invoices",t),{responseType:"arraybuffer"})},order:function(t){return e.put(l("methods","order"),t)},verify:function(t){return c(t).then(function(t){return e.post(l("verify"),t)})},status:function(){return e.get(l("status"))},check:function(t){return e.post(l("invoices",t,"check"))},pay:function(t,a){return c(a).then(function(a){return e.post(l("invoices",t),a)})},valid:function(t){return e.post(l("subscription","check"),t)},plans:function(t,a){return e.get(l("plans"),{params:{Currency:t,Cycle:a}}).then(r(t,a)).then(function(e){return{data:e}})},subscription:function(){if(t.user.Role>1)return e.get(l("subscription")).then(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data,t=void 0===e?{}:e,a=(0,s.default)(t.Subscription.Plans,{Type:1})||{},n=a.Name,o=a.Title;return t.Subscription.Name=n,t.Subscription.Title=o,t});var a={Name:"free",Title:"ProtonMail Free",MaxDomains:0,CouponCode:null,MaxAddresses:1,MaxSpace:5368709120,MaxMembers:1,Cycle:12,Currency:t.user.Currency};return n.default.resolve({data:{Code:1e3,Subscription:a}})},updateMethod:function(t){return c(t).then(function(t){return e.post(l("methods"),t)})},deleteMethod:function(t){return e.delete(l("methods",t))},methods:function(){return e.get(l("methods"))},subscribe:function(t){return c(t).then(function(t){return e.post(l("subscription"),t)})},unsubscribe:function(t){return e.post(l("unsubscribe"),t)},delete:function(){return e.delete(l("subscription"))},btc:function(t,a){return e.post(l("bcinfo"),{Amount:t,Currency:a})}}}r.$inject=["$http","authentication","url","brick","paymentPlansFormator"],t.default=r},"./src/app/commons/models/reset.js":function(e,t,a){"use strict";function n(e,t,a){return{requestResetToken:function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e.post(t.get()+"/reset",a)},resetPassword:function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return a.getPasswordParams(s,n).then(function(a){var n=t.get()+"/reset/"+encodeURIComponent(a.Token);return e.post(n,a)})},getMailboxResetToken:function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e.post(t.get()+"/reset/mailbox",a)},resetMailbox:function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e.post(t.get()+"/reset/mailbox/"+encodeURIComponent(a.Token),a)},validateResetToken:function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e.get(t.get()+"/reset/"+a.Username+"/"+encodeURIComponent(a.Token))}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$http","url","srp"],t.default=n},"./src/app/commons/models/user.js":function(e,t,a){"use strict";function n(e,t,a){var n={"x-pm-apiversion":3},s=t.build("users");return{create:function(t,n){return a.getPasswordParams(n,t).then(function(t){return e.post(s(),t)})},code:function(t){return e.post(s("code"),t)},get:function(){return e.get(s(),{headers:n})},human:function(){return e.get(t.get()+"/users/human")},check:function(a){return e.post(t.get()+"/users/human",a)},pubkeys:function(t){return e.get(s("pubkeys",window.encodeURIComponent(t)))},available:function(t){return e.get(s("available",t))},direct:function(){return e.get(s("direct"))},lock:function(){return e.put(s("lock"))},unlock:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return a.performSRPRequest("PUT","/users/unlock",{},e)},password:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return a.performSRPRequest("PUT","/users/password",{},e)},delete:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return a.performSRPRequest("PUT","/users/delete",{},e)}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$http","url","srp"],t.default=n},"./src/app/commons/providers/notification.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/babel-runtime/helpers/extends.js"),o=(n=s)&&n.__esModule?n:{default:n};t.default=function(){var e={classNames:{error:"notification-danger",success:"notification-success",info:"notification-info"}};this.typeClasses=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,o.default)({},e.classNames,t)},this.duration=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:6e3;return e.duration=t},this.template=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return e.template=t},this.$get=["notify",function(t){var a=function(a){return function(n){var s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=n instanceof Error?n.message:n;s.classes=((s.classes||"")+" "+e.classNames[a]).trim(),"error"===a&&(s.duration=1e4),t((0,o.default)({message:r},s))}},n={position:"center",maximumOpen:5,duration:6e3};return e.template&&(n.templateUrl=e.template),t.config(n),{success:a("success"),error:a("error"),info:a("info")}}]}},"./src/app/commons/providers/url.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){var e=void 0,t=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return function(){for(var a=arguments.length,n=Array(a),s=0;s<a;s++)n[s]=arguments[s];return[(t+"/"+e).trim()].concat(n).join("/")}};this.setBaseUrl=function(t){e=t},this.$get=function(){return{host:function(){var t=document.createElement("a");return t.href=e,t.host},get:function(){return e},make:t,build:function(e){return t(e,this.get())}}}}},"./src/app/commons/services/dispatchers.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(a("./node_modules/babel-runtime/helpers/slicedToArray.js")),s=o(a("./node_modules/babel-runtime/core-js/object/create.js"));function o(e){return e&&e.__esModule?e:{default:e}}function r(e){return function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],a=arguments[1],o=[];return{dispatcher:function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).reduce(function(t,a){return"$"!==a.charAt(0)&&(t[a]=function(e,t){return function(a,n){e.$emit(t,function(e,t){if(e||""===e||t)return{type:e,data:t}}(a,n))}}(e,a)),t},(0,s.default)(null))}(t),on:function(t,s){var r=a?function(e,t){return function(){for(var a=arguments.length,s=Array(a),o=0;o<a;o++)s[o]=arguments[o];var r="type ["+e+"]:",l=s.slice(-1),i=(0,n.default)(l,1)[0];console.group(r),console.log(i),t.apply(void 0,s),console.groupEnd(r)}}(t,s):s,l=e.$on(t,r);return o.push(l),l},unsubscribe:function(){o.forEach(function(e){return e()}),o.length=0}}}}r.$inject=["$rootScope"],t.default=r},"./src/app/commons/services/errorReporter.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/babel-runtime/core-js/promise.js"),o=(n=s)&&n.__esModule?n:{default:n};function r(e){var t=function(t){return t&&e(t)};return{clear:e.closeAll,catcher:function(e,a){return function(n){t(e),a&&a.reject()}},resolve:function(e,a,n){return new o.default(function(s){a.then(s,function(a){t(e),s(n)})})},notify:t}}r.$inject=["notify"],t.default=r},"./src/app/commons/services/i18nLoader.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=d(a("./node_modules/babel-runtime/regenerator/index.js")),s=d(a("./node_modules/babel-runtime/helpers/asyncToGenerator.js")),o=d(a("./node_modules/babel-runtime/helpers/slicedToArray.js")),r=d(a("./node_modules/lodash/find.js")),l=d(a("./node_modules/lodash/sortBy.js")),i=d(a("./node_modules/lodash/includes.js")),c=d(a("./node_modules/lodash/extend.js"));function d(e){return e&&e.__esModule?e:{default:e}}function u(e,t,a,d){var u,p,m=this,f={},g=function(e){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.$emit("i18n",{type:e,data:a})},h=function(e){var t=window.navigator.languages&&window.navigator.languages.length?window.navigator.languages[0]:null,a=(e||t||window.navigator.userLanguage||window.navigator.language).replace("-","_");return 2===a.length?a+"_"+function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return("en"===e?"us":e).toUpperCase()}(a):a},v=function(e){var t=function(){try{var e=new window.URL(window.location).searchParams;return h(e.get("language"))}catch(e){var t=location.search.match(/language=(([a-z]{2,}(_|-)[A-Z]{2,})|([a-z]{2,}))/)||[],a=(0,o.default)(t,2)[1];return h(a)}}(),a=e||t,n=a.split("_"),s=(0,o.default)(n,1)[0];return(0,c.default)(f,{locale:a,navigatorLocale:t,shortLocale:s})},b=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:h(),a=moment.localeData(t),n=t.toLowerCase().replace("_","-");if(null!==a){var s=moment.locales().filter(function(t){return 0===t.lastIndexOf(e,0)});if(s.sort(function(e){return function(t,a){var n=moment.localeData(t),s=moment.localeData(a),o=n.firstDayOfWeek(),r=s.firstDayOfWeek(),l=e.firstDayOfWeek();if(o!==r&&(o===l||r===l))return o===l?-1:1;var i=n.longDateFormat("L"),c=s.longDateFormat("L"),d=e.longDateFormat("L");if(i!==c&&(i===d||c===d))return i===d?-1:1;var u=function(e){return e.replace(/[^a-zA-Z]/g,"")},p=u(i),m=u(c),f=u(d);return p===m||p!==f&&m!==f?"en-gb"===t||"en-gb"===a?"en-gb"===t?-1:1:t.length-a.length:p===f?-1:1}}(a)),(0,i.default)(s,n))return n;if(s.length)return s[0]}return e};return{localizeDate:(u=(0,s.default)(n.default.mark(function e(){var t,s;return n.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:t=f.navigatorLocale,s=f.shortLocale,d.get("dateUtils").init(),moment.locale(b(s,t)),n=void 0,o=void 0,r=void 0,void 0,n=d.get("dateUtils"),o=d.get("pikadayConfiguration"),r=(0,l.default)(n.I18N.days.slice(),function(e){return e.value}),i={previousMonth:a.getString("Previous Month",null,"Pikaday"),nextMonth:a.getString("Next Month",null,"Pikaday"),months:n.I18N.months,weekdays:r.map(function(e){return e.longLabel}),weekdaysShort:r.map(function(e){return e.shortLabel})},o.update({i18n:i,firstDay:moment.localeData().firstDayOfWeek(),format:moment.localeData().longDateFormat("L")}),f.langCountry=moment.locale(),g("load",{lang:f.langCountry});case 6:case"end":return e.stop()}var n,o,r,i},e,m)})),function(){return u.apply(this,arguments)}),translate:(p=(0,s.default)(n.default.mark(function t(s){var o,l,i,c;return n.default.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(o=v(s),l=o.locale,i=o.shortLocale,a.debugPrefix="",a.setCurrentLanguage(l),a.debug=e.debug||!1,document.documentElement.lang=i,!l.startsWith("en")){t.next=7;break}return t.abrupt("return");case 7:if(!e.translations.includes(l)){t.next=9;break}return t.abrupt("return",a.loadRemote("/i18n/"+l+".json"));case 9:if(!(c=(0,r.default)(e.translations,function(e){return e.substr(0,2)===i}))){t.next=12;break}return t.abrupt("return",a.loadRemote("/i18n/"+c+".json"));case 12:case"end":return t.stop()}},t,m)})),function(e){return p.apply(this,arguments)}),langCountry:f.langCountry}}u.$inject=["CONFIG","$rootScope","gettextCatalog","$injector"],t.default=u},"./src/app/commons/services/networkActivityTracker.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=i(a("./node_modules/babel-runtime/core-js/promise.js")),s=i(a("./node_modules/lodash/without.js")),o=i(a("./node_modules/lodash/union.js")),r=i(a("./node_modules/lodash/isEmpty.js")),l=a("./src/app/constants.js");function i(e){return e&&e.__esModule?e:{default:e}}function c(e,t,a,i){var c=[],d=e("unicodeTagView"),u=function(e){return a.$emit("networkActivity",e)};return{loading:function(){return!(0,r.default)(c)},clear:function(){return t.clear(),c.length=0,c},track:function(e){function a(){(c=(0,s.default)(c,e)).length||u("close")}return t.clear(),c.length||u("load"),c=(0,o.default)(c,[e]),e.catch(function(e){if(console.error(e),angular.isString(e)&&i.error(e),angular.isObject(e)&&!e.noNotify){var t=e.data,a=void 0===t?{}:t,s=void 0;return"loginPassword:cancel"!==(s=e.message?e.raw?e.message:d(e.message):e.Error?e.Error:e.error_description?e.error_description:a.Error?a.Error:"An error has occurred. <br> Please try again or refresh the page.")&&s!==l.ERROR_SILENT&&i.error(s),n.default.reject(e)}}),e.then(a,a),e},dispatch:u}}c.$inject=["$filter","errorReporter","$rootScope","notification"],t.default=c},"./src/app/commons/services/networkUtils.js":function(e,t,a){"use strict";function n(e){var t=e.CANCEL_REQUEST;return{isCancelledRequest:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).config;return(((void 0===e?{}:e).timeout||{}).$$state||{}).value===t}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["CONSTANTS"],t.default=n},"./src/app/commons/services/secureSessionStorage.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(a("./node_modules/babel-runtime/core-js/json/stringify.js")),s=o(a("./node_modules/lodash/isEmpty.js"));function o(e){return e&&e.__esModule?e:{default:e}}function r(e,t){var a=window.sessionStorage,o=void 0;try{o=JSON.parse(window.name)}catch(e){o={}}for(var r={},l=[e.MAILBOX_PASSWORD_KEY,e.OAUTH_KEY+":SessionToken",e.OAUTH_KEY+":UID","proton:decrypted_token","proton:encrypted_password"],i=0;i<l.length;i++)if(o.hasOwnProperty(l[i])){var c=a.getItem(l[i]),d=o[l[i]];if(angular.isString(c)&&angular.isString(d)){try{c=pmcrypto.binaryStringToArray(pmcrypto.decode_base64(c)),d=pmcrypto.binaryStringToArray(pmcrypto.decode_base64(d))}catch(e){continue}if(c.length===d.length){for(var u=new Array(c.length),p=0;p<c.length;p++)u[p]=c[p]^d[p];for(var m=c.length;m>0&&0===u[m-1];)m--;r[l[i]]=pmcrypto.arrayToBinaryString(u.slice(0,m))}}}a.clear(),window.name="",o={};var f={getItem:function(e){return angular.isString(e)&&r.hasOwnProperty(e)?r[e]:null},setItem:function(e,t){angular.isString(e)&&angular.isString(t)&&(r[e]=t)},removeItem:function(e){angular.isString(e)&&r.hasOwnProperty(e)&&delete r[e]},clear:function(){r={}}},g=function(){for(var e in r)if(r.hasOwnProperty(e)){for(var l=pmcrypto.binaryStringToArray(r[e]),i=256*Math.ceil(l.length/256),c=t.getRandomValues(new Uint8Array(i)),d=new Uint8Array(c),u=0;u<l.length;u++)d[u]^=l[u];o[e]=pmcrypto.encode_base64(pmcrypto.arrayToBinaryString(c)),a.setItem(e,pmcrypto.encode_base64(pmcrypto.arrayToBinaryString(d)))}(0,s.default)(o)||(window.name=(0,n.default)(o))};if(window.addEventListener)window.addEventListener("unload",g,!1);else{if(!window.attachEvent)throw new Error("No method for adding event listeners!");window.attachEvent("onunload",g)}return f}r.$inject=["CONSTANTS","webcrypto"],t.default=r},"./src/app/commons/services/webcrypto.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){return window.crypto&&window.crypto.getRandomValues?window.crypto:window.msCrypto&&window.msCrypto.getRandomValues?window.msCrypto:{getRandomValues:function(){throw new Error("No cryptographic randomness!")}}}},"./src/app/config.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={app_version:"3.13.7",api_version:"3",date_version:"Mon May 21 2018",year:2018,clientID:"Web",clientSecret:"4957cc9a2e0a2a49d02475c9d013478d",articleLink:"https://protonmail.com/blog/protonmail-v3-13-release-notes/",changelogPath:"assets/changelog.tpl.html",translations:["de_DE","en_US","es_ES","fr_FR","id_ID","it_IT","ja_JP","nl_NL","pl_PL","pt_BR","ro_RO","ru_RU","tr_TR","uk_UA"],debug:!1,apiUrl:"/api",statsConfig:{isEnabled:!1,statsHost:"stats.protonmail.ch",domains:["*.protonmail.com","*.mail.protonmail.com"],cookieDomain:"*.protonmail.com",siteId:5,abSiteId:8}}},"./src/app/constants.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=t.MAIN_KEY="0",s=(t.ERROR_AUTH_ACCOUNT_DISABLED=10003,t.MAX_TITLE_LENGTH=255,t.AWESOMEPLETE_MAX_ITEMS=20,t.ERROR_SILENT="ignoreError"),o=t.WIZARD_ENABLED=!0,r=t.FREE_USER_ROLE=0,l=t.PAID_MEMBER_ROLE=1,i=t.PAID_ADMIN_ROLE=2,c=(t.CURRENCIES=["USD","EUR","CHF"],t.BILLING_CYCLE=[1,12,24],t.PHOTO_PLACEHOLDER_URL="/assets/img/photo-placeholder.png",t.INVITE_URL="https://protonmail.com/invite",t.INVITE_MAIL=1,t.INVITE_VPN=2,t.OAUTH_KEY="proton:oauth"),d=(t.CUSTOM_DOMAIN_ADDRESS=3,t.UNPAID_STATE={NOT:0,AVAILABLE:1,OVERDUE:2,DELINQUENT:3,NO_RECEIVE:4}),u=t.MAILBOX_IDENTIFIERS={inbox:"0",allDrafts:"1",allSent:"2",trash:"3",spam:"4",allmail:"5",starred:"10",archive:"6",sent:"7",drafts:"8",search:"search",label:"label"},p=(t.REMOTE=1,t.EMBEDDED=2,t.CONVERSATION_REQUEST_SIZE=10,t.GIFT_CODE_LENGTH=16,t.PM_SIGNATURE='Sent with <a href="https://protonmail.com" target="_blank">ProtonMail</a> Secure Email.'),m=(t.MIME_TYPES={PLAINTEXT:"text/plain",DEFAULT:"text/html"},t.DEFAULT_SQUIRE_VALUE={LINK:"",IMAGE:"",HEADER_CLASS:"h4",IFRAME_CLASS:"angular-squire-iframe"},t.EMAIL_FORMATING={OPEN_TAG_AUTOCOMPLETE:"‹",CLOSE_TAG_AUTOCOMPLETE:"›",OPEN_TAG_AUTOCOMPLETE_RAW:"<",CLOSE_TAG_AUTOCOMPLETE_RAW:">"},t.AUTOCOMPLETE_DOMAINS=["protonmail.com","protonmail.ch","gmail.com","hotmail.com","live.com","yahoo.com","outlook.com"],t.MAX_OUTSIDE_REPLY=4),f=t.MAILBOX_PASSWORD_KEY="proton:mailbox_pwd",g=(t.WHITELIST=["notify@protonmail.com"],t.ADDRESS_TYPE={ORIGINAL:1,ALIAS:2,CUSTOM_DOMAIN:3,PREMIUM:4},t.CONSTANTS={MAX_SIZE_SCREENSHOT:5e5,CLIENT_TYPE:1,BLACK_FRIDAY_INTERVAL:6e5,PLANS:{PLAN:{PLUS:"plus",PROFESSIONAL:"professional",VISIONARY:"visionary",VPN_BASIC:"vpnbasic",VPN_PLUS:"vpnplus"},ADDON:{ADDRESS:"5address",MEMBER:"1member",DOMAIN:"1domain",SPACE:"1gb",VPN:"1vpn"}},PLANS_TYPE:{PLAN:1,ADDON:0},CONTACTS_LIMIT_ENCRYPTION:20,CONTACTS_LIMIT_UPLOAD:50,VCARD_VERSION:"4.0",VCARD_KEYS:["fn","email","adr","tel","note","kind","source","xml","nickname","photo","bday","anniversary","gender","impp","lang","tz","geo","title","role","logo","org","member","related","categories","rev","sound","uid","clientpidmap","url","key","fburl","caladruri","caluri"],VCARD_TYPES:["work","home","text","voice","fax","cell","video","pager","textphone","iana-token","x-name","contact","acquaintance","friend","met","co-worker","colleague","co-resident","neighbor","child","parent","sibling","spouse","kin","muse","crush","date","sweetheart","me","agent","emergency"],CONTACT_MODE:{ENCRYPTED_AND_SIGNED:3,SIGNED:2,ENCRYPTED:1,CLEAR_TEXT:0},CONTACT_ERROR:{TYPE3_CONTACT_VERIFICATION:3,TYPE3_CONTACT_DECRYPTION:2,TYPE2_CONTACT_VERIFICATION:1,TYPE1_CONTACT:0},CONTACT_EMAILS_LIMIT:1e3,CONTACTS_LIMIT:1e3,EXPORT_CONTACTS_LIMIT:50,MAX_VPN:500,MAX_MEMBER:100,HUGE_MEMBER:5e3,TIMEOUT:3e4,BASE_SIZE:1024,KEY_VERSION:3,INBOX:0,DRAFT:1,SENT:2,INBOX_AND_SENT:3,PM_ADDRESS:1,PM_ALIAS:2,REPLY:0,REPLY_ALL:1,FORWARD:2,FILTER_VERSION:1,ROW_MODE:1,COLUMN_MODE:0,ATTACHMENT_SIZE_LIMIT:25,ATTACHMENT_NUMBER_LIMIT:100,MAX_NUMBER_COMPOSER:3,MESSAGE_VIEW_MODE:1,CONVERSATION_VIEW_MODE:0,MESSAGE_LIMIT:100,CONVERSATION_LIMIT:100,ENCRYPTED_STATUS:{NONE:0,INTERNAL:1,EXTERNAL:2,OUT_ENC:3,OUT_PLAIN:4,STORED_ENC:5,AUTOREPLY:10},INTERVAL_EVENT_TIMER:3e4,TIMEOUT_PRELOAD_MESSAGE:500,UPLOAD_GRADIENT_DARK:"147, 145, 209",UPLOAD_GRADIENT_LIGHT:"255, 255, 255",ENC_OUT_ENC_REPLY:6,SAVE_TIMEOUT_TIME:3e3,SAVE_THROTTLE_TIME:1e4,MAX_EXPIRATION_TIME:672,ELEMENTS_PER_PAGE:50,CONTACTS_PER_PAGE:1e3,HD_BREAKPOINT:1920,DESKTOP_BREAKPOINT:1200,ROW_BREAKPOINT:960,MOBILE_BREAKPOINT:800,STATUS:{DELETE:0,CREATE:1,UPDATE:2,UPDATE_DRAFT:2,UPDATE_FLAGS:3},URL_INFO:"https://mail.protonmail.com/assets/host.png",MIN_PAYPAL_AMOUNT:500,MAX_PAYPAL_AMOUNT:99999900,MIN_BITCOIN_AMOUNT:500,BTC_DONATION_ADDRESS:"1Q1nhq1NbxPYAbw1BppwKbCqg58ZqMb9A8",CYCLE:{MONTHLY:1,YEARLY:12,TWO_YEARS:24},IFRAME_SECURE_ORIGIN:"https://secure.protonmail.com",DEFAULT_CURRENCY:"EUR",CHANGELOG_PATH:"assets/changelog.tpl.html",DEFAULT_CYCLE:12,TRACKER_ROUTE:"proton.php",PIWIK_SCRIPT:"proton.js",METRIC_GOALS:{SIGNUP_ALL:2,SIGNUP_FREE:4,SIGNUP_PAID:3,SIGNUP_PLUS:6,SIGNUP_VISIONARY:5},SEND_TYPES:{SEND_PM:1,SEND_EO:2,SEND_CLEAR:4,SEND_PGP_INLINE:8,SEND_PGP_MIME:16,SEND_MIME:32},FONT_SIZE:{small:8,normal:14,large:20,huge:26},COMPOSER_COLOR:{COLOR:"#222222",BACKGROUND:"#FFFFFF"},FONT_COLOR:{white:["#FFFFFF","#DADADA","#B5B5B5","#909090","#6B6B6B","#464646","#222222"],magenta:["#F6CBCB","#EC9798","#E36667","#ED4139","#CF3932","#9A2B25","#681D19"],blue:["#CDE1F2","#9CC3E5","#6CA6D9","#3B83C2","#2A47F6","#145390","#0F3A62"],green:["#D7EAD3","#B3D6A9","#8FC380","#77F241","#66A657","#3A762B","#29501F"],yellow:["#FFF2CD","#FEE59C","#FCD86F","#FDF84E","#F2C246","#BE8F35","#7F6124"]},CANCEL_REQUEST:"CANCEL_REQUEST",ENCRYPTION_DEFAULT:2048,ERROR_SILENT:s,FREE_USER_ROLE:r,PAID_MEMBER_ROLE:l,PAID_ADMIN_ROLE:i,UNPAID_STATE:d,WIZARD_ENABLED:o,MAILBOX_IDENTIFIERS:u,PM_SIGNATURE:p,OAUTH_KEY:c,MAIN_KEY:n,MAX_OUTSIDE_REPLY:m,MAILBOX_PASSWORD_KEY:f});t.REGEX_EMAIL=/(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))/i;t.default=angular.module("proton.constants",[]).constant("CONSTANTS",g).name},"./src/app/core/controllers/header.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=a("./src/app/constants.js");function s(e,t,a,s,o,r){var l=s(),i=l.on,c=l.unsubscribe,d=function(){var t=r(),a=t.isAdmin,n=t.isFree;e.isAdmin=a,e.isFree=n};d(),e.params={},e.user=a.user,e.organization=o.get(),e.wizardEnabled=n.WIZARD_ENABLED,e.ctrl={},e.starred=2,i("organizationChange",function(t,a){var n=a.data;e.organization=n}),i("updateUser",d),e.$on("$destroy",function(){c()}),e.cancel=function(){angular.isDefined(e.params.cancel)&&angular.isFunction(e.params.cancel)&&e.params.cancel()},e.activeSettings=function(){var e=t.$current.name;return-1!==["secured.dashboard","secured.account","secured.labels","secured.filters","secured.autoresponder","secured.security","secured.appearance","secured.domains","secured.bridge","secured.pmme","secured.members","secured.payments","secured.keys","secured.vpn"].indexOf(e)}}s.$inject=["$scope","$state","authentication","dispatchers","organizationModel","userType"],t.default=s},"./src/app/core/controllers/secured.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/lodash/noop.js"),o=(n=s)&&n.__esModule?n:{default:n};function r(e,t,a,n,s,r,l,i,c,d,u,p,m,f,g,h,v){var b=p(),y=b.on,_=b.unsubscribe;t.mobileMode=s.is("mobile"),t.tabletMode=s.is("tablet"),t.user=l.user;var w=function(){var e=v(),a=e.isAdmin,n=e.isFree;t.isAdmin=a,t.isFree=n};w(),e.isLoggedIn=!0,e.isLocked=!1,h.init();var x=function(e,a){var n=a.value;return t.$applyAsync(function(){return t[e]=n})};y("AppModel",function(e,t){var a=t.type,n=t.data,s=void 0===n?{}:n;"mobile"===a&&x("mobileMode",s),"tablet"===a&&x("tabletMode",s)}),u.request(),1===g.get("Hotkeys")?f.bind():f.unbind(),r(),m.start(l.user.EventID),i.query(),!a.includes("secured.contacts")&&d.load(),n.manage().catch(o.default),y("updateUser",function(){t.$applyAsync(function(){t.user=l.user,w()})}),t.idDefined=function(){return a.params.id&&a.params.id.length>0},t.isMobile=function(){return s.is("mobile")},t.$on("$destroy",function(){f.unbind(),_()})}r.$inject=["$rootScope","$scope","$state","addressWithoutKeysManager","AppModel","attachSignupSubscription","authentication","cacheCounters","CONSTANTS","contactCache","desktopNotifications","dispatchers","eventManager","hotkeys","mailSettingsModel","resurrecter","userType"],t.default=r},"./src/app/core/controllers/setup.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/lodash/each.js"),o=(n=s)&&n.__esModule?n:{default:n},r=a("./src/app/constants.js");function l(e,t,a,n,s,l,i,c,d,u,p,m,f,g,h,v,b,y,_,w,x,j){var k=void 0;function A(){return a.debug("generateKeys"),l.genKeys=!0,w.generate(j.Addresses,k)}function S(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return a.debug("installKeys"),l.genKeys=!1,l.creating=!0,l.setupAccount=!0,w.setup(e,k).then(function(){d.savePassword(e.mailboxPassword),s.isLoggedIn=d.isLoggedIn(),s.isLocked=d.isLocked(),s.isSecure=d.isSecured()})}function M(){return a.debug("getUserInfo"),l.getUserInfo=!0,d.fetchUserInfo()}function P(){if(a.debug("finishRedirect"),l.finishCreation=!0,d.user.Delinquent<r.UNPAID_STATE.DELINQUENT)return i.go("secured.inbox",{welcome:r.WIZARD_ENABLED});i.go("secured.dashboard")}l.submit=function(){return k=l.password,g.track(function(){if(a.debug("setupAddress"),l.filling=!1,!j.Addresses.length)return c.setup({Domain:l.domain.value}).then(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.data,a=void 0===t?{}:t;return j.Addresses=[a.Address],j});return n.resolve(j)}().then(A).then(S).then(M).then(P)).catch(function(){l.setupError=!0})},l.tools=x,l.filling=!0,l.creating=!1,l.genKeys=!1,l.setupAccount=!1,l.getUserInfo=!1,l.finishCreation=!1,l.generating=!1,l.domains=[],(0,o.default)(p,function(e){l.domains.push({label:e,value:e})}),l.username=j.Name,l.domain=l.domains[0],l.chooseDomain=!j.Addresses.length,l.password="",l.passwordConfirm=""}l.$inject=["$http","$location","$log","$q","$rootScope","$scope","$state","Address","authentication","confirmModal","domains","gettextCatalog","Key","networkActivityTracker","Payment","passwords","pmcw","Reset","secureSessionStorage","setupKeys","tools","user"],t.default=l},"./src/app/core/controllers/sidebar.js":function(e,t,a){"use strict";function n(e,t,a){var n=function(t,a){var n=a.value;return e.$applyAsync(function(){return e[t]=n})},s=a(),o=s.on,r=s.unsubscribe;e.inboxSidebar=t.is("inboxSidebar"),e.showSidebar=t.is("showSidebar"),e.settingsSidebar=t.is("settingsSidebar"),e.contactSidebar=t.is("contactSidebar"),e.mobileMode=t.is("mobile"),o("AppModel",function(e,t){var a=t.type,s=t.data,o=void 0===s?{}:s;"mobile"===a&&n("mobileMode",o),"showSidebar"===a&&n(a,o),"inboxSidebar"===a&&n(a,o),"settingsSidebar"===a&&n(a,o),"contactSidebar"===a&&n(a,o)}),e.$on("$destroy",function(){r()})}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$scope","AppModel","dispatchers"],t.default=n},"./src/app/core/controllers/signup.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(a("./node_modules/lodash/find.js")),s=o(a("./node_modules/lodash/map.js"));function o(e){return e&&e.__esModule?e:{default:e}}function r(e,t,a,o,r,l,i,c,d,u,p,m,f,g){var h={success:c.getString("Gift code applied",null,"Success")},v=l(),b=v.on,y=v.unsubscribe;t.step=1,t.plans=p,t.domains=(0,s.default)(i,function(e){return{label:e,value:e}}),t.isFromInvitation=m.is("preInvited"),t.account={username:e.search().u||o.username||"",domain:t.domains[0],codeVerification:"",captcha_token:!1,smsCodeVerification:"",emailVerification:""},r.logout(!1,r.isLoggedIn()),p.length&&(t.plan=(0,n.default)(p,{Name:o.plan,Cycle:parseInt(o.billing,10),Currency:o.currency}));var _=function(){return t.step=5,g.createAccount(t.account)};function w(e){var a=e.Payment,n=e.Amount,s=e.Currency,o=e.GiftCode,r=e.Credit;f.verify({Payment:a,Amount:n,Currency:s,GiftCode:o,Credit:r},t.plan).then(_)}b("payments",function(e,t){var a=t.type,n=t.data,s=void 0===n?{}:n;if("create.account"===a&&("humanVerification"!==s.action&&_(),"humanVerification"===s.action)){var o=s.options;w({Payment:o.Payment,Amount:o.Amount,Currency:o.Currency})}});var x=function(e,a){return t.$applyAsync(function(){return t[e]=a})};b("signup",function(e,a){var n,s=a.type,o=a.data;if("chech.humanity"===s&&x("step",3),"creating"===s&&x("step",5),"signup.error"===s&&x("signupError",o.value),"goto.step"===s&&x("step",o.value),"userform.submit"===s&&function(){t.step=2;var e=g.generateNewKeys().then(function(){if(m.is("preInvited"))return _();if(p.length){if(f.optionsHumanCheck("payment"))return t.step=4;t.step=3;var e=c.getString("It currently isn't possible to subscribe to a Paid ProtonMail plan.",null);return u.info(e)}t.step=3});d.track(e)}(),"humanform.submit"===s&&_(),"apply.gift"===s&&(n=o,f.applyGiftCode(n).then(function(e){return u.success(h.success),e})),"payform.submit"===s){var r=o.payment;w({Payment:r.method,Amount:r.Amount,Currency:r.Currency,GiftCode:r.GiftCode,Credit:r.Credit})}}),t.$on("$destroy",function(){y()})}r.$inject=["$location","$scope","$state","$stateParams","authentication","dispatchers","domains","gettextCatalog","networkActivityTracker","notification","plans","AppModel","signupModel","signupUserProcess"],t.default=r},"./src/app/core/controllers/support.js":function(e,t,a){"use strict";function n(e,t,a,n,s,o,r,l,i,c,d,u,p,m,f){function g(){t.params.resetToken="",t.params.danger="",t.params.password="",t.params.passwordConfirm="",t.resetState=t.states.RECOVERY}function h(){return(n.debug("generateKeys"),t.resetState=t.states.GENERATE,p.generate(t.addresses,t.params.password)).then(v)}function v(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return n.debug("installKeys"),t.resetState=t.states.INSTALL,t.resetAccount=!0,p.reset(e,t.params.password,t.tokenParams)}function b(){return t.logUserIn=!0,s.loginWithCredentials({Username:t.params.username,Password:t.params.password}).then(function(t){var a=t.data;return e.isLoggedIn=!0,a})}function y(e){n.debug("finishRedirect"),t.finishInstall=!0;var s={username:t.params.username,password:t.params.password,authResponse:e};o.setItem("creds",s),a.go("login.unlock")}t.states={RECOVERY:1,CODE:2,CHECKING:3,DANGER:4,PASSWORD:5,GENERATE:6,INSTALL:7},t.tools=l,t.params={},t.params.recoveryEmail="",t.params.username="",t.passwordMode=0,g(),t.resetAccount=!1,t.logUserIn=!1,t.finishInstall=!1,t.confirmResetLostPassword=function(){var e=c.getString("Confirm Reset Password",null,"Title"),a=c.getString('Resetting your password means you will no longer be able to read your old emails. <a href="https://protonmail.com/support/knowledge-base/updating-your-login-password/" target="_blank">Click here to learn more</a>. If you have further questions, please email contact@protonmail.ch. Are you sure you want to reset your password?',null,"Title");d.activate({params:{title:e,message:a,confirm:function(){d.deactivate(),function(){t.params.username=t.params.username;var e=u.requestResetToken({Username:t.params.username,NotificationEmail:t.params.recoveryEmail}).then(function(){t.resetState=t.states.CODE});f.track(e)}()},cancel:function(){d.deactivate()}}})},t.validateToken=function(){t.resetState=t.states.CHECKING,t.tokenParams={Username:t.params.username,Token:t.params.resetToken},u.validateResetToken(t.tokenParams).then(function(e){var a=e.data,n=void 0===a?{}:a;t.passwordMode=n.PasswordMode,t.addresses=n.Addresses,t.resetState=t.states.DANGER}).catch(function(e){var t=e.data,a=void 0===t?{}:t;g(),i.error(a.Error||"Unable to verify reset token"),n.error(e)})},t.confirmReset=function(){t.resetState=t.states.PASSWORD},t.resetPassword=function(){f.track(h().then(b).then(y).catch(function(e){n.error(e),g(),i.error(e.message)}))},a.is("support.reset-password")&&a.params.username&&a.params.token&&(t.resetState=t.states.CHECKING,t.params.username=a.params.username,t.params.resetToken=a.params.token,t.validateToken())}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$rootScope","$scope","$state","$log","authentication","tempStorage","User","tools","notification","gettextCatalog","confirmModal","Reset","setupKeys","Key","networkActivityTracker"],t.default=n},"./src/app/core/directives/bugModalView.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/lodash/filter.js"),o=(n=s)&&n.__esModule?n:{default:n};function r(e,t){var n={noImageSelected:e.getString("No image selected",null,"Error notification in the bug report modal when the user upload file")};return{replace:!0,restrict:"E",scope:{model:"=",form:"="},templateUrl:a("./src/templates/directives/core/bugModalView.tpl.html"),link:function(e,a){var s=a.find(".bugModalView-input-file"),r=a.find(".bugModalView-clear-upload"),l=function(s){var r=s.target,l=(0,o.default)(r.files,function(e){var t=e.type;return/^image\//i.test(t)});l.length?(a[0].classList.add("bugModalView-files-uploaded"),e.$applyAsync(function(){e.model.fileList=l})):t.error(n.noImageSelected)},i=function(){s.val(""),s.wrap("<form>").closest("form").get(0).reset(),s.unwrap(),a[0].classList.remove("bugModalView-files-uploaded"),e.$applyAsync(function(){e.model.fileList=[]})};s.on("change",l),r.on("click",i),e.$on("$destroy",function(){s.off("change",l),r.off("click",i)})}}}r.$inject=["gettextCatalog","notification"],t.default=r},"./src/app/core/directives/hideUpgrade.js":function(e,t,a){"use strict";function n(e,t){var a="hideUpgrade";return{restrict:"A",link:function(n,s){var o=e(),r=o.on,l=o.unsubscribe;function i(e){return"visionary"===e.PlanName?s[0].classList.add(a):s[0].classList.remove(a)}r("organizationChange",function(e,t){return i(t.data)}),i(t.get()),n.$on("$destroy",l)}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["dispatchers","organizationModel"],t.default=n},"./src/app/core/directives/placeholderProgress.js":function(e,t,a){"use strict";function n(e,t){var n=t("humanSize"),s=t("percentage");return{templateUrl:a("./src/templates/directives/core/placeholderProgress.tpl.html"),replace:!0,link:function(t){t.storageStyle=function(){return{width:s(e.user.UsedSpace,e.user.MaxSpace)+"%"}},t.usedSpace=n(e.user.UsedSpace),t.maxSpace=n(e.user.MaxSpace)}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["authentication","$filter"],t.default=n},"./src/app/core/factories/alertModal.js":function(e,t,a){"use strict";function n(e){return e({controller:["params",function(e){this.title=e.title,this.message=e.message,this.alert=e.alert||"alert-info",this.ok=function(){e.ok()}}],controllerAs:"ctrl",templateUrl:a("./src/templates/modals/alert.tpl.html")})}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["pmModal"],t.default=n},"./src/app/core/factories/browserFingerprint.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/babel-runtime/core-js/promise.js"),o=(n=s)&&n.__esModule?n:{default:n};t.default=function(){return{get:function(){return new o.default(function(e,t){try{(new window.Fingerprint2).get(function(t,a){e({fingerprint:t,components:a})})}catch(e){t(e)}})}}}},"./src/app/core/factories/bugModal.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/babel-runtime/helpers/extends.js"),o=(n=s)&&n.__esModule?n:{default:n};function r(e){return e({controllerAs:"ctrl",templateUrl:a("./src/templates/modals/bug.tpl.html"),controller:["params",function(e){var t=this;this.form=(0,o.default)({},e.form,{Description:((e.form.Description||"")+"\n\n\n "+(e.content||"")).trim()}),this.submit=function(){return e.submit(t.form)},this.cancel=e.cancel}]})}r.$inject=["pmModal"],t.default=r},"./src/app/core/factories/confirmModal.js":function(e,t,a){"use strict";function n(e,t){var n={confirm:t.getString("Confirm",null,"Default text for the confirm button in the confirm modal"),cancel:t.getString("Cancel",null,"Default text for the cancel button in the confirm modal")};return e({controllerAs:"ctrl",templateUrl:a("./src/templates/modals/confirm.tpl.html"),controller:["params","hotkeys",function(e,t){t.unbind(["enter"]),this.title=e.title,this.message=e.message,this.confirmText=e.confirmText||n.confirm,this.classNameMessage=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.isDanger,a=void 0!==t&&t,n=e.isWarning;return["alert",a&&"alert-danger",void 0!==n&&n&&"alert-warning"].filter(Boolean).join(" ")}(e),this.cancelText=e.cancelText||n.cancel,this.confirm=function(){return t.bind(["enter"]),e.confirm()},this.cancel=function(){return t.bind(["enter"]),e.cancel()},setTimeout(function(){return angular.element("#confirmModalBtn").focus()},100)}]})}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["pmModal","gettextCatalog"],t.default=n},"./src/app/core/factories/csv.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(a("./node_modules/babel-runtime/core-js/promise.js")),s=r(a("./node_modules/lodash/each.js")),o=r(a("./node_modules/lodash/reduce.js"));function r(e){return e&&e.__esModule?e:{default:e}}function l(e){var t=e.getAllProperties(),a=function(a){return(0,o.default)(t,function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",o=e[n](a);return o.length&&(0,s.default)(o,function(e){var a=e.value,s=void 0===a?"":a,o=e.parameter,r=void 0===o?"":o,l={};r&&(l.type=r),t.add(n,s,l)}),t},new vCard)};return{csvToVCard:function(e){return new n.default(function(t,n){Papa.parse(e,{header:!0,dynamicTyping:!1,complete:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;return t((void 0===e?[]:e).map(a))},error:n,skipEmptyLines:!0})})}}}l.$inject=["csvFormat"],t.default=l},"./src/app/core/factories/csvFormat.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=i(a("./node_modules/babel-runtime/core-js/object/keys.js")),s=i(a("./node_modules/lodash/fp/head.js")),o=i(a("./node_modules/lodash/fp/filter.js")),r=i(a("./node_modules/lodash/fp/flow.js")),l=i(a("./node_modules/lodash/each.js"));function i(e){return e&&e.__esModule?e:{default:e}}t.default=function(){var e={adr:[],anniversary:["Anniversary"],bday:["Birthday"],email:["E-mail Address","E-mail 2 Address","E-mail 3 Address","Email","Alternate Email 1","Alternate Email 2","Primary Email","Secondary Email"],fn:[],gender:["Gender"],geo:["Geolocation","Location"],impp:["Impp"],lang:["Language"],logo:["Logo"],member:["Membmer","Group Membership"],nickname:["Nickname","Display Name","Screen Name"],note:["Notes","Note"],org:["Company","Organization","Department"],photo:["Photo","Avatar"],prodid:["Software"],rev:["Revision"],role:["Role"],sound:["Sound"],tel:["Primary Phone","Other Phone","Radio Phone","Other","Yahoo Phone"],title:["Title","Job Title","JobTitle"],tz:["Timezone","TimeZone"],uid:["UID"],url:["URL","Web Page","Personal Website","Business Website","Website","Web Page 1","Web Page 2","Personal Web Page"]},t={Home:["Home Phone","Home Phone 2"],Work:["Work Phone","Company Main Phone","Business Phone","Business Phone 2"],Mobile:["Mobile","Mobile Number","Mobile Phone"],Fax:["Fax","Fax Number","Home Fax","Business Fax","Other Fax","Telex"],Pager:["Pager","Pager Number"],Car:["Car Phone"]},a={Fax:["Fax"],Home:["Home"],Work:["Work","Business"],Mobile:["Mobile"],Personal:["Personal","Perso","Main","Primary"]},i=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.reduce(function(e,l){var i=t[l];if(i){var c={value:i.toString()},d=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return(0,r.default)((0,o.default)(function(t){return a[t].filter(function(t){return e.indexOf(t)>-1}).length>0}),s.default)((0,n.default)(a))}(l);d&&(c.parameter=d),e.push(c)}return e},[])};return{getAllProperties:function(){return(0,n.default)(e)},adr:function(e){var t=[];if((0,l.default)(["Home","Work","Business","Other"],function(a){var n=function(e,t){var a=e[t+" Address"]||e[t+" Street"]||"",n=["",e[t+" Address 2"]||e[t+" Street 2"]||"",a,e[t+" City"]||"",e[t+" State"]||"",e[t+" ZipCode"]||e[t+" Postal Code"]||e[t+" ZIP"]||"",e[t+" Country"]||e[t+" Country/Region"]||""];return n.join("").trim().length?n.join(";").trim():""}(e,a);n&&t.push({value:n,type:a})}),e["Address 1 - Formatted"]){var a={value:e["Address 1 - Formatted"]};e["Address 2 - Type"]&&(a.parameter=e["Address 1 - Type"]),t.push(a)}if(e["Address 2 - Formatted"]){var n={value:e["Address 2 - Formatted"]};e["Address 2 - Type"]&&(n.parameter=e["Address 2 - Type"]),t.push(n)}if(e["Address 3 - Formatted"]){var s={value:e["Address 3 - Formatted"]};e["Address 3 - Type"]&&(s.parameter=e["Address 3 - Type"]),t.push(s)}return t},anniversary:function(t){return i(e.anniversary,t)},bday:function(t){var a=i(e.bday,t),n=t["Birth Year"],s=t["Birth Month"],o=t["Birth Day"];return n&&s&&o&&a.push(n+"-"+s+"-"+o),a},email:function(t){var a=i(e.email,t);if(t["E-mail 1 - Value"]){var n={value:t["E-mail 1 - Value"]};t["E-mail 1 - Type"]&&(n.parameter=t["E-mail 1 - Type"]),a.push(n)}if(t["E-mail 2 - Value"]){var s={value:t["E-mail 2 - Value"]};t["E-mail 2 - Type"]&&(s.parameter=t["E-mail 2 - Type"]),a.push(s)}if(t["E-mail 3 - Value"]){var o={value:t["E-mail 3 - Value"]};t["E-mail 3 - Type"]&&(o.parameter=t["E-mail 3 - Type"]),a.push(o)}return a},fn:function(e){var t=[],a=[];return e.First&&a.push(e.First),e.Name&&a.push(e.Name),e.Middle&&a.push(e.Middle),e.Last&&a.push(e.Last),e["First Name"]&&a.push(e["First Name"]),e["Middle Name"]&&a.push(e["Middle Name"]),e["Last Name"]&&a.push(e["Last Name"]),a.length&&t.push({value:a.join(" ")}),t},gender:function(t){return i(e.gender,t)},geo:function(t){return i(e.geo,t)},impp:function(t){return i(e.impp,t)},lang:function(t){return i(e.lang,t)},logo:function(t){return i(e.logo,t)},member:function(t){return i(e.member,t)},nickname:function(t){return i(e.nickname,t)},note:function(t){return i(e.note,t)},org:function(t){return i(e.org,t)},photo:function(t){return i(e.photo,t)},prodid:function(t){return i(e.prodid,t)},rev:function(t){return i(e.csv,t)},role:function(t){return i(e.role,t)},sound:function(t){return i(e.sound,t)},tel:function(a){var s=i(e.tel,a);if((0,n.default)(t).forEach(function(e){t[e].forEach(function(t){var n=a[t];n&&s.push({value:n,parameter:e})})}),a["Phone 1 - Value"]){var o={value:a["Phone 1 - Value"]};a["Phone 1 - Type"]&&(o.parameter=a["Phone 1 - Type"]),s.push(o)}if(a["Phone 2 - Value"]){var r={value:a["Phone 2 - Value"]};a["Phone 2 - Type"]&&(r.parameter=a["Phone 2 - Type"]),s.push(r)}if(a["Phone 3 - Value"]){var l={value:a["Phone 3 - Value"]};a["Phone 3 - Type"]&&(l.parameter=a["Phone 3 - Type"]),s.push(l)}return s},title:function(t){return i(e.title,t)},tz:function(t){return i(e.tz,t)},uid:function(t){return i(e.uid,t)},url:function(t){return i(e.url,t)}}}},"./src/app/core/factories/downloadFile.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=a("./src/helpers/browser.js");function s(e,t){var a=e.getString("Download requires a newer browser.",null,"Error"),s=e.getString("Learn more.",null,"Info");return function(e,o){try{if(!(0,n.isFileSaverSupported)())throw new Error(a);window.saveAs(e,o)}catch(e){t.error(a+' <a href="https://protonmail.com/support/knowledge-base/problems-with-attachments/" target="_blank">'+s+"</a>"),console.error(e)}}}s.$inject=["gettextCatalog","notification"],t.default=s},"./src/app/core/factories/exceptionHandler.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/babel-runtime/core-js/promise.js"),o=(n=s)&&n.__esModule?n:{default:n};function r(e){var t=0,a={"loginPassword:cancel":!0};return function(n){if(t++,console.error(n),t<6){var s=function(e){if(e instanceof Error)return(e.message||"").startsWith("[ngRepeat:dupes]")?e.message.slice(0,2e3):{message:e.message,stack:e.stack};if(angular.isString(e))return e;try{var t=angular.toJson(e);return $.isEmptyObject(t)?e.toString():e}catch(e){return e.message}}(n);if(a[r=s]||a[(r||{}).message])return o.default.resolve();try{return e.get("bugReportApi").crash(s)}catch(e){console.error(e)}}var r;return o.default.resolve()}}r.$inject=["$injector"],t.default=r},"./src/app/core/factories/feedbackModal.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=a("./src/app/constants.js");function s(e,t,s,o,r){var l=n.CONSTANTS.CLIENT_TYPE;return e({controllerAs:"ctrl",templateUrl:a("./src/templates/modals/feedback.tpl.html"),controller:["params",function(e){var a=this;this.fdbckTxt="",this.submit=function(){var n=a.fdbckTxt,i={OS:"--",OSVersion:"--",Browser:"--",BrowserVersion:"--",BrowserExtensions:"--",Client:"--",ClientVersion:"--",ClientType:l,Title:"[FEEDBACK v3]",Username:"--",Email:"--",Description:n},c=t.bug(i);c.then(function(){s.success(r.getString("Thanks for your feedback!",null,"Success message when sending feedback")),e.close()}),o.track(c)},this.close=function(){e.close()}}]})}s.$inject=["pmModal","Report","notification","networkActivityTracker","gettextCatalog"],t.default=s},"./src/app/core/factories/hotkeyModal.js":function(e,t,a){"use strict";function n(e,t,n){return e({controllerAs:"ctrl",templateUrl:a("./src/templates/modals/hotkey.tpl.html"),controller:["params",function(e){var a=t.get().ViewLayout;this.isMac=-1!==navigator.userAgent.indexOf("Mac OS X"),a===n.ROW_MODE?this.mode="row":a===n.COLUMN_MODE&&(this.mode="column"),this.close=function(){e.close()}}]})}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["pmModal","mailSettingsModel","CONSTANTS"],t.default=n},"./src/app/core/factories/humanVerificationModal.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(a("./node_modules/babel-runtime/core-js/promise.js")),s=o(a("./node_modules/lodash/includes.js"));function o(e){return e&&e.__esModule?e:{default:e}}function r(e,t,o,r,l){function i(e){var t=e.data,a=void 0===t?{}:t;return n.default.resolve(a)}return o({controllerAs:"ctrl",templateUrl:a("./src/templates/modals/humanVerification.tpl.html"),controller:["params","$scope",function(e,a){var n=this,o=t(),c=o.on,d=o.unsubscribe;n.tokens={captcha:""};var u=r.human().then(i).then(function(e){var t=e.VerifyMethods,a=e.Token;n.token=a,n.methods=t,n.showCaptcha=(0,s.default)(t,"captcha"),n.verificator="captcha"});l.track(u),n.submit=function(){var t=r.check({Token:n.tokens[n.verificator],TokenType:n.verificator}).then(i).then(function(){e.close(!0)}).catch(function(){e.close(!0)});l.track(t)},n.cancel=function(){return e.close(!1)},c("captcha.token",function(e,t){a.$applyAsync(function(){n.tokens.captcha=t})}),n.$onDestroy=function(){d()}}]})}r.$inject=["$http","dispatchers","pmModal","User","networkActivityTracker"],t.default=r},"./src/app/core/factories/reactivateModal.js":function(e,t,a){"use strict";function n(e){return e({controllerAs:"ctrl",templateUrl:a("./src/templates/modals/reactivate.tpl.html"),controller:["params",function(e){this.loginPassword="",this.keyPassword="",this.submit=function(){e.submit&&e.submit(this.loginPassword,this.keyPassword)}.bind(this),this.cancel=function(){e.cancel&&e.cancel()}}]})}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["pmModal"],t.default=n},"./src/app/core/factories/recoveryCodeModal.js":function(e,t,a){"use strict";function n(e,t){return e({controllerAs:"ctrl",templateUrl:a("./src/templates/modals/twofactor/recoveryCode.tpl.html"),controller:["params",function(e){this.recoveryCodesFirstHalf=e.recoveryCodes.slice(0,8),this.recoveryCodesSecondHalf=e.recoveryCodes.slice(8,16),this.download=function(){var a=new Blob([e.recoveryCodes.join("\r\n")],{type:"text/plain;charset=utf-8;"});t(a,"protonmail_recovery_codes.txt")},this.done=function(){e.close()},this.cancel=function(){e.close()}}]})}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["pmModal","downloadFile"],t.default=n},"./src/app/core/factories/releaseNotesModal.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./src/app/config.js"),o=(n=s)&&n.__esModule?n:{default:n};function r(e){return e({controllerAs:"ctrl",templateUrl:a("./src/templates/modals/releaseNotes.tpl.html"),controller:["params",function(e){this.close=e.close,this.articleLink=o.default.articleLink,this.dateVersion=o.default.date_version,this.appVersion=o.default.app_version,this.changelogPath=o.default.changelogPath}]})}r.$inject=["pmModal"],t.default=r},"./src/app/core/factories/supportModal.js":function(e,t,a){"use strict";function n(e){return e({controllerAs:"ctrl",templateUrl:a("./src/templates/modals/support.tpl.html"),controller:["params",function(e){this.cancel=function(){e.cancel&&e.cancel()}}]})}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["pmModal"],t.default=n},"./src/app/core/factories/switchPasswordModeModal.js":function(e,t,a){"use strict";function n(e,t){return t({controllerAs:"ctrl",templateUrl:a("./src/templates/modals/switchPasswordMode.tpl.html"),controller:["params",function(t){this.currentPasswordMode=e.get("PasswordMode"),this.save=function(){},this.cancel=t.cancel}]})}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["userSettingsModel","pmModal"],t.default=n},"./src/app/core/factories/twoFAIntroModal.js":function(e,t,a){"use strict";function n(e){return e({controllerAs:"ctrl",templateUrl:a("./src/templates/modals/twofactor/twoFAIntroModal.tpl.html"),controller:["params",function(e){this.next=function(){return e.next()},this.cancel=function(){return e.cancel()}}]})}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["pmModal"],t.default=n},"./src/app/core/factories/vcard.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=d(a("./node_modules/babel-runtime/core-js/object/keys.js")),s=(d(a("./node_modules/lodash/find.js")),d(a("./node_modules/lodash/groupBy.js")),d(a("./node_modules/lodash/includes.js"))),o=d(a("./node_modules/lodash/each.js")),r=d(a("./node_modules/lodash/reduce.js")),l=d(a("./node_modules/lodash/uniqBy.js")),i=d(a("./src/helpers/vcardDateParser.js")),c=d(a("./src/helpers/vcardUniqueFields.js"));function d(e){return e&&e.__esModule?e:{default:e}}function u(e,t,a){var d=e.VCARD_VERSION,u=e.VCARD_TYPES;function p(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return!e.length||(0,s.default)(u,e.toLowerCase())}function m(){var e=g(arguments.length>0&&void 0!==arguments[0]?arguments[0]:new vCard);return(0,r.default)(e,function(e,t){var n=t.getType(),s=n&&(Array.isArray(n)?n.map(function(e){return f(e)}).filter(function(e){return e}):f(n)),o=t.getField(),r=t.valueOf(),l=t.getParams();return delete l.type,s&&s.length&&(l.type=s),e.add(o,a.input(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=e.match(/_\$!<(.*)>!\$_/);if(Array.isArray(n))return n[1];if("bday"===t&&"1604"===a.xAppleOmitYear){var s=(0,i.default)(e)||{},o=s.month,r=s.day;return o&&r?(delete a.xAppleOmitYear,"--"+o+"-"+r):e}if("org"===t)return e.split(";").map(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return e.trim()}).filter(Boolean).join(", ");return e}(r,o,l)),l),e},new vCard)}function f(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return"x-INTERNET"===e?"":p(e)?e:"fn"===e||"x-fn"===e?"":e.toLowerCase().startsWith("x")?e:"x-"+e}function g(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:new vCard;return(0,r.default)((0,n.default)(e.data),function(t,a){var n=e.get(a),s=Array.isArray(n)?n:[n];return t.concat(s)},[])}function h(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new vCard;return(0,o.default)(e,function(e){return t.addProperty(e)}),t}return{from:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";try{return vCard.parse(e).map(function(e){return m(e)})}catch(e){t.error(e)}},to:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return(0,r.default)(e,function(e,t){return e+m(t).toString(d)+"\r\n"},"")},extractProperties:g,merge:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];if(0!==e.length){if(1===e.length)return e[0];var t=new vCard,a=0,s=(0,r.default)(e,function(e){var t={},n=g(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{});return(0,o.default)(n,function(n){var s=n.getGroup();s&&(t[s]=t[s]||"item"+a++,n.group=t[s]);var o=n.getField();e[o]=e[o]||[],e[o].push(n)}),e},{});return(0,o.default)((0,n.default)(s),function(e){if((0,c.default)(e))return h([s[e][0]],t);h(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return(0,l.default)(e,function(e){return e.valueOf()})}(s[e]),t)}),t}},build:h,isValidType:p}}u.$inject=["CONSTANTS","notification","sanitize"],t.default=u},"./src/app/core/factories/verificationModal.js":function(e,t,a){"use strict";function n(e,t){return e({controllerAs:"ctrl",templateUrl:a("./src/templates/modals/domain/verification.tpl.html"),controller:["params",function(e){this.domain=e.domain,this.step=e.step,this.open=function(a){t.$broadcast(a,e.domain)},this.submit=function(){angular.isDefined(e.close)&&angular.isFunction(e.close)&&e.submit()},this.next=function(){angular.isDefined(e.close)&&angular.isFunction(e.close)&&(e.close(),e.next())},this.close=function(){angular.isDefined(e.close)&&angular.isFunction(e.close)&&e.close()}}]})}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["pmModal","$rootScope"],t.default=n},"./src/app/core/factories/welcomeModal.js":function(e,t,a){"use strict";function n(e,t,n){return e({controllerAs:"ctrl",templateUrl:a("./src/templates/modals/welcome.tpl.html"),controller:["params",function(e){var a=this,s=t.user.Name,o=void 0===s?"":s;this.displayName=o,this.cancel=e.cancel,this.next=function(){a.displayName.length&&n.save({DisplayName:a.displayName}),e.next()}}]})}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["pmModal","authentication","signatureModel"],t.default=n},"./src/app/core/factories/windowModel.js":function(e,t,a){"use strict";function n(e){var t={windows:[]},a=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"all";if("all"===e)return t.windows.forEach(function(e){var t=e.win,a=e.unsubscribe;return t.close(),a()}),void(t.windows.length=0);t.windows.forEach(function(t){var a=t.win,n=t.type,s=t.unsubscribe;return e===n&&(a.close(),s())}),t.windows=t.windows.filter(function(t){var a=t.type;return e!==a})};return(0,e().on)("subscription",function(e,t){var n=t.type;"update"===(void 0===n?"":n)&&a("paypal")}),{add:function(e){return t.windows.push(e)},reset:a}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["dispatchers"],t.default=n},"./src/app/core/index.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=O(a("./src/app/core/controllers/header.js")),s=O(a("./src/app/core/controllers/secured.js")),o=O(a("./src/app/core/controllers/setup.js")),r=O(a("./src/app/core/controllers/signup.js")),l=O(a("./src/app/core/controllers/support.js")),i=O(a("./src/app/core/directives/hideUpgrade.js")),c=O(a("./src/app/core/directives/placeholderProgress.js")),d=O(a("./src/app/core/directives/bugModalView.js")),u=O(a("./src/app/core/interceptors/formatResponseInterceptor.js")),p=O(a("./src/app/core/factories/alertModal.js")),m=O(a("./src/app/core/factories/browserFingerprint.js")),f=O(a("./src/app/core/factories/bugModal.js")),g=O(a("./src/app/core/factories/releaseNotesModal.js")),h=O(a("./src/app/core/factories/confirmModal.js")),v=O(a("./src/app/core/factories/csv.js")),b=O(a("./src/app/core/factories/csvFormat.js")),y=O(a("./src/app/core/factories/downloadFile.js")),_=O(a("./src/app/core/factories/exceptionHandler.js")),w=O(a("./src/app/core/factories/feedbackModal.js")),x=O(a("./src/app/core/factories/hotkeyModal.js")),j=O(a("./src/app/core/factories/humanVerificationModal.js")),k=O(a("./src/app/core/factories/reactivateModal.js")),A=O(a("./src/app/core/factories/recoveryCodeModal.js")),S=O(a("./src/app/core/factories/supportModal.js")),M=O(a("./src/app/core/factories/switchPasswordModeModal.js")),P=O(a("./src/app/core/factories/twoFAIntroModal.js")),E=O(a("./src/app/core/factories/vcard.js")),C=O(a("./src/app/core/factories/verificationModal.js")),T=O(a("./src/app/core/factories/welcomeModal.js")),I=O(a("./src/app/core/factories/windowModel.js")),D=O(a("./src/app/core/controllers/sidebar.js"));function O(e){return e&&e.__esModule?e:{default:e}}t.default=angular.module("proton.core",["proton.constants","proton.utils"]).run(["paginationModel","cachePages",function(e,t){e.init(),t.init()}]).controller("SidebarController",D.default).controller("HeaderController",n.default).controller("SecuredController",s.default).controller("SetupController",o.default).controller("SignupController",r.default).controller("SupportController",l.default).directive("hideUpgrade",i.default).directive("placeholderProgress",c.default).directive("bugModalView",d.default).factory("formatResponseInterceptor",u.default).factory("alertModal",p.default).factory("browserFingerprint",m.default).factory("bugModal",f.default).factory("confirmModal",h.default).factory("releaseNotesModal",g.default).factory("csv",v.default).factory("csvFormat",b.default).factory("downloadFile",y.default).factory("$exceptionHandler",_.default).factory("feedbackModal",w.default).factory("hotkeyModal",x.default).factory("humanVerificationModal",j.default).factory("reactivateModal",k.default).factory("recoveryCodeModal",A.default).factory("supportModal",S.default).factory("switchPasswordModeModal",M.default).factory("twoFAIntroModal",P.default).factory("vcard",E.default).factory("verificationModal",C.default).factory("welcomeModal",T.default).factory("windowModel",I.default).name},"./src/app/core/interceptors/formatResponseInterceptor.js":function(e,t,a){"use strict";function n(e){return{responseError:function(t){return t.data=t.data||{},e.reject(t)}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$q"],t.default=n},"./src/app/domains/directives/domainsMenuStep.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default=function(){return{replace:!0,templateUrl:a("./src/templates/domains/domainsMenuStep.tpl.html")}}},"./src/app/domains/factories/domainApi.js":function(e,t,a){"use strict";function n(e,t){var a=t.build("domains");return{delete:function(t){return e.delete(a(t))},create:function(t){return e.post(a(),t)},query:function(){return e.get(a())},available:function(){return e.get(a("available"))},premium:function(){return e.get(a("premium"))},get:function(t){return e.get(a(t))},catchall:function(t,n){return e.put(a(t,"catchall"),n)}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$http","url"],t.default=n},"./src/app/domains/factories/domainModel.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(a("./node_modules/lodash/extend.js")),s=r(a("./node_modules/lodash/findIndex.js")),o=r(a("./node_modules/lodash/find.js"));function r(e){return e&&e.__esModule?e:{default:e}}function l(e,t,a){var r=[],l=e(["domainsChange"]),i=l.dispatcher,c=l.on,d=a.getString("Domain request failed",null,"Error"),u=function(){return angular.copy(r)};function p(){r.length=0}return c("deleteDomain",function(e,t){var a=(0,s.default)(r,{ID:t});a>-1&&(r.splice(a,1),i.domainsChange("",r))}),c("createDomain",function(e,t,a){var o=(0,s.default)(r,{ID:t});-1===o?r.push(a):(0,n.default)(r[o],a),i.domainsChange("",r)}),c("updateDomain",function(e,t,a){var o=(0,s.default)(r,{ID:t});-1===o?r.push(a):(0,n.default)(r[o],a),i.domainsChange("",r)}),c("logout",function(){p()}),{query:u,get:function(e){return(0,o.default)(u(),{ID:e})},set:function(e){r=e},fetch:function(){return t.query().then(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data,t=void 0===e?{}:e;return r=t.Domains,t.Domains}).catch(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;throw new Error((void 0===e?{}:e).Error||d)})},clear:p,catchall:function(e,a){return t.catchall(e,{AddressID:a}).then(function(){var t=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data,n=void 0===t?{}:t;return(0,o.default)(r,{ID:e}).CatchAll=a,n}).catch(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;throw new Error((void 0===e?{}:e).Error||d)})}}}l.$inject=["dispatchers","domainApi","gettextCatalog"],t.default=l},"./src/app/domains/factories/pmDomainModel.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(a("./node_modules/babel-runtime/core-js/promise.js")),s=o(a("./node_modules/babel-runtime/helpers/toConsumableArray.js"));function o(e){return e&&e.__esModule?e:{default:e}}function r(e,t,a){var o=[];function r(){o.length=0}return(0,t().on)("logout",function(){r()}),{get:function(){return o.slice()},fetch:function(){var t=[a.available()];return e.isSecured()&&e.hasPaidMail()&&t.push(a.premium()),n.default.all(t).then(function(e){var t=e.reduce(function(e){var t=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).data,a=void 0===t?{}:t;return e.push.apply(e,(0,s.default)(a.Domains)),e},[]);return function(e){r(),o.push.apply(o,(0,s.default)(e))}(t),t})},clear:r}}r.$inject=["authentication","dispatchers","domainApi"],t.default=r},"./src/app/domains/index.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=p(a("./src/app/domains/directives/domainsMenuStep.js")),s=p(a("./src/app/domains/factories/domainApi.js")),o=p(a("./src/app/domains/factories/domainModel.js")),r=p(a("./src/app/domains/factories/pmDomainModel.js")),l=p(a("./src/app/domains/modals/dkimModal.js")),i=p(a("./src/app/domains/modals/dmarcModal.js")),c=p(a("./src/app/domains/modals/domainModal.js")),d=p(a("./src/app/domains/modals/mxModal.js")),u=p(a("./src/app/domains/modals/spfModal.js"));function p(e){return e&&e.__esModule?e:{default:e}}t.default=angular.module("proton.domains",[]).directive("domainsMenuStep",n.default).factory("domainApi",s.default).factory("domainModel",o.default).factory("dkimModal",l.default).factory("dmarcModal",i.default).factory("domainModal",c.default).factory("mxModal",d.default).factory("spfModal",u.default).factory("pmDomainModel",r.default).name},"./src/app/domains/modals/dkimModal.js":function(e,t,a){"use strict";function n(e,t){return e({controllerAs:"ctrl",templateUrl:a("./src/templates/modals/domain/dkim.tpl.html"),controller:["params",function(e){this.domain=e.domain,this.step=e.step,this.open=function(a){t.$broadcast(a,e.domain)},this.next=function(){e.next()},this.close=function(){e.close()}}]})}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["pmModal","$rootScope"],t.default=n},"./src/app/domains/modals/dmarcModal.js":function(e,t,a){"use strict";function n(e,t){return e({controllerAs:"ctrl",templateUrl:a("./src/templates/modals/domain/dmarc.tpl.html"),controller:["params",function(e){this.domain=e.domain,this.step=e.step,this.open=function(a){t.$broadcast(a,e.domain)},this.verify=function(){e.verify()},this.close=function(){e.close()}}]})}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["pmModal","$rootScope"],t.default=n},"./src/app/domains/modals/domainModal.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/lodash/noop.js"),o=(n=s)&&n.__esModule?n:{default:n};function r(e,t){return e({controllerAs:"ctrl",templateUrl:a("./src/templates/modals/domain/domain.tpl.html"),controller:["params",function(e){var a=this;this.step=e.step,this.next=e.next,this.cancel=e.cancel,this.domain=e.domain,this.name="",this.open=function(a){t.$broadcast(a,e.domain)},this.submit=function(){return(e.submit||o.default)(a.name)},this.beginsWith=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=a.name;return(void 0===t?"":t).substring(0,e.length)===e}}]})}r.$inject=["pmModal","$rootScope"],t.default=r},"./src/app/domains/modals/mxModal.js":function(e,t,a){"use strict";function n(e,t){return e({controllerAs:"ctrl",templateUrl:a("./src/templates/modals/domain/mx.tpl.html"),controller:["params",function(e){this.domain=e.domain,this.step=e.step,this.open=function(a){t.$broadcast(a,e.domain)},this.next=function(){e.next()},this.close=function(){e.close()}}]})}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["pmModal","$rootScope"],t.default=n},"./src/app/domains/modals/spfModal.js":function(e,t,a){"use strict";function n(e,t){return e({controllerAs:"ctrl",templateUrl:a("./src/templates/modals/domain/spf.tpl.html"),controller:["params",function(e){this.domain=e.domain,this.step=e.step,this.open=function(a){t.$broadcast(a,e.domain)},this.next=function(){e.next()},this.close=function(){e.close()}}]})}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["pmModal","$rootScope"],t.default=n},"./src/app/formUtils/directives/captcha.js":function(e,t,a){"use strict";function n(e,t,n,s){var o=t.IFRAME_SECURE_ORIGIN,r=n.host(),l={type:"pm_captcha",language:"en",key:"6LcWsBUTAAAAAOkRfBk-EXkGzOfcSz3CzvYbxfTn"};return{replace:!0,templateUrl:a("./src/templates/formUtils/captcha.tpl.html"),link:function(t,a,n){var i,c=n.token,d=void 0===c?"signup":c,u=a.find("iframe"),p=(i=u,function(t){if((void 0!==t.origin||void 0!==t.originalEvent.origin)&&(t.origin||t.originalEvent.origin)===o){var a=t.data;"pm_captcha"===a.type&&e.$emit("humanVerification",{type:"captcha",data:a}),"pm_height"===a.type&&i.height(t.data.height+40)}}),m=s({token:d,client:"web",host:r});window.captchaSendMessage=function(){u[0].contentWindow.postMessage(l,o)},u[0].onload=window.captchaSendMessage,u[0].src="https://secure.protonmail.com/captcha/captcha.html?"+m,window.addEventListener("message",p,!1),t.$on("$destroy",function(){window.removeEventListener("message",p,!1)})}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$rootScope","CONSTANTS","url","$httpParamSerializer"],t.default=n},"./src/app/formUtils/directives/captchaView.js":function(e,t,a){"use strict";function n(e,t,n){return{restrict:"E",templateUrl:a("./src/templates/formUtils/captchaView.tpl.html"),link:function(a,s,o){var r=o.token,l=s[0].querySelector("iframe"),i=n.host(),c=e({token:r,client:"web",host:i});function d(e){var a=e.origin,n=e.originalEvent,s=e.data;if((void 0!==a||void 0!==n.origin)&&("https://secure.protonmail.com"===(a||n.origin)&&("pm_captcha"===s.type&&t.$emit("captcha.token",s.token),"pm_height"===s.type))){var o=e.data.height+40;l.style.height=o+"px"}}window.addEventListener("message",d,!1),l.src="https://secure.protonmail.com/captcha/captcha.html?"+c,a.$on("$destroy",function(){window.removeEventListener("message",d,!1)})}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$httpParamSerializer","$rootScope","url"],t.default=n},"./src/app/formUtils/directives/cardCvc.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){return{require:"ngModel",link:function(e,t,a,n){n.$validators.cardCvc=function(e){return $.payment.validateCardCVC(e)}}}}},"./src/app/formUtils/directives/cardNumber.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){return{require:"ngModel",link:function(e,t,a,n){n.$validators.cardNumber=function(e){return $.payment.validateCardNumber(e)}}}}},"./src/app/formUtils/directives/cardView.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(a("./node_modules/lodash/find.js")),s=o(a("./node_modules/lodash/range.js"));function o(e){return e&&e.__esModule?e:{default:e}}function r(e){var t=e(),o=(new Date).getFullYear(),r=(0,s.default)(1,13).map(function(e){return("0"+e).slice(-2)}),l=(0,s.default)(o,o+12);return{replace:!0,templateUrl:a("./src/templates/formUtils/cardView.tpl.html"),scope:{card:"=",form:"="},link:function(e){var a=e.card.country?(0,n.default)(t,{value:e.card.country.value}):t[0];e.months=r,e.years=l,e.countries=t,e.card.country=a,e.card.month=e.months[0],e.card.year=e.years[0]}}}r.$inject=["countriesListModel"],t.default=r},"./src/app/formUtils/directives/compareTo.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){return{require:"ngModel",scope:{otherModelValue:"=compareTo"},link:function(e,t,a,n){n.$validators.compareTo=function(t){return!e.otherModelValue||t===e.otherModelValue},e.$watch("otherModelValue",function(){n.$validate()})}}}},"./src/app/formUtils/directives/cvcTooltip.js":function(e,t,a){"use strict";function n(e){var t=e.getString("For Visa, MasterCard and Discover, the 3 digits on the back of your card.",null,"Info"),a=e.getString("For American Express, the 4 digits on the front of your card.",null,"Info"),n=e.getString("Security Code",null,"Credit card CVC");return{restrict:"A",link:function(e,s){s[0].setAttribute("tabindex",0),s[0].setAttribute("role","button");var o={placement:"top",container:"body",html:!0,title:n,trigger:"focus",content:"\n <p>"+t+"</p>\n <p>"+a+"</p>\n ",template:'\n <div class="popover" role="tooltip">\n <div class="arrow"></div>\n <div class="popover-title bold"></div>\n <div class="popover-content"></div>\n </div>\n '};s.popover(o),e.$on("$destroy",function(){s.popover("destroy")})}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["gettextCatalog"],t.default=n},"./src/app/formUtils/directives/danger.js":function(e,t,a){"use strict";function n(e){var t=e.getString("DANGER"),a=e.getString("Enter the word 'DANGER' here.");function n(e){return e===t}return{require:"ngModel",restrict:"A",scope:{dangerWord:"="},link:function(e,s,o,r){e.dangerWord=t,s.attr("placeholder",a),r.$validators.danger=n}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["gettextCatalog"],t.default=n},"./src/app/formUtils/directives/formIsInvalid.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){var e=function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"")+"-is-invalid"};return{link:function(t,a,n){var s=n.name;if(!s)throw new Error("A form must contains a name attribute");var o=function(){if(t[s].$invalid)return a[0].classList.add(e(s));a[0].classList.remove(e(s))};a.on("submit",o),t.$on("$destroy",function(){a.off("submit",o)})}}}},"./src/app/formUtils/directives/isValidInvoiceText.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=/\r\n|\n|\r/;t.default=function(){return{require:"ngModel",restrict:"A",link:function(e,t,a,s){s.$validators.isValidInvoiceText=function(){var e=((arguments.length>0&&void 0!==arguments[0]?arguments[0]:"")||"").trim().split(n);return e.length<=8&&(s.$setValidity("isValidInvoiceTextLine",e.every(function(e){return e.length<=40})),!0)}}}}},"./src/app/formUtils/directives/password.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){return{restrict:"E",replace:!0,templateUrl:a("./src/templates/formUtils/password.tpl.html"),scope:{value:"=",form:"=",compare:"="},compile:function(e,t){var a=t.autofocus,n=t.compare,s=t.id,o=void 0===s?"pw"+Math.random().toString(32).slice(2,12)+"-"+Date.now():s,r=t.name,l=void 0===r?"":r,i=t.placeholder,c=void 0===i?"":i,d=t.tabindex,u=void 0===d?0:d,p=e[0].querySelector("input");return p.setAttribute("id",o),p.setAttribute("name",l),p.setAttribute("placeholder",c),p.setAttribute("tabindex",u),n&&p.setAttribute("data-compare-to","compare"),a&&p.setAttribute("autofocus",!0),function(e,t,a){var n=a.autofocus,s=t[0].querySelector(".password-input");e.message=e.form[l].$error,n&&document.activeElement!==s&&_rAF(function(){return s.focus()})}}}}},"./src/app/formUtils/directives/togglePassword.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=(0,o(a("./node_modules/babel-runtime/helpers/taggedTemplateLiteral.js")).default)(['<button type="button" class="togglePassword-btn-toggle">\n <i class="togglePassword-icon-toText fa fa-eye" pt-tooltip="','"></i>\n <i class="togglePassword-icon-toPassword fa fa-eye-slash" pt-tooltip="','"></i>\n </button>'],['<button type="button" class="togglePassword-btn-toggle">\n <i class="togglePassword-icon-toText fa fa-eye" pt-tooltip="','"></i>\n <i class="togglePassword-icon-toPassword fa fa-eye-slash" pt-tooltip="','"></i>\n </button>']),s=o(a("./src/helpers/dedent.js"));function o(e){return e&&e.__esModule?e:{default:e}}function r(e){var t="IE"===$.ua.browser.name||"Edge"===$.ua.browser.name,a={SHOW:e.getString("Show password",null,"toggle password"),HIDE:e.getString("Hide password",null,"toggle password")},o=(0,s.default)(n,a.SHOW,a.HIDE);return{restrict:"A",compile:function(e){if(!t){var a=e[0].parentElement;return a.insertAdjacentHTML("beforeEnd",o),a.classList.add("customPasswordToggler"),function(e,t){var a=t[0].parentElement.querySelector(".togglePassword-btn-toggle"),n=function(){var e="text"===t[0].type?"password":"text";t[0].setAttribute("type",e),a.classList.toggle("togglePassword-btn-display")};a.addEventListener("click",n),e.$on("$destroy",function(){a.removeEventListener("click",n)})}}}}}r.$inject=["gettextCatalog"],t.default=r},"./src/app/formUtils/directives/uniqueUsername.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/babel-runtime/core-js/promise.js"),o=(n=s)&&n.__esModule?n:{default:n};function r(e,t,a){return{require:"ngModel",restrict:"A",link:function(t,n,s,r){r.$asyncValidators.unique=function(t){return function(n){var s=function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toLowerCase().replace(/\.|-|_/,"")}(n);return delete t.$error.alreadyTaken,delete t.$error.tooMuch,delete t.$error.uniqueError,s===e.inviteSelector?o.default.resolve():a.available(n).then(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;return(void 0===e?{}:e).Available?o.default.resolve():(t.$error.alreadyTaken=!0,o.default.reject(!1))}).catch(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;return 429===(void 0===e?{}:e).Error&&(t.$error.tooMuch=!0),t.$error.uniqueError=!0,o.default.reject(!1)})}}(r)}}}r.$inject=["$stateParams","gettextCatalog","User"],t.default=r},"./src/app/formUtils/directives/validEmail.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=a("./src/app/constants.js");t.default=function(){return{require:"ngModel",restrict:"A",link:function(e,t,a,s){"email"===a.type&&(s.$validators.email=function(e){return function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return e.$isEmpty(t)||n.REGEX_EMAIL.test(t)}}(s))}}}},"./src/app/formUtils/directives/validRecovery.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){return{require:"ngModel",restrict:"A",scope:{domain:"=validRecoveryDomain",username:"=validRecoveryUsername"},link:function(e,t,a,n){n.$validators.validUsername=function(e){return function(t){var a=e.username,n=void 0===a?"":a,s=e.domain;return t!==n+"@"+(void 0===s?"":s)}}(e)}}}},"./src/app/formUtils/directives/validUsername.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){var e=new RegExp(/^[A-Za-z0-9]+(?:[_.-][A-Za-z0-9]+)*$/);return{require:"ngModel",restrict:"A",link:function(t,a,n,s){s.$validators.valid=function(t){return e.test(t)}}}}},"./src/app/formUtils/directives/validatorTypoEmail.js":function(e,t,a){"use strict";function n(e){return{link:function(t,a){var n=a[0].nextElementSibling.querySelector('[ng-message-warning="typo-email"]'),s=function(t){var s,o,r=t.target;s=e(r.value),o=s?"add":"remove",a[0].classList[o]("ng-warning-typo-email"),n.style.display=s?"initial":"none"};a[0].addEventListener("blur",s),t.$on("$destroy",function(){a[0].removeEventListener("blur",s)})}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["checkTypoEmails"],t.default=n},"./src/app/formUtils/factories/cardModel.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){var e=function(e){return String(e).replace(/\s+/g,"")};return function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},a=angular.copy(t),n=function(){return e(a.number)},s=function(){return a.month},o=function(){return function(e){return(2===String(e).length?"20":"")+e}(a.year)},r=function(){return e(a.cvc)},l=function(){return a.fullname},i=function(){return a.zip},c=function(){return a.country.value};return{number:n,month:s,year:o,cvc:r,fullname:l,zip:i,country:c,details:function(){return{Number:n(),ExpMonth:s(),ExpYear:o(),CVC:r(),Name:l(),Country:c(),ZIP:i()}}}}}},"./src/app/formUtils/factories/countriesListModel.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){var e={label:"------------------",value:"",disabled:!0},t=[{value:"AF",label:"Afghanistan"},{value:"AL",label:"Albania"},{value:"DZ",label:"Algeria"},{value:"AD",label:"Andorra"},{value:"AO",label:"Angola"},{value:"AI",label:"Anguilla"},{value:"AG",label:"Antigua and Barbuda"},{value:"AR",label:"Argentina"},{value:"AM",label:"Armenia"},{value:"AW",label:"Aruba"},{value:"AU",label:"Australia"},{value:"AT",label:"Austria"},{value:"AZ",label:"Azerbaijan"},{value:"BS",label:"Bahamas"},{value:"BH",label:"Bahrain"},{value:"BD",label:"Bangladesh"},{value:"BB",label:"Barbados"},{value:"BY",label:"Belarus"},{value:"BE",label:"Belgium"},{value:"BZ",label:"Belize"},{value:"BJ",label:"Benin"},{value:"BM",label:"Bermuda"},{value:"BT",label:"Bhutan"},{value:"BO",label:"Bolivia"},{value:"BA",label:"Bosnia Herzegovina"},{value:"BW",label:"Botswana"},{value:"BV",label:"Bouvet Island"},{value:"BR",label:"Brazil"},{value:"IO",label:"British Indian Ocean Territory"},{value:"VG",label:"British Virgin Islands"},{value:"BN",label:"Brunei Darussalam"},{value:"BG",label:"Bulgaria"},{value:"BF",label:"Burkina Faso"},{value:"BI",label:"Burundi"},{value:"KH",label:"Cambodia"},{value:"CM",label:"Cameroon"},{value:"CA",label:"Canada"},{value:"CV",label:"Cape Verde"},{value:"KY",label:"Cayman Islands"},{value:"CF",label:"Central African Republic"},{value:"TD",label:"Chad"},{value:"CL",label:"Chile"},{value:"CN",label:"China"},{value:"CX",label:"Christmas Island"},{value:"CC",label:"Cocos (Keeling) Islands"},{value:"CO",label:"Colombia"},{value:"KM",label:"Comoros"},{value:"CG",label:"Congo"},{value:"CD",label:"Congo (The Democratic Republic of the)"},{value:"CK",label:"Cook Islands"},{value:"CR",label:"Costa Rica"},{value:"CI",label:"Cote d Ivoire (Ivory Coast)"},{value:"HR",label:"Croatia"},{value:"CU",label:"Cuba"},{value:"CY",label:"Cyprus"},{value:"CZ",label:"Czech Republic"},{value:"DK",label:"Denmark"},{value:"DJ",label:"Djibouti"},{value:"DM",label:"Dominica"},{value:"DO",label:"Dominican Republic"},{value:"TL",label:"East Timor"},{value:"EC",label:"Ecuador"},{value:"EG",label:"Egypt"},{value:"SV",label:"El Salvador"},{value:"GQ",label:"Equatorial Guinea"},{value:"ER",label:"Eritrea"},{value:"EE",label:"Estonia"},{value:"ET",label:"Ethiopia"},{value:"FK",label:"Falkland Islands (Malvinas)"},{value:"FO",label:"Faroe Islands"},{value:"FJ",label:"Fiji"},{value:"FI",label:"Finland"},{value:"FR",label:"France"},{value:"GF",label:"French Guiana"},{value:"PF",label:"French Polynesia"},{value:"TF",label:"French Southern Territories"},{value:"GA",label:"Gabon"},{value:"GM",label:"Gambia"},{value:"GE",label:"Georgia"},{value:"DE",label:"Germany"},{value:"GH",label:"Ghana"},{value:"GI",label:"Gibraltar"},{value:"GR",label:"Greece"},{value:"GL",label:"Greenland"},{value:"GD",label:"Grenada"},{value:"GP",label:"Guadeloupe"},{value:"GT",label:"Guatemala"},{value:"GN",label:"Guinea"},{value:"GW",label:"Guinea-Bissau"},{value:"GY",label:"Guyana"},{value:"HT",label:"Haiti"},{value:"HM",label:"Heard Island and McDonald Islands"},{value:"VA",label:"Holy See (Vatican City State)"},{value:"HN",label:"Honduras"},{value:"HK",label:"Hong Kong"},{value:"HU",label:"Hungary"},{value:"IS",label:"Iceland"},{value:"IN",label:"India"},{value:"ID",label:"Indonesia"},{value:"IQ",label:"Iraq"},{value:"IE",label:"Ireland"},{value:"IR",label:"Islamic Republic of Iran"},{value:"IL",label:"Israel"},{value:"IT",label:"Italy"},{value:"JM",label:"Jamaica"},{value:"JP",label:"Japan"},{value:"JO",label:"Jordan"},{value:"KZ",label:"Kazakhstan"},{value:"KE",label:"Kenya"},{value:"KI",label:"Kiribati"},{value:"KP",label:"Korea (Democratic People s Republic of)"},{value:"KR",label:"Korea (Republic of)"},{value:"KW",label:"Kuwait"},{value:"KG",label:"Kyrgzstan"},{value:"LA",label:"Lao People s Democratic Republic"},{value:"LV",label:"Latvia"},{value:"LB",label:"Lebanon"},{value:"LS",label:"Lesotho"},{value:"LR",label:"Liberia"},{value:"LY",label:"Libyan Arab Jamahiriya"},{value:"LI",label:"Liechtenstein"},{value:"LT",label:"Lithuania"},{value:"LU",label:"Luxembourg"},{value:"MO",label:"Macao"},{value:"MK",label:"Macedonia"},{value:"MG",label:"Madagascar"},{value:"MW",label:"Malawi"},{value:"MY",label:"Malaysia"},{value:"MV",label:"Maldives"},{value:"ML",label:"Mali"},{value:"MT",label:"Malta"},{value:"MH",label:"Marshall Islands"},{value:"MQ",label:"Martinique"},{value:"MR",label:"Mauritania"},{value:"MU",label:"Mauritius"},{value:"YT",label:"Mayotte"},{value:"MX",label:"Mexico"},{value:"MD",label:"Moldova"},{value:"MC",label:"Monaco"},{value:"MN",label:"Mongolia"},{value:"ME",label:"Montenegro"},{value:"MS",label:"Montserrat"},{value:"MA",label:"Morocco"},{value:"MZ",label:"Mozambique"},{value:"MM",label:"Myanmar"},{value:"NA",label:"Namibia"},{value:"NR",label:"Nauru"},{value:"NP",label:"Nepal"},{value:"NL",label:"Netherlands"},{value:"AN",label:"Netherlands Antilles"},{value:"NC",label:"New Caledonia"},{value:"NZ",label:"New Zealand"},{value:"NI",label:"Nicaragua"},{value:"NE",label:"Niger"},{value:"NG",label:"Nigeria"},{value:"NU",label:"Niue"},{value:"NF",label:"Norfolk Island"},{value:"NO",label:"Norway"},{value:"OM",label:"Oman"},{value:"PK",label:"Pakistan"},{value:"PW",label:"Palau"},{value:"PA",label:"Panama"},{value:"PG",label:"Papua New Guinea"},{value:"PY",label:"Paraguay"},{value:"PE",label:"Peru"},{value:"PH",label:"Philippines"},{value:"PN",label:"Pitcairn"},{value:"PL",label:"Poland"},{value:"PT",label:"Portugal"},{value:"QA",label:"Qatar"},{value:"RE",label:"Reunion"},{value:"RO",label:"Romania"},{value:"RU",label:"Russian Federation"},{value:"RW",label:"Rwanda"},{value:"SH",label:"Saint Helena"},{value:"KN",label:"Saint Kitts and Nevis"},{value:"LC",label:"Saint Lucia"},{value:"PM",label:"Saint Pierre and Miquelon"},{value:"VC",label:"Saint Vincent and the Grenadines"},{value:"WS",label:"Samoa"},{value:"SM",label:"San Marino"},{value:"ST",label:"Sao Tome and Principe"},{value:"SA",label:"Saudi Arabia"},{value:"SN",label:"Senegal"},{value:"RS",label:"Serbia"},{value:"SC",label:"Seychelles"},{value:"SL",label:"Sierra Leone"},{value:"SG",label:"Singapore"},{value:"SK",label:"Slovakia"},{value:"SI",label:"Slovenia"},{value:"SB",label:"Solomon Islands"},{value:"SO",label:"Somalia"},{value:"ZA",label:"South Africa"},{value:"GS",label:"South Georgia and the South Sandwich Islands"},{value:"ES",label:"Spain"},{value:"LK",label:"Sri Lanka"},{value:"SD",label:"Sudan"},{value:"SR",label:"Suriname"},{value:"SJ",label:"Svalbard and Jan Mayen"},{value:"SZ",label:"Swaziland"},{value:"SE",label:"Sweden"},{value:"CH",label:"Switzerland"},{value:"SY",label:"Syrian Arab Republic"},{value:"TW",label:"Taiwan"},{value:"TJ",label:"Tajikstan"},{value:"TZ",label:"Tanzania United Republic"},{value:"TH",label:"Thailand"},{value:"TG",label:"Togo"},{value:"TK",label:"Tokelau"},{value:"TO",label:"Tonga"},{value:"TT",label:"Trinidad and Tobago"},{value:"TN",label:"Tunisia"},{value:"TR",label:"Turkey"},{value:"TM",label:"Turkmenistan"},{value:"TC",label:"Turks and Caicos Islands"},{value:"TV",label:"Tuvalu"},{value:"UG",label:"Uganda"},{value:"UA",label:"Ukraine"},{value:"AE",label:"United Arab Emirates"},{value:"GB",label:"United Kingdom"},{value:"US",label:"United States"},{value:"UY",label:"Uruguay"},{value:"UZ",label:"Uzbekistan"},{value:"VU",label:"Vanuatu"},{value:"VE",label:"Venezuela"},{value:"VN",label:"Vietnam"},{value:"WF",label:"Wallis and Futuna"},{value:"EH",label:"Western Sahara"},{value:"YE",label:"Yemen"},{value:"ZM",label:"Zambia"},{value:"ZW",label:"Zimbabwe"}],a=[{label:"United States",value:"US"},{label:"United Kingdom",value:"GB"},{label:"Switzerland",value:"CH"},{label:"France",value:"FR"},{label:"Germany",value:"DE"},{label:"Canada",value:"CA"}];return function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:e;return a.concat([n],t)}}},"./src/app/formUtils/index.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=j(a("./src/app/formUtils/directives/captcha.js")),s=j(a("./src/app/formUtils/directives/captchaView.js")),o=j(a("./src/app/formUtils/directives/cardCvc.js")),r=j(a("./src/app/formUtils/directives/cardNumber.js")),l=j(a("./src/app/formUtils/directives/cardView.js")),i=j(a("./src/app/formUtils/services/checkTypoEmails.js")),c=j(a("./src/app/formUtils/directives/compareTo.js")),d=j(a("./src/app/formUtils/directives/cvcTooltip.js")),u=j(a("./src/app/formUtils/directives/danger.js")),p=j(a("./src/app/formUtils/directives/formIsInvalid.js")),m=j(a("./src/app/formUtils/directives/password.js")),f=j(a("./src/app/formUtils/directives/togglePassword.js")),g=j(a("./src/app/formUtils/directives/uniqueUsername.js")),h=j(a("./src/app/formUtils/directives/validRecovery.js")),v=j(a("./src/app/formUtils/directives/validUsername.js")),b=j(a("./src/app/formUtils/directives/validatorTypoEmail.js")),y=j(a("./src/app/formUtils/factories/cardModel.js")),_=j(a("./src/app/formUtils/factories/countriesListModel.js")),w=j(a("./src/app/formUtils/directives/validEmail.js")),x=j(a("./src/app/formUtils/directives/isValidInvoiceText.js"));function j(e){return e&&e.__esModule?e:{default:e}}t.default=angular.module("proton.formUtils",["ngIntlTelInput"]).directive("isValidInvoiceText",x.default).directive("validEmail",w.default).directive("captcha",n.default).directive("captchaView",s.default).directive("cardCvc",o.default).directive("cardNumber",r.default).directive("cardView",l.default).directive("compareTo",c.default).directive("cvcTooltip",d.default).directive("danger",u.default).directive("formIsInvalid",p.default).directive("password",m.default).directive("togglePassword",f.default).directive("uniqueUsername",g.default).directive("validRecovery",h.default).directive("validUsername",v.default).directive("validatorTypoEmail",b.default).factory("cardModel",y.default).factory("checkTypoEmails",i.default).factory("countriesListModel",_.default).name},"./src/app/formUtils/services/checkTypoEmails.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){var e=["prontonmail.","prtonmail.","protomail.","protonmai.","protonmsil.","ptotonmail."].reduce(function(e,t){return e.concat([t+"ch",t+"com"])},[]).concat(["gmail.co","yahoo.co"]);return function(){var t=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").split("@");if(t.length){var a=t[1];return e.indexOf(a)>-1}return!1}}},"./src/app/keys/directives/keysView.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=a("./src/app/address/helpers/addressKeysView.js");function s(e,t,s){return{restrict:"E",replace:!0,scope:{},templateUrl:a("./src/templates/views/keysView.tpl.html"),link:function(a,o){var r=e(),l=r.on,i=r.unsubscribe,c=function(){var e=s.user,r=e.Keys.some(function(e){return!e.decrypted})?"add":"remove";a.userKeys=(0,n.getUserKeys)(e,t.getByUser(e)),a.isSubUser=e.subuser,o[0].classList[r]("keysView-require-contact-keys-reactivation")},d=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.get(),s=e.some(function(e){var t=e.Keys;return(void 0===t?[]:t).filter(function(e){return!e.decrypted}).length})?"add":"remove";a.addressKeys=(0,n.getAddressKeys)(e),o[0].classList[s]("keysView-require-address-keys-reactivation")};l("updateUser",c),l("addressesModel",function(e,t){var a=t.type,n=void 0===a?"":a,s=t.data;"addresses.updated"===n&&d((void 0===s?{}:s).addresses)}),d(),c(),a.$on("$destroy",i)}}}s.$inject=["dispatchers","addressesModel","authentication"],t.default=s},"./src/app/keys/factories/changeMailboxPassword.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=l(a("./node_modules/babel-runtime/helpers/toArray.js")),s=l(a("./node_modules/babel-runtime/helpers/slicedToArray.js")),o=l(a("./node_modules/babel-runtime/core-js/promise.js")),r=a("./src/app/constants.js");function l(e){return e&&e.__esModule?e:{default:e}}function i(e,t,a,l,i,c,d,u,p,m){return function(f){var g=f.newPassword,h=void 0===g?"":g,v=f.onePassword,b=void 0!==v&&v,y=a.getPassword(),_=u.generateKeySalt(),w=b?h:"",x=void 0,j=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return o.default.all([u.computeKeyPassword(e,t),m.get()]).then(function(e){var t=(0,s.default)(e,2),a=t[0],n=t[1],r=(n=void 0===n?{}:n).data,l=void 0===r?{}:r;return o.default.resolve({password:a,user:l.User})}).catch(function(e){var t=(0,s.default)(e,2)[1],a=(t=void 0===t?{}:t).data;throw new Error((void 0===a?{}:a).Error||l.getString("Unable to save your changes, please try again.",null,"Error"))})}(h,_).then(function(a){var n=a.password,s=void 0===n?"":n,i=a.user,c=void 0===i?{}:i,u=[],m=function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=[];s.Keys.forEach(function(e){return o.push(e)}),t.getByUser(s).forEach(function(e){e.Keys.forEach(function(e){return o.push(e)})});var r=[];if(s.OrganizationPrivateKey){var l=p.decryptPrivateKey(s.OrganizationPrivateKey,n);r=o.map(function(e){var t=e.PrivateKey,a=e.ID,n=e.Token;return l.then(function(e){return p.decryptMessage({message:p.getMessage(n),privateKey:e})}).then(function(e){var a=e.data;return p.decryptPrivateKey(t,a)}).then(function(e){return{ID:a,pkg:e}})})}else r=o.map(function(e){var t=e.PrivateKey,a=e.ID;return p.decryptPrivateKey(t,n).then(function(e){return{ID:a,pkg:e}})});return r.map(function(t){return t.then(function(e){var t=e.ID,n=e.pkg;return p.encryptPrivateKey(n,a).then(function(e){return{ID:t,PrivateKey:e}})},function(t){return e.error(t),0})})}(x=s,y,c);return u.push(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return(arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}).Role===r.PAID_ADMIN_ROLE?d.getKeys().then(function(){var a=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data,n=(void 0===a?{}:a).PrivateKey;return p.decryptPrivateKey(n,t).then(function(t){return o.default.resolve(p.encryptPrivateKey(t,e))},function(){return o.default.resolve(0)})}).catch(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;throw new Error((void 0===e?{}:e).Error||l.getString("Unable to get organization keys",null,"Error"))}):o.default.resolve(0)}(x,y,c)),m.forEach(function(e){return u.push(e)}),o.default.all(u)}).then(function(e){var t=(0,n.default)(e),a=t[0];return function(e){var t=e.keys,a=void 0===t?[]:t,n=e.keySalt,s=void 0===n?"":n,o=e.organizationKey,r=void 0===o?0:o,c=e.newLoginPassword,d=void 0===c?"":c,u=a.filter(function(e){return 0!==e}),p={KeySalt:s,Keys:u};if(0===u.length)throw new Error(l.getString("No keys to update",null,"Error"));return 0!==r&&(p.OrganizationKey=r),i.private(p,d)}({keys:t.slice(1),keySalt:_,organizationKey:a,newLoginPassword:w})}).then(function(){return a.savePassword(x)});return c.track(j),j}}i.$inject=["$log","addressesModel","authentication","gettextCatalog","Key","networkActivityTracker","organizationApi","passwords","pmcw","User"],t.default=i},"./src/app/keys/factories/changePasswordModal.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/babel-runtime/core-js/promise.js"),o=(n=s)&&n.__esModule?n:{default:n};function r(e,t,n,s,r,l,i,c,d){return l({controllerAs:"ctrl",templateUrl:a("./src/templates/modals/changePassword.tpl.html"),controller:["params",function(a){var l=this,u=a.type,p=void 0===u?"":u,m=a.phase,f=void 0===m?0:m,g={password:function(){return e({newPassword:l.newPassword,onePassword:!0})},login:function(){return i.password(l.newPassword)},mailbox:function(){return e({newPassword:l.newPassword,onePassword:!1})}};l.mode=c.get("PasswordMode"),l.type=p,l.newPassword="",l.confirmPassword="",l.submit=function(){var e=1===f,l=g[p]().then(function(){return e?o.default.resolve():d.lock()}).then(function(){return t.call()}).then(function(){r.success(n.getString("Password updated",null)),a.close(e)});s.track(l)},l.cancel=function(){var e=d.lock().then(function(){return a.close(!1)});s.track(e)},setTimeout(function(){return document.getElementById("newPassword").focus()},0)}]})}r.$inject=["changeMailboxPassword","eventManager","gettextCatalog","networkActivityTracker","notification","pmModal","settingsApi","userSettingsModel","User"],t.default=r},"./src/app/keys/factories/checkKeysFormat.js":function(e,t,a){"use strict";function n(e,t){return function(a){for(var n=0;n<a.Keys.length;n++){var s=a.Keys[n];if(s.Version<t.KEY_VERSION&&s.decrypted)return!1}for(var o=e.get("addressesModel").getByUser(a),r=0;r<o.length;r++)for(var l=o[r].Keys,i=0;i<l.length;i++){var c=l[i];if(c.Version<t.KEY_VERSION&&c.decrypted)return!1}return!0}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$injector","CONSTANTS"],t.default=n},"./src/app/keys/factories/setupKeys.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=l(a("./node_modules/lodash/extend.js")),s=l(a("./node_modules/lodash/each.js")),o=l(a("./node_modules/lodash/map.js")),r=a("./src/app/constants.js");function l(e){return e&&e.__esModule?e:{default:e}}function i(e,t,a,l,i,c,d,u,p){function m(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=e.Token||e.Activation;return u.decryptMessage({message:u.getMessage(n),privateKey:a,publicKeys:a.toPublic()}).then(function(a){var n=a.data;return 1!==a.verified?t.reject({message:"Signature verification failed"}):{PrivateKey:e.PrivateKey,decryptedToken:n}})}function f(){return m(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).then(function(e){var t=e.PrivateKey,a=e.decryptedToken;return u.decryptPrivateKey(t,a)})}function g(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",n={KeySalt:e,AddressKeys:t};t.length>0&&(n.PrimaryKey=t[0].PrivateKey);var s="";return a.length&&(s=a),{payload:n,newPassword:s}}function h(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=pmcrypto.encode_base64(pmcrypto.arrayToBinaryString(p.getRandomValues(new Uint8Array(128)))),s=void 0;return u.decryptPrivateKey(t.PrivateKey,e).then(function(e){return u.encryptPrivateKey(e,n)}).then(function(e){return s=e,u.encryptMessage({data:n,publicKeys:a.toPublic(),privateKeys:a})}).then(function(e){var a=e.data;return{AddressID:t.AddressID,UserKey:t.PrivateKey,MemberKey:s,Token:a}})}function v(e){var a=e.data;return t.resolve(a.User||a.Member||a.MemberKey)}return{decryptMemberToken:m,decryptMemberKey:f,generate:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:2048,s=d.generateKeySalt(),r=d.computeKeyPassword(a,s),l={mailboxPassword:r,keySalt:t.resolve(s)};return r.then(function(a){var s=(0,o.default)(e,function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.Email,s=e.ID;return u.generateKey({userIds:[{name:t,email:t}],passphrase:a,numBits:n}).then(function(e){var t=e.privateKeyArmored;return{AddressID:s,PrivateKey:t}})});return l.keys=t.all(s),t.all(l)})},generateAddresses:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:2048,s=(0,o.default)(e,function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.Email,s=e.ID;return u.generateKey({userIds:[{name:t,email:t}],passphrase:a,numBits:n}).then(function(e){var t=e.privateKeyArmored;return{AddressID:s,PrivateKey:t}})});return t.all(s)},generateOrganization:function(e,t){return u.generateKey({userIds:[{name:"not_for_email_use@domain.tld",email:"not_for_email_use@domain.tld"}],passphrase:e,numBits:t})},key:function(e){return l.create(e).then(v)},memberSetup:function(e){var a=e.mailboxPassword,n=e.keySalt,o=e.keys,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=[];return(0,s.default)(a,function(t){o.push(h(e,t,n))}),t.all(o)}(a,o,arguments.length>3&&void 0!==arguments[3]?arguments[3]:{}).then(function(e){return i.setup({MemberID:l,KeySalt:n,AddressKeys:e,PrimaryKey:e[0]},r)}).then(v)},memberKey:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return 0===e.Keys.length?t.reject({message:"User not set up"}):f(e.Keys[0],a)}(s,o).then(function(n){return t.all({user:h(e,a,n),org:h(e,a,o)})}).then(function(e){var t=e.user,a=e.org,o=(0,n.default)(a,{MemberID:s.ID,Activation:t.Token,UserKey:t.MemberKey});return i.create(o)}).then(v)},setup:function(e){var t=g(e.keySalt,e.keys,arguments.length>1&&void 0!==arguments[1]?arguments[1]:"");return l.setup(t.payload,t.newPassword).then(v)},reset:function(e){var t=e.keySalt,a=e.keys,s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=g(t,a,s);return r.payload=(0,n.default)(r.payload,o),l.reset(r.payload,r.newPassword).then(v)},decryptUser:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=arguments[3],i=1===e.Private,d=angular.isDefined(e.OrganizationPrivateKey),p=function(e){return u.keyInfo(e.PrivateKey).then(function(t){e.created=t.created,e.bitSize=t.bitSize,e.fingerprint=t.fingerprint})},m=function(e){var t=e.key,a=e.pkg,n=e.address;return t.decrypted=!0,p(t).then(function(){return{address:n,key:t,pkg:a}})},g=function(e){var t=e.key,a=e.address,n=e.index;return t.decrypted=!1,p(t).then(function(){return 0===n&&(a.disabled=!0,c.error("Primary key for address "+a.Email+" cannot be decrypted. You will not be able to read or write any email from this address")),{address:a,key:t,pkg:null}})},h=[],v={ID:r.MAIN_KEY};return(0,s.default)(e.Keys,function(e,t){!0===d?h.push(f(e,n).then(function(t){return m({key:e,pkg:t,address:v})})):h.push(u.decryptPrivateKey(e.PrivateKey,o).then(function(t){return m({key:e,pkg:t,address:v})},function(){return g({key:e,address:v,index:t})}))}),t.all(h).then(function(e){var r=[],c=[];return(0,s.default)(a,function(t){if(t.Keys.length>0){var a=0;(0,s.default)(t.Keys,function(s){!0===d?r.push(f(s,n).then(function(e){return m({key:s,pkg:e,address:t})})):s.Activation?r.push(f(s,e[0].pkg).then(function(e){return function(e,t){return u.encryptPrivateKey(t,o).then(function(t){return l.activate(e.ID,{PrivateKey:t})}).then(function(){return t})}(s,e)}).then(function(e){return m({key:s,pkg:e,address:t})})):r.push(u.decryptPrivateKey(s.PrivateKey,o).then(function(e){return m({key:s,pkg:e,address:t})},function(){return g({key:s,address:t,index:a})})),a++})}else 1===t.Status&&!0===i&&c.push(t)}),t.all(r).then(function(t){return{keys:e.concat(t).filter(function(e){return e.key.decrypted}),dirtyAddresses:c}})})}}}i.$inject=["$log","$q","gettextCatalog","Key","MemberKey","notification","passwords","pmcw","webcrypto"],t.default=i},"./src/app/keys/factories/upgradeKeys.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=i(a("./node_modules/babel-runtime/helpers/toArray.js")),s=i(a("./node_modules/babel-runtime/core-js/promise.js")),o=i(a("./node_modules/babel-runtime/helpers/slicedToArray.js")),r=i(a("./node_modules/lodash/extend.js")),l=i(a("./node_modules/lodash/find.js"));function i(e){return e&&e.__esModule?e:{default:e}}function c(e,t,a,i,c,d,u,p,m,f){var g=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.Keys,a=void 0===t?[]:t,n=e.Addresses,s=void 0===n?[]:n;return a.reduce(function(e,t){e.keys.push(t);var a=null;return s.forEach(function(n){(a=(0,l.default)(n.Keys,{Fingerprint:t.Fingerprint}))&&(e.emails[t.ID]=n.Email)}),a||(e.emails[t.ID]=s[0].Email),e},{keys:[],emails:{}})},h=function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).Addresses;return(void 0===e?[]:e).reduce(function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=t.Keys,n=void 0===a?[]:a,s=t.Email;return n.forEach(function(t){e.keys.push(t),e.emails[t.ID]=s}),e},{keys:[],emails:{}})};return function(l){var d=l.mailboxPassword,v=void 0===d?"":d,b=l.oldSaltedPassword,y=void 0===b?"":b,_=l.user,w=void 0===_?{}:_,x="",j=p.generateKeySalt(),k=1===w.PasswordMode?v:"";return p.computeKeyPassword(v,j).then(function(n){var l=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},s=g(n),o=h(n),l=[].concat(s.keys,o.keys),i=(0,r.default)({},s.emails,o.emails);return l.map(function(e){var t=e.PrivateKey,n=e.ID;return m.decryptPrivateKey(t,a).then(function(e){return{ID:n,pkg:e}})}).map(function(a){return a.then(function(e){var a=e.ID,n=e.pkg;return m.reformatKey(n,i[a],t).then(function(e){return{ID:a,PrivateKey:e}})}).then(null,function(t){return e.error(t),0})})}(x=n,y,w),c=[].concat(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return r.Role===a.PAID_ADMIN_ROLE?u.getKeys().then(function(){var a=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data,s=(void 0===a?{}:a).PrivateKey,l=t.get("addressesModel").getByUser(r)||{},i=(0,o.default)(l,1)[0].Email;return m.decryptPrivateKey(s,n).then(function(t){return m.reformatKey(t,i,e)},function(){return 0})}).catch(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;throw new Error((void 0===e?{}:e).Error||i.getString("Unable to get organization keys",null,"Error"))}):s.default.resolve(0)}(x,y,w),l);return s.default.all(c)}).then(function(e){var t=(0,n.default)(e),a=t[0];return function(e){var t=e.keys,a=void 0===t?[]:t,n=e.keySalt,s=void 0===n?"":n,o=e.organizationKey,r=void 0===o?0:o,l=e.loginPassword,d=void 0===l?"":l,u=a.filter(function(e){return 0!==e});if(0===u.length)throw new Error(i.getString("No keys to update",null,"Error"));var p={KeySalt:s,Keys:u};return 0!==r&&(p.OrganizationKey=r),c.upgrade(p,d)}({keys:t.slice(1),keySalt:j,organizationKey:a,loginPassword:k})}).then(function(){f.setItem(a.MAILBOX_PASSWORD_KEY,m.encode_utf8_base64(x))})}}c.$inject=["$log","$injector","CONSTANTS","gettextCatalog","Key","networkActivityTracker","organizationApi","passwords","pmcw","secureSessionStorage"],t.default=c},"./src/app/keys/index.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=c(a("./src/app/keys/directives/keysView.js")),s=c(a("./src/app/keys/factories/changeMailboxPassword.js")),o=c(a("./src/app/keys/factories/changePasswordModal.js")),r=c(a("./src/app/keys/factories/checkKeysFormat.js")),l=c(a("./src/app/keys/factories/setupKeys.js")),i=c(a("./src/app/keys/factories/upgradeKeys.js"));function c(e){return e&&e.__esModule?e:{default:e}}t.default=angular.module("proton.keys",[]).directive("keysView",n.default).factory("changeMailboxPassword",s.default).factory("changePasswordModal",o.default).factory("checkKeysFormat",r.default).factory("setupKeys",l.default).factory("upgradeKeys",i.default).name},"./src/app/members/directives/memberEditBtn.js":function(e,t,a){"use strict";function n(e,t){var a={edit:t.getString("Edit",null,"Action"),add:t.getString("Add user",null,"Action"),destroy:t.getString("Delete",null,"Action"),remove:t.getString("Remove",null,"Action"),login:t.getString("Login",null,"Action"),makeAdmin:t.getString("Make Admin",null,"Action"),revokeAdmin:t.getString("Revoke Admin",null,"Action"),makePrivate:t.getString("Make Private",null,"Action"),enableSupport:t.getString("Enable multi-user support",null,"Action")};return{replace:!0,scope:{model:"=?"},template:'<button type="button" class="memberEditBtn-container">'+a.edit+"</button>",link:function(t,n,s){var o=s.action,r=void 0===o?"edit":o;"edit"!==r&&n.text(a[r]);var l=function(){return e[r](t.model)};n.on("click",l),t.$on("$destroy",function(){n.off("click",l)})}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["memberActions","gettextCatalog"],t.default=n},"./src/app/members/directives/restoreAdministratorPanel.js":function(e,t,a){"use strict";function n(e,t){return{restrict:"E",templateUrl:a("./src/templates/members/restoreAdministratorPanel.tpl.html"),link:function(a,n){var s=n.find("button"),o=function(){return e.activateKeys(t.get())};s.on("click",o),a.$on("$destroy",function(){s.off("click",o)})}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["organizationKeysModel","organizationModel"],t.default=n},"./src/app/members/factories/memberApi.js":function(e,t,a){"use strict";function n(e,t,a,n){var s={ERROR_NAME:n.getString("Error updating the name",null,"Error"),ERROR_CREATE:n.getString("User creation failed",null,"Error"),ERROR_REQUEST:n.getString("User request failed",null,"Error"),ERROR_DELETE:n.getString("Error during deletion",null,"Error"),ERROR_UPDATE_ROLE:n.getString("Error updating role",null,"Error"),ERROR_PRIVATIZE:n.getString("Error privatizing the user",null,"Error"),ERROR_QUOTA:n.getString("Error updating the disk space quota",null,"Error"),ERROR_VPN:n.getString("Error updating the vpn option",null,"Error")},o=t.build("members"),r=t.make("members"),l=function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;return void 0===e?{}:e},i=function(e){return function(){var t=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;throw new Error((void 0===t?{}:t).Error||e)}};return{create:function(t,n){return a.getPasswordParams(n,t).then(function(t){return e.post(o(),t)}).then(l).catch(i(s.ERROR_CREATE))},authenticate:function(e,t){return a.performSRPRequest("POST",r(e,"auth"),{},t).then(function(e){var t=e.data;return(void 0===t?{}:t).UID}).catch(function(e){throw new Error(e.error_description)})},query:function(){return e.get(o()).then(l).catch(i(s.ERROR_REQUEST))},get:function(t){return e.get(o(t))},name:function(t,a){return e.put(o(t,"name"),{Name:a}).then(l).catch(i(s.ERROR_NAME))},quota:function(t,a){return e.put(o(t,"quota"),{MaxSpace:a}).then(l).catch(i(s.ERROR_QUOTA))},vpn:function(t,a){return e.put(o(t,"vpn"),{MaxVPN:a}).then(l).catch(i(s.ERROR_VPN))},role:function(t,a){return e.put(o(t,"role"),a).then(l).catch(i(s.ERROR_UPDATE_ROLE))},password:function(t,n){return a.getPasswordParams(n).then(function(a){return e.post(o(t,"password"),a)})},privatize:function(t){return e.put(o(t,"privatize")).then(l).catch(i(s.ERROR_PRIVATIZE))},remove:function(t){return e.delete(o(t)).then(l).catch(i(s.ERROR_DELETE))},revoke:function(){return e.delete(o("auth"))}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$http","url","srp","gettextCatalog"],t.default=n},"./src/app/members/factories/memberModel.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=m(a("./node_modules/babel-runtime/helpers/toConsumableArray.js")),s=m(a("./node_modules/babel-runtime/helpers/defineProperty.js")),o=m(a("./node_modules/lodash/sortBy.js")),r=m(a("./node_modules/lodash/findIndex.js")),l=m(a("./node_modules/lodash/reduce.js")),i=m(a("./node_modules/lodash/some.js")),c=m(a("./node_modules/lodash/find.js")),d=m(a("./node_modules/lodash/filter.js")),u=m(a("./node_modules/lodash/map.js")),p=m(a("./node_modules/lodash/extend.js"));function m(e){return e&&e.__esModule?e:{default:e}}function f(e,t,a,m,f,g){var h,v=[],b=e(["members"]),y=b.dispatcher,_=b.on,w=g.FREE_USER_ROLE,x=g.PAID_ADMIN_ROLE,j=g.PAID_MEMBER_ROLE,k=g.STATUS,A={ROLES:(h={},(0,s.default)(h,x,m.getString("Admin",null,"User role")),(0,s.default)(h,j,m.getString("Member",null,"User role")),h)},S={Self:1},M=function(){return v},P=function(){return v.length=0},E=function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return P(),(e=v).push.apply(e,(0,n.default)(t))},C=function(){(0,p.default)(S,{Name:f.user.Name,Addresses:t.get(),UsedSpace:f.user.UsedSpace,MaxSpace:f.user.MaxSpace})};function T(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return(0,u.default)(e,function(e){return e.toggle=1===e.Self,e})}function I(){return T(f.user.Role===w?(C(),[S]):M())}return _("app.event",function(e,t){var a=t.type,n=t.data;"members"===a&&function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],a=(0,l.default)(t,function(e,t){var a=t.Action,n=t.Member,s=t.ID;return e[a].push({ID:s,Member:n}),e},(e={},(0,s.default)(e,k.DELETE,[]),(0,s.default)(e,k.CREATE,[]),(0,s.default)(e,k.UPDATE,[]),e));a[k.DELETE].forEach(function(e){var t=e.ID,a=(0,r.default)(v,{ID:t});a>-1&&v.splice(a,1)}),a[k.CREATE].forEach(function(e){var t=e.Member;v.push(t)}),a[k.UPDATE].forEach(function(e){var t=e.ID,a=e.Member,n=(0,r.default)(v,{ID:t});-1===n&&v.push(a),n>-1&&(0,p.default)(v[n],a)}),v=(0,o.default)(v,"Name"),y.members("update",{list:v,operations:a})}(void 0===n?{}:n)}),_("logout",function(){P()}),{get:M,set:E,fetch:function(){return C(),a.query().then(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return E(T(e.Members))})},clear:P,remove:function(e){var t=e.ID;return a.remove(t)},changeRole:function(e,t){var n=e.ID;return a.role(n,t)},makePrivate:function(e){var t=e.ID;return a.privatize(t)},login:function(e,t){var n=e.ID;return a.authenticate(n,t)},getAll:I,getNonPrivate:function(){return(0,d.default)(I(),function(e){return 0===e.Private})},hasAdmins:function(){return(0,i.default)(I(),function(e){return e.Role===x})},getSelf:function(){return(0,c.default)(I(),function(e){return 1===e.Self})},getRoles:function(){return angular.copy(A.ROLES)},isMember:function(){return f.user.Role===j}}}f.$inject=["dispatchers","addressesModel","memberApi","gettextCatalog","authentication","CONSTANTS"],t.default=f},"./src/app/members/index.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=p(a("./src/app/members/directives/memberEditBtn.js")),s=p(a("./src/app/members/directives/restoreAdministratorPanel.js")),o=p(a("./src/app/members/factories/memberApi.js")),r=p(a("./src/app/members/factories/memberModel.js")),l=p(a("./src/app/members/modals/memberModal.js")),i=p(a("./src/app/members/services/editMemberProcess.js")),c=p(a("./src/app/members/services/memberActions.js")),d=p(a("./src/app/members/services/memberSubLogin.js")),u=p(a("./src/app/members/services/membersValidator.js"));function p(e){return e&&e.__esModule?e:{default:e}}t.default=angular.module("proton.members",[]).directive("memberEditBtn",n.default).directive("restoreAdministratorPanel",s.default).factory("memberApi",o.default).factory("memberModel",r.default).factory("memberModal",l.default).factory("editMemberProcess",i.default).factory("memberActions",c.default).factory("memberSubLogin",d.default).factory("membersValidator",u.default).name},"./src/app/members/modals/memberModal.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(a("./node_modules/lodash/extend.js")),s=o(a("./node_modules/lodash/filter.js"));function o(e){return e&&e.__esModule?e:{default:e}}function r(e,t,o,r,l,i){var c=Math.pow(t.BASE_SIZE,3),d={USED:o.getString("Already used",null,"Memory info"),ALLOCATED:o.getString("Allocated",null,"Memory info"),ALREADY_ALLOCATED:o.getString("Already allocated",null,"Memory info")};return e({controllerAs:"ctrl",templateUrl:a("./src/templates/modals/member.tpl.html"),controller:["params",function(e){var a=this,o=function(e){var t=e.member,a=void 0===t?{}:t,n=5*c,s=r.get(),o=a.UsedSpace||0,l=a.ID?s.MaxSpace-s.AssignedSpace+a.MaxSpace:s.MaxSpace-s.AssignedSpace,i=l>n?n:l;return{organization:s,minPadding:o,maxPadding:l,startValue:a.ID?a.MaxSpace:i}}(e),u=o.organization,p=o.minPadding,m=o.maxPadding,f=o.startValue;this.ID=null,this.step="member",this.size=t.ENCRYPTION_DEFAULT,this.organization=e.organization,this.organizationKey=e.organizationKey,this.domains=(0,s.default)(e.domains,function(e){return e.State}),this.domain=this.domains.length&&this.domains[0],this.name="",this.temporaryPassword="",this.confirmPassword="",this.address="",this.cancel=e.cancel;var g={label:d.ALLOCATED,classes:"background-primary"},h={label:d.USED,classes:"background-red-striped"},v={label:d.ALREADY_ALLOCATED,classes:"background-yellow-striped"};this.unit=c,this.min=0,this.max=u.MaxSpace,this.hasVPN=u.MaxVPN&&l.hasPaid("vpn"),this.storageSliderOptions={animate:!1,start:f/this.unit,step:.1,connect:[!0,!1],tooltips:!0,range:{min:this.min/this.unit,max:this.max/this.unit},pips:{mode:"values",values:[0,this.max/this.unit],density:4},minPadding:p/this.unit,maxPadding:m/this.unit},this.storageLegends=[g],p>0&&this.storageLegends.push(h),m>0&&this.storageLegends.push(v);var b=e.member?e.member.MaxVPN:0,y=u.UsedVPN,_=u.MaxVPN-y+b;this.availableVPN=_>0?b:u.MaxVPN-y+b,this.vpnSliderOptions={animate:!1,start:b,step:1,connect:[!0,!1],tooltips:!0,range:{min:0,max:u.MaxVPN},pips:{mode:"values",values:[0,u.MaxVPN],density:u.MaxVPN},minPadding:0,maxPadding:_-1e-7},this.vpnLegends=[g],_<u.MaxVPN&&this.vpnLegends.push(v),this.private=!1,this.showAddress=!0,this.showKeys=!0,e.member&&(this.oldMember=(0,n.default)({},e.member),this.ID=e.member.ID,this.name=e.member.Name,this.private=!!e.member.Private,this.showAddress=0===e.member.Addresses.length&&1===e.member.Type,this.showKeys=0===e.member.Keys.length&&!this.private),this.submit=function(){i(a,{params:e,maxPadding:m,minPadding:p,maxVPNPadding:_}).edit()}}]})}r.$inject=["pmModal","CONSTANTS","gettextCatalog","organizationModel","subscriptionModel","editMemberProcess"],t.default=r},"./src/app/members/services/editMemberProcess.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(a("./node_modules/babel-runtime/regenerator/index.js")),s=r(a("./node_modules/babel-runtime/helpers/asyncToGenerator.js")),o=r(a("./node_modules/lodash/extend.js"));function r(e){return e&&e.__esModule?e:{default:e}}function l(e,t,a,r,l,i,c,d){var u=this,p={SUCCESS_UPDATE:t.getString("User updated",null,"Info"),SUCCESS_CREATE:t.getString("User created",null,"Info")};return function(t,m){var f,g,h,v=m.params,b=m.maxPadding,y=m.minPadding,_=m.maxVPNPadding,w=t.storageSliderValue,x=t.temporaryPassword,j=t.organizationKey,k=t.vpnSliderValue,A=t.oldMember,S=t.address,M=t.domain,P=t.unit,E=t.name,C=t.hasVPN,T=t.size,I=t.ID,D=Math.round(w*P),O=Math.round(k),L=function(e){return A&&A.Name===E?e:a.name(e.ID,E).then(function(){return e.Name=E,e})},R=function(e){return A&&A.MaxSpace===D?e:a.quota(e.ID,D).then(function(){return e.MaxSpace=D,e})},N=function(e){return!C||A&&A.MaxVPN===O?e:a.vpn(e.ID,O).then(function(){return e.MaxVPN=O,e})},$=function(e){return a.create(e,x).then(function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).Member})},F=(f=(0,s.default)(n.default.mark(function e(t){var a;return n.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(!v.member||!v.member.Addresses.length){e.next=2;break}return e.abrupt("return",{addresses:v.member.Addresses,member:t});case 2:return e.next=4,r.create({Local:S,Domain:M.DomainName,MemberID:t.ID});case 4:return a=e.sent,t.Addresses.push(a.Address),e.abrupt("return",{addresses:[a.Address],member:t});case 7:case"end":return e.stop()}},e,u)})),function(e){return f.apply(this,arguments)}),U=(g=(0,s.default)(n.default.mark(function e(t){var a,s,o=t.member,r=t.addresses;return n.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(!(o.Private||v.member&&v.member.Keys.length>0)){e.next=2;break}return e.abrupt("return",{member:o});case 2:return a=r.length?r:v.member.Addresses,e.next=5,l.generate(a,x,T);case 5:return s=e.sent,e.abrupt("return",{member:o,key:s});case 7:case"end":return e.stop()}},e,u)})),function(e){return g.apply(this,arguments)}),z=(h=(0,s.default)(n.default.mark(function e(t){var a=t.member,s=t.key;return n.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(!(a.Private||v.member&&v.member.Keys.length>0)){e.next=2;break}return e.abrupt("return",{member:a});case 2:return e.next=4,l.memberSetup(s,x,a.ID,j);case 4:return e.abrupt("return",{member:a});case 5:case"end":return e.stop()}},e,u)})),function(e){return h.apply(this,arguments)});return{edit:function(){var a=(0,o.default)({},v.member,{Name:E,Private:+!!t.private,MaxSpace:D,MaxVPN:O}),n=function(e,a){var n=function(){return i.check({member:a,params:v,quota:D,vpn:O,config:e},t).then(function(){return a})};return I?(a.ID=I,{message:p.SUCCESS_UPDATE,promise:function(){return n().then(L).then(R).then(N).then(function(){return a})}}):{message:p.SUCCESS_CREATE,promise:function(){return n().then($)}}}({maxPadding:b,minPadding:y,maxVPNPadding:_},a),s=n.message,r=(0,n.promise)().then(F).then(U).then(z).then(function(e){return function(t){var a=t.member;return v.submit(a),d.call().then(function(){return c.success(e)})}}(s)).catch(function(e){throw d.call(),e});e.track(r)}}}}l.$inject=["networkActivityTracker","gettextCatalog","memberApi","Address","setupKeys","membersValidator","notification","eventManager"],t.default=l},"./src/app/members/services/memberActions.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/lodash/extend.js"),o=(n=s)&&n.__esModule?n:{default:n};function r(e,t,a,n,s,r,l,i,c,d,u,p,m,f,g,h,v,b,y){var _=y(["memberActions"]).dispatcher,w={CHANGE_ROLE:{default:{title:i.getString("Change Role",null,"Title"),message:i.getString("Are you sure you want to remove administrative privileges from this user?",null,"Info")},isPaidAdmin:{message:i.getString("You must provide this user with the Organization Password in order to fully activate administrator privileges.",null,"Info")},isSubscriber:{message:i.getString("This user is currently responsible for payments for your organization. By demoting this member, you will become responsible for payments for your organization.",null,"Info")}},MAKE_PRIVATE:{title:i.getString("Privatize User",null,"Title"),message:i.getString("Organization administrators will no longer be able to log in and control the user's account after privatization. This change is PERMANENT.",null,"Info")},ACTION_REMOVE:{title:i.getString("Remove user",null,"Title"),message:i.getString("Are you sure you want to permanently remove this user from your organization? They will lose access to any addresses belonging to your organization.",null,"Info")},ACTION_DELETE:{title:i.getString("Delete user",null,"Title"),message:i.getString("Are you sure you want to permanently delete this user? The inbox and all addresses associated with this user will be deleted.",null,"Info")},SUCCESS_REMOVE:i.getString("User removed",null,"Info"),SUCCESS_CHANGE_ROLE:i.getString("Role updated",null,"Info"),SUCCESS_CHANGE_STATUS:i.getString("Status Updated",null,"Info"),PLEASE_UPGRADE:i.getString("Please upgrade to a Professional plan with more than 1 user, or a Visionary account, to get multi-user support.",null,"Info")},x=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:r.query(),a={member:e,domains:t,organizationKey:g.get("organizationKey"),submit:function(e){c.deactivate(),_.memberActions("edit.success",{member:e,domains:t})},cancel:function(){c.deactivate()}};c.activate({params:a})},j=function(e){var t=e.title,a=e.message,s=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return function(e){console.debug("@todo fix remove arg",s),n.activate({params:{title:t,message:a,confirm:function(){n.deactivate();var t=d.remove(e).then(function(){return f.success(w.SUCCESS_REMOVE),l.call()});m.track(t)},cancel:function(){n.deactivate()}}})}},k=j(w.ACTION_DELETE,!1),A=j(w.ACTION_REMOVE),S=function(e){return function(t){var a=function(e,t){var a=1===e.Subscriber&&"isSubscriber",n=t===s.PAID_ADMIN_ROLE&&"isPaidAdmin";return(0,o.default)({},w.CHANGE_ROLE.default,w.CHANGE_ROLE[n||a])}(t,e),r=a.title,i=a.message;n.activate({params:{title:r,message:i,confirm:function(){var a=d.changeRole(t,{Role:e}).then(l.call).then(function(){f.success(w.SUCCESS_CHANGE_ROLE),n.deactivate()});m.track(a)},cancel:function(){n.deactivate()}}})}},M=S(2),P=S(1),E=function(){var e=d.getSelf().ID;v.activate({params:{memberID:e,close:function(){var e=b.lock().then(l.call).then(v.deactivate);m.track(e)}}})},C=u.login;return{add:function(){p.canAdd(g.get("keyStatus"))&&x()},edit:x,destroy:k,remove:A,login:C,makeAdmin:M,revokeAdmin:P,makePrivate:function(e){var t=w.MAKE_PRIVATE,a=t.title,s=t.message;n.activate({params:{title:a,message:s,confirm:function(){var t=d.makePrivate(e).then(function(){e.Private=1,f.success(w.SUCCESS_CHANGE_STATUS),n.deactivate()});m.track(t)},cancel:function(){n.deactivate()}}})},enableSupport:function(){if(1===(h.get()||{}).MaxMembers)return f.info(w.PLEASE_UPGRADE);t(function(e,t){var a=b.password({Password:e,TwoFactorCode:t}).then(function(e){var t=e.data;return void 0===t?{}:t}).then(E);m.track(a)})},addFromDomain:function(e){p.canAdd(g.get("keyStatus"))&&x(void 0,[e])}}}r.$inject=["addressModel","askPassword","authentication","confirmModal","CONSTANTS","domainModel","eventManager","gettextCatalog","memberModal","memberModel","memberSubLogin","membersValidator","networkActivityTracker","notification","organizationKeysModel","organizationModel","setupOrganizationModal","User","dispatchers"],t.default=r},"./src/app/members/services/memberSubLogin.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(a("./node_modules/babel-runtime/helpers/slicedToArray.js")),s=o(a("./node_modules/lodash/delay.js"));function o(e){return e&&e.__esModule?e:{default:e}}function r(e,t,a,o,r,l,i,c){var d={ERROR:c.getString("Permission denied, administrator privileges have been restricted.",null,"Error")},u=e.href("login.sub",{sub:!0},{absolute:!0});function p(){return!(t.get("keyStatus")>0)||(a.error(d.ERROR),e.go("secured.members"),!1)}var m=function(e){return function(t,a){o.deactivate();var c=window.location.href.split("/"),d=(0,n.default)(c,3),p={domain:d[0]+"//"+d[2]};!function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:angular.noop;window.addEventListener("message",function a(n){n.origin!==e&&t(!1),"ready"===n.data&&(t(!0),window.removeEventListener("message",a))},!1)}(p.domain,function(e){return p.isReady=e});var m=window.open(u,"_blank"),f=r.login(e,{Password:t,TwoFactorCode:a}).then(function(e){var t=l.getPassword();!function a(){p.isReady?m.postMessage({UID:e,MailboxPassword:t},p.domain):(0,s.default)(a,500)}()}).catch(function(e){throw m.close(),e});i.track(f)}};return{login:function(e){p()&&o.activate({params:{submit:m(e),cancel:function(){o.deactivate()}}})},canLogin:p}}r.$inject=["$state","organizationKeysModel","notification","loginPasswordModal","memberModel","authentication","networkActivityTracker","gettextCatalog"],t.default=r},"./src/app/members/services/membersValidator.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=l(a("./node_modules/babel-runtime/regenerator/index.js")),s=l(a("./node_modules/babel-runtime/helpers/asyncToGenerator.js")),o=l(a("./node_modules/lodash/reduce.js")),r=l(a("./node_modules/lodash/filter.js"));function l(e){return e&&e.__esModule?e:{default:e}}function i(e,t,a,l,i,c){var d,u=this,p={INVALID_PLAN:e.getString("Multi-user support requires either a Professional or Visionary plan.",null,"Info"),INACTIVE_MULTI_USER:e.getString("Please enable multi-user support before adding users to your organization",null,"Info"),NO_DOMAIN:e.getString("Please configure a custom domain before adding users to your organization.",null,"Info"),ERROR_NO_USERS_LEFT:e.getString("You have used all users in your plan. Please upgrade your plan to add a new user.",null,"Error"),ERROR_NO_ADDRESS_LEFT:e.getString("You have used all addresses in your plan. Please upgrade your plan to add a new address.",null,"Error"),ERROR_NO_STORAGE_LEFT:e.getString("All storage space has been allocated. Please reduce storage allocated to other users.",null,"Error"),ERROR_PERMISSION:e.getString("Permission denied, administrator privileges have been restricted.",null,"Error"),INVALID_NAME:e.getString("Invalid name",null,"Error"),INVALID_PASSWORD:e.getString("Invalid password",null,"Error"),INVALID_ADDRESS:e.getString("Invalid address",null,"Error"),INVALID_QUOTA:e.getString("Invalid storage quota",null,"Error"),INVALID_VPN:e.getString("Invalid VPN quota",null,"Error"),ERROR_DECRYPT_ORGA_KEY:e.getString("Cannot decrypt organization key",null,"Error"),ERROR_ALREADY_USER:e.getString("Address already associated to a user",null,"Error")},m=function(e){var t=e.address,a=e.domain,n=void 0===a?{}:a;return!!(0,o.default)(c.get(),function(e,t){var a=t.Addresses,n=void 0===a?[]:a;return(0,o.default)(n,function(e,t){var a=t.Status,n=t.Email,s=void 0===n?"":n;return 1===a&&(e[s]=s),e},e)},{})[t+"@"+n.DomainName]};return{canAdd:function(e){var n=l.get();if(!function(e){var n=(0,r.default)(i.query(),function(e){return e.State});return 1===e.MaxMembers?(t.info(p.INVALID_PLAN),a.go("secured.members"),!1):e.HasKeys?!!n.length||(t.info(p.NO_DOMAIN),!1):(t.info(p.INACTIVE_MULTI_USER),a.go("secured.members"),!1)}(n))return!1;try{if(n.MaxMembers-n.UsedMembers<1)throw new Error(p.ERROR_NO_USERS_LEFT);if(n.MaxAddresses-n.UsedAddresses<1)throw new Error(p.ERROR_NO_ADDRESS_LEFT);if(n.MaxSpace-n.AssignedSpace<1)throw new Error(p.ERROR_NO_STORAGE_LEFT);if(e>0)throw a.go("secured.members"),new Error(p.ERROR_PERMISSION);return!0}catch(e){return t.error(e),!1}},check:(d=(0,s.default)(n.default.mark(function e(t,a){var s=t.member,o=t.quota,r=t.vpn,l=t.params,i=t.config,c=void 0===i?{}:i,d=a.temporaryPassword,f=a.confirmPassword,g=a.address,h=a.organizationKey,v=a.name,b=a.domain;return n.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(0!==v.length){e.next=2;break}throw new Error(p.INVALID_NAME);case 2:if(s.ID&&(s.Private||l.member.Keys.length)||d===f){e.next=4;break}throw new Error(p.INVALID_PASSWORD);case 4:if(s.ID&&(l.member.Addresses.length||1!==l.member.Type)||g.length){e.next=6;break}throw new Error(p.INVALID_ADDRESS);case 6:if(!(o>c.maxPadding||o<c.minPadding)){e.next=8;break}throw new Error(p.INVALID_QUOTA);case 8:if(!(r>c.maxVPNPadding)){e.next=10;break}throw new Error(p.INVALID_VPN);case 10:if(s.ID||s.Private||h){e.next=12;break}throw new Error(p.ERROR_DECRYPT_ORGA_KEY);case 12:if(s.ID||!m({domain:b,address:g})){e.next=14;break}throw new Error(p.ERROR_ALREADY_USER);case 14:case"end":return e.stop()}},e,u)})),function(e,t){return d.apply(this,arguments)})}}i.$inject=["gettextCatalog","notification","$state","organizationModel","domainModel","memberModel"],t.default=i},"./src/app/organization/directives/organizationBtnActions.js":function(e,t,a){"use strict";function n(e,t,a){var n={changePassword:a.getString("Change organization password",null,"Action"),changeKeys:a.getString("Change organization keys",null,"Action"),resetKeys:a.getString("Reset Keys",null,"Action"),activateKeys:a.getString("Activate Keys",null,"Action"),restoreKeys:a.getString("Restore Keys",null,"Action")};return{replace:!0,template:'<button type="button" class="organizationActions-container">'+n.changePassword+"</button>",link:function(a,s,o){var r=o.action,l=void 0===r?"changePassword":r,i=function(e){var t="restoreKeys"===e?"activateKeys":e;return"resetKeys"===t?"changeKeys":t}(l);"changePassword"!==l&&s.text(n[l]);var c=function(){if("activateKeys"===i)return t[i](e.get());e[i]()};s.on("click",c),a.$on("$destroy",function(){s.off("click",c)})}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["organizationModel","organizationKeysModel","gettextCatalog"],t.default=n},"./src/app/organization/directives/organizationFormName.js":function(e,t,a){"use strict";function n(e){return{replace:!0,scope:{},templateUrl:a("./src/templates/organization/organizationFormName.tpl.html"),link:function(t,a){var n=(e.get()||{}).DisplayName;t.value=n;var s=function(a){a.preventDefault(),t.organizationForm.$valid&&e.saveName(t.value)};a.on("submit",s),t.$on("$destroy",function(){a.off("submit",s)})}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["organizationModel"],t.default=n},"./src/app/organization/factories/organizationKeysModel.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(a("./node_modules/babel-runtime/regenerator/index.js")),s=o(a("./node_modules/babel-runtime/helpers/asyncToGenerator.js"));function o(e){return e&&e.__esModule?e:{default:e}}function r(e,t,a,o,r,l,i,c,d,u,p,m,f){var g,h=this,v=(g=(0,s.default)(n.default.mark(function e(t){var a,s,i,c,d;return n.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(o.user.Role===r.PAID_ADMIN_ROLE){e.next=2;break}return e.abrupt("return");case 2:return e.next=4,P();case 4:if(a=e.sent,s=a.PublicKey,i=a.PrivateKey,!s){e.next=13;break}return j("keyStatus",0),e.next=11,l.keyInfo(s);case 11:c=e.sent,j("organizationKeyInfo",c);case 13:if(i){e.next=16;break}return j("keyStatus",1),e.abrupt("return",I(t));case 16:return e.prev=16,e.next=19,l.decryptPrivateKey(i,o.getPassword());case 19:d=e.sent,j("organizationKey",d),e.next=27;break;case 23:e.prev=23,e.t0=e.catch(16),j("keyStatus",2),console.error(e.t0);case 27:I(t);case 28:case"end":return e.stop()}},e,this,[[16,23]])})),function(e){return g.apply(this,arguments)}),b=t().on,y={keyStatus:0},_=["signatures","domains","members"].map(function(e){return"secured."+e}),w={MUST_PRIVATISE_ERROR:m.getString("You must privatize all sub-accounts before generating new organization keys",null,"Error"),ERROR_ALREADY_ACTIVE:m.getString("Organization keys already active",null,"Error"),ERROR_DEFAULT:m.getString("Organization keys request failed",null,"Error")},x=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"keys";return angular.copy(y[e])},j=function(e,t){return y[e]=t},k=function(){return y={keyStatus:0}};function A(){return e.getKeys().then(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data,t=void 0===e?{}:e;return j("keys",t),t}).catch(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;throw new Error((void 0===e?{}:e).Error||w.ERROR_DEFAULT)})}b("$stateChangeStart",function(e,t){_.includes(t.name)&&k()});var S,M,P=(S=(0,s.default)(n.default.mark(function e(){return n.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",x()?x():A());case 1:case"end":return e.stop()}},e,h)})),function(){return S.apply(this,arguments)}),E=(M=(0,s.default)(n.default.mark(function e(t){var a;return n.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,l.keyInfo(t.toPublic().armor());case 2:a=e.sent,j("organizationKeyInfo",a),j("keyStatus",0),j("organizationKey",t);case 6:case"end":return e.stop()}},e,h)})),function(e){return M.apply(this,arguments)}),C=function(){var e=i.getNonPrivate(),t=i.hasAdmins();e.length>0&&x("keyStatus")>0?c.error(w.MUST_PRIVATISE_ERROR):d.activate({params:{nonPrivate:e,otherAdmins:t,existingKey:x("organizationKey"),submit:function(e){var t=E(e).then(d.deactivate).then(u.call);p.track(t)},cancel:function(){d.deactivate()}}})},T=function(e){if(!x("keyStatus")||x("keyStatus")>2)return c.error(w.ERROR_ALREADY_ACTIVE);f.activate({params:{keyStatus:x("keyStatus"),reset:function(){f.deactivate(),C()},submit:function(t){j("keyStatus",0),j("organizationKey",t),f.deactivate(),a.$emit("organizationChange",{data:e})},cancel:function(){f.deactivate()}}})};function I(e){1===e.HasKeys&&x("keyStatus")>0&&T(e)}return b("logout",k),{fetch:A,get:x,set:j,clear:k,manage:v,changeKeys:C,activateKeys:T}}r.$inject=["organizationApi","dispatchers","$rootScope","authentication","CONSTANTS","pmcw","memberModel","notification","generateOrganizationModal","eventManager","networkActivityTracker","gettextCatalog","activateOrganizationModal"],t.default=r},"./src/app/organization/factories/organizationModel.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/babel-runtime/core-js/promise.js"),o=(n=s)&&n.__esModule?n:{default:n};function r(e,t,a,n,s,r,l,i,c,d,u,p){var m={},f={CREATE_ERROR:r.getString("Error during organization request",null,"Error organization creation"),FETCH_ERROR:r.getString("Organization request failed",null,"Error organization"),KEYS_ERROR:r.getString("Error during the generation of new organization keys",null,"Error organization"),UPDATING_NAME_ERROR:r.getString("Error updating organization name",null,"Error"),UPDATING_NAME_SUCCESS:r.getString("Organization updated",null,"Info"),UPDATE_PASSWORD_SUCCESS:r.getString("Password updated",null,"Info")},g=s(["organizationChange"]),h=g.dispatcher,v=g.on,b={PlanName:"free",MaxMembers:1,HasKeys:0},y={data:{Code:1e3,Organization:b}},_=function(){return m={}},w=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"organization";m[t]=e,"organization"===t&&h.organizationChange("",e)},x=function(){return"free"===(m.organization||{}).PlanName};function j(){return x()?a.generateOrganization(n.getPassword()).then(function(e){return{PrivateKey:e.privateKeyArmored}}).catch(function(){throw new Error(f.KEYS_ERROR)}):o.default.resolve()}var k=t.changeKeys;return v("logout",function(){_()}),{set:w,get:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"organization";return m[e]},clear:_,isFreePlan:x,fetch:function(){return n.user.Role===l.FREE_USER_ROLE?(w(b),o.default.resolve(y)):e.get().then(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data,t=void 0===e?{}:e;return w(t.Organization),t.Organization}).catch(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;throw new Error((void 0===e?{}:e).Error||f.FETCH_ERROR)})},create:function(){if(!x())return o.default.resolve();j().then(e.create).then(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;return void 0===e?{}:e}).catch(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;throw new Error((void 0===e?{}:e).Error||f.CREATE_ERROR)})},generateKeys:j,saveName:function(t){var a=e.updateOrganizationName({DisplayName:t}).then(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data,t=void 0===e?{}:e;return i.success(f.UPDATING_NAME_SUCCESS),t}).catch(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;throw new Error((void 0===e?{}:e).Error||f.UPDATING_NAME_ERROR)});c.track(a)},changePassword:function(){d.activate({params:{close:function(e){d.deactivate(),e&&function(e){u.activate({params:{submit:function(a,n){var s={Password:a,TwoFactorCode:n},o=t.get("organizationKey"),r=p({newPassword:e,creds:s,organizationKey:o}).then(function(){i.success(f.UPDATE_PASSWORD_SUCCESS),u.deactivate()});c.track(r)},cancel:function(){u.deactivate()}}})}(e)}}})},changeKeys:k}}r.$inject=["organizationApi","organizationKeysModel","setupKeys","authentication","dispatchers","gettextCatalog","CONSTANTS","notification","networkActivityTracker","changeOrganizationPasswordModal","loginPasswordModal","changeOrganizationPassword"],t.default=r},"./src/app/organization/factories/subscriptionModel.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=l(a("./node_modules/babel-runtime/helpers/slicedToArray.js")),s=l(a("./node_modules/lodash/reduce.js")),o=l(a("./node_modules/lodash/some.js")),r=l(a("./node_modules/lodash/find.js"));function l(e){return e&&e.__esModule?e:{default:e}}function i(e,t,a,l){var i={},c=a.getString("Subscription request failed",null,"Error"),d=t(["subscription"]),u=d.dispatcher,p={plus:["plus"],professional:["professional"],visionary:["visionary"],mail:["plus","professional","visionary"],vpn:["vpnbasic","vpnplus","visionary"],vpnbasic:["vpnbasic"],vpnplus:["vpnplus"]},m={address:"5address",storage:"1gb",domain:"1domain",member:"1member",vpn:"1vpn"},f=function(){return angular.copy(i.subscription||{})},g=function(e){return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return function(){var t=(i.subscription||{}).Plans,a=void 0===t?[]:t;return(0,o.default)(a,function(t){var a=t.Name;return e.indexOf(a)>-1})}}(p[e])()},h=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(Array.isArray(e.Plans)){var t=(0,s.default)(e.Plans,function(e,t){return e[t.ID]=e[t.ID]||0,e[t.ID]+=t.Quantity,e},{});e.Plans.forEach(function(e){e.Quantity=t[e.ID]})}return e};function v(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],a=angular.copy(h(e));i.subscription=a,!t&&u.subscription("update",{subscription:a})}return(0,d.on)("app.event",function(e,t){var a=t.type,n=t.data;"subscription.event"===a&&v(n.subscription)}),{set:v,get:f,name:function(){return g("plus")?"plus":g("professional")?"professional":g("visionary")?"visionary":"free"},fetch:function(){return l.subscription().then(function(){return v((arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).Subscription),f()}).catch(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;throw Error((void 0===e?{}:e).Error||c)})},hasPaid:g,coupon:function(){var e=f().CouponCode;return void 0===e?"":e},count:function(e){var t=((0,r.default)(i.subscription.Plans,{Name:m[e]})||{}).Quantity;return void 0===t?0:t},cycle:function(){var t=(i.subscription||{}).Plans,a=void 0===t?[]:t,s=(0,n.default)(a,1)[0],o=(s=void 0===s?{}:s).Cycle;return void 0===o?e.DEFAULT_CYCLE:o},currency:function(){var t=(i.subscription||{}).Plans,a=void 0===t?[]:t,s=(0,n.default)(a,1)[0],o=(s=void 0===s?{}:s).Currency;return void 0===o?e.DEFAULT_CURRENCY:o}}}i.$inject=["CONSTANTS","dispatchers","gettextCatalog","Payment"],t.default=i},"./src/app/organization/index.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=g(a("./src/app/organization/directives/organizationBtnActions.js")),s=g(a("./src/app/organization/directives/organizationFormName.js")),o=g(a("./src/app/organization/factories/organizationKeysModel.js")),r=g(a("./src/app/organization/factories/organizationModel.js")),l=g(a("./src/app/organization/factories/subscriptionModel.js")),i=g(a("./src/app/organization/modals/activateOrganizationModal.js")),c=g(a("./src/app/organization/modals/changeOrganizationPasswordModal.js")),d=g(a("./src/app/organization/modals/generateOrganizationModal.js")),u=g(a("./src/app/organization/modals/setupOrganizationModal.js")),p=g(a("./src/app/organization/services/activateOrganizationKeys.js")),m=g(a("./src/app/organization/services/changeOrganizationPassword.js")),f=g(a("./src/app/organization/services/organizationApi.js"));function g(e){return e&&e.__esModule?e:{default:e}}t.default=angular.module("proton.organization",[]).directive("organizationBtnActions",n.default).directive("organizationFormName",s.default).factory("organizationKeysModel",o.default).factory("organizationModel",r.default).factory("subscriptionModel",l.default).factory("activateOrganizationModal",i.default).factory("changeOrganizationPasswordModal",c.default).factory("generateOrganizationModal",d.default).factory("setupOrganizationModal",u.default).factory("activateOrganizationKeys",p.default).factory("changeOrganizationPassword",m.default).factory("organizationApi",f.default).name},"./src/app/organization/modals/activateOrganizationModal.js":function(e,t,a){"use strict";function n(e,t,n){var s={1:{TITLE:t.getString("Key Activation",null,"Title"),PROMPT:t.getString("Organization password:",null,"Label"),MESSAGE:t.getString("You must activate your organization private key with the backup organization key password provided to you by your organization administrator.",null,"Info"),ALERT:t.getString("Without activation you will not be able to create new users, add addresses to existing users, or access non-private user accounts.",null,"Info"),SUCCESS_MESSAGE:t.getString("Organization keys activated",null,"Info"),ERROR_MESSAGE:t.getString("Error activating organization keys",null,"Error")},2:{TITLE:t.getString("Restore Administrator Privileges",null,"Title"),PROMPT:t.getString("Organization password:",null,"Label"),MESSAGE:t.getString('Enter the Organization Password to restore administrator privileges. <a href="https://protonmail.com/support/knowledge-base/restore-administrator/" target="_blank">Learn more</a>',null,"Info"),ALERT:t.getString("If another administrator changed this password, you will need to ask them for the new Organization Password.",null,"Info"),SUCCESS_MESSAGE:t.getString("Organization keys restored",null,"Info"),ERROR_MESSAGE:t.getString("Error restoring organization keys",null,"Error")},default:{TITLE:t.getString("Administrator Key Activation",null,"Title"),PROMPT:t.getString("Enter activation passcode:",null,"Info")}};return e({controllerAs:"ctrl",templateUrl:a("./src/templates/modals/activateOrganization.tpl.html"),controller:["params",function(e){var t=this,a=s[e.keyStatus];this.inputCode="",this.alertClass=1===e.keyStatus?"alert alert-warning":"alert alert-danger",this.title=a.TITLE||s.default.TITLE,this.prompt=a.PROMPT||s.default.PROMPT,this.message=a.MESSAGE||"",this.alert=a.ALERT||"",this.showReset=2===e.keyStatus,this.cancel=e.cancel,this.reset=e.reset,this.submit=function(){n(a).reload(t.inputCode).then(e.submit)}}]})}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["pmModal","gettextCatalog","activateOrganizationKeys"],t.default=n},"./src/app/organization/modals/changeOrganizationPasswordModal.js":function(e,t,a){"use strict";function n(e){return e({controllerAs:"ctrl",templateUrl:a("./src/templates/modals/changeOrganizationPassword.tpl.html"),controller:["params",function(e){var t=this;this.newPassword="",this.confirmPassword="",this.submit=function(){return e.close(t.newPassword)},this.cancel=e.close,setTimeout(function(){return document.getElementById("newPassword").focus()},0)}]})}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["pmModal"],t.default=n},"./src/app/organization/modals/generateOrganizationModal.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(a("./node_modules/babel-runtime/core-js/promise.js")),s=o(a("./node_modules/lodash/each.js"));function o(e){return e&&e.__esModule?e:{default:e}}function r(e,t,o,r,l,i,c,d,u,p){return e({controllerAs:"ctrl",templateUrl:a("./src/templates/modals/generateOrganization.tpl.html"),controller:["params",function(e){var a=this;this.size=2048,this.newRecoveryPassword="",this.confirmRecoveryPassword="",this.otherAdmins=e.otherAdmins,this.submit=function(){var m=a.size,f=a.newRecoveryPassword,g=void 0,h={Tokens:[]};return o.track(c.generateOrganization(t.getPassword(),m).then(function(e){var t=e.privateKeyArmored;return h.PrivateKey=t,t}).then(function(e){return l.decryptPrivateKey(e,t.getPassword())}).then(function(t){g=t;var a=[];return h.BackupKeySalt=i.generateKeySalt(),a.push(i.computeKeyPassword(f,h.BackupKeySalt).then(function(e){return l.encryptPrivateKey(t,e)}).then(function(e){h.BackupPrivateKey=e})),(0,s.default)(e.nonPrivate,function(n){var o=n.Keys.slice();(0,s.default)(n.Addresses,function(e){o=o.concat(e.Keys)}),(0,s.default)(o,function(n){a.push(c.decryptMemberToken(n,e.existingKey).then(function(e){var a=e.decryptedToken;return l.encryptMessage({data:a,publicKeys:t.toPublic(),privateKeys:t})}).then(function(e){var t=e.data;h.Tokens.push({ID:n.ID,Token:t})}))})}),n.default.all(a).then(function(){return h})}).then(function(t){return new n.default(function(a,n){d.activate({params:{submit:function(s,o){d.deactivate();var l={Password:s,TwoFactorCode:o};return r.replaceKeys(t,l).then(function(){return u.success(p.getString("Organization keys change successful",null,"Error")),a(e.submit(g))}).catch(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;return n(new Error((void 0===e?{}:e).Error))})},cancel:function(){d.deactivate(),n()}}})})}).catch(function(e){e&&u.error(e)}))},this.cancel=function(){e.cancel()}}]})}r.$inject=["pmModal","authentication","networkActivityTracker","organizationApi","pmcw","passwords","setupKeys","loginPasswordModal","notification","gettextCatalog"],t.default=r},"./src/app/organization/modals/setupOrganizationModal.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/lodash/last.js"),o=(n=s)&&n.__esModule?n:{default:n};function r(e,t,n,s,r,l,i,c,d,u,p){return t({controllerAs:"ctrl",templateUrl:a("./src/templates/modals/setupOrganization.tpl.html"),controller:["params","$scope",function(t,a){var m=this,f=c.BASE_SIZE,g=["name","keys","password","storage"],h=[function(){var e=m.name;return r.updateOrganizationName({DisplayName:e})},function(){var t=e.getPassword(),a=m.size;return d.generateOrganization(t,a).then(function(e){var t=e.privateKeyArmored;return v.PrivateKey=t,t}).then(function(e){return u.decryptPrivateKey(e,t)}).then(function(e){return _=e})},function(){var e=m.organizationPassword;return v.Tokens=[],v.BackupKeySalt=n.generateKeySalt(),n.computeKeyPassword(e,v.BackupKeySalt).then(function(e){return u.encryptPrivateKey(_,e)}).then(function(e){return v.BackupPrivateKey=e}).then(function(){return r.updateOrganizationKeys(v)})},function(){var e=t.memberID,a=Math.round(m.sliderValue*m.unit);return i.quota(e,a)},function(){var e=t.memberID,a=Math.round(m.sliderVPNValue);return i.vpn(e,a)}],v={},b=l.get(),y=0,_=void 0;e.hasPaidVpn()&&g.push("vpn"),m.step=g[y],m.size=2048;var w={label:p.getString("Allocated to admin",null),classes:"background-primary"},x={label:p.getString("Already used",null),classes:"background-red-striped"};m.min=0,m.max=b.MaxSpace,m.unit=f*f*f;var j=e.user.UsedSpace/m.unit;m.sliderOptions={animate:!1,start:Math.min(Math.max(Math.round(e.user.UsedSpace/m.unit+1),5),m.max/m.unit),step:.1,connect:[!0,!1],tooltips:!0,range:{min:m.min/m.unit,max:m.max/m.unit},pips:{mode:"values",values:[0,m.max/m.unit],density:4},minPadding:j,legend:"GB"},m.legends=[w],j>0&&m.legends.push(x),m.min=0,m.maxVPN=b.MaxVPN,m.sliderVPNOptions={animate:!1,start:3,step:1,connect:[!0,!1],tooltips:!0,range:{min:0,max:m.maxVPN},pips:{mode:"values",values:[0,m.maxVPN],density:m.maxVPN}},m.legendsVPN=[w],m.isLastStep=function(){return m.step===(0,o.default)(g)},m.next=function(){var e=h[y]().then(function(){if(m.isLastStep())return t.close();y++,a.$applyAsync(function(){m.step=g[y]})});s.track(e)},m.cancel=function(){t.close()}}]})}r.$inject=["authentication","pmModal","passwords","networkActivityTracker","organizationApi","organizationModel","memberApi","CONSTANTS","setupKeys","pmcw","gettextCatalog"],t.default=r},"./src/app/organization/services/activateOrganizationKeys.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(a("./node_modules/babel-runtime/regenerator/index.js")),s=o(a("./node_modules/babel-runtime/helpers/asyncToGenerator.js"));function o(e){return e&&e.__esModule?e:{default:e}}function r(e,t,a,o,r,l,i,c){var d={ERROR_PASSWORD:i.getString("Password incorrect. Please try again",null,"Error")};return function(i){var u,p,m=this,f=(u=(0,s.default)(n.default.mark(function s(r){var l,c,d,u,p;return n.default.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:return n.prev=0,n.next=3,t.encryptPrivateKey(r,o.getPassword());case 3:return l=n.sent,n.next=6,e.activateKeys({PrivateKey:l});case 6:return c=n.sent,d=c.data,u=void 0===d?{}:d,a.success(i.SUCCESS_MESSAGE),n.abrupt("return",u);case 13:throw n.prev=13,n.t0=n.catch(0),p=n.t0.data,new Error((void 0===p?{}:p).Error||i.ERROR_MESSAGE);case 17:case"end":return n.stop()}},s,m,[[0,13]])})),function(e){return u.apply(this,arguments)}),g=(p=(0,s.default)(n.default.mark(function a(s){var o,l,i,c,u,p,g;return n.default.wrap(function(a){for(;;)switch(a.prev=a.next){case 0:return a.prev=0,a.next=3,e.getBackupKeys();case 3:return o=a.sent,l=o.data,c=(i=void 0===l?{}:l).PrivateKey,u=i.KeySalt,a.next=9,r.computeKeyPassword(s,u);case 9:return p=a.sent,a.next=12,t.decryptPrivateKey(c,p);case 12:return g=a.sent,a.next=15,f(g);case 15:return a.abrupt("return",g);case 18:throw a.prev=18,a.t0=a.catch(0),console.error(a.t0),new Error(d.ERROR_PASSWORD);case 22:case"end":return a.stop()}},a,m,[[0,18]])})),function(e){return p.apply(this,arguments)});return{reload:function(e){var t=g(e).then(function(e){return c.call(),e});return l.track(t),t}}}}r.$inject=["organizationApi","pmcw","notification","authentication","passwords","networkActivityTracker","gettextCatalog","eventManager"],t.default=r},"./src/app/organization/services/changeOrganizationPassword.js":function(e,t,a){"use strict";function n(e,t,a,n){var s={ERROR_UPDATE:e.getString("Error updating organization key recovery password",null,"Error")};return function(e){var o=e.newPassword,r=e.organizationKey,l=e.creds,i=a.generateKeySalt();return a.computeKeyPassword(o,i).then(function(e){return n.encryptPrivateKey(r,e)}).then(function(e){return t.updateBackupKeys({PrivateKey:e,KeySalt:i},l)}).then(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;return void 0===e?{}:e}).catch(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;throw new Error((void 0===e?{}:e).Error||s.ERROR_UPDATE)})}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["gettextCatalog","organizationApi","passwords","pmcw"],t.default=n},"./src/app/organization/services/organizationApi.js":function(e,t,a){"use strict";function n(e,t,a,n){var s=a.build("organizations"),o={ERROR_FETCH_BACKUP:t.getString("Error retrieving backup organization keys",null,"Error")};return{create:function(t){return e.post(s(),t)},get:function(){return e.get(s())},getKeys:function(){return e.get(s("keys"))},getBackupKeys:function(){return e.get(s("keys","backup")).catch(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return function(){var t=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;throw new Error((void 0===t?{}:t).Error||e)}}(o.ERROR_FETCH_BACKUP))},activateKeys:function(t){return e.put(s("keys","activate"),t)},replaceKeys:function(e,t){return n.performSRPRequest("PUT","/organizations/keys",e,t)},updateOrganizationKeys:function(t){return e.put(s("keys"),t)},updateBackupKeys:function(e,t){return n.performSRPRequest("PUT","/organizations/keys/backup",e,t)},updateOrganizationName:function(t){return e.put(s("name"),t)}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$http","gettextCatalog","url","srp"],t.default=n},"./src/app/outside/controllers/outside.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=l(a("./node_modules/babel-runtime/helpers/slicedToArray.js")),s=l(a("./node_modules/babel-runtime/core-js/promise.js")),o=l(a("./node_modules/lodash/each.js")),r=a("./src/app/constants.js");function l(e){return e&&e.__esModule?e:{default:e}}c.$inject=["$interval","$rootScope","$scope","$state","$stateParams","gettextCatalog","CONSTANTS","Eo","embedded","prepareContent","messageData","notification","pmcw","textToHtmlMail","networkActivityTracker","secureSessionStorage","attachmentModelOutside","sanitize"];var i=r.MIME_TYPES.DEFAULT;function c(e,t,a,r,l,c,d,u,p,m,f,g,h,v,b,y,_,w){_.load();var x=y.getItem("proton:decrypted_token"),j=h.decode_utf8_base64(y.getItem("proton:encrypted_password")),k=l.tag,A=f;function S(e){var t=w.message(e);return r.is("eo.reply")&&(t='<br /><br /><blockquote class="protonmail_quote" type="cite">'+t+"</blockquote>"),m(t,A)}var M=function(e){return r.is("eo.reply")?v.parse(e):$("<div>").html(e).text()};a.send=function(){var e=a.message.Replies;if((void 0===e?[]:e).length>=d.MAX_OUTSIDE_REPLY){var t=c.getString('ProtonMail\'s Encrypted Outside feature only allows replying 5 times. <a href="https://protonmail.com/signup" target="_blank">You can sign up for ProtonMail for seamless and unlimited end-to-end encryption</a>.',null,"Notification");g.info(t)}var o=p.parser(a.message,{direction:"cid"}).then(function(e){return s.default.all([h.encryptMessage({data:e,publicKeys:h.getKeys(a.message.publicKey)}),h.encryptMessage({data:e,passwords:j}),_.encrypt(a.message).then(function(e){return e.reduce(function(e,t){var a=t.Filename,n=t.DataPacket,s=t.MIMEType,o=t.KeyPackets,r=t.CID,l=void 0===r?"":r;return e.Filename.push(a),e.DataPacket.push(n),e.MIMEType.push(s),e.KeyPackets.push(o),e.ContentID.push(l),e},{Filename:[],DataPacket:[],MIMEType:[],KeyPackets:[],ContentID:[]})})])}).then(function(e){var t=(0,n.default)(e,3),a=t[0].data,s=t[1].data,o=t[2];return u.reply(x,k,{Body:a,ReplyBody:s,"Filename[]":o.Filename,"MIMEType[]":o.MIMEType,"KeyPackets[]":o.KeyPackets,"ContentID[]":o.ContentID,"DataPacket[]":o.DataPacket}).then(function(e){return r.go("eo.message",{tag:l.tag}),g.success(c.getString("Message sent",null)),e}).catch(function(e){throw g.error(c.getString("Error during the reply process",null,"Error")),e})}).catch(function(e){e.message=c.getString("Error during the encryption",null,"Error")});return b.track(o)},a.cancel=function(){r.go("eo.message",{tag:l.tag})},a.reply=function(){r.go("eo.reply",{tag:l.tag,showImages:A.showImages})},function(){A.isPlainText()&&A.setDecryptedBody(M(A.getDecryptedBody())),r.is("eo.reply")&&(A.showImages=!0,A.showEmbedded=!0,A.MIMEType=i),A.setDecryptedBody(S(A.getDecryptedBody())),r.is("eo.message")&&(0,o.default)(A.Replies,function(e){e.Body=S(e.Body)}),p.parser(A).then(function(e){A.setDecryptedBody(e),A.expand=!0,A.From={Keys:[{PublicKey:A.publicKey}]},a.message=A,a.isPlain=A.isPlainText(),a.body=A.getDecryptedBody()});var t=e(function(){a.message&&a.message.ExpirationTime<moment().unix()&&r.go("eo.unlock",{tag:l.tag})},1e3);a.$on("$destroy",function(){e.cancel(t)})}()}t.default=c},"./src/app/outside/directives/composerOutside.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/lodash/debounce.js"),o=(n=s)&&n.__esModule?n:{default:n};function r(e,t){var n=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"composer-draggable";return e.classList.add(t)},s=function(e){e.classList.remove("composer-draggable"),e.classList.remove("composer-draggable-editor")},r=function(e,a){return function(e,o){var r=o.type,l=o.data;switch(r){case"dragenter":t.isUploadAbleType(l.event)&&n(a);break;case"drop":if("attachment.upload.outside"===e.name&&l.queue.files.length&&l.queue.hasEmbedded)return n(a,"composer-draggable-editor");s(a);break;case"upload":s(a);break;case"attachments.limit.error":case"upload.success":_rAF(function(){return s(a)})}}};return{replace:!0,templateUrl:a("./src/templates/directives/outside/composer.tpl.html"),link:function(a,l){var i=e(),c=i.on,d=i.unsubscribe,u=function(e){var a=e.originalEvent;t.isUploadAbleType(a)&&n(l[0])},p=(0,o.default)(function(e){e.target.classList.contains("composer-dropzone")&&s(l[0])},16);l.on("dragenter",u),l.on("dragleave",p),c("editor.draggable",r(0,l[0])),c("attachment.upload.outside",r(0,l[0])),a.$on("$destroy",function(){l.off("dragenter",u),l.off("dragleave",p),d()})}}}r.$inject=["dispatchers","attachmentFileFormat"],t.default=r},"./src/app/outside/index.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(a("./src/app/outside/controllers/outside.js")),s=r(a("./src/app/outside/directives/composerOutside.js")),o=r(a("./src/app/outside/services/attachmentModelOutside.js"));function r(e){return e&&e.__esModule?e:{default:e}}t.default=angular.module("proton.outside",["proton.routes","proton.constants","proton.utils"]).controller("OutsideController",n.default).directive("composerOutside",s.default).factory("attachmentModelOutside",o.default).name},"./src/app/outside/services/attachmentModelOutside.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=d(a("./node_modules/babel-runtime/core-js/promise.js")),s=d(a("./node_modules/lodash/fp/filter.js")),o=d(a("./node_modules/lodash/fp/reduce.js")),r=d(a("./node_modules/lodash/fp/map.js")),l=d(a("./node_modules/lodash/fp/flow.js")),i=d(a("./node_modules/lodash/map.js")),c=a("./src/app/constants.js");function d(e){return e&&e.__esModule?e:{default:e}}p.$inject=["$log","AttachmentLoader","dispatchers","embedded","notification"];var u=c.MIME_TYPES.PLAINTEXT;function p(e,t,a,c,d){var p="attachment.upload.outside",m=a([p,"actionMessage","attachmentAdded"]),f=m.on,g=m.dispatcher,h=[],v=function(e,t){return g[p](e,t)},b=function(e){return g.actionMessage("",e)};f(p,function(a,u){var p,m,f=u.type,x=u.data;switch(f){case"remove.all":m=(p=x).message,p.list.forEach(function(e){_({id:e.ID,attachment:e,message:m})});break;case"remove":_(x);break;case"drop":!function(e){var t=e.queue,a=e.message;h.push(t),t.hasEmbedded||v("upload",{message:a,action:"attachment"})}(x);break;case"upload":!function(a){var u=a.message,p=a.action,m=u.publicKey,f=h.reduce(function(e,t){var a=t.files;return e.concat(a)},[]);if("cancel"===p)return h.length=0;if("attachment"===p){var _=f.map(function(e){var a=e.file;return t.load(a,m)});return n.default.all(_).then(y(u)).then(function(e){return u.addAttachments(e),e}).then(function(){g.attachmentAdded(),b(u),h.length=0})}!function(a,u){var p=u.publicKey,m=a.map(function(e){var a=e.file,n=e.isEmbedded;return a.inline=+n,t.load(a,p)});u.uploading=m.length,b(u),n.default.all(m).then(y(u)).then(function(e){return u.addAttachments(e),e}).then(function(e){var t=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(0,l.default)((0,s.default)(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return w(e)}),(0,s.default)(function(e){var t=e.Headers;return t["content-id"]}),(0,r.default)(function(e){var a=e.Headers,n=e.Preview,s=e.MIMEType,o=c.addEmbedded(t,a["content-id"],n,s),r=o.url;return angular.extend({},e,{url:r})}),(0,o.default)(function(e,t){return e[t.ID]=t,e},{}))(e)}(e,u);return(0,i.default)(e,function(e){return t[e.ID]||e})}).then(function(e){var t=(0,i.default)(e,function(e){return{attachment:e,cid:(e.Headers||{})["content-id"]||"",url:e.url||""}});v("upload.success",{upload:t,message:u,messageID:u.ID})}).then(function(){u.uploading=0,b(u),h.length=0}).catch(function(t){e.error(t),d.error("Error encrypting attachment"),b(u)})}(f,u)}(x)}});var y=function(e){return function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).map(function(t){return{ID:"att_"+Math.random().toString(32).slice(0,12)+"_"+Date.now(),Name:t.Filename,Size:t.FileSize,Filename:t.Filename,MIMEType:t.MIMEType,KeyPackets:new Blob([t.keys]),DataPacket:new Blob([t.data]),Preview:t.Preview,Headers:function(e,t){var a=e.Filename,n=e.FileSize;return e.Inline?{"content-disposition":"inline","content-id":c.generateCid(""+a+n,t.SenderAddress)}:{}}(t,e)}})}};function _(e){var t=e.id,a=e.message,n=e.attachment,s=n||a.getAttachment(t),o={message:a,attachment:s,id:t};+w(s)&&a.MIMEType!==u&&v("remove.embedded",o),a.removeAttachment(n),v("remove.success",o)}function w(e){var t=e.Headers;return"inline"===(void 0===t?{}:t)["content-disposition"]}return{load:angular.noop,encrypt:function(e){var a=e.Attachments,s=void 0===a?[]:a,o=e.publicKey,r=s.map(function(e){var a=c.getCid(e.Headers);return a&&!e.DataPacket?c.getBlob(a).then(function(a){return t.load(function(e,t){return e.inline=1,e.name=t,e}(a,e.Name),o)}).then(function(t){return{CID:a,Filename:e.Name,MIMEType:e.MIMEType,Headers:e.Headers,KeyPackets:new Blob([t.keys]),DataPacket:new Blob([t.data])}}):n.default.resolve({CID:a,Filename:e.Filename,DataPacket:e.DataPacket,MIMEType:e.MIMEType,KeyPackets:e.KeyPackets,Headers:e.Headers})});return n.default.all(r)}}}t.default=p},"./src/app/paginator/directives/paginator.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/lodash/range.js"),o=(n=s)&&n.__esModule?n:{default:n};function r(e,t,n,s){var r=s.ELEMENTS_PER_PAGE,l=function(e){var a=[],s=n.getMaxPage();return 1===(~~t.page||1)&&a.push("paginator-disabled-previous"),(n.isMax()||0===e.totalItems)&&a.push("paginator-disabled-next"),0!==s&&1!==s&&0!==e.totalItems||a.push("paginator-disabled-main"),a.join(" ")},i=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;return(0,o.default)(1,e+1)},c=function(e){return function(t){return t.preventDefault(),n[e]()}};return{restrict:"E",replace:!0,templateUrl:a("./src/templates/directives/paginator.tpl.html"),scope:{totalItems:"="},link:function(a,s){var o=e(),d=o.on,u=o.unsubscribe;a.pages=i(n.getMaxPage()),a.page=~~t.page||1;var p=s[0].className;s[0].className+=" "+l(a);var m=s[0].querySelector(".paginator-btn-next"),f=s[0].querySelector(".paginator-btn-previous"),g=s[0].querySelector(".paginator-dropdown-list"),h=c("next"),v=c("previous"),b=function(e){e.preventDefault();var t=e.target;t.classList.contains("paginator-dropdown-item")&&n.to({page:+t.getAttribute("data-value")})};m.addEventListener("click",h,!1),f.addEventListener("click",v,!1),g.addEventListener("click",b,!1),d("app.cacheCounters",function(e,n){var o=n.type,c=n.data;"refresh.currentState"===o&&a.$applyAsync(function(){a.pages=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:r,a=Math.ceil(e/r),n=~~t.page>a?~~t.page:a;return i(n)}(c.value),s[0].className=p+" "+l(a)})}),a.$on("$destroy",function(){m.removeEventListener("click",h),f.removeEventListener("click",v),g.removeEventListener("click",b,!1),u()})}}}r.$inject=["dispatchers","$stateParams","paginationModel","CONSTANTS"],t.default=r},"./src/app/paginator/directives/paginatorScope.js":function(e,t,a){"use strict";function n(e){return{restrict:"E",replace:!0,templateUrl:a("./src/templates/directives/paginatorScope.tpl.html"),scope:{page:"=",totalItems:"=",itemsPerPage:"=",change:"="},link:function(t,a,n){var s=e(),o=s.on,r=s.unsubscribe;t.pages=[];var l=function(){t.disableMain=1===Math.ceil(t.totalItems/t.itemsPerPage)||0===t.totalItems,t.disableP=1===t.page||0===t.totalItems,t.disableN=Math.ceil(t.totalItems/t.itemsPerPage)===t.page||0===t.totalItems};t.select=function(e){t.change(e),t.$applyAsync(function(){return l()})},t.next=function(){return t.change(t.page+1)},t.previous=function(){return t.change(t.page-1)},t.$watch("totalItems",function(){l(),function(){var e=void 0,a=[];e=t.totalItems%t.itemsPerPage==0?t.totalItems/t.itemsPerPage:Math.floor(t.totalItems/t.itemsPerPage)+1;for(var n=1;n<=e;++n)a.push(n);t.pages=a}()}),o("paginatorScope",function(e,a){var s=a.type,o=a.page;s===n.type&&(t.page=o,l())}),t.$on("$destroy",r)}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["dispatchers"],t.default=n},"./src/app/paginator/factories/cachePages.js":function(e,t,a){"use strict";function n(e,t){var a=e().on,n=[],s=function(){return n.length=0};return a("$stateChangeStart",function(e,a,n,o){t.filteredState(o.name)!==t.filteredState(a.name)&&s()}),a("logout",function(){s()}),{init:angular.noop,add:function(e){return n.push(e)},inside:function(e){return n.indexOf(e)>-1},clear:s,consecutive:function(e){for(var t=e;t>=0;t--)if(-1===n.indexOf(t))return!1;return!0}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["dispatchers","tools"],t.default=n},"./src/app/paginator/factories/paginationModel.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/lodash/extend.js"),o=(n=s)&&n.__esModule?n:{default:n};function r(e,t,a,n,s,r,l){var i=a().on,c=e.ELEMENTS_PER_PAGE,d=e.MESSAGE_VIEW_MODE,u="";i("$stateChangeSuccess",function(e,t){u=t.name.replace(".element","")});var p=function(){var e=t.get("cacheCounters"),a=e.getCounter(l.currentLocation());if(l.cacheContext()&&a){var n="unread"===s.filter?"unread":"total";return Math.ceil(a[r.get("ViewMode")===d?"message":"conversation"][n]/c)}return Math.ceil(e.getCurrentState()/c)},m=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};n.go(u,(0,o.default)({id:null},e))};return{init:angular.noop,next:function(){var e=(~~s.page||1)+1;e<=p()&&m({page:e})},previous:function(){var e=~~s.page||0;if(e){var t=e-1;m({page:t<=1?void 0:t})}},getMaxPage:p,isMax:function(){return(~~s.page||1)>=p()},to:m}}r.$inject=["CONSTANTS","$injector","dispatchers","$state","$stateParams","mailSettingsModel","tools"],t.default=r},"./src/app/paginator/index.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=l(a("./src/app/paginator/directives/paginator.js")),s=l(a("./src/app/paginator/directives/paginatorScope.js")),o=l(a("./src/app/paginator/factories/cachePages.js")),r=l(a("./src/app/paginator/factories/paginationModel.js"));function l(e){return e&&e.__esModule?e:{default:e}}angular.module("proton.paginator",[]).directive("paginator",n.default).directive("paginatorScope",s.default).factory("cachePages",o.default).factory("paginationModel",r.default),t.default=angular.module("proton.paginator").name},"./src/app/payment/directives/bitcoinDetails.js":function(e,t,a){"use strict";function n(e,t,a){var n=function(e,a){var n=document.createElement("SPAN"),s=document.createElement("KBD");return s.className="bitcoinDetails-item-"+e,n.className="bitcoinDetails-label-"+e,"amount"===e?a?(n.innerHTML=t.getString("Amount BTC",null,"Bitcoin donation"),s.textContent=a,{span:n,kbd:s}):{}:(n.textContent=t.getString("BTC address",null,"Bitcoin donation"),s.textContent=a,{span:n,kbd:s})};return{replace:!0,template:'<p class="bitcoinDetails-container"></p>',link:function(t,s){var o=e.get("payment")||{},r=o.Address,l=void 0===r?a.BTC_DONATION_ADDRESS:r,i=o.AmountBitcoin,c=n("amount",i);c.span&&(s[0].appendChild(c.span),s[0].appendChild(c.kbd));var d=n("address",l);s[0].appendChild(d.span),s[0].appendChild(d.kbd)}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["paymentBitcoinModel","gettextCatalog","CONSTANTS"],t.default=n},"./src/app/payment/directives/bitcoinQrcode.js":function(e,t,a){"use strict";function n(e,t){return{replace:!0,template:'<div class="bitcoinPayment-container"></div>',link:function(a,n){var s,o,r,l;new QRCode(n[0],(s=e.get("payment")||{},o=s.Address,r=void 0===o?t.BTC_DONATION_ADDRESS:o,l=s.AmountBitcoin,e.isDonation()?"bitcoin:"+r:"bitcoin:"+r+"?amount="+l))}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["paymentBitcoinModel","CONSTANTS"],t.default=n},"./src/app/payment/directives/bitcoinView.js":function(e,t,a){"use strict";function n(e,t,n){var s=n.MIN_BITCOIN_AMOUNT;return e.load(),{scope:{amount:"=",currency:"="},replace:!0,templateUrl:a("./src/templates/payment/bitcoinView.tpl.html"),link:function(e,a,n){var o=n.type,r=void 0===o?"payment":o,l=t(["payment"]),i=l.on,c=l.unsubscribe,d=l.dispatcher;a[0].classList.add("bitcoinView-type-"+r);var u=function(){d.payment("bitcoin.submit",{type:r,amount:e.amount,currency:e.currency})},p=function(e){e.target.classList.contains("bitcoinView-btn-reload")&&u()};a.on("click",p),i("payment",function(t,a){var n=a.type;"bitcoin.success"===n&&e.$applyAsync(function(){e.isBitcoin=!0}),"bitcoin.error"===n&&e.$applyAsync(function(){e.isBitcoinError=!0}),"bitcoin.validator.error"===n&&e.$applyAsync(function(){e.hasValidationsError=!0,e.validator={amountMin:s}})}),u(),e.$on("$destroy",function(){c(),a.off("click",p)})}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["paymentBitcoinModel","dispatchers","CONSTANTS"],t.default=n},"./src/app/payment/directives/cardIcon.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){var e=$.payment.cardType,t={amex:"fa-cc-amex",dinersclub:"fa-cc-diners-club",discover:"fa-cc-discover",jcb:"fa-cc-jcb",mastercard:"fa-cc-mastercard",visa:"fa-cc-visa",visaelectron:"fa-cc-visa",maestro:"fa-credit-card",forbrugsforeningen:"fa-credit-card",dankort:"fa-credit-card",unionpay:"fa-credit-card",card:"fa-credit-card"};return{replace:!0,template:'<i class="cardIcon-container fa '+t.card+'"></i>',scope:{number:"="},link:function(a,n){a.$watch("number",function(a){n[0].className=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"card";return"cardIcon-container fa "+t[e||"card"]}(e(a))})}}}},"./src/app/payment/directives/cardPanel.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){return{replace:!0,restrict:"E",templateUrl:a("./src/templates/payment/cardPanel.tpl.html"),scope:{card:"="}}}},"./src/app/payment/directives/donation.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/lodash/find.js"),o=(n=s)&&n.__esModule?n:{default:n},r=a("./src/app/constants.js");function l(e,t,n,s,l,i){var c="donationForm-btn-amount",d='[id="otherAmount"]',u=".donateModal-choose-currency",p='[id="paymentMethod"]';l.init();var m=r.CURRENCIES.map(function(e){return{label:e,value:e}});return{replace:!0,scope:{processing:"=?",method:"=?",type:"@"},templateUrl:a("./src/templates/payment/donation.tpl.html"),link:function(t,a,l){var f=l.action,g=void 0===f?"":f,h=n(["payments"]),v=h.on,b=h.unsubscribe,y=h.dispatcher,_=a.find(u),w=a.find(d),x=a.find(p),j=s.generateMethods(),k=j.list,A=j.selected,S=function(t){return function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=100*(t.model.otherAmount||t.model.amount),s={Amount:n,Credit:n,Donation:n,Currency:t.model.currency.value};return"use.card"===t.model.method.value&&(s.PaymentMethodID=t.model.method.ID),"card"===t.model.method.value&&(s.Payment={Type:"card",Details:e(t.model.card).details()}),"paypal"===t.model.method.value&&(s.Payment={Type:"paypal",Details:a}),s}}(t),M=function(e,t){return function(a){return function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return y.payments(e,t)}("donate.submit",{type:e,options:a,action:t})}}(t.type,g);t.model={card:{},method:A,amount:25,currency:(0,o.default)(m,{value:i.user.Currency||r.CONSTANTS.DEFAULT_CURRENCY})},t.currencies=m,t.methods=k;var P=function(e){e.preventDefault(),t.donationForm.$valid&&M(S())},E=function(){var e=t.model.method.value;"paypal"!==e&&"bitcoin"!==e||(t.model.method.value="",_rAF(function(){t.$applyAsync(function(){return t.model.method.value=e})}))};t.getAmount=function(){return 100*(t.model.otherAmount||t.model.amount||0)},t.onFocusOtherAmount=function(){return t.model.amount=null},t.paypalCallback=function(e){return M(S(e))};var C=function(e){var a=e.target;if(a.classList.contains(c)){var n=+a.dataset.amount;t.$applyAsync(function(){t.model.otherAmount=null,t.model.amount=n,E()})}},T=function(){return t.$applyAsync(E)},I=function(){return t.$applyAsync(E)},D=function(){return t.$applyAsync(function(){return t.method=t.model.method})};a.on("click",C),a.on("submit",P),_.on("change",I),x.on("change",D),w.on("input",T),v("payments",function(e,n){var s=n.type;/^(donation|topUp)\.request\.load/.test(s)&&t.$applyAsync(function(){return t.processing=!0}),/^(donation|topUp)\.request\.(success|error)/.test(s)&&t.$applyAsync(function(){return t.processing=!1}),"donation.input.submit"===s&&_rAF(function(){return a.triggerHandler("submit")})}),t.$on("$destroy",function(){a.off("click",C),a.off("submit",P),_.off("change",I),x.off("change",D),w.off("input",T),b()})}}}l.$inject=["cardModel","gettextCatalog","dispatchers","paymentUtils","donateModel","authentication"],t.default=l},"./src/app/payment/directives/donationExternalSubmit.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(e){return{compile:function(t){return t[0].classList.add("donationExternalSubmit-container"),function(t,a){var n=function(){e.$emit("payments",{type:"donation.input.submit",data:{}})};a.on("click",n),t.$on("$destroy",function(){a.off("click",n)})}}}};n.$inject=["$rootScope"],t.default=n},"./src/app/payment/directives/featuresList.js":function(e,t,a){"use strict";function n(e,t){function n(a){var n=a.target;if("BUTTON"===n.nodeName){var s=n.getAttribute("data-route");t.deactivate(),e.go(s)}}return{restrict:"E",scope:{ctrl:"="},replace:!0,templateUrl:a("./src/templates/payment/featuresList.tpl.html"),link:function(e,t){var a=e.ctrl.plans.reduce(function(e,t){return e[t.Name]=t.Name,e},{});t.on("click",n),a.plus&&t.addClass("featuresList-isPlus"),a.professional&&t.addClass("featuresList-isProfessional"),a.visionary&&t.addClass("featuresList-isVisionary"),(a.vpnbasic||a.vpnplus)&&t.addClass("featuresList-hasVPN"),e.$on("$destroy",function(){return t.off("click",n)})}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$state","paymentModal"],t.default=n},"./src/app/payment/directives/giftCodeBtn.js":function(e,t,a){"use strict";function n(e,t){return{templateUrl:a("./src/templates/payment/giftCodeBtn.tpl.html"),restrict:"E",replace:!0,scope:{},link:function(a,n,s){var o=s.action,r=function(){var a;"modal"===o&&t.activate({params:{close:function(){t.deactivate()}}}),"displayGiftSignup"===o&&(a=o,e.$emit("signup",{type:a}))};n.on("click",r),a.$on("$destroy",function(){n.off("click",r)})}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$rootScope","giftCodeModal"],t.default=n},"./src/app/payment/directives/giftCodeInput.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){return{replace:!0,restrict:"E",scope:{form:"=",code:"="},templateUrl:a("./src/templates/payment/giftCodeInput.tpl.html")}}},"./src/app/payment/directives/giftCodeValidator.js":function(e,t,a){"use strict";function n(e){return{restrict:"A",require:"ngModel",link:function(t,a,n,s){s.$validators.giftCode=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return e.isValid(t)}}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["giftCodeModel"],t.default=n},"./src/app/payment/directives/payInvoiceBtn.js":function(e,t,a){"use strict";function n(e,t,a,n,s,o){var r={message:e.getString("Pay",null,"Action"),notAvailable:e.getString("Payments are currently not available, please try again later",null,"Info")};return{replace:!0,scope:{model:"="},template:'<button class="payInvoiceBtn-container pm_button link">'+r.message+"</button>",link:function(e,l){var i=function(){if(!a.canPay())return o.info(r.notAvailable);var l=function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).ID;return t.check(e).then(function(e){return e.data}).catch(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;throw Error((void 0===e?{}:e).Error)})}(e.model).then(function(t){n.activate({params:{invoice:angular.copy(e.model),checkInvoice:t,close:function(t){n.deactivate(),!0===t&&(e.model.State=1)}}})});s.track(l)};l.on("click",i),e.$on("$destroy",function(){l.off("click",i)})}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["gettextCatalog","Payment","paymentModel","payModal","networkActivityTracker","notification"],t.default=n},"./src/app/payment/directives/paymentForm.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=i(a("./node_modules/babel-runtime/core-js/object/create.js")),s=i(a("./node_modules/babel-runtime/helpers/slicedToArray.js")),o=i(a("./node_modules/lodash/uniq.js")),r=i(a("./node_modules/lodash/countBy.js")),l=i(a("./node_modules/lodash/extend.js"));function i(e){return e&&e.__esModule?e:{default:e}}function c(e,t,i,c,d,u,p,m,f,g,h){var v=h.PLANS_TYPE,b=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return(0,r.default)(e,function(e){return e})},y=function(e,t){var a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;return e[t]=e[t]?e[t]+a:a},_=function(e,t){var a=e.map(function(e){return t[e]});return{total:a.reduce(function(e,t){return y(e,"MaxSpace",t.MaxSpace),y(e,"MaxMembers",t.MaxMembers),y(e,"MaxDomains",t.MaxDomains),y(e,"MaxAddresses",t.MaxAddresses),y(e,"MaxVPN",t.MaxVPN),e},(0,n.default)(null)),price:a.filter(function(e){return e.Type===v.ADDON}).reduce(function(e,t){var a,n,o=t.Name,r=t.Amount,l=(a=o.match(/\d+(\w+)/)||[],"gb"===(n=(0,s.default)(a,2)[1])?"space":n);return y(e,l,r),e},{space:0,member:0,domain:0,address:0,vpn:0})}};return{scope:{ctrl:"="},replace:!0,templateUrl:a("./src/templates/payment/paymentForm.tpl.html"),link:function(t,a){var s,r=t.ctrl,h=f.get(),v=(s=h.plan,function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};g.$emit("modal.payment",{type:e,data:(0,l.default)({plan:s},t)})});r.card={},r.cancel=h.cancel,r.valid=h.valid,r.displayGift=!1,h.valid.Coupon&&(r.displayCoupon=!0,r.coupon=h.valid.Coupon.Code);var y=function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).reduce(function(e,t){return t.ID&&(e[t.ID]=t),e},(0,n.default)(null))}(p.query(h.valid.Currency,h.valid.Cycle)),w=_(h.planIDs,y);r.plans=(0,o.default)(h.planIDs).map(function(e){return y[e]}),r.step="payment";var x=u.generateMethods({choice:h.choice,Cycle:h.valid.Cycle,Amount:h.valid.AmountDue}),j=x.list,k=x.selected;r.methods=j,r.method=k,r.status=d.get("status"),r.count=function(e){return w.total[e]},r.price=function(e){return w.price[e]},r.paypalCallback=function(e){r.paypalConfig=e,r.submit()};var A=function(){r.step="thanks",v("process.success")};r.submit=function(){var t;r.step="process",d.subscribe((t={Amount:r.valid.AmountDue,Cycle:r.valid.Cycle,Currency:r.valid.Currency,CouponCode:r.coupon,GiftCode:r.gift,PlanIDs:b(h.planIDs)},r.valid.AmountDue?("use.card"===r.method.value&&(t.PaymentMethodID=r.method.ID),"card"===r.method.value&&(t.Payment={Type:"card",Details:c(r.card).details()}),"paypal"===r.method.value&&(t.Payment={Type:"paypal",Details:r.paypalConfig}),t):t)).then(m.create).then(i.call).then(A).catch(function(t){e.error(t),r.step="payment"})},r.apply=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"coupon";d.add(function(e){var t={Currency:h.valid.Currency,Cycle:h.valid.Cycle,PlanIDs:b(h.planIDs)};return"coupon"===e&&(t.CouponCode=r.coupon),"gift"===e&&(t.GiftCode=r.gift),t}(e)).then(function(e){return r.valid=e}).then(function(){if(!r.valid.AmountDue)return r.method=r.methods[0];if("paypal"===r.method.value||"bitcoin"===r.method.value){var e=r.method.value;r.method.value="",_rAF(function(){t.$applyAsync(function(){r.method.value=e})})}})};var S=function(e){e.target.classList.contains("paymentForm-btn-payAnnualy")&&v("switch",{type:"cycle",Currency:h.valid.Currency,Cycle:12})};a.on("click",S),t.$on("$destroy",function(){a.on("click",S)})}}}c.$inject=["notification","gettextCatalog","eventManager","cardModel","paymentModel","paymentUtils","dashboardModel","organizationModel","paymentModalModel","$rootScope","CONSTANTS"],t.default=c},"./src/app/payment/directives/paypalView.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=a("./src/helpers/browser.js");function s(e,t,s,o,r,l,i){var c=o.MIN_PAYPAL_AMOUNT,d=o.MAX_PAYPAL_AMOUNT,u=o.CANCEL_REQUEST,p={down:s.getString("Error connecting to PayPal.",null,"Paypal component")};return{replace:!0,restrict:"E",templateUrl:a("./src/templates/payment/paypalView.tpl.html"),scope:{amount:"=",currency:"=",paypalCallback:"=callback"},link:function(e,a,s){var o=s.type,m=void 0===o?"payment":o,f=void 0,g=function(){i.reset("paypal"),window.removeEventListener("message",h,!1)};function h(t){if("https://secure.protonmail.com"===(t.origin||t.originalEvent.origin)){var a=t.data,s=a.payerID,o=a.paymentID,r=a.cancel,l=a.token,i=(0,n.parseURL)(e.approvalURL).searchObject;l===(void 0===i?{}:i).token&&(g(),e.paypalCallback({PayerID:s,PaymentID:o,Cancel:r}))}}e.openPaypalTab=function(){g(),i.add({type:"paypal",win:window.open(e.approvalURL,"PayPal"),unsubscribe:function(){window.removeEventListener("message",h,!1)}}),window.addEventListener("message",h,!1)},function(){e.errorDetails=null,e.paypalNetworkError=!1;var a=e.amount;"payment"===m&&a<c?e.errorDetails={type:"validator.amount",validator:"min",amount:c}:a>d?e.errorDetails={type:"validator.amount",validator:"max",amount:d}:(f=r.defer(),t.paypal({Amount:a,Currency:e.currency},{timeout:f.promise}).then(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;return f=null,void 0===e?{}:e}).then(function(t){var a=t.ApprovalURL;return e.approvalURL=a}).catch(function(t){var a=t.data,n=void 0===a?{}:a;if(22802===n.Code&&(e.paypalNetworkError=!0),f=null,!l.isCancelledRequest(t))throw new Error(t.message||n.Error||p.down)}))}(),e.$on("$destroy",function(){f&&f.resolve(u),f=null,i.reset("paypal")})}}}s.$inject=["notification","Payment","gettextCatalog","CONSTANTS","$q","networkUtils","windowModel"],t.default=s},"./src/app/payment/directives/tosubscribeOverview.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){return{restrict:"E",replace:!0,templateUrl:a("./src/templates/payment/tosubscribeOverview.tpl.html")}}},"./src/app/payment/factories/donateModel.js":function(e,t,a){"use strict";function n(e,t,a,n,s){var o={credit:{error:a.getString("Error while processing credit.",null,"Donation modal")},donation:{success:a.getString("Your support is essential to keeping ProtonMail running. Thank you for supporting internet privacy!",null,"Donation modal"),error:a.getString("Error while processing donation.",null,"Donation modal")},topUp:{success:a.getString("Credits added",null,"topUp modal")}},r=s(["payments"]),l=r.on,i=r.dispatcher,c=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return i.payments(e,t)},d=function(a,n){return"topUp"===a?function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.credit(a).then(function(){return o.topUp.success}).catch(function(){throw new Error(o.credit.error)});return t.track(n),n}(n):function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.donate(a).then(function(){return o.donation.success}).catch(function(){throw new Error(o.donation.error)});return t.track(n),n}(n)};return l("payments",function(e,t){var a=t.type,s=t.data;"donate.submit"===a&&function(e){var t=e.type,a=e.options;"humanVerification"!==e.action&&(c(t+".request.load"),d(t,a).then(n.success).then(function(){return c(t+".request.success")}).catch(function(e){return c(t+".request.error",e)}))}(void 0===s?{}:s)}),{init:angular.noop}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["Payment","networkActivityTracker","gettextCatalog","notification","dispatchers"],t.default=n},"./src/app/payment/factories/giftCodeModel.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=a("./src/app/constants.js");t.default=function(){var e=function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").replace(/-|\s|\t/g,"")};return{isValid:function(t){var a=e(t);return a.length===n.GIFT_CODE_LENGTH&&/\w\d+/g.test(a)}}}},"./src/app/payment/factories/paymentBitcoinModel.js":function(e,t,a){"use strict";function n(e,t,a,n){var s=e(["payment"]),o=s.on,r=s.dispatcher,l=angular.noop,i={},c=n.MIN_BITCOIN_AMOUNT,d=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return r.payment(e,t)},u=function(e,t){return i[e]=t},p=function(e){return angular.copy(e?i[e]:i)},m=function(e){var n=e.amount,s=e.currency,o=e.type;if(i.input=null,i.payment=null,u("input",{amount:n,currency:s,type:o}),n<c)return d("bitcoin.validator.error",{type:"amount"});if("donation"===o)return d("bitcoin.success",{isDonation:!0});var r=t.btc(n,s).then(function(e){var t=e.data;return void 0===t?{}:t}).then(function(e){return u("payment",e),e}).then(function(e){return d("bitcoin.success",e)}).catch(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data,t=void 0===e?{}:e;throw d("bitcoin.error",t.Error),t.Error});a.track(r)};return o("payment",function(e,t){var a=t.type,n=t.data;"bitcoin.submit"===a&&m(n)}),{get:p,load:l,isDonation:function(){return"donation"===p("input").type}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["dispatchers","Payment","networkActivityTracker","CONSTANTS"],t.default=n},"./src/app/payment/factories/paymentModalModel.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){var e=void 0;return{get:function(){return e},set:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e=t},clear:function(){return e={}}}}},"./src/app/payment/factories/paymentModel.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/babel-runtime/core-js/promise.js"),o=(n=s)&&n.__esModule?n:{default:n};function r(e,t,a,n,s,r){var l={},i={SUBSCRIBE_ERROR:n.getString("Error subscribing",null,"Error"),COUPON_INVALID:n.getString("Invalid coupon code",null,"Error"),GIFT_INVALID:n.getString("Invalid gift code",null,"Error"),COUPON_SUCCESS:n.getString("Coupon code accepted",null,"Coupon code request"),GIFT_SUCCESS:n.getString("Gift code accepted",null,"Gift code request")},c=r().on,d=function(e){return l[e]},u=function(e,t){return l[e]=t},p=function(e){return e?l[e]=null:l={}},m=function(e,t){return function(a,n){return a&&p(e),d(e)?o.default.resolve(d(e)):t(n)}},f=m("status",function(){return t.status().then(function(e){var t=e.data;return void 0===t?{}:t}).then(function(e){return u("status",e)}).catch(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;throw Error((void 0===e?{}:e).Error)})}),g=m("methods",function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).subuser?o.default.resolve([]):t.methods().then(function(e){var t=e.data;return(void 0===t?{}:t).PaymentMethods}).then(function(e){return u("methods",e)}).catch(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;throw Error((void 0===e?{}:e).Error)})});return c("logout",function(){p()}),{getStatus:f,getMethods:g,get:d,canPay:function(){var e=d("status")||{},t=e.Stripe,a=e.Paymentwall;return t||a},subscribe:function(e){return t.subscribe(e).then(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;return void 0===e?{}:e}).catch(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;throw Error((void 0===e?{}:e).Error||i.SUBSCRIBE_ERROR)})},add:function(e){var n=t.valid(e).then(function(){var t=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data,a=void 0===t?{}:t;if(e.CouponCode&&0===a.CouponDiscount)throw new Error(i.COUPON_INVALID);if(e.GiftCode&&!a.Gift)throw new Error(i.GIFT_INVALID);return a}).then(function(t){return e.CouponCode&&s.success(i.COUPON_SUCCESS),e.GiftCode&&s.success(i.GIFT_SUCCESS),t});return a.track(n),n},useGiftCode:function(n){var s=t.validateCredit({GiftCode:n}).then(function(){return t.credit({GiftCode:n,Amount:0})}).then(function(){return e.call()});return a.track(s),s},clear:p}}r.$inject=["eventManager","Payment","networkActivityTracker","gettextCatalog","notification","dispatchers"],t.default=r},"./src/app/payment/index.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=I(a("./src/app/payment/directives/bitcoinDetails.js")),s=I(a("./src/app/payment/directives/bitcoinQrcode.js")),o=I(a("./src/app/payment/directives/bitcoinView.js")),r=I(a("./src/app/payment/directives/cardIcon.js")),l=I(a("./src/app/payment/directives/cardPanel.js")),i=I(a("./src/app/payment/directives/donation.js")),c=I(a("./src/app/payment/directives/donationExternalSubmit.js")),d=I(a("./src/app/payment/directives/featuresList.js")),u=I(a("./src/app/payment/directives/giftCodeBtn.js")),p=I(a("./src/app/payment/directives/giftCodeInput.js")),m=I(a("./src/app/payment/directives/giftCodeValidator.js")),f=I(a("./src/app/payment/directives/payInvoiceBtn.js")),g=I(a("./src/app/payment/directives/paymentForm.js")),h=I(a("./src/app/payment/directives/paypalView.js")),v=I(a("./src/app/payment/directives/tosubscribeOverview.js")),b=I(a("./src/app/payment/factories/donateModel.js")),y=I(a("./src/app/payment/factories/giftCodeModel.js")),_=I(a("./src/app/payment/factories/paymentBitcoinModel.js")),w=I(a("./src/app/payment/factories/paymentModalModel.js")),x=I(a("./src/app/payment/factories/paymentModel.js")),j=I(a("./src/app/payment/services/brick.js")),k=I(a("./src/app/payment/services/paymentPlansFormator.js")),A=I(a("./src/app/payment/services/paymentUtils.js")),S=I(a("./src/app/payment/modals/cardModal.js")),M=I(a("./src/app/payment/modals/customizeInvoiceModal.js")),P=I(a("./src/app/payment/modals/donateModal.js")),E=I(a("./src/app/payment/modals/giftCodeModal.js")),C=I(a("./src/app/payment/modals/payModal.js")),T=I(a("./src/app/payment/modals/paymentModal.js"));function I(e){return e&&e.__esModule?e:{default:e}}t.default=angular.module("proton.payment",[]).directive("bitcoinDetails",n.default).directive("bitcoinQrcode",s.default).directive("bitcoinView",o.default).directive("cardIcon",r.default).directive("cardPanel",l.default).directive("donation",i.default).directive("donationExternalSubmit",c.default).directive("featuresList",d.default).directive("giftCodeBtn",u.default).directive("giftCodeInput",p.default).directive("giftCodeValidator",m.default).directive("payInvoiceBtn",f.default).directive("paymentForm",g.default).directive("paypalView",h.default).directive("tosubscribeOverview",v.default).factory("donateModel",b.default).factory("giftCodeModel",y.default).factory("paymentBitcoinModel",_.default).factory("paymentModalModel",w.default).factory("paymentModel",x.default).factory("brick",j.default).factory("paymentPlansFormator",k.default).factory("paymentUtils",A.default).factory("cardModal",S.default).factory("customizeInvoiceModal",M.default).factory("donateModal",P.default).factory("giftCodeModal",E.default).factory("payModal",C.default).factory("paymentModal",T.default).name},"./src/app/payment/modals/cardModal.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/babel-runtime/core-js/promise.js"),o=(n=s)&&n.__esModule?n:{default:n};function r(e,t,n,s,r,l){return e({controllerAs:"ctrl",templateUrl:a("./src/templates/modals/card.tpl.html"),controller:["params",function(e){var a=this;a.card={},e.method?(a.text=n.getString("Update your credit card information.",null,"Credit card modal"),a.mode="display",a.panel={fullname:e.method.Details.Name,number:"•••• •••• •••• "+e.method.Details.Last4,month:e.method.Details.ExpMonth,year:e.method.Details.ExpYear,cvc:"•••",zip:e.method.Details.ZIP,country:e.method.Details.Country}):(a.text=n.getString("Add a credit card.",null,"Credit card modal"),a.mode="edition");a.edit=function(){a.card.fullname=a.panel.fullname,a.mode="edition"},a.submit=function(){var n=function(){if("edition"===a.mode){var e=s(a.card);return t.updateMethod({Type:"card",Details:e.details()}).then(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;return(void 0===e?{}:e).PaymentMethod}).catch(function(e){var t=e.data;throw Error((void 0===t?{}:t).Error)})}return o.default.resolve()}().then(function(e){return l.getMethods(!0).then(function(t){return{method:e,methods:t}})}).then(e.close);r.track(n)},a.cancel=e.close}]})}r.$inject=["pmModal","Payment","gettextCatalog","cardModel","networkActivityTracker","paymentModel"],t.default=r},"./src/app/payment/modals/customizeInvoiceModal.js":function(e,t,a){"use strict";function n(e,t,n,s,o,r){return t({controllerAs:"ctrl",templateUrl:a("./src/templates/modals/customizeInvoice.tpl.html"),controller:["$scope","params",function(t,a){var l=this;this.text=o.get("InvoiceText")||"",this.cancel=a.cancel,this.submit=function(){if(!t.customizeInvoiceModalForm.$invalid){var o=n.invoiceText({InvoiceText:l.text}).then(function(){s.success("Invoice customized"),a.cancel()}).then(e.call);r.track(o)}}}]})}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["eventManager","pmModal","settingsApi","notification","userSettingsModel","networkActivityTracker"],t.default=n},"./src/app/payment/modals/donateModal.js":function(e,t,a){"use strict";function n(e,t){return t({controllerAs:"ctrl",templateUrl:a("./src/templates/modals/donate.tpl.html"),controller:["params",function(t){var a=e(),n=a.on,s=a.unsubscribe;this.typeOfModal=t.type,this.close=t.close,n("payments",function(e,a){var n=a.type;/^(donation|topUp)\.request\.success/.test(n)&&t.close()}),this.$onDestroy=function(){return s()}}]})}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["dispatchers","pmModal"],t.default=n},"./src/app/payment/modals/giftCodeModal.js":function(e,t,a){"use strict";function n(e,t,n,s,o){var r={success:t.getString("Code applied",null,"Success")};return o({controllerAs:"ctrl",templateUrl:a("./src/templates/payment/giftCodeModal.tpl.html"),controller:["params",function(t){var a=this,o=e(),l=o.on,i=o.unsubscribe;l("payments",function(e,a){"giftCode.success"===a.type&&t.close()}),this.submit=function(){s.useGiftCode(a.giftCode).then(function(){n.success(r.success),t.close()})},this.close=t.close,this.$onDestroy=function(){return i()}}]})}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["dispatchers","gettextCatalog","notification","paymentModel","pmModal"],t.default=n},"./src/app/payment/modals/payModal.js":function(e,t,a){"use strict";function n(e,t,n,s,o,r,l,i){var c={success:o.getString("Invoice paid",null,"Info")};return e({controllerAs:"ctrl",templateUrl:a("./src/templates/modals/pay.tpl.html"),controller:["params",function(e){var a=this;this.checkInvoice=e.checkInvoice,this.invoice=e.invoice,this.cancel=e.close;var o=r.generateMethods({modal:"invoice"}),d=o.list,u=o.selected;this.methods=d,this.method=u;this.getPaypalAmount=function(){return a.checkInvoice.AmountDue/100},this.paypalCallback=function(e){a.paypalConfig=e,a.submit()},this.submit=function(){var o,r;a.process=!0,function(e){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.pay(e,a).catch(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;throw Error((void 0===e?{}:e).Error)});return l.track(n),n}(e.invoice.ID,(o=a.checkInvoice.AmountDue,r={Amount:o,Currency:a.checkInvoice.Currency},o?("use.card"===a.method.value&&(r.PaymentMethodID=a.method.ID),"card"===a.method.value&&(r.Payment={Type:"card",Details:i(a.card).details()}),"paypal"===a.method.value&&(r.Payment={Type:"paypal",Details:a.paypalConfig}),r):r)).then(s.call).then(function(){return a.process=!1}).then(function(){return e.close(!0)}).then(function(){return n.success(c.success)})}}]})}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["pmModal","Payment","notification","eventManager","gettextCatalog","paymentUtils","networkActivityTracker","cardModel"],t.default=n},"./src/app/payment/modals/paymentModal.js":function(e,t,a){"use strict";function n(e,t,n){return t({controllerAs:"ctrl",templateUrl:a("./src/templates/modals/payment/modal.tpl.html"),controller:["params",function(t){var a=this,s=e(["subscription"]),o=s.on,r=s.unsubscribe;n.set(t),o("subscription",function(e,n){"update"===n.type&&"payment"===a.step&&t.cancel()}),this.$onDestroy=function(){r(),n.clear()}}]})}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["dispatchers","pmModal","paymentModalModel"],t.default=n},"./src/app/payment/services/brick.js":function(e,t,a){"use strict";function n(e){var t=void 0,a=document.createElement("IFRAME"),n=e.IFRAME_SECURE_ORIGIN;function s(e,s){(e.origin||e.originalEvent.origin)===n&&(window.removeEventListener("message",t),document.body.removeChild(a),s(e.data))}return a.style.display="none",a.src=n+"/paymentwall.html",a.setAttribute("sandbox","allow-scripts allow-same-origin"),{getFingerprint:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:angular.noop;a.onload=function(e){return t=function(t){return s(t,e)},function(){window.addEventListener("message",t,!1),a.contentWindow.postMessage({action:"getFingerprint"},n)}}(e),document.body.appendChild(a)}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["CONSTANTS"],t.default=n},"./src/app/payment/services/paymentPlansFormator.js":function(e,t,a){"use strict";function n(e,t){var a={MSG_PER_DAY:t.getString("Messages per day",null,"Plan feature"),LABELS:t.getString("Labels",null,"Plan feature"),FOLDERS:t.getString("Folders",null,"Plan feature"),UNLIMITED_LABELS:t.getString("Unlimited Folders / Unlimited labels",null,"Plan feature"),SUPPORT:t.getString("Support",null,"Plan feature"),LIMITED_SUPPORT:t.getString("Limited support",null,"Plan feature"),PRIORITY_SUPPORT:t.getString("Priority support",null,"Plan feature"),UNLIMITED_SENDING:t.getString("Unlimited sending",null,"Plan feature")},n=function(e){return e+" "+a.MSG_PER_DAY},s=function(e,t){return e+" "+a.FOLDERS+" / "+t+" "+a.LABELS};return function(t,o){return function(){var r=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data,l=void 0===r?{}:r;return l.Plans.unshift({Type:1,Cycle:o,Currency:t,Name:"free",Title:"ProtonMail Free",Amount:0,MaxDomains:0,MaxAddresses:1,MaxSpace:500*e.BASE_SIZE*e.BASE_SIZE,MaxMembers:1,TwoFactor:0}),l.Plans.forEach(function(e){switch(e.Name){case"free":e.sending=n(150),e.labels=s(3,20),e.support=a.LIMITED_SUPPORT;break;case"plus":e.sending=n(1e3),e.labels=s(20,200),e.support=a.SUPPORT;break;case"professional":e.sending=a.UNLIMITED_SENDING,e.labels=a.UNLIMITED_LABELS,e.support=a.PRIORITY_SUPPORT;break;case"business":e.sending="???",e.labels="???",e.support="???";break;case"visionary":e.sending=a.UNLIMITED_SENDING,e.labels=a.UNLIMITED_LABELS,e.support=a.PRIORITY_SUPPORT;break;case"vpnbasic":e.support=a.SUPPORT;break;case"vpnplus":e.support=a.PRIORITY_SUPPORT}}),l.Plans=l.Plans,l}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["CONSTANTS","gettextCatalog"],t.default=n},"./src/app/payment/services/paymentUtils.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=l(a("./node_modules/babel-runtime/helpers/toConsumableArray.js")),s=l(a("./node_modules/lodash/find.js")),o=a("./src/app/constants.js"),r=a("./src/helpers/browser.js");function l(e){return e&&e.__esModule?e:{default:e}}function i(e,t,a){var l=o.CONSTANTS.CYCLE,i=l.MONTHLY,c=l.YEARLY,d=l.TWO_YEARS,u={cash:e.getString("Cash",null,"Payment method"),card:e.getString("Credit Card",null,"Payment method")};return{generateMethods:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},o=e.methods,l=void 0===o?t.get("methods"):o,p=e.choice,m=e.Cycle,f=void 0===m?c:m,g=e.Amount,h=e.modal,v=[{value:"card",label:u.card}],b=g>5e3&&f===i,y=f===c,_=f===d,w="invoice"===(void 0===h?"":h);!(0,r.isIE11)()&&(y||_||b||w)&&v.push({label:"PayPal",value:"paypal"}),a.is("signup")||(v.push({value:"bitcoin",label:"Bitcoin"}),v.push({value:"cash",label:u.cash}));var x=v[0];if((l||[]).length){var j=v.length;v.push.apply(v,(0,n.default)(function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).map(function(e){var t=e.ID,a=void 0===t?"":t,n=e.Details;return{ID:a,label:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).Last4;return"•••• •••• •••• "+(void 0===e?"":e)}(void 0===n?{}:n),value:"use.card"}})}(l))),x=v[j]}return p&&(x=(0,s.default)(v,{value:p})),{list:v,selected:x}}}}i.$inject=["gettextCatalog","paymentModel","$state"],t.default=i},"./src/app/routes.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=u(a("./node_modules/babel-runtime/helpers/defineProperty.js")),s=u(a("./node_modules/babel-runtime/helpers/slicedToArray.js")),o=u(a("./node_modules/babel-runtime/core-js/object/keys.js")),r=u(a("./node_modules/babel-runtime/core-js/promise.js")),l=u(a("./node_modules/lodash/filter.js")),i=u(a("./node_modules/lodash/reduce.js")),c=u(a("./node_modules/lodash/includes.js")),d=a("./src/app/constants.js");function u(e){return e&&e.__esModule?e:{default:e}}t.default=angular.module("proton.routes",["ui.router","proton.authentication","proton.constants","proton.utils"]).config(["$stateProvider","$urlRouterProvider","$locationProvider",function(e,t,u){e.state("login",{url:"/login",views:{"main@":{templateUrl:a("./src/templates/layout/login.tpl.html")},"panel@login":{controller:"LoginController",templateUrl:a("./src/templates/views/login.tpl.html")}},resolve:{lang:["i18nLoader",function(e){return e.translate()}]}}).state("login.unlock",{url:"/unlock",views:{"panel@login":{controller:"LoginController",templateUrl:a("./src/templates/views/unlock.tpl.html")}}}).state("login.setup",{url:"/setup",views:{"panel@login":{controller:"SetupController",templateUrl:a("./src/templates/views/setup.tpl.html")}},resolve:{domains:["pmDomainModel",function(e){return e.fetch()}],user:["User",function(e){return e.get().then(function(e){return e.data.User})}]}}).state("login.sub",{url:"/sub",views:{"panel@login":{controller:"LoginController",templateUrl:a("./src/templates/views/unlock.tpl.html")}},onEnter:["$rootScope","AppModel",function(e,t){e.isLoggedIn=!0,t.set("domoArigato",!0)}]}).state("pre-invite",{url:"/pre-invite/:selector/:token",views:{"main@":{templateUrl:a("./src/templates/layout/pre.tpl.html")}},onEnter:["$state","$stateParams","$rootScope","notification","Invite","gettextCatalog","AppModel",function(e,t,a,n,s,o,r){var l=t.token,i=t.selector,c=o.getString("Invalid invite link",null,"Error");a.loggingOut=!1,s.check(l,i,d.INVITE_MAIL).then(function(){var t=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;if(1===(void 0===t?{}:t).Valid)return r.set("preInvited",!0),e.go("signup",{inviteToken:l,inviteSelector:i});throw new Error(c)}).catch(function(t){var a=t.data,s=void 0===a?{}:a;n.error(s.Error||c),e.go("login")})}]}).state("invite",{url:"/invite",resolve:{direct:["$state","User","AppModel",function(e,t,a){return a.is("preInvited")?r.default.resolve():t.direct().then(function(){var t=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;if(1!==(void 0===t?{}:t).Direct)return window.location.href=d.INVITE_URL,r.default.reject();e.go("signup")}).catch(function(){return e.go("login"),r.default.reject()})}]}}).state("secured.resetTheme",{url:"/reset-theme",resolve:{reset:["user","networkActivityTracker","settingsMailApi","notification","eventManager","gettextCatalog","$state",function(e,t,a,n,s,o,r){var l={SUCCESS:o.getString("Theme reset! Redirecting...",null,"Info"),ERROR:o.getString("Unable to reset theme",null,"Error")},i=a.updateTheme({Theme:""}).then(function(){return n.success(l.SUCCESS)}).catch(function(){throw new Error(l.ERROR)}).then(s.call).then(function(){return r.go("secured.inbox")});t.track(i)}]}}).state("signup",{url:"/create/new?plan&billing¤cy",params:{inviteSelector:void 0,inviteToken:void 0,plan:null,billing:null,currency:null},views:{"main@":{controller:"SignupController",templateUrl:a("./src/templates/layout/auth.tpl.html")},"panel@signup":{templateUrl:a("./src/templates/views/signup.tpl.html")}},resolve:{lang:["i18nLoader",function(e){return e.translate()}],plans:["$stateParams","Payment",function(e,t){var a=e.currency,n=e.billing,s=e.plan,o=(0,c.default)(d.CURRENCIES,a),l=(0,c.default)(d.BILLING_CYCLE,+n),i=(0,c.default)(["free","plus","visionary","professional"],s);return l&&o&&i?"free"===s?r.default.resolve([]):t.plans(a,n).then(function(e){return e.data.Plans}):r.default.resolve([])}],optionsHumanCheck:["signupModel",function(e){return e.getOptionsVerification()}],domains:["pmDomainModel",function(e){return e.fetch()}]}}).state("support",{abstract:!0,url:"/help",views:{"main@":{controller:"SupportController",templateUrl:a("./src/templates/layout/auth.tpl.html")}}}).state("support.message",{url:"/message",onEnter:["$state","$stateParams",function(e,t){null===t.data&&e.go("login")}],views:{"panel@support":{templateUrl:a("./src/templates/views/support-message.tpl.html")}}}).state("support.reset-password",{url:"/reset-login-password?username&token",params:{username:null,token:null},views:{"panel@support":{templateUrl:a("./src/templates/views/reset-login-password.tpl.html")}}}).state("eo",{abstract:!0,views:{"main@":{templateUrl:a("./src/templates/layout/outside.tpl.html")}},resolve:{lang:["i18nLoader",function(e){return e.translate()}]}}).state("eo.unlock",{url:"/eo/:tag",resolve:{encryptedToken:["Eo","$stateParams",function(e,t){return e.token(t.tag).then(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;return(void 0===e?{}:e).Token}).catch(function(){return r.default.resolve(!1)})}]},views:{content:{templateUrl:a("./src/templates/views/outside.unlock.tpl.html"),controller:["$scope","$state","$stateParams","pmcw","encryptedToken","networkActivityTracker","notification","secureSessionStorage",function(e,t,a,n,s,o,r,l){e.params={MessagePassword:""},e.tokenError=!s,e.unlock=function(){var i=n.getMessage(s),c=n.decryptMessage({message:i,password:e.params.MessagePassword}).then(function(s){l.setItem("proton:decrypted_token",s.data),l.setItem("proton:encrypted_password",n.encode_utf8_base64(e.params.MessagePassword)),t.go("eo.message",{tag:a.tag})}).catch(function(e){console.error(e),r.error("Wrong Mailbox Password.")});o.track(c)}}]}}}).state("eo.message",{url:"/eo/message/:tag",resolve:{app:["lazyLoader","i18nLoader",function(e,t){return e.app().then(t.localizeDate)}],messageData:["app","$stateParams","$q","Eo","messageModel","pmcw","secureSessionStorage",function(e,t,a,n,s,o,r){var l=o.decode_utf8_base64(r.getItem("proton:encrypted_password"));return n.message(r.getItem("proton:decrypted_token"),t.tag).then(function(e){var t=e.data,n=(void 0===t?{}:t).Message,r=(0,i.default)(n.Replies,function(e,t){var a=o.decryptMessage({message:o.getMessage(t.Body),password:l}).then(function(e){var a=e.data;return t.DecryptedBody=a});return e.push(a),e},[o.decryptMessage({message:o.getMessage(n.Body),password:l}).then(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;return n.DecryptedBody=e})]);return a.all(r).then(function(){return s(n)})})}]},views:{content:{controller:"OutsideController",templateUrl:a("./src/templates/views/outside.message.tpl.html")}}}).state("eo.reply",{url:"/eo/reply/:tag",resolve:{messageData:["$stateParams","Eo","messageModel","pmcw","secureSessionStorage",function(e,t,a,n,s){var o=e.tag,r=s.getItem("proton:decrypted_token"),i=n.decode_utf8_base64(s.getItem("proton:encrypted_password"));return t.message(r,o).then(function(e){var t=e.data.Message;return t.publicKey=e.data.PublicKey,n.decryptMessage({message:n.getMessage(t.Body),password:i}).then(function(e){var n=(0,l.default)(t.Attachments,function(e){return e.Headers&&(e.Headers["content-id"]||e.Headers["content-location"])});return t.DecryptedBody=e.data,t.Attachments=n,t.NumAttachments=n.length,a(t)})})}]},views:{content:{controller:"OutsideController",templateUrl:a("./src/templates/views/outside.reply.tpl.html")}},onEnter:["gettextCatalog",function(e){window.onbeforeunload=function(){return e.getString("By leaving now, you will lose what you have written in this email. You can save a draft if you want to come back to it later on.",null)}}],onExit:function(){window.onbeforeunload=void 0}}).state("secured",{abstract:!0,views:{"main@":{controller:"SecuredController",templateUrl:a("./src/templates/layout/secured.tpl.html")},"sidebar@secured":{controller:"SidebarController",templateUrl:a("./src/templates/layout/sidebar.tpl.html")}},resolve:{app:["lazyLoader",function(e){return e.app()}],user:["app","authentication","$http","pmcw","secureSessionStorage","i18nLoader","userSettingsModel",function(e,t,a,n,s,r,l){if((0,o.default)(t.user||{}).length>0)return r.localizeDate().then(function(){return t.user});var i=s.getItem(d.OAUTH_KEY+":UID");return i?a.defaults.headers.common["x-pm-uid"]=i:angular.isDefined(s.getItem(d.OAUTH_KEY+":SessionToken"))&&(a.defaults.headers.common["x-pm-uid"]=n.decode_base64(s.getItem(d.OAUTH_KEY+":SessionToken")||""),s.setItem(d.OAUTH_KEY+":UID",a.defaults.headers.common["x-pm-uid"]),s.removeItem(d.OAUTH_KEY+":SessionToken")),t.fetchUserInfo().then(function(e){return r.translate(l.get("Locale")).then(r.localizeDate).then(function(){return e})})}],labels:["user","Label","labelsModel","networkActivityTracker",function(e,t,a,n){var s=t.query().then(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data,t=void 0===e?{}:e;a.set(t.Labels)});return n.track(s),s}],subscription:["user","subscriptionModel",function(e,t){return t.fetch()}],organization:["user","organizationModel",function(e,t){return t.fetch()}]},onEnter:["$rootScope","authentication",function(e,t){t.redirectIfNecessary()}]}).state("pgp",{url:"/pgp/:messageID",resolve:{app:["lazyLoader",function(e){return e.app()}],messageID:["app","$stateParams",function(e,t){return t.messageID?t.messageID:r.default.reject()}]},views:{"main@":{templateUrl:a("./src/templates/views/pgp.tpl.html"),controller:["$scope","$rootScope","messageID","downloadFile",function(e,t,a,n){if(e.download=function(){var t=new Blob([e.content],{type:"data:text/plain;charset=utf-8;"});n(t,"pgp.txt")},e.print=function(){window.print()},window.opener){var s=window.location.href.split("/"),o=s[0]+"//"+s[2];window.addEventListener("message",function t(a){e.$applyAsync(function(){e.content=a.data}),window.removeEventListener("message",t,!1)},!1),window.opener.postMessage(a,o)}}]}}}).state("printer",{params:{messageID:null},url:"/printer/:messageID",resolve:{app:["lazyLoader",function(e){return e.app()}],messageID:["app","$stateParams",function(e,t){return t.messageID?t.messageID:r.default.reject()}]},views:{"main@":{templateUrl:a("./src/templates/views/message.print.tpl.html"),controller:["$scope","$rootScope","$sce","messageID",function(e,t,a,n){if(e.loading=!0,window.opener){var o=window.location.href.split("/"),r=(0,s.default)(o,3),l=r[0]+"//"+r[2];window.addEventListener("message",function t(s){var o=JSON.parse(s.data);o.ID===n&&(e.$applyAsync(function(){e.content=a.trustAsHtml(o.content),e.message=o,e.loading=!1}),window.removeEventListener("message",t,!1),setTimeout(function(){return window.print()},2e3,!1))},!1),window.opener.postMessage(n,l)}}]}}}).state("secured.account",{url:"/account",views:{"content@secured":{templateUrl:a("./src/templates/views/account.tpl.html"),controller:"AccountController"}},resolve:{methods:["user","paymentModel","networkActivityTracker",function(e,t,a){return a.track(t.getMethods(null,e))}],status:["user","paymentModel","networkActivityTracker",function(e,t,a){return a.track(t.getStatus())}]},onEnter:["AppModel",function(e){e.set("inboxSidebar",!1),e.set("contactSidebar",!1),e.set("settingsSidebar",!0)}]}).state("secured.labels",{url:"/labels",views:{"content@secured":{templateUrl:a("./src/templates/views/labels.tpl.html"),controller:"LabelsController"}},resolve:{methods:["user","paymentModel","networkActivityTracker",function(e,t,a){return a.track(t.getMethods(null,e))}],status:["user","paymentModel","networkActivityTracker",function(e,t,a){return a.track(t.getStatus())}]},onEnter:["AppModel",function(e){e.set("inboxSidebar",!1),e.set("contactSidebar",!1),e.set("settingsSidebar",!0)}]}).state("secured.security",{url:"/security",views:{"content@secured":{templateUrl:a("./src/templates/views/security.tpl.html"),controller:"SecurityController"}},resolve:{methods:["user","paymentModel","networkActivityTracker",function(e,t,a){return a.track(t.getMethods(null,e))}],status:["user","paymentModel","networkActivityTracker",function(e,t,a){return a.track(t.getStatus())}]},onEnter:["AppModel",function(e){e.set("inboxSidebar",!1),e.set("contactSidebar",!1),e.set("settingsSidebar",!0)}]}).state("secured.appearance",{url:"/appearance",views:{"content@secured":{templateUrl:a("./src/templates/views/appearance.tpl.html"),controller:"AppearanceController"}},resolve:{methods:["user","paymentModel","networkActivityTracker",function(e,t,a){return a.track(t.getMethods(null,e))}],status:["user","paymentModel","networkActivityTracker",function(e,t,a){return a.track(t.getStatus())}]},onEnter:["AppModel",function(e){e.set("inboxSidebar",!1),e.set("contactSidebar",!1),e.set("settingsSidebar",!0)}]}).state("secured.payments",{url:"/payments",views:{"content@secured":{templateUrl:a("./src/templates/views/payments.tpl.html"),controller:"PaymentsController"}},resolve:{access:["user","$state",function(e,t){return e.subuser?(t.go("secured.account"),r.default.reject()):r.default.resolve()}],invoices:["Payment","networkActivityTracker",function(e,t){return t.track(e.invoices({Owner:0}))}],organizationInvoices:["user","Payment","networkActivityTracker",function(e,t,a){return e.Role===d.PAID_ADMIN_ROLE?a.track(t.invoices({Owner:1})):{}}],methods:["user","paymentModel","networkActivityTracker",function(e,t,a){return a.track(t.getMethods(null,e))}],status:["paymentModel","networkActivityTracker",function(e,t){return t.track(e.getStatus())}]},onEnter:["AppModel",function(e){e.set("inboxSidebar",!1),e.set("contactSidebar",!1),e.set("settingsSidebar",!0)}]}).state("secured.keys",{url:"/keys",views:{"content@secured":{template:"<keys-view></keys-view>"}},resolve:{methods:["user","paymentModel","networkActivityTracker",function(e,t,a){return a.track(t.getMethods(null,e))}],status:["user","paymentModel","networkActivityTracker",function(e,t,a){return a.track(t.getStatus())}]},onEnter:["AppModel",function(e){e.set("inboxSidebar",!1),e.set("contactSidebar",!1),e.set("settingsSidebar",!0)}]}).state("secured.vpn",{url:"/vpn",views:{"content@secured":{template:"<vpn-view></vpn-view>"}},resolve:{methods:["user","paymentModel","networkActivityTracker",function(e,t,a){return a.track(t.getMethods(null,e))}],status:["user","paymentModel","networkActivityTracker",function(e,t,a){return a.track(t.getStatus())}],vpn:["user","vpnModel","networkActivityTracker",function(e,t,a){return a.track(t.fetch())}]},onEnter:["AppModel",function(e){e.set("inboxSidebar",!1),e.set("contactSidebar",!1),e.set("settingsSidebar",!0)}]}).state("secured.dashboard",{url:"/dashboard",params:{scroll:null,noBlackFridayModal:null,cycle:null,currency:null},resolve:{access:["user","$state",function(e,t){return e.subuser||e.Role===d.PAID_MEMBER_ROLE?(t.go("secured.account"),r.default.reject()):r.default.resolve()}],dashboardPlans:["user","dashboardModel","subscriptionModel",function(e,t,a){return a.fetch().then(function(e){var a=e.Currency;return t.loadPlans(a)})}],methods:["user","paymentModel","networkActivityTracker",function(e,t,a){return a.track(t.getMethods(null,e))}],status:["user","paymentModel","networkActivityTracker",function(e,t,a){return a.track(t.getStatus())}]},views:{"content@secured":{templateUrl:a("./src/templates/views/dashboard.tpl.html"),controller:"DashboardController"}},onEnter:["AppModel",function(e){e.set("inboxSidebar",!1),e.set("contactSidebar",!1),e.set("settingsSidebar",!0)}]}).state("secured.members",{url:"/members",params:{action:null,id:null},resolve:{access:["user","$state",function(e,t){return e.subuser||e.Role===d.PAID_MEMBER_ROLE?(t.go("secured.account"),r.default.reject()):r.default.resolve()}],members:["user","memberModel","networkActivityTracker",function(e,t,a){return e.Role===d.PAID_ADMIN_ROLE?a.track(t.fetch()):{data:{}}}],domains:["user","domainModel","networkActivityTracker",function(e,t,a){return e.Role===d.PAID_ADMIN_ROLE?a.track(t.fetch()):{data:{}}}],pmDomains:["user","pmDomainModel","networkActivityTracker",function(e,t,a){return a.track(t.fetch())}],organization:["user","organizationModel","networkActivityTracker",function(e,t,a){return a.track(t.fetch())}],organizationKeys:["user","organizationKeysModel","networkActivityTracker",function(e,t,a){return e.Role===d.PAID_ADMIN_ROLE?a.track(t.fetch()):r.default.resolve()}],methods:["user","paymentModel","networkActivityTracker",function(e,t,a){return a.track(t.getMethods(null,e))}],status:["user","paymentModel","networkActivityTracker",function(e,t,a){return a.track(t.getStatus())}]},views:{"content@secured":{templateUrl:a("./src/templates/views/members.tpl.html"),controller:"MembersController"}},onEnter:["AppModel",function(e){e.set("inboxSidebar",!1),e.set("contactSidebar",!1),e.set("settingsSidebar",!0)}]}).state("secured.domains",{url:"/domains",resolve:{access:["user","$state",function(e,t){return e.subuser||e.Role===d.PAID_MEMBER_ROLE?(t.go("secured.account"),r.default.reject()):r.default.resolve()}],members:["user","memberModel","networkActivityTracker",function(e,t,a){return e.Role===d.PAID_ADMIN_ROLE?a.track(t.fetch()):{data:{}}}],domains:["user","domainModel","networkActivityTracker",function(e,t,a){return e.Role===d.PAID_ADMIN_ROLE?a.track(t.fetch()):{data:{}}}],pmDomains:["pmDomainModel","networkActivityTracker",function(e,t){return t.track(e.fetch())}],organization:["user","organizationModel","networkActivityTracker",function(e,t,a){return a.track(t.fetch())}],organizationKeys:["user","organizationKeysModel","networkActivityTracker",function(e,t,a){return e.Role===d.PAID_ADMIN_ROLE?a.track(t.fetch()):r.default.resolve()}],methods:["user","paymentModel","networkActivityTracker",function(e,t,a){return a.track(t.getMethods(null,e))}],status:["user","paymentModel","networkActivityTracker",function(e,t,a){return a.track(t.getStatus())}]},views:{"content@secured":{templateUrl:a("./src/templates/views/domains.tpl.html"),controller:"DomainsController"}},onEnter:["AppModel",function(e){e.set("inboxSidebar",!1),e.set("contactSidebar",!1),e.set("settingsSidebar",!0)}]}).state("secured.bridge",{url:"/bridge",views:{"content@secured":{template:"<bridge-view></bridge-view>"}},onEnter:["AppModel",function(e){e.set("inboxSidebar",!1),e.set("contactSidebar",!1),e.set("settingsSidebar",!0)}]}).state("secured.pmme",{url:"/pmme",views:{"content@secured":{template:"<pm-me-view></pm-me-view>"}},onEnter:["AppModel",function(e){e.set("inboxSidebar",!1),e.set("contactSidebar",!1),e.set("settingsSidebar",!0)}]}).state("secured.filters",{url:"/filters",resolve:{vendor:["app","lazyLoader",function(e,t){return t.extraVendor()}],loadSpamLists:["vendor","user","spamListModel","networkActivityTracker",function(e,t,a,n){return n.track(a.load())}],methods:["user","paymentModel","networkActivityTracker",function(e,t,a){return a.track(t.getMethods(null,e))}],status:["user","paymentModel","networkActivityTracker",function(e,t,a){return a.track(t.getStatus())}]},views:{"content@secured":{template:"<filter-view></filter-view>"}},onEnter:["AppModel",function(e){e.set("inboxSidebar",!1),e.set("contactSidebar",!1),e.set("settingsSidebar",!0)}]}).state("secured.autoresponder",{url:"/autoresponder",views:{"content@secured":{template:"<autoresponder-view></autoresponder-view>"}},onEnter:["AppModel",function(e){e.set("settingsSidebar",!0)}],onExit:["AppModel",function(e){e.set("settingsSidebar",!1)}]}),e.state("secured.contacts",{url:"/contacts?sort&page&keyword",params:{page:{value:null,squash:!0},keyword:{value:null,squash:!0},sort:{value:null,squash:!0}},resolve:{delinquent:["user","isDelinquent",function(e,t){return t()}]},views:{"content@secured":{template:"<contact-view></contact-view>"}},onEnter:["AppModel",function(e){e.set("inboxSidebar",!1),e.set("contactSidebar",!0),e.set("settingsSidebar",!1)}]}).state("secured.contacts.details",{url:"/:id",params:{id:null},views:{"details@secured.contacts":{template:"<contact-right-panel></contact-right-panel>"}}}),(0,o.default)(d.MAILBOX_IDENTIFIERS).forEach(function(t){var s="secured."+t,o="secured."+t+".element",r="/"+t+"?"+["email","address","page","filter","sort","label","from","to","subject","keyword","begin","end","attachments","wildcard","starred","reload","welcome"].join("&"),l={"content@secured":{controller:"ElementsController",templateUrl:a("./src/templates/partials/conversations.tpl.html")}};e.state(s,{url:r,views:l,resolve:{delinquent:["user","isDelinquent",function(e,t){return t()}]},onEnter:["AppModel",function(e){e.set("inboxSidebar",!0),e.set("contactSidebar",!1),e.set("settingsSidebar",!1)}],onExit:["AppModel","$rootScope",function(e,t){t.showWelcome=!1}]});var i=(0,n.default)({},"view@secured."+t,{template:"<element-view></element-view>"});e.state(o,{url:"/{id}",views:i,params:{id:null,messageID:null,welcome:null},onExit:["$rootScope",function(e){e.$emit("unmarkMessages")}]})}),t.otherwise(function(e){var t=e.get("$state"),a=e.get("authentication").state()||"secured.inbox";return t.href(a)}),u.html5Mode(!0)}]).name},"./src/app/settings/controllers/account.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=i(a("./node_modules/babel-runtime/core-js/object/keys.js")),s=i(a("./node_modules/lodash/reduce.js")),o=i(a("./node_modules/lodash/each.js")),r=i(a("./node_modules/lodash/find.js")),l=a("./src/app/constants.js");function i(e){return e&&e.__esModule?e:{default:e}}function c(e,t,a,i,c,d,u,p,m,f,g,h,v,b,y,_,w,x,j,k,A,S,M,P,E,C){var T=void 0,I=m(),D=I.on,O=I.unsubscribe;e.emailing={announcements:!1,features:!1,newsletter:!1,beta:!1},e.locales=[{label:"Deutsch",key:"de_DE"},{label:"English",key:"en_US"},{label:"Español",key:"es_ES"},{label:"Français",key:"fr_FR"},{label:"Italiano",key:"it_IT"},{label:"日本語",key:"ja_JP"},{label:"Nederlands",key:"nl_NL"},{label:"Polski",key:"pl_PL"},{label:"Portugues, brasileiro",key:"pt_BR"},{label:"Pусский",key:"ru_RU"},{label:"Română",key:"ro_RO"},{label:"Türkçe",key:"tr_TR"},{label:"Українська",key:"uk_UA"}],e.locale=(0,r.default)(e.locales,{key:g.getCurrentLanguage()})||e.locales[0];var L=(0,n.default)(e.emailing);function R(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:angular.noop,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:angular.noop;y.activate({params:{submit:e,cancel:function(){y.deactivate(),t()}}})}function N(){var t=C.get(),a=t.PasswordMode,n=t.News,s=t.Email;e.notificationEmail=s.Value,e.passwordReset=s.Reset,e.dailyNotifications=s.Notify,e.desktopNotificationsStatus=p.status(),e.passwordMode=a,e.isMember=i.user.Role===l.PAID_MEMBER_ROLE,function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;(0,o.default)(L,function(a,n){e.emailing[a]=!!(t&1<<n)})}(n)}function $(){var t=_.get(),a=t.Hotkeys,n=t.ShowImages,s=t.AutoSaveContacts;e.autosaveContacts=s,e.images=n&l.REMOTE?1:0,e.embedded=n&l.EMBEDDED?2:0,e.hotkeys=a}N(),$(),e.setPasswordMode=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;e.passwordMode=t},D("mailSettings",function(t,a){var n=a.type;"updated"===(void 0===n?"":n)&&e.$applyAsync(function(){$()})}),D("userSettings",function(t,a){var n=a.type;"updated"===(void 0===n?"":n)&&e.$applyAsync(function(){N()})}),e.$on("$destroy",function(){O()}),e.saveDefaultLanguage=function(){var t=e.locale.key,a=S.updateLocale({Locale:t}).then(function(){return window.location.reload()});return w.track(a),a},e.enableDesktopNotifications=function(){p.request(function(){e.desktopNotificationsStatus=p.status()})},e.testDesktopNotification=function(){p.create(g.getString("You have a new email",null,"Info"),{body:"Quarterly Operations Update - Q1 2016 ",icon:"/assets/img/notification-badge.gif",onClick:function(){window.focus()}})},e.saveNotification=function(t){R(function(a,n){y.deactivate();var s={Password:a,TwoFactorCode:n},o=S.updateEmail({Email:e.notificationEmail},s).then(function(){C.set("NotificationEmail",e.notificationEmail),t.$setUntouched(),t.$setPristine(),x.success(g.getString("Recovery/Notification email saved",null))});w.track(o)})},e.savePasswordReset=function(){R(function(t,a){y.deactivate();var n={Password:t,TwoFactorCode:a},s=S.passwordReset({PasswordReset:e.passwordReset},n).then(function(){x.success(g.getString("Preference saved",null))}).catch(function(t){var a=C.get().Email;throw e.passwordReset=a.Reset,t});w.track(s)},function(){return e.passwordReset=+!e.passwordReset})},e.saveDailyNotifications=function(){var t=S.notify({Notify:e.dailyNotifications}).then(function(){x.success(g.getString("Preference saved",null))}).catch(function(t){var a=C.get().Email;throw e.dailyNotifications=a.Notify,t});w.track(t)},e.changePassword=function(){var e={type:arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",phase:arguments.length>1&&void 0!==arguments[1]?arguments[1]:0};function t(){c.activate({params:{phase:e.phase,type:e.type,close:function(n){c.deactivate(),n?(e.phase=2,e.type="mailbox",setTimeout(function(){return t()},100)):a.cancel(T)}}})}R(function(e,n){var s=E.password({Password:e,TwoFactorCode:n}).then(function(){y.deactivate(),a.cancel(T),T=a(function(){if(c.active()){var e=g.getString("Operation timed out for security reasons, please try again",null);c.deactivate(),x.error(e)}},6e5,!1),t()});w.track(s)})},e.saveAutosaveContacts=function(){var t=M.updateAutoSaveContacts({AutoSaveContacts:e.autosaveContacts}).then(function(){x.success(g.getString("Preference saved",null))});w.track(t)},e.saveImages=function(){var t=(_.get("ShowImages")&l.EMBEDDED?2:0)+e.images,a=M.updateShowImages({ShowImages:t}).then(function(){x.success(g.getString("Image preferences updated",null))});w.track(a)},e.saveEmbedded=function(){var t=(_.get("ShowImages")&l.REMOTE?1:0)+e.embedded,a=M.updateShowImages({ShowImages:t}).then(function(){x.success(g.getString("Image preferences updated",null))});w.track(a)},e.openHotkeyModal=function(){h.activate({params:{close:function(){h.deactivate()}}})},e.saveHotkeys=function(){var t=M.updateHotkeys({Hotkeys:e.hotkeys}).then(function(){1===e.hotkeys?v.bind():v.unbind(),x.success(g.getString("Hotkeys preferences updated",null))});w.track(t)},e.deleteAccount=function(){u.activate({params:{close:function(){u.deactivate()}}})},e.changeEmailing=function(){var t=(0,s.default)(L,function(t,a,n){return t+(e.emailing[a]<<n)},0),a=g.getString("Emailing preference updated",null,"Success"),n=S.setNews({News:t}).then(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return C.set("News",t),e}).then(function(){return x.success(a)});w.track(n)}}c.$inject=["$scope","$state","$timeout","authentication","changePasswordModal","confirmModal","deleteAccountModal","desktopNotifications","dispatchers","eventManager","gettextCatalog","hotkeyModal","hotkeys","Key","loginPasswordModal","mailSettingsModel","networkActivityTracker","notification","organizationModel","passwords","pmcw","settingsApi","settingsMailApi","tools","User","userSettingsModel"],t.default=c},"./src/app/settings/controllers/appearance.js":function(e,t,a){"use strict";function n(e,t,a,n,s,o,r,l,i,c,d,u,p){var m=t(["appearance"]),f=m.on,g=m.unsubscribe,h=m.dispatcher,v=u.get(),b=v.Theme,y=v.ComposerMode,_=v.ViewLayout,w=v.MessageButtons,x=v.ViewMode;a.appearance={cssTheme:b,ComposerMode:y,ViewLayout:_,MessageButtons:w,viewMode:!x},f("changeViewMode",function(e,t){var a=t.status?l.CONVERSATION_VIEW_MODE:l.MESSAGE_VIEW_MODE;h.appearance("changingViewMode");var n=d.updateViewMode({ViewMode:a}).then(function(){return c.call()}).then(function(){p.success(o.getString("View mode saved",null,"Info")),h.appearance("viewModeChanged")});return i.track(n),n}),a.$on("$destroy",g),a.loadThemeClassic=function(){a.appearance.cssTheme="CLASSIC",a.saveTheme()},a.saveTheme=function(){var e=d.updateTheme({Theme:a.appearance.cssTheme}).then(c.call).then(function(){p.success(o.getString("Theme saved",null,"Info"))});return i.track(e),e},a.clearTheme=function(){a.appearance.cssTheme="",a.saveTheme()},a.saveComposerMode=function(){var e=parseInt(a.appearance.ComposerMode,10),t=d.updateComposerMode({ComposerMode:e}).then(c.call).then(function(){p.success(o.getString("Compose mode saved",null,"Info"))});i.track(t)},a.saveLayoutMode=function(){var e=a.appearance.ViewLayout,t=d.updateViewLayout({ViewLayout:e}).then(c.call).then(function(){p.success(o.getString("Layout saved",null))});i.track(t)},a.saveButtonsPosition=function(){var e=a.appearance.MessageButtons,t=d.updateMessageButtons({MessageButtons:e}).then(c.call).then(function(){p.success(o.getString("Buttons position saved",null,"Info"))});return i.track(t),t}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$log","dispatchers","$scope","$state","$window","gettextCatalog","$q","CONSTANTS","networkActivityTracker","eventManager","settingsMailApi","mailSettingsModel","notification"],t.default=n},"./src/app/settings/controllers/dashboard.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/lodash/defer.js"),o=(n=s)&&n.__esModule?n:{default:n};function r(e,t,a,n,s,r,l,i,c){var d=e(),u=d.on,p=d.unsubscribe,m=function(){return t.isPaidUser=r.user.Subscribed};u("updateUser",function(){t.$applyAsync(function(){return m()})}),!0===a.scroll&&(0,o.default)(function(){return $(".settings").animate({scrollTop:$("#plans").offset().top},1e3)}),m(),function(e){t.methods=e}(s),l.set("cycle",a.cycle||i.cycle()),l.set("currency",a.currency||i.currency()),n.isBlackFridayPeriod(!0)&&!a.noBlackFridayModal&&c.activate({params:{close:function(){c.deactivate()}}}),t.$on("$destroy",p)}r.$inject=["dispatchers","$scope","$stateParams","blackFridayModel","methods","authentication","dashboardConfiguration","subscriptionModel","blackFridayModal"],t.default=r},"./src/app/settings/controllers/domains.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=d(a("./node_modules/babel-runtime/regenerator/index.js")),s=d(a("./node_modules/babel-runtime/helpers/asyncToGenerator.js")),o=d(a("./node_modules/babel-runtime/helpers/toConsumableArray.js")),r=d(a("./node_modules/lodash/find.js")),l=d(a("./node_modules/lodash/each.js")),i=d(a("./node_modules/lodash/extend.js")),c=a("./src/app/constants.js");function d(e){return e&&e.__esModule?e:{default:e}}function u(e,t,a,d,u,p,m,f,g,h,v,b,y,_,w,x,j,k,A,S,M,P,E,C,T,I,D,O){var L=this;e("SignaturesController",{$scope:d,authentication:v,pmcw:T});var R=O([],!0),N=R.on,$=R.unsubscribe;d.$on("domain",function(e,t){d.closeModals(),d.addDomain(t)}),d.$on("spf",function(e,t){d.closeModals(),d.spf(t)}),d.$on("address",function(e,t){d.closeModals(),d.addAddresses(t)}),d.$on("mx",function(e,t){d.closeModals(),d.mx(t)}),d.$on("dkim",function(e,t){d.closeModals(),d.dkim(t)}),d.$on("verification",function(e,t){d.closeModals(),d.verification(t)}),d.$on("dmarc",function(e,t){d.closeModals(),d.dmarc(t)}),d.$on("$destroy",function(){$()}),N("addressModel",function(e,t){var a=t.type,n=t.data;if("address.new"===a){var s=(0,i.default)({},n.address,{MemberID:n.member.ID}),o=(0,i.default)({},n.domain,{Addresses:n.domain.Addresses.concat([s])});d.addAddresses(o)}}),N("memberActions",function(e,t){var a=t.type,n=t.data;if("edit.success"===a){var s,r=(0,i.default)({},n.domains[0]);(s=r.Addresses).push.apply(s,(0,o.default)(n.member.Addresses)),d.members.push(n.member),d.addAddresses(r)}}),d.goodSetup=function(e){var t=e.DomainName,a=void 0===t?"":t,n=e.VerifyState,s=e.Addresses,o=void 0===s?[]:s,r=e.MxState,l=e.SpfState,i=e.DkimState,c=e.DmarcState,d=a.length,u=2===n,p=o.length;return d&&u&&p&&3===r&&3===l&&4===i&&3===c},d.wizard=function(e){e.DomainName?2!==e.VerifyState?d.verification(e):e.Addresses.length?3!==e.MxState?d.mx(e):3!==e.SpfState?d.spf(e):4!==e.DkimState?d.dkim(e):3!==e.DmarcState&&d.dmarc(e):d.addAddresses(e):d.addDomain()},d.deleteDomain=function(e){var t=d.domains.indexOf(e);b.activate({params:{title:p.getString("Delete domain",null,"Title"),message:p.getString("Are you sure you want to delete this address?",null,"Info"),confirm:function(){var a=w.delete(e.ID).then(A.call).then(function(){C.success(p.getString("Domain deleted",null)),d.domains.splice(t,1),b.deactivate()});E.track(a)},cancel:function(){b.deactivate()}}})};d.changeCatchall=function(e,t){var a=t.Addresses,n=void 0===a?[]:a,s=e.catchall,o=e.DomainID,r=e.ID,i=e.Type;if(!(i===c.CUSTOM_DOMAIN_ADDRESS&&1&d.organization.Features))return C.info(p.getString("This feature is only available for ProtonMail Professional plans or higher")),void(e.catchall=!s);s&&(0,l.default)(n,function(e){return e.catchall=e.ID===r});var u=x.catchall(o,s?r:null).then(function(){C.success(p.getString("Catch-all address updated",null))});E.track(u)},d.owned=function(e){var t=g.getByID(e.ID,v.user,!0);return angular.isDefined(t)},d.privated=function(e){return 1===(0,r.default)(d.members,{ID:e.MemberID}).Private},d.addDomain=function(e){k.activate({params:{step:1,domain:e,submit:function(e){var t=w.create({Name:e}).then(function(e){return A.call().then(function(){return e})}).then(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data,t=void 0===e?{}:e;C.success(p.getString("Domain created",null,"Success")),k.deactivate(),d.verification(t.Domain)});E.track(t)},next:function(){k.deactivate(),d.verification(e)},cancel:function(){k.deactivate()}}})},d.refreshStatus=function(){E.track(x.fetch().then(function(e){d.domains=e}))};var F,U=(F=(0,s.default)(n.default.mark(function e(t){var a,s,o,r,l,i=t.ID;return n.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,w.get(i);case 3:if(a=e.sent,s=a.data,r=(o=void 0===s?{}:s).Domain||{},0!==(l=r.VerifyState)){e.next=9;break}throw new Error(p.getString("Verification did not succeed, please try again in an hour.",null,"Error"));case 9:if(1!==l){e.next=12;break}return C.error(p.getString("Wrong verification code. Please make sure you copied the verification code correctly and try again. It can take up to 24 hours for changes to take effect.",null,"Error"),{duration:3e4}),e.abrupt("return",{test:!1,data:o});case 12:if(2!==l){e.next=15;break}return C.success(p.getString("Domain verified",null)),e.abrupt("return",{test:!0,data:o});case 15:e.next=22;break;case 17:if(e.prev=17,e.t0=e.catch(0),!e.t0.message){e.next=21;break}throw e.t0;case 21:throw new Error(p.getString("Verification did not succeed, please try again in an hour.",null,"Error"));case 22:case"end":return e.stop()}},e,L,[[0,17]])})),function(e){return F.apply(this,arguments)});d.verification=function(e){var t=d.domains.indexOf(e);D.activate({params:{domain:e,step:2,submit:function(){var a=U(e).then(function(e){var a=e.test,n=e.data;a&&(d.domains[t]=n.Domain,D.deactivate(),d.addAddresses(n.Domain))});E.track(a)},next:function(){d.addAddresses(e)},close:function(){D.deactivate()}}})},d.addAddresses=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(1===d.organization.HasKeys&&d.keyStatus>0)return C.error(p.getString("Administrator privileges must be activated",null,"Error")),void u.go("secured.members");h.activate({params:{step:3,domain:e,members:d.members,next:function(){h.deactivate(),d.mx(e)},cancel:function(){h.deactivate(),A.call()}}})},d.mx=function(e){P.activate({params:{domain:e,step:4,next:function(){P.deactivate(),d.spf(e)},close:function(){P.deactivate(),A.call()}}})},d.spf=function(e){I.activate({params:{domain:e,step:5,next:function(){I.deactivate(),d.dkim(e)},close:function(){I.deactivate(),A.call()}}})},d.dkim=function(e){y.activate({params:{domain:e,step:6,next:function(){y.deactivate(),d.dmarc(e)},close:function(){y.deactivate(),A.call()}}})},d.dmarc=function(e){var t=d.domains.indexOf(e);_.activate({params:{domain:e,step:7,verify:function(){var a=w.get(e.ID).then(function(e){return A.call().then(function(){return e})}).then(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data,a=void 0===e?{}:e;d.domains[t]=a.Domain,_.deactivate()}).catch(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;throw new Error((void 0===e?{}:e).Error||p.getString("Verification did not succeed, please try again in an hour.",null,"Error"))});E.track(a)},close:function(){_.deactivate(),A.call()}}})},d.closeModals=function(){k.deactivate(),D.deactivate(),y.deactivate(),_.deactivate(),I.deactivate(),P.deactivate(),h.deactivate(),f.deactivate(),M.deactivate()},d.member=function(e){var t=(0,r.default)(d.members,{ID:e});if(angular.isDefined(t))return t}}u.$inject=["$controller","$q","$rootScope","$scope","$state","gettextCatalog","Address","addressModal","addressesModel","addressesModal","authentication","confirmModal","dkimModal","dmarcModal","domainApi","domainModel","organizationModel","domainModal","eventManager","generateOrganizationModal","memberModal","mxModal","networkActivityTracker","notification","pmcw","spfModal","verificationModal","dispatchers"],t.default=u},"./src/app/settings/controllers/labels.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(a("./node_modules/lodash/map.js")),s=r(a("./node_modules/lodash/find.js")),o=r(a("./src/helpers/dragScrollHelper.js"));function r(e){return e&&e.__esModule?e:{default:e}}function l(e,t,a,r,l,i,c,d,u,p,m,f){var g=e(),h=g.on,v=g.unsubscribe,b={labelUpdated:a.getString("Label updated",null,"Success"),folderUpdated:a.getString("Folder updated",null,"Success")},y=function(){return t.labels=p.get()};y();var _=(0,o.default)({scrollableSelector:"#labelContainer"}),w=_.dragStart,x=_.dragMove,j=_.dragEnd;function k(e){u.activate({params:{label:e,onSuccess:function(){var e=setTimeout(function(){var t=document.querySelector(".labelsState-item:last-child");t&&t.scrollIntoView(),clearTimeout(e)},500)},close:function(){u.deactivate()}}})}t.labelsDragControlListeners={containment:"#labelContainer",dragStart:w,dragMove:x,dragEnd:j,accept:function(e,t){return e.itemScope.sortableScope.$id===t.$id},orderChanged:function(){var e=(0,n.default)(t.labels,"ID");t.saveLabelOrder(e)}},h("changeNotifyLabel",function(e,a){var n=a.id,o=a.status,r=(0,s.default)(t.labels,{ID:n}),l=r.Name,i=r.Color,u=r.Display,p=r.Exclusive,g=d.update({ID:n,Name:l,Color:i,Display:u,Exclusive:p,Notify:o?1:0}).then(c.call).then(function(){return f.success(p?b.folderUpdated:b.labelUpdated)});m.track(g)}),h("labelsModel",function(e,a){var n=a.type;"cache.update"!==n&&"cache.refresh"!==n||t.$applyAsync(function(){return y()})}),t.$on("$destroy",v),t.createLabel=function(){k({Exclusive:0,Notify:1})},t.createFolder=function(){k({Exclusive:1,Notify:0})},t.editLabel=function(e){k(e)},t.sortLabels=function(){t.labels=p.sort(),t.saveLabelOrder((0,n.default)(t.labels,"ID"))},t.deleteLabel=function(e){var t=e.Exclusive?a.getString("Delete folder",null,"Title"):a.getString("Delete label",null,"Title"),n=e.Exclusive?{CONFIRM:a.getString("Are you sure you want to delete this folder? Messages in the folders aren’t deleted if the folder is deleted, they can still be found in all mail. If you want to delete all messages in a folder, move them to trash.",null,"Info"),NOTIF:a.getString("Folder deleted",null)}:{CONFIRM:a.getString("Are you sure you want to delete this label? Removing a label will not remove the messages with that label.",null,"Info"),NOTIF:a.getString("Label deleted",null)},s=n.CONFIRM,o=n.NOTIF;i.activate({params:{title:t,message:s,confirm:function(){var t=d.delete(e.ID).then(c.call).then(function(){i.deactivate(),f.success(o)});m.track(t)},cancel:function(){i.deactivate()}}})},t.saveLabelOrder=function(e){var t=d.order({LabelIDs:e}).then(c.call).then(function(){f.success(a.getString("Label order saved",null))});m.track(t)}}l.$inject=["dispatchers","$scope","gettextCatalog","$log","authentication","confirmModal","eventManager","Label","labelModal","labelsModel","networkActivityTracker","notification"],t.default=l},"./src/app/settings/controllers/members.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/lodash/find.js"),o=(n=s)&&n.__esModule?n:{default:n};function r(e,t,a,n,s,r,l){switch(e("SignaturesController",{$scope:t,authentication:n,pmcw:s}),t.roles=l.getRoles(),a.action){case"new":r.add();break;case"edit":r.edit((0,o.default)(t.members,{ID:a.id}));break;case"scroll":$(".settings").animate({scrollTop:$("#settingsMembers").offset().top},1e3)}}r.$inject=["$controller","$scope","$stateParams","authentication","pmcw","memberActions","memberModel"],t.default=r},"./src/app/settings/controllers/payments.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(a("./node_modules/lodash/map.js")),s=r(a("./node_modules/lodash/findIndex.js")),o=a("./src/app/constants.js");function r(e){return e&&e.__esModule?e:{default:e}}function l(e,t,a,r,l,i,c,d,u,p,m,f,g,h,v,b,y){e.methods=m,e.subscribed=l.user.Subscribed,e.invoices=p.data.Invoices,e.total=p.data.Total,e.delinquent=l.user.Delinquent>=o.UNPAID_STATE.DELINQUENT,e.invoiceOwner=0,e.role=l.user.Role,e.$on("updateUser",function(){e.subscribed=l.user.Subscribed,e.delinquent=l.user.Delinquent>=o.UNPAID_STATE.DELINQUENT,l.user.Role!==e.role&&t.go("secured.payments")}),e.changeInvoices=function(t){0===t?e.invoices=p.data.Invoices:1===t&&(e.invoices=v.data.Invoices),e.invoiceOwner=t},e.add=function(){i.activate({params:{close:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},a=t.methods,n=t.method;i.deactivate(),n&&(e.methods=a)}}})},e.edit=function(t){i.activate({params:{method:t,close:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},a=t.methods,n=t.method;i.deactivate(),n&&(e.methods=a)}}})},e.default=function(t){var o=e.methods.slice(),r=(0,s.default)(o,{ID:t.ID});o.splice(r,1),o.unshift(t);var l=b.order({PaymentMethodIDs:(0,n.default)(o,"ID")}).then(function(){var t=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data,n=void 0===t?{}:t;return e.methods=o,g.success(a.getString("Payment method updated",null,"Payment")),n}).catch(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;throw new Error((void 0===e?{}:e).Error||a.getString("Unable to save your changes, please try again.",null,"Error"))});h.track(l)},e.delete=function(t){var n=a.getString("Delete payment method",null,"Title"),s=a.getString("Are you sure you want to delete this payment method?",null,"Info");u.activate({params:{title:n,message:s,confirm:function(){var n=b.deleteMethod(t.ID).then(function(){return y.getMethods(!0)}).then(u.deactivate).then(function(){e.methods.splice(e.methods.indexOf(t),1),g.success(a.getString("Payment method deleted",null,"Payment"))}).catch(function(e){var t=e.data,a=void 0===t?{}:t;u.deactivate(),e.message&&g.error(e.message),a.Error&&g.error(a.Error)});h.track(n)},cancel:function(){u.deactivate()}}})},e.customize=function(){c.activate({params:{cancel:function(){c.deactivate()}}})},e.download=function(e){h.track(b.invoice(e.ID).then(function(t){var a="ProtonMail Invoice "+e.ID+".pdf",n=new Blob([t.data],{type:"application/pdf"});f(n,a)}))},e.pay=function(e){var t={methods:b.methods(),check:b.check(e.ID),status:b.status()};h.track(r.all(t).then(function(t){var n=t.methods.data.PaymentMethods,s=t.status.data;d.activate({params:{invoice:e,methods:n,status:s,currency:t.check.data.Currency,amount:t.check.data.Amount,credit:t.check.data.Credit,amountDue:t.check.data.AmountDue,checkInvoice:t.check.data,close:function(t){d.deactivate(),!0===t&&(e.State=1,g.success(a.getString("Invoice paid",null,"Info")))}}})}))}}l.$inject=["$scope","$state","gettextCatalog","$q","authentication","cardModal","customizeInvoiceModal","payModal","confirmModal","invoices","methods","downloadFile","notification","networkActivityTracker","organizationInvoices","Payment","paymentModel"],t.default=l},"./src/app/settings/controllers/security.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(a("./node_modules/lodash/forEach.js")),s=o(a("./node_modules/lodash/sortBy.js"));function o(e){return e&&e.__esModule?e:{default:e}}function r(e,t,a,o,r,l,i,c,d,u,p,m,f,g,h,v,b){var y=h.get(),_=y.LogAuth,w=y.TwoFactor;a.logs=[],a.logItemsPerPage=20,a.doLogging=_,a.twoFactor=w,a.disabledText=c.getString("Disable",null,"Action"),a.haveLogs=!1;var x=function(e){a.currentLogPage=e,t.$emit("paginatorScope",{type:"logs",page:e})};function j(e,t){k(function(n,s){var o=g.enableTwoFactor({TwoFactorSharedSecret:e},{TwoFactorCode:s,Password:n}).then(function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).TwoFactorRecoveryCodes}).then(function(e){a.twoFactor=1,h.set("TwoFactor",1),function(e){f.activate({params:{recoveryCodes:e,close:function(){f.deactivate()}}})}(e)}).catch(function(a){throw A(e,t),a});p.track(o)})}function k(e){d.activate({params:{hasTwoFactor:1,submit:function(t,a){d.deactivate(),e(t,a)},cancel:function(){d.deactivate()}}})}function A(e,t){v.activate({params:{sharedSecret:e,qrURI:t,next:function(e,t){v.deactivate(),j(e,t)},cancel:function(){v.deactivate()}}})}a.enableTwoFactor=function(){b.activate({params:{next:function(){A(),b.deactivate()},cancel:function(){b.deactivate()}}})},a.disableTwoFactor=function(){var e=c.getString("Disable Two-Factor Authentication",null,"Title"),t=c.getString("Are you sure you want to disable two-factor authentication?",null,"Info");l.activate({params:{title:e,message:t,confirm:function(){l.deactivate(),k(function(e,t){var n=g.disableTwoFactor({TwoFactorCode:t,Password:e}).then(function(){a.twoFactor=0,h.set("TwoFactor",0),m.success(c.getString("Two-factor authentication disabled",null,"Disable 2FA"))});p.track(n)})},cancel:function(){l.deactivate()}}})},a.loadLogs=function(e){x(e)},a.initLogs=function(){p.track(u.get().then(function(e){a.logs=(0,s.default)(e.data.Logs,"Time").reverse(),a.logCount=a.logs.length,x(1),a.haveLogs=!0},function(t){m.error(c.getString("Error during the initialization of logs",null,"Error")),e.error(t)}))},a.clearLogs=function(){var e=c.getString("Clear",null,"Title"),t=c.getString("Are you sure you want to clear all your logs?",null,"Info");l.activate({params:{title:e,message:t,confirm:function(){var e=u.clear().then(function(){a.logs=[],a.logCount=0,m.success(c.getString("Logs cleared",null,"Clear user's logs (security)"))});p.track(e),l.deactivate()},cancel:function(){l.deactivate()}}})},a.downloadLogs=function(){var e=[["Event","Time","IP"]],t=[];(0,n.default)(a.logs,function(t){e.push([t.Event,moment(1e3*t.Time),t.IP])});for(var s=0,o=e.length;s<o;++s)t.push(e[s].join(","));var r=t.join("\r\n"),l=new Blob([r],{type:"text/csv;charset=utf-8;"});i(l,"logs.csv")},a.revokeOthers=function(){var e=c.getString("Error during revoke request",null,"Error"),t=c.getString("Other sessions revoked",null,"Success"),a=o.revokeOthers().then(function(){return m.success(t)}).catch(function(){var t=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;throw new Error((void 0===t?{}:t).Error||e)});p.track(a)},a.setLogging=function(e){if(0===e)return l.activate({params:{message:c.getString("Are you sure you want to clear all your logs?",null,"Info"),confirm:function(){var e=g.setLogging({LogAuth:0}).then(function(){a.doLogging=0,m.success(c.getString("Logging preference updated",null,"Dashboard/security")),l.deactivate(),a.disabledText=c.getString("Disabled",null,"Action")});p.track(e)},cancel:function(){l.deactivate()}}});var t=g.setLogging({LogAuth:e}).then(function(){a.doLogging=e,m.success(c.getString("Logging preference updated",null,"Dashboard/security")),a.disabledText=c.getString("Disable",null,"Action")});p.track(t)}}r.$inject=["$log","$rootScope","$scope","authApi","authentication","confirmModal","downloadFile","gettextCatalog","loginPasswordModal","Logs","networkActivityTracker","notification","recoveryCodeModal","settingsApi","userSettingsModel","sharedSecretModal","twoFAIntroModal"],t.default=r},"./src/app/settings/controllers/signatures.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(a("./node_modules/babel-runtime/helpers/slicedToArray.js")),s=r(a("./node_modules/babel-runtime/regenerator/index.js")),o=r(a("./node_modules/babel-runtime/helpers/asyncToGenerator.js"));function r(e){return e&&e.__esModule?e:{default:e}}function l(e,t,a,r,l,i,c,d,u,p,m){var f=this,g=e(),h=g.on,v=g.unsubscribe;t.isSubUser=a.user.subuser;var b=u.getActive(),y=b.active,_=b.disabled;t.activeAddresses=y,t.disabledAddresses=_,t.itemMoved=!1,t.members=i.getAll(),t.organization=c.get();var w=a.user.Role===r.PAID_ADMIN_ROLE;t.domains=l.query();var x,j=(x=(0,o.default)(s.default.mark(function e(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:c.get();return s.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,d.manage(a);case 2:t.$applyAsync(function(){t.keyStatus=d.get("keyStatus"),t.organizationKeyInfo=d.get("organizationKeyInfo")});case 3:case"end":return e.stop()}},e,f)})),function(){return x.apply(this,arguments)});j(),w&&(h("organizationChange",function(e,a){var n=a.data;t.organization=n,d.fetch().then(function(){return j(n)})}),h("members",function(e,a){var n=a.type,s=a.data,o=void 0===s?{}:s;"update"===n&&(t.members=o.list)}),h("domainsChange",function(e,a){var n=a.data;t.domains=n})),h("updateUser",function(){!1===t.itemMoved&&t.$applyAsync(function(){var e=u.getActive(),a=e.active,n=e.disabled;t.activeAddresses=a,t.disabledAddresses=n}),w||a.user.Role!==r.PAID_ADMIN_ROLE||(i.clear(),c.clear(),d.clear(),m.reload()),t.$applyAsync(function(){t.members=i.getAll()})}),h("addressModel",function(e,a){"generateKey.success"===a.type&&t.$applyAsync(function(){var e=u.getActive(),a=e.active,n=e.disabled;t.activeAddresses=a,t.disabledAddresses=n})}),t.aliasDragControlListeners={containment:".pm_form",accept:function(e,t){return e.itemScope.sortableScope.$id===t.$id},dragStart:function(){t.itemMoved=!0},dragEnd:function(){t.itemMoved=!1},orderChanged:function(){var e=t.activeAddresses.concat(t.disabledAddresses),a=e.map(function(e){return e.ID});e.forEach(function(e,t){e.Order=t+1}),u.saveOrder(a)}},t.getDomain=function(e){var t=e.Email.split("@");return(0,n.default)(t,1)[0]},t.$on("$destroy",v)}l.$inject=["dispatchers","$scope","authentication","CONSTANTS","domainModel","memberModel","organizationModel","organizationKeysModel","addressModel","addressesModel","$state"],t.default=l},"./src/app/settings/directives/chooseComposerMode.js":function(e,t,a){"use strict";function n(e,t,n){var s="DraftMIMEType";return{replace:!0,scope:{},templateUrl:a("./src/templates/settings/chooseComposerMode.tpl.html"),link:function(a,o){var r=e(),l=r.on,i=r.unsubscribe;a.model=n.get(s);var c=function(e){var a=e.target,n=a.value,s=a.querySelector('[value="'+n+'"]').textContent;t.updateComposerMode(n,s)};o.on("change",c),l("mailSettings",function(e,t){var n=t.key,o=t.value,r=void 0===o?{}:o;"all"===n&&(a.model=r[s])}),a.$on("$destroy",function(){i(),o.off("change",c)})}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["dispatchers","composerSettings","mailSettingsModel"],t.default=n},"./src/app/settings/directives/chooseRightToLeft.js":function(e,t,a){"use strict";function n(e,t,a){var n="RightToLeft";return{restrict:"E",replace:!0,scope:{},templateUrl:"templates/settings/chooseRightToLeft.tpl.html",link:function(s,o){var r=e(),l=r.on,i=r.unsubscribe;s.model=""+(a.get(n)||0);var c=function(e){var a=e.target,n=parseInt(a.value,10),s=a.querySelector('[value="'+a.value+'"]').textContent;t.updateRightToLeft(n,s)};o.on("change",c),l("mailSettings",function(e,t){var a=t.key,o=t.value,r=void 0===o?{}:o;"all"===a&&(s.model=""+r[n])}),s.$on("$destroy",function(){i(),o.off("change",c)})}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["dispatchers","composerSettings","mailSettingsModel"],t.default=n},"./src/app/settings/directives/headerBlock.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default=function(){return{replace:!0,transclude:!0,template:'<header class="headerBlock-container" ng-transclude></header>'}}},"./src/app/settings/factories/mailSettingsModel.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/lodash/extend.js"),o=(n=s)&&n.__esModule?n:{default:n};function r(e){var t=e(["mailSettings"]),a=t.on,n=t.dispatcher,s={};return a("logout",function(){return s={}}),{get:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"all";return angular.copy("all"===e?s:s[e])},set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"all",t=arguments[1];"all"===e?(0,o.default)(s,t):s[e]=t,n.mailSettings("updated",{key:e,value:t})}}}r.$inject=["dispatchers"],t.default=r},"./src/app/settings/factories/settingsApi.js":function(e,t,a){"use strict";function n(e,t,a,n){var s=t.build("settings"),o=function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data,t=void 0===e?{}:e;return n.set("all",t.UserSettings),t},r=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};throw e.error_description||e};return{fetch:function(){return e.get(s()).then(o)},password:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return a.getPasswordParams(t).then(function(t){return e.put(s("password"),t)}).catch(r)},passwordReset:function(e,t){return a.performSRPRequest("PUT","/settings/reset",e,t).then(o).catch(r)},updateEmail:function(e,t){return a.performSRPRequest("PUT","/settings/email",e,t).then(o).catch(r)},setLogging:function(t){return e.put(s("logauth"),t).then(o)},enableTwoFactor:function(e,t){return a.performSRPRequest("POST","/settings/2fa",e,t).then(o).catch(r)},disableTwoFactor:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return a.performSRPRequest("PUT","/settings/2fa",{},e).then(o).catch(r)},passwordUpgrade:function(t){return e.put(s("password","upgrade"),t)},notify:function(t){return e.put(s("notify"),t).then(o)},updateLocale:function(t){return e.put(s("locale"),t).then(o)},setNews:function(t){return e.put(s("news"),t).then(o)},invoiceText:function(t){return e.put(s("invoicetext"),t).then(o)}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$http","url","srp","userSettingsModel"],t.default=n},"./src/app/settings/factories/settingsMailApi.js":function(e,t,a){"use strict";function n(e,t,a,n){var s={ERROR_SAVE_INPUT:t.getString("Unable to save your changes, your signature is too large.",null,"Error")},o=n.build("settings/mail"),r=function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data,t=void 0===e?{}:e;return a.set("all",t.MailSettings),t},l=function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;if(12010===(void 0===e?{}:e).Code)throw new Error(s.ERROR_SAVE_INPUT)},i=function(e){return e.then(r).catch(l)};return{fetch:function(){return i(e.get(o()))},updateTheme:function(t){return i(e.put(o("theme"),t))},updateAutoSaveContacts:function(t){return i(e.put(o("autocontacts"),t))},updateComposerMode:function(t){return i(e.put(o("composermode"),t))},updateMessageButtons:function(t){return i(e.put(o("messagebuttons"),t))},updateShowImages:function(t){return i(e.put(o("images"),t))},updateShowMoved:function(t){return i(e.put(o("moved"),t))},updateViewMode:function(t){return i(e.put(o("viewmode"),t))},updateViewLayout:function(t){return i(e.put(o("viewlayout"),t))},updateSwipeLeft:function(t){return i(e.put(o("swipeleft"),t))},updateSwipeRight:function(t){return i(e.put(o("swiperight"),t))},updateAlsoArchive:function(t){return i(e.put(o("alsoarchive"),t))},updateHotkeys:function(t){return i(e.put(o("hotkeys"),t))},updatePMSignature:function(t){return i(e.put(o("pmsignature"),t))},updateAutowildcard:function(t){return i(e.put(o("autowildcard"),t))},updateDraftType:function(t){return i(e.put(o("drafttype"),t))},updateReceiveType:function(t){return i(e.put(o("receivetype"),t))},updateShowType:function(t){return i(e.put(o("showtype"),t))},updateImageProxy:function(t){return i(e.put(o("imageproxy"),t))},updateTLS:function(t){return i(e.put(o("tls"),t))},updateRightToLeft:function(t){return i(e.put(o("righttoleft"),t))},updateAttachPublicKey:function(t){return i(e.put(o("attachpublic"),t))},updateAutoresponder:function(t){return i(e.put(o("autoresponder"),t))}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$http","gettextCatalog","mailSettingsModel","url"],t.default=n},"./src/app/settings/factories/userSettingsModel.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/lodash/extend.js"),o=(n=s)&&n.__esModule?n:{default:n};function r(e){var t=e(["userSettings"]),a=t.on,n=t.dispatcher,s={},r=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"all";return angular.copy("all"===e?s:s[e])};return a("logout",function(){return s={}}),{get:r,set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"all",t=arguments[1];"all"===e?(0,o.default)(s,t):s[e]=t,n.userSettings("updated",r())}}}r.$inject=["dispatchers"],t.default=r},"./src/app/settings/factories/vpnSettingsApi.js":function(e,t,a){"use strict";function n(e,t,a){var n=t.build("settings/vpn"),s=function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data,t=void 0===e?{}:e;return a.set("all",t.VPNSettings),t};return{fetch:function(){return e.get(n()).then(s)},updateName:function(t){return e.put(n("name"),t).then(s)},updatePassword:function(t){return e.put(n("password"),t).then(s)}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$http","url","vpnSettingsModel"],t.default=n},"./src/app/settings/factories/vpnSettingsModel.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/lodash/extend.js"),o=(n=s)&&n.__esModule?n:{default:n};function r(e){var t=e(["vpnSettings"]),a=t.on,n=t.dispatcher,s={},r=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"all";return angular.copy("all"===e?s:s[e])};return a("logout",function(){return s={}}),{get:r,set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"all",t=arguments[1];"all"===e?(0,o.default)(s,t):s[e]=t,n.vpnSettings("updated",r())}}}r.$inject=["dispatchers"],t.default=r},"./src/app/settings/index.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=j(a("./src/app/settings/controllers/account.js")),s=j(a("./src/app/settings/controllers/appearance.js")),o=j(a("./src/app/settings/controllers/dashboard.js")),r=j(a("./src/app/settings/controllers/domains.js")),l=j(a("./src/app/settings/controllers/labels.js")),i=j(a("./src/app/settings/controllers/members.js")),c=j(a("./src/app/settings/controllers/payments.js")),d=j(a("./src/app/settings/controllers/security.js")),u=j(a("./src/app/settings/controllers/signatures.js")),p=j(a("./src/app/settings/directives/chooseComposerMode.js")),m=j(a("./src/app/settings/directives/chooseRightToLeft.js")),f=j(a("./src/app/settings/directives/headerBlock.js")),g=j(a("./src/app/settings/factories/settingsApi.js")),h=j(a("./src/app/settings/factories/settingsMailApi.js")),v=j(a("./src/app/settings/factories/userSettingsModel.js")),b=j(a("./src/app/settings/factories/vpnSettingsModel.js")),y=j(a("./src/app/settings/factories/mailSettingsModel.js")),_=j(a("./src/app/settings/modals/sharedSecretModal.js")),w=j(a("./src/app/settings/factories/vpnSettingsApi.js")),x=j(a("./src/app/settings/services/composerSettings.js"));function j(e){return e&&e.__esModule?e:{default:e}}t.default=angular.module("proton.settings",[]).factory("vpnSettingsApi",w.default).controller("AccountController",n.default).controller("AppearanceController",s.default).controller("DashboardController",o.default).controller("DomainsController",r.default).controller("LabelsController",l.default).controller("MembersController",i.default).controller("PaymentsController",c.default).controller("SecurityController",d.default).controller("SignaturesController",u.default).directive("chooseComposerMode",p.default).directive("chooseRightToLeft",m.default).directive("headerBlock",f.default).factory("sharedSecretModal",_.default).factory("settingsApi",g.default).factory("settingsMailApi",h.default).factory("userSettingsModel",v.default).factory("vpnSettingsModel",b.default).factory("composerSettings",x.default).factory("mailSettingsModel",y.default).name},"./src/app/settings/modals/sharedSecretModal.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/lodash/find.js"),o=(n=s)&&n.__esModule?n:{default:n};function r(e,t,n,s){return n({controllerAs:"ctrl",templateUrl:a("./src/templates/modals/twofactor/sharedSecret.tpl.html"),controller:["params",function(a){var n=this,r=s.getRandomValues(new Uint8Array(20)),l=base32.encode(r),i=(0,o.default)(e.get(),function(e){return e.Keys}),c="otpauth://totp/"+(i?i.Email:t.user.Name+"@protonmail")+"?secret="+l+"&issuer=ProtonMail&algorithm=SHA1&digits=6&period=30";n.sharedSecret=a.sharedSecret||l,n.qrURI=a.qrURI||c,n.manual=!1,n.next=function(){return a.next(n.sharedSecret,n.qrURI)},n.cancel=function(){return a.cancel()},n.displayManual=function(){n.manual=!n.manual},n.makeCode=function(){new QRCode(document.getElementById("qrcode"),n.qrURI)}}]})}r.$inject=["addressesModel","authentication","pmModal","webcrypto"],t.default=r},"./src/app/settings/services/composerSettings.js":function(e,t,a){"use strict";function n(e,t,a,n,s){var o=function(e){return a.track(e),e},r=function(e){return n.getString("Change composer mode to {{value}}",{value:e},"Info")},l=function(e){return n.getString("Change default text direction to {{value}}",{value:e},"Info")};return{updateComposerMode:function(e,a){return o(t.updateDraftType({MIMEType:e})).then(function(){return s.success(r(a))})},updateRightToLeft:function(e,a){return o(t.updateRightToLeft({RightToLeft:e})).then(function(){return s.success(l(a))})}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["authentication","settingsMailApi","networkActivityTracker","gettextCatalog","notification"],t.default=n},"./src/app/ui/directives/appVersion.js":function(e,t,a){"use strict";function n(e,t){var a=function(e){e.preventDefault(),e.stopPropagation(),t.activate({params:{close:function(){t.deactivate()}}})};return{replace:!0,template:'<a data-prefix="v" href="'+e.articleLink+'" title="'+e.date_version+'" target="_blank" class="appVersion-container">'+e.app_version+"</a>",link:function(e,t){t.on("click",a),e.$on("$destroy",function(){t.off("click",a)})}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["CONFIG","releaseNotesModal"],t.default=n},"./src/app/ui/directives/atomLoader.js":function(e,t,a){"use strict";function n(e,t){var n={decrypting:t.getString("Decrypting",null,"atom text loader"),upgradingKeys:t.getString("Enabling IMAP (coming soon).<br />This may take a few minutes, please wait.",null,"atom text loader")},s=function(e){return""+n[e]};return{replace:!0,templateUrl:a("./src/templates/ui/atomLoader.tpl.html"),link:function(t,a,n){var o=n.translationKey,r=n.loaderTheme,l=e(),i=l.on,c=l.unsubscribe,d=void 0,u=a[0].querySelector(".atomLoader-text");r&&a[0].classList.add(r),o&&(d=o,u.innerHTML=s(o)),i("AppModel",function(e,t){var a=t.type,n=t.data,r="upgradingKeys"===a&&n.value?"upgradingKeys":o;o&&d!==r&&(u.innerHTML=s(r),d=r)}),t.$on("$destroy",c)}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["dispatchers","gettextCatalog"],t.default=n},"./src/app/ui/directives/autocompleteEmail.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=a("./src/app/constants.js");function s(e,t,s){return{scope:{email:"="},replace:!0,templateUrl:a("./src/templates/ui/autocompleteEmail.tpl.html"),compile:s(function(a,s,o){var r=o.awesomplete,l=o.attr,i=t(),c=function(e){var t=e.target,a=i.filterContact(t.value),s=a.list;a.hasAutocompletion&&(r.list=s),(t.value||"").includes("@")&&n.REGEX_EMAIL.test(t.value)&&r.goto(-1)},d=function(e){var t=e.target;if(r.minChars=1,"INPUT"===t.nodeName&&!t.value){r.minChars=0;var a=i.filterContact(t.value),n=a.list;a.hasAutocompletion&&(r.list=n)}},u=function(){l.eventType&&a.$applyAsync(function(){var t,n;t="input.blur",n={value:a.email,type:l.eventType,eventData:l.eventData},e.$emit("autocompleteEmail",{type:t,data:n})})};r.replace=function(e){var t,s;t=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(n.REGEX_EMAIL.test(t)){var a=e.filterContact(t,!0).list[0];if(a)return a}return{label:t,value:t}}(i,e.value),s=t.value,a.$applyAsync(function(){return a.email=s})},r.filter=function(e,t){return Awesomplete.FILTER_CONTAINS(e,i.formatInput(t))},s.on("click",d),s.on("input",c),s.find("input").on("blur",u),a.$on("$destroy",function(){s.off("click",d),s.off("input",c),s.off("blur",u),i.clear()})})}}s.$inject=["$rootScope","autocompleteEmailsModel","autocompleteBuilder"],t.default=s},"./src/app/ui/directives/autocompleteEmails.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=a("./src/app/constants.js");function s(e,t,s){return{scope:{list:"=emails"},replace:!0,templateUrl:a("./src/templates/ui/autocompleteEmails.tpl.html"),compile:s(function(a,s,o){var r=o.awesomplete;a.emails=[];var l=s[0].querySelector(".autocompleteEmails-admin"),i=t(a.list),c=function(){return a.$applyAsync(function(){a.emails=i.all(),a.list=i.all(),_rAF(function(){return l.scrollTop=l.scrollHeight+32})})};c();var d=function(e){var t=e.target;if(","===t.value&&(t.value=""),t.value&&function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return e.indexOf(",")>-1||e.indexOf(";")>-1}(t.value))return function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").split(/,|;/).filter(Boolean).map(function(e){return e.trim()})}(t.value).forEach(function(e){return i.add({label:e,value:e})}),c(),_rAF(function(){return r.input.value="",r.input.focus()});var a=i.filterContact(t.value),s=a.list,o=a.hasAutocompletion;return o&&(r.list=s),(t.value||"").includes("@")&&o&&n.REGEX_EMAIL.test(t.value)?r.goto(-1):void 0},u=function(e){var t=e.target;if(r.minChars=1,t.classList.contains("autocompleteEmails-btn-remove")){var a=t.dataset.address;return i.remove({Address:a}),c()}if("INPUT"===t.nodeName&&!t.value){r.minChars=0;var n=i.filterContact(t.value),s=n.list;n.hasAutocompletion&&(r.list=s)}},p=function(e){e.preventDefault();var t=function(e){if("FORM"===e.nodeName){var t=e.querySelector("input");return{value:(t?t.value:"").trim(),clear:function(){t&&(t.value="")}}}return{value:(e.value||"").trim(),clear:function(){e.value=""}}}(e.target),a=t.value,s=t.clear;a&&(i.add(function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(n.REGEX_EMAIL.test(t)){var a=e.filterContact(t,!0).list[0];if(a)return a}return{label:t,value:t}}(i,a)),s(),c(),r.close())},m=function(t){var a=!r.input.value&&!i.isEmpty();switch(t.keyCode){case 9:if(r.opened&&r.selected)return t.preventDefault(),r.select(),_rAF(function(){return r.input.focus()});r.input.value&&p(t);break;case!t.shiftKey:r.select();break;case 27:a||e.$emit("composer.update",{type:"escape.autocomplete"});break;case 8:a&&(i.removeLast(),c())}};r.input.addEventListener("blur",p),r.replace=function(e){i.add(e),this.input.value="",c()},r.filter=function(e,t){return Awesomplete.FILTER_CONTAINS(e,i.formatInput(t))},s.on("keydown",m),s.on("click",u),s.on("input",d),s.on("submit",p),a.$on("$destroy",function(){s.off("keydown",m),s.off("click",u),s.off("input",d),s.off("submit",p),r.input.removeEventListener("blur",p),i.clear()})})}}s.$inject=["$rootScope","autocompleteEmailsModel","autocompleteBuilder"],t.default=s},"./src/app/ui/directives/autocompleteEmailsItem.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/babel-runtime/helpers/slicedToArray.js"),o=(n=s)&&n.__esModule?n:{default:n},r=a("./src/app/constants.js");c.$inject=["sanitize"];var l=r.EMAIL_FORMATING.OPEN_TAG_AUTOCOMPLETE_RAW,i=r.EMAIL_FORMATING.CLOSE_TAG_AUTOCOMPLETE_RAW;function c(e){return{replace:!0,templateUrl:a("./src/templates/ui/autoCompleteEmailsItem.tpl.html"),link:function(t,a){var n,s,c=a.find("span"),d=(n=a[0],s=n.querySelector("button"),function(e){return s.setAttribute("data-address",e)}),u=function(e){return e.target.setAttribute("contenteditable",!0)},p=function(a){var n=a.target;n.setAttribute("contenteditable",!1),t.$applyAsync(function(){var a=function(e){var t=e.textContent.replace(i,"").split(l),a=(0,o.default)(t,2),n=a[0],s=void 0===n?"":n,r=a[1],c=void 0===r?"":r;return{name:s.trim(),adr:c.trim()}}(n),s=a.name,c=a.adr;c&&(t.email.Address=c,t.email.Name=e.input(s)),s&&!c&&(t.email.Name=s,t.email.Address=s),t.email.invalid=!r.REGEX_EMAIL.test(c||s),d(t.email.Address)})},m=function(e){if(13===e.keyCode)return p(e);"true"===e.target.getAttribute("contenteditable")&&(e.stopPropagation(),t.email.invalid&&t.$applyAsync(function(){return t.email.invalid=!1}))};c.on("keydown",m),c.on("input",m),c.on("click",u),c.on("blur",p),t.$on("$destroy",function(){c.off("keydown",m),c.off("input",m),c.off("click",u),c.off("blur",p)})}}}t.default=c},"./src/app/ui/directives/chooseLayoutBtns.js":function(e,t,a){"use strict";function n(e,t,n,s,o,r,l,i){var c=t.COLUMN_MODE,d=t.ROW_MODE,u=function(t){var a=function(e){var t=i.get().ViewLayout;return"rows"===e&&t===c?1:"columns"===e&&t===d?0:void 0}(t);if(angular.isDefined(a)){var u=o.updateViewLayout({ViewLayout:a}).then(function(){e.$emit("settings",{type:"viewLayout.updated",data:{viewLayout:a}}),s.mobileResponsive(),r.success(l.getString("Layout saved",null))});n.track(u)}angular.element(".toolbarDesktop-container").find("a").tooltip("hide")};return{replace:!0,templateUrl:a("./src/templates/ui/chooseLayoutBtns.tpl.html"),link:function(e,t){var a=t.find("a"),n=function(e){e.preventDefault(),u(e.target.getAttribute("data-action"))};a.on("click",n),e.$on("$destroy",function(){a.off("click",n)})}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$rootScope","CONSTANTS","networkActivityTracker","tools","settingsMailApi","notification","gettextCatalog","mailSettingsModel"],t.default=n},"./src/app/ui/directives/customCheckbox.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(e){return{replace:!0,templateUrl:a("./src/templates/ui/customCheckbox.tpl.html"),compile:e("checkbox")}};n.$inject=["customInputCreator"],t.default=n},"./src/app/ui/directives/customRadio.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(e){return{replace:!0,templateUrl:a("./src/templates/ui/customRadio.tpl.html"),compile:e("radio")}};n.$inject=["customInputCreator"],t.default=n},"./src/app/ui/directives/customTheme.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default=function(){return{replace:!0,template:'<style id="customTheme">{{ user.Theme }}</style>'}}},"./src/app/ui/directives/dateTimePicker.js":function(e,t,a){"use strict";function n(e,t,n,s){var o=new Date(1970,1,1);return{replace:!0,restrict:"E",templateUrl:a("./src/templates/ui/dateTimePicker.tpl.html"),scope:{form:"="},compile:function(a){var r=Math.floor(1e16*Math.random()).toString(36);a[0].querySelector(".timepicker").setAttribute("data-event-key",r);var l=moment.localeData().longDateFormat("L");return a[0].querySelector(".datepicker").setAttribute("placeholder",s.I18N.localizedDatePlaceholder),function(a,s,i){var c=i.datePickerKey,d=i.timestamp,u=i.disableInput,p=i.labelId,m=i.zone,f=e(["timepicker"]),g=f.on,h=f.unsubscribe,v=f.dispatcher,b=function(e,t){return v.timepicker(e,t)},y=s.find(".datepicker");function _(){if(null===a.timestamp)return a.model.time=null,void(a.model.date=null);var e=moment(1e3*a.timestamp).tz(a.zone),t=e.clone().startOf("day");a.model.time=e.diff(t,"seconds"),a.model.date=new Date(t.format("YYYY-MM-DDTHH:mm:ss"))}function w(){a.$applyAsync(function(){""===y.val().trim()&&(a.model.date=null,null!==a.model.pikaday.getDate()&&a.model.pikaday.setDate(null)),a.model.date instanceof Date&&y.val()!==moment(a.model.date).format(l)&&y.val(moment(a.model.date).format(l)),x()})}function x(){if(null===a.model.time||void 0===a.model.time||null===a.model.date||void 0===a.model.date)return a.timestamp=null,void b("update",{eventKey:a.datePickerKey,timestamp:a.timestamp});a.timestamp=Number(moment.tz(moment(a.model.date).format("YYYY-MM-DD"),a.zone).format("X"))+a.model.time,b("update",{eventKey:a.datePickerKey,timestamp:a.timestamp})}n.initTimePicker(r,{disableInput:u,labelId:p+"_time"}),a.zone=m,a.datePickerKey=c,a.timestamp=String(Number(d))===d?Number(d):null,a.disableInput="true"===u,a.labelId=p,a.combineErrors=t.create(r,a),a.minDate=o,a.model={time:null,date:null},y.attr("id",a.labelId),_(),y.on("change",w),g("timepicker",function(e,t){var n=t.type,s=t.data;"refresh"===n&&s.eventKey===a.datePickerKey&&(a.timestamp=s.timestamp,a.zone=s.zone,_()),"update"===n&&s.eventKey===r&&x()}),a.$on("$destroy",function(){h(),y.off("change",w)})}}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["dispatchers","datetimeErrorCombiner","timepickerModel","dateUtils"],t.default=n},"./src/app/ui/directives/dropdown.js":function(e,t,a){"use strict";function n(e,t){var a="pm_dropdown-opened";return function(n,s){var o=t(["closeDropdown"]),r=o.dispatcher,l=o.on,i=o.unsubscribe,c=s.parent().find(".pm_dropdown");function d(){s.removeClass("active"),c.removeClass(a),e.off("click",u)}function u(e){c[0].contains(e.target)||d()}function p(){return s.hasClass("active")?d():(r.closeDropdown(),s.addClass("active"),c.addClass(a),e.on("click",u)),!1}s.on("click",p),l("closeDropdown",function(){d()}),n.$on("$destroy",function(){s.off("click",p),d(),i()})}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$document","dispatchers"],t.default=n},"./src/app/ui/directives/header/headerNoAuth.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default=function(){return{restrict:"E",replace:!0,templateUrl:a("./src/templates/ui/header/headerNoAuth.tpl.html")}}},"./src/app/ui/directives/header/headerSecuredDesktop.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){return{restrict:"E",replace:!0,controller:"HeaderController",templateUrl:a("./src/templates/ui/header/headerSecuredDesktop.tpl.html")}}},"./src/app/ui/directives/header/headerSecuredMobile.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){return{restrict:"E",replace:!0,controller:"HeaderController",templateUrl:a("./src/templates/ui/header/headerSecuredMobile.tpl.html")}}},"./src/app/ui/directives/headerSecured.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){return{restrict:"E",replace:!0,templateUrl:a("./src/templates/ui/header/headerSecured.tpl.html")}}},"./src/app/ui/directives/legends.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){return{replace:!0,restrict:"E",scope:{list:"="},templateUrl:a("./src/templates/ui/legends.tpl.html")}}},"./src/app/ui/directives/loaderTag.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default=function(){return{restrict:"E",replace:!0,scope:{},template:'<div class="loader"><em></em></div>'}}},"./src/app/ui/directives/monthdayTimePicker.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/lodash/find.js"),o=(n=s)&&n.__esModule?n:{default:n};function r(e,t,n){return{replace:!0,restrict:"E",templateUrl:a("./src/templates/ui/monthdayTimePicker.tpl.html"),scope:{form:"="},compile:function(a){var s=Math.floor(1e16*Math.random()).toString(36);return a[0].querySelector(".timepicker").setAttribute("data-event-key",s),function(a,r,l){var i=l.datePickerKey,c=l.timestamp,d=l.disableInput,u=l.labelId,p=e(["timepicker"]),m=p.on,f=p.unsubscribe,g=p.dispatcher,h=function(e,t){return g.timepicker(e,t)},v=r.find(".day-selector");function b(){if(null===a.timestamp)return a.model.time=null,void(a.model.day=null);a.model.day=(0,o.default)(a.availableDays,{value:Math.floor(a.timestamp/86400)%31}),a.model.time=a.timestamp%86400}function y(){a.$applyAsync(_)}function _(){if(null===a.model.time||null===a.model.day)return a.timestamp=null,void h("update",{eventKey:a.datePickerKey,timestamp:a.timestamp});a.timestamp=24*a.model.day.value*3600+a.model.time,h("update",{eventKey:a.datePickerKey,timestamp:a.timestamp})}t.initTimePicker(s,{disableInput:d,labelId:u+"_time"}),a.datePickerKey=i,a.timestamp=String(Number(c))===c?Number(c):null,a.disableInput="true"===d,a.labelId=u,a.combineErrors=n.create(s,a),a.availableDays=t.daysInMonth,a.timePickerKey=a.datePickerKey+Math.floor(1e16*Math.random()).toString(36),a.model={time:null,day:null},v.attr("id",a.labelId),b(),v.on("change",y),m("timepicker",function(e,t){var n=t.type,o=t.data;"refresh"===n&&o.eventKey===a.datePickerKey&&(a.timestamp=o.timestamp,b()),"update"===n&&o.eventKey===s&&_()}),a.$on("$destroy",function(){f(),v.off("change",y)})}}}}r.$inject=["dispatchers","timepickerModel","datetimeErrorCombiner"],t.default=r},"./src/app/ui/directives/multiselect.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/lodash/each.js"),o=(n=s)&&n.__esModule?n:{default:n};function r(e){return{replace:!0,restrict:"E",scope:{selected:"=",options:"="},templateUrl:a("./src/templates/ui/multiselect.tpl.html"),link:function(t,a,n){var s=n.name,r=n.disabled,l=[];function i(a){var n=a.target;(n.classList.contains("multiselectLabel")||n.classList.contains("multiselectCheckbox"))&&t.$applyAsync(function(){s&&e.$emit("multiselect",{name:s,type:"update",data:{value:t.selected}})})}t.disabled="true"===r,a.on("click",i),l.push(function(){return a.off("click",i)}),t.$on("$destroy",function(){(0,o.default)(l,function(e){return e()}),l.length=0})}}}r.$inject=["$rootScope"],t.default=r},"./src/app/ui/directives/navigation/arrowsToScroll.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/lodash/debounce.js"),o=(n=s)&&n.__esModule?n:{default:n};t.default=function(){var e="arrowsToScroll-button";return{restrict:"A",compile:function(t){return t.append('\n <button class="'+e+'" data-direction="left"></button>\n <button class="'+e+'" data-direction="right"></button>\n '),function(t,a){var n=a.find(".settingsDashboard-plans"),s=a.find("."+e),r=a.find('[data-direction="left"]'),l=a.find('[data-direction="right"]'),i=(0,o.default)(function(){return s.prop("disabled",n.get(0).scrollWidth<n.get(0).clientWidth)},300),c=(0,o.default)(function(){var e=n.scrollLeft(),t=n.get(0).scrollWidth-n.get(0).clientWidth;r.prop("disabled",!e),l.prop("disabled",e===t)},300),d=function(t){if(t.target.classList.contains(e))switch(t.target.getAttribute("data-direction")){case"left":n.animate({scrollLeft:"-=350"});break;case"right":n.animate({scrollLeft:"+=350"})}};n.on("scroll",c),angular.element(window).on("resize",i),s.on("click",d),i(),c(),t.$on("$destroy",function(){n.off("scroll",c),angular.element(window).off("resize",i),s.off("click",d)})}}}}},"./src/app/ui/directives/navigation/navigation.js":function(e,t,a){"use strict";function n(e,t){return{restrict:"E",replace:!0,templateUrl:a("./src/templates/ui/navigation/navigation.tpl.html"),link:function(a,n){var s=e(),o=s.on,r=s.unsubscribe,l=function(){return n[0].classList[t.isBlackFridayPeriod(!0)?"add":"remove"]("navigation-is-black-friday")};o("subscription",function(e,t){var a=t.type;"update"===(void 0===a?"":a)&&l()}),o("blackFriday",function(e,t){var a=t.type;"tictac"===(void 0===a?"":a)&&l()}),l(),a.$on("$destroy",r)}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["dispatchers","blackFridayModel"],t.default=n},"./src/app/ui/directives/navigation/navigationBlackFriday.js":function(e,t,a){"use strict";function n(e,t,n,s,o){var r=s.CYCLE.MONTHLY,l=function(){t.activate({params:{close:function(){t.deactivate()}}})};return{restrict:"E",scope:{},replace:!0,templateUrl:a("./src/templates/ui/navigation/navigationBlackFriday.tpl.html"),link:function(t,a){var s=!o.hasPaid("mail"),i=o.cycle()===r,c=e.welcome;n.isBlackFridayPeriod(!1)&&(s||i)&&!c&&l(),a.on("click",l),t.$on("$destroy",function(){a.off("click",l)})}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$stateParams","blackFridayModal","blackFridayModel","CONSTANTS","subscriptionModel"],t.default=n},"./src/app/ui/directives/navigation/navigationReport.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){return{replace:!0,templateUrl:a("./src/templates/ui/navigation/navigationReport.tpl.html")}}},"./src/app/ui/directives/navigation/navigationUser.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/babel-runtime/helpers/slicedToArray.js"),o=(n=s)&&n.__esModule?n:{default:n};function r(e,t,n){return{replace:!0,templateUrl:a("./src/templates/ui/navigation/navigationUser.tpl.html"),link:function(a){var s=e(),r=s.on,l=s.unsubscribe,i=function(){var e=n.user.Name,s=void 0===e?"":e,r=t.get(),l=(0,o.default)(r,1)[0],i=(l=void 0===l?{}:l).DisplayName,c=void 0===i?"":i,d=l.Email,u=void 0===d?"":d;a.$applyAsync(function(){a.displayName=c||s,a.email=u})};r("updateUser",i),i(),a.$on("$destroy",l)}}}r.$inject=["dispatchers","addressesModel","authentication"],t.default=r},"./src/app/ui/directives/noResults.js":function(e,t,a){"use strict";function n(e,t,n,s,o){var r=n.getString("Learn more",null,"Link"),l={inbox:{icon:"fa-inbox",text:n.getString("Inbox",null,"No results heading")},drafts:{icon:"fa-file-text-o",text:n.getString("Drafts",null,"No results heading")},sent:{icon:"fa-sign-out",text:n.getString("Sent",null,"No results heading")},trash:{icon:"fa-trash-o",text:n.getString("Trash",null,"No results heading")},spam:{icon:"fa-ban",text:n.getString("Spam",null,"No results heading")},starred:{icon:"fa-star-o",text:n.getString("Starred",null,"No results heading")},allmail:{icon:"",text:n.getString("All Mail",null,"No results heading")},archive:{icon:"fa-archive",text:n.getString("Archive",null,"No results heading")},search:{icon:"fa-search",text:n.getString("Search",null,"No results heading")},label:{icon:"fa-tag",text:n.getString("Label",null,"No results heading")},folder:{icon:"fa-folder",text:n.getString("Folder",null,"No results heading")}};return{restrict:"E",replace:!0,templateUrl:a("./src/templates/directives/ui/noResults.tpl.html"),link:function(a,i){var c=i[0].querySelector("i"),d=i[0].querySelector("span"),u=i[0].querySelector("h3"),p=t.currentMailbox(),m=t.getTypeList(),f=e.last(),g=f.code,h=f.error;if(p){var v=function(e){var t=e;"label"===t&&1===(s.read(o.label)||{}).Exclusive&&(t="folder");return l[t]||{}}(p),b=v.icon,y=v.text;b&&c.classList.add(b),d.textContent=y}u.innerHTML=15225===g?h+'.<br /><a href="https://protonmail.com/support/knowledge-base/search/" target="_blank">'+r+"</a>":function(e){return"conversation"===e?n.getString("No conversations",null,"Title"):n.getString("No messages",null,"Title")}(m)}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["elementsError","tools","gettextCatalog","labelsModel","$stateParams"],t.default=n},"./src/app/ui/directives/numberElementSelected.js":function(e,t,a){"use strict";function n(e,t,a){return{scope:{number:"="},replace:!0,template:'<h2 ng-bind="text()" class="numberElementSelected-title"></h2>',link:function(n){n.text=function(){var s=n.number,o=t.getTypeList();return a.includes("secured.contacts")?e.getPlural(s,"{{$count}} contact selected","{{$count}} contacts selected",{},"Info"):"conversation"===o?e.getPlural(s,"{{$count}} conversation selected","{{$count}} conversations selected",{},"Info"):e.getPlural(s,"{{$count}} message selected","{{$count}} messages selected",{},"Info")}}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["gettextCatalog","tools","$state"],t.default=n},"./src/app/ui/directives/progressBar.js":function(e,t,a){"use strict";function n(e){return{restrict:"E",replace:!0,template:'<progress class="progressBar-container"></progress>',scope:{},compile:function(t,a){var n=a.id,s=void 0===n?"progress":n,o=a.max,r=void 0===o?100:o;return t[0].value=1,t[0].max=r,function(a){var n=e(),o=n.on,r=n.unsubscribe;o("progressBar",function(e,a){var n=a.type,o=void 0===n?"":n,r=a.data,l=(void 0===r?{}:r).progress,i=void 0===l?0:l;s===o&&(t[0].value=+i)}),a.$on("$destroy",r)}}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["dispatchers"],t.default=n},"./src/app/ui/directives/progressUpload.js":function(e,t,a){"use strict";function n(e,t){var n=t.UPLOAD_GRADIENT_DARK,s=t.UPLOAD_GRADIENT_LIGHT,o=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return"linear-gradient(90deg, rgba("+n+", 1) "+e+"%, rgba("+s+", 1) 0%)"};return{scope:{model:"="},replace:!0,templateUrl:a("./src/templates/directives/ui/progressUpload.tpl.html"),link:function(t,a){var n,s,r,l=e(),i=l.on,c=l.unsubscribe,d=(n=t.model,s=n.id,r=n.messageID,{isAttachment:function(e){return e.messageID===r&&e.id===s},isMessage:function(e){return e.messageID===r}});if(!t.model.packet.uploading)return a[0].classList.remove("progressUpload-uploading"),a[0].classList.add("progressUpload-uploaded");a[0].style.background=o(1),i("attachment.upload",function(e,t){var n=t.type,s=t.data,r=void 0===s?{}:s;if(d.isMessage(r)&&d.isAttachment(r)){if("uploaded.success"===n)return a[0].classList.add("progressUpload-uploaded"),c();if("uploading"===n){if(100===r.progress)return _rAF(function(){a[0].classList.remove("progressUpload-uploading"),a[0].style.background=""});r.progress&&r.progress<100&&(a[0].style.background=o(r.progress))}}}),t.$on("$destroy",c)}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["dispatchers","CONSTANTS"],t.default=n},"./src/app/ui/directives/progressionBtn.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(e){return{replace:!0,template:'<button type="button" class="progressionBtn-btn"><i class="fa fa-times"></i></button>',link:function(t,a,n){var s=n.action,o=void 0===s?"":s;a[0].setAttribute("data-label",o);var r=function(n){n.stopPropagation(),a[0].disabled=!0,e.$emit("attachment.upload",{type:o,data:t.model})};a.on("click",r),t.$on("$destroy",function(){a.off("click",r)})}}};n.$inject=["$rootScope"],t.default=n},"./src/app/ui/directives/protonLoader.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(e){return{replace:!0,scope:{},templateUrl:a("./src/templates/directives/ui/protonLoader.tpl.html"),link:function(t,a){var n=e(),s=n.on,o=n.unsubscribe;s("networkActivity",function(e,t){"load"===t&&_rAF(function(){return a[0].classList.add("show")}),"close"===t&&_rAF(function(){return a[0].classList.remove("show")})}),t.$on("$destroy",o)}}};n.$inject=["dispatchers"],t.default=n},"./src/app/ui/directives/protonmailLogo.js":function(e,t,a){"use strict";function n(e,t,n,s,o){return{restrict:"E",templateUrl:a("./src/templates/directives/ui/protonmailLogo.tpl.html"),replace:!0,link:function(a,r){var l=t.PLANS.PLAN,i=[l.PLUS,l.PROFESSIONAL,l.VISIONARY].join(" "),c=o(),d=c.on,u=c.unsubscribe;function p(){var a=n.get(),o="LIFETIME"===s.get().CouponCode,l=e.user.subuser,c=e.user.Role===t.PAID_MEMBER_ROLE,d=a.PlanName;o&&(d="lifetime"),(l||c||"free"===d)&&(d=""),r.removeClass(i).addClass(d),r.attr("data-plan-name",d)}d("organizationChange",p),d("updateUser",p),p(),a.$on("$destroy",u)}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["authentication","CONSTANTS","organizationModel","subscriptionModel","dispatchers"],t.default=n},"./src/app/ui/directives/ptTooltip.js":function(e,t,a){"use strict";function n(e,t){return{link:function(a,n,s){e.is("mobile")||t.add(n,{title:s.ptTooltip,placement:s.ptPlacement,html:s.ptHtml})}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["AppModel","tooltipModel"],t.default=n},"./src/app/ui/directives/readUnread.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default=function(){return{replace:!0,templateUrl:a("./src/templates/directives/ui/readUnread.tpl.html"),link:function(e,t){var a=t.find("a"),n=function(t){t.preventDefault(),e.$applyAsync(function(){return e[t.target.getAttribute("data-action")]()})};a.on("click",n),e.$on("$destroy",function(){a.off("click",n)})}}}},"./src/app/ui/directives/requestTimeout.js":function(e,t,a){"use strict";function n(e){return{replace:!0,templateUrl:a("./src/templates/directives/ui/requestTimeout.tpl.html"),link:function(t,a){var n=a[0].querySelector(".request-timeout-button-refresh"),s=function(){e.set("requestTimeout",!1),t.$applyAsync(function(){t.refreshElements()})};n.addEventListener("click",s),t.$on("$destroy",function(){n.removeEventListener("click",s)})}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["AppModel"],t.default=n},"./src/app/ui/directives/settingsMenu.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/babel-runtime/core-js/object/keys.js"),o=(n=s)&&n.__esModule?n:{default:n};function r(e,t,n,s,r,l,i){var c=function(){return t.back()};return{replace:!0,scope:{},templateUrl:a("./src/templates/directives/ui/settingsMenu.tpl.html"),link:function(t,a){var s=r(),d=s.on,u=s.unsubscribe,p=function(){return e.user.Role===n.PAID_MEMBER_ROLE},m=a.find(".sidebar-btn-back"),f=function(){return t.listStates=(0,o.default)(l.getStateConfig())};f(),e.user.subuser&&a.addClass("settingsMenu-is-subuser"),p()&&a.addClass("settingsMenu-is-member"),d("updateUser",function(){p()&&a.addClass("settingsMenu-is-member"),t.$applyAsync(function(){f()})}),d("$stateChangeStart",function(){i.set("showSidebar",!1)}),d("appearance",function(e,t){var a=t.type;"changingViewMode"===a&&m.prop("disabled",!0),"viewModeChanged"===a&&m.prop("disabled",!1)}),m.on("click",c),t.$on("$destroy",function(){u(),m.off("click",c)})}}}r.$inject=["authentication","backState","CONSTANTS","networkActivityTracker","dispatchers","sidebarSettingsModel","AppModel"],t.default=r},"./src/app/ui/directives/slider.js":function(e,t,a){"use strict";function n(e){return{replace:!0,restrict:"E",scope:{value:"=",options:"="},templateUrl:a("./src/templates/ui/slider.tpl.html"),link:function(t,a){var n=e(["slider.updated"]),s=n.on,o=n.unsubscribe,r=n.dispatcher,l=a[0].querySelector(".slider"),i=t.options.range.max-t.options.range.min;function c(e){return e/i*100+"%"}function d(e,t){t.appendChild(e)}function u(){var e=Number(l.noUiSlider.get());e<t.options.minPadding&&(e=t.options.minPadding,l.noUiSlider.set(e)),e>t.options.maxPadding&&(e=t.options.maxPadding,l.noUiSlider.set(e)),t.$applyAsync(function(){t.value=e,t.options.type&&r["slider.updated"](t.options.type,{value:e})})}noUiSlider.create(l,t.options),u(),l.noUiSlider.on("change",u),t.plus=function(){var e=Number(l.noUiSlider.get())+t.options.step;e<=t.options.range.max&&(l.noUiSlider.set(e),u())},t.minus=function(){var e=Number(l.noUiSlider.get())-t.options.step;e>=t.options.range.min&&(l.noUiSlider.set(e),u())},t.$applyAsync(function(){return function(){var e=l.querySelector(".noUi-base");if(t.options.minPadding){var a=l.querySelector(".slider-min-padding");d(a,e),a.style.width=c(t.options.minPadding)}if(t.options.maxPadding){var n=l.querySelector(".slider-max-padding");d(n,e),t.maxPadding=t.options.range.max-t.options.maxPadding,n.style.width=c(t.maxPadding)}}()}),t.$watch("value",function(e){return l.noUiSlider.set(e)}),t.options.type&&(s("refresh.slider",function(e,a){var n=a.type,s=a.data,o=void 0===s?{}:s;t.options.type===n&&(l.noUiSlider.set(o.value),t.$applyAsync(function(){return t.value=o.value}))}),s("update.slider.options",function(e,a){var n=a.type,s=a.data,o=void 0===s?{}:s;t.options.type===n&&l.noUiSlider.updateOptions(o.options)}),s("enable.slider",function(e,a){var n=a.type;t.options.type===n&&l.removeAttribute("disabled")}),s("disable.slider",function(e,a){var n=a.type;t.options.type===n&&l.setAttribute("disabled",!0)})),t.$on("$destroy",function(){l.noUiSlider.off("change",u),l.noUiSlider.destroy(),o()})}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["dispatchers"],t.default=n},"./src/app/ui/directives/timePicker.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/lodash/each.js"),o=(n=s)&&n.__esModule?n:{default:n};function r(e,t){var n=function(t,a){return e.$emit("timepicker",{type:t,data:a})};return{replace:!0,restrict:"E",templateUrl:a("./src/templates/ui/timePicker.tpl.html"),require:"?ngModel",scope:{},link:function(e,a,s,r){var l=s.eventKey,i=[],c=a.find("input");i.push(t.onInitTimePicker(l,function(e){c.attr("disabled","true"===e.disableInput),c.attr("id",e.labelId)})),e.model={currentTime:null},e.eventKey=l;var d,u=(d=!1,function(){d||(d=!0,c.change(),d=!1)}),p=c.timepicker({change:u,showOnInput:!0,timeFormat:"h:mm p"}).data("TimePicker");function m(){var t=p.getTime();p.setTime(t),e.$applyAsync(function(){if(t instanceof Date)r.$setViewValue(3600*t.getHours()+60*t.getMinutes());else if(r.$setViewValue(null),""!==c.val())return c.val(""),void c.change();n("update",{eventKey:l,timestamp:r.$modelValue})})}r&&(r.$render=function(){if(null===r.$modelValue)e.model.currentTime=null;else{var t=Math.floor(r.$modelValue/3600),a=Math.floor((r.$modelValue-3600*t)/60),n=t>=12?"PM":"AM",s=t%12==0?12:t%12;e.model.currentTime=s+":"+(a<10?"0":"")+a+" "+n}},c.on("change",m),i.push(function(){return c.off("change",m)})),i.push(function(){return p.destroy()}),e.$on("$destroy",function(){(0,o.default)(i,function(e){return e()}),i.length=0})}}}r.$inject=["$rootScope","timepickerModel"],t.default=r},"./src/app/ui/directives/title.js":function(e,t,a){"use strict";function n(e,t,a){var n=function(e,t){return _rAF(function(){return e.text(t)})};return{restrict:"E",scope:{},link:function(s,o){var r=e(),l=r.on,i=r.unsubscribe;l("$stateChangeSuccess",function(e,a){n(o,t.find(a))}),l("elements",function(e,s){"refresh"===s.type&&!a.is("secured.label.element")&&n(o,t.find(a.current))}),s.$on("$destroy",i)}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["dispatchers","pageTitlesModel","$state"],t.default=n},"./src/app/ui/directives/toggle.js":function(e,t,a){"use strict";function n(e,t){var n={YES:e.getString("Yes",null,"Text displays in the toggle component, make it shorter as possible"),NO:e.getString("No",null,"Text displays in the toggle component, make it shorter as possible"),ON:e.getString("ON",null,"Text displays in the toggle component, make it shorter as possible"),OFF:e.getString("OFF",null,"Text displays in the toggle component, make it shorter as possible")};return{restrict:"E",replace:!0,templateUrl:a("./src/templates/directives/toggle.tpl.html"),scope:{id:"@",status:"=",name:"@"},link:function(e,a,s){var o=s.on,r=void 0===o?"YES":o,l=s.off,i=void 0===l?"NO":l;function c(){e.$applyAsync(function(){e.status=!e.status,e.name&&t.$emit(e.name,{status:e.status,id:e.id})})}e.on=n[r],e.off=n[i],a.on("click",c),e.$on("$destroy",function(){a.off("click",c)})}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["gettextCatalog","$rootScope"],t.default=n},"./src/app/ui/directives/toggleExpand.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){var e="fa-chevron-down",t="fa-chevron-right";return{restrict:"E",replace:!0,template:'<button class="pm_button link">{{text}} <i class="fa"></fa></button>',scope:{model:"=",text:"@"},link:function(a,n){var s=n[0].querySelector(".fa");function o(){var n=a.model?e:t,o=a.model?t:e;s.classList.remove(o),s.classList.add(n)}function r(){a.$applyAsync(function(){a.model.toggle=!a.model.toggle,o()})}a.model.toggle=!!a.model.toggle,o(),n[0].addEventListener("click",r),a.$on("$destroy",function(){n[0].removeEventListener("click",r)})}}}},"./src/app/ui/directives/toolbarDesktop.js":function(e,t,a){"use strict";function n(e,t){return{replace:!0,templateUrl:a("./src/templates/ui/toolbarDesktop.tpl.html"),link:function(a){var n=e(),s=n.on,o=n.unsubscribe,r=function(){var e=t.get().ViewLayout;a.$applyAsync(function(){a.viewLayout=e})};s("mailSettings",function(e,t){var a=t.type;"updated"===(void 0===a?"":a)&&r()}),r(),a.$on("$destroy",o)}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["dispatchers","mailSettingsModel"],t.default=n},"./src/app/ui/directives/toolbarMobile.js":function(e,t,a){"use strict";function n(e,t){return{replace:!0,templateUrl:a("./src/templates/ui/toolbarMobile.tpl.html"),link:function(a){var n=e(),s=n.on,o=n.unsubscribe,r=function(){var e=t.get().ViewLayout;a.$applyAsync(function(){a.viewLayout=e})};s("mailSettings",function(e,t){var a=t.type;"updated"===(void 0===a?"":a)&&r()}),r(),a.$on("$destroy",o)}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["dispatchers","mailSettingsModel"],t.default=n},"./src/app/ui/directives/twitterLink.js":function(e,t,a){"use strict";function n(e){return{restrict:"A",link:function(t,a,n){var s=n.text,o=n.url,r=n.hashtags,l=n.via,i=n.related,c=n.inReplyTo,d=e({text:s,url:o,hashtags:r,via:l,related:i,inReplyTo:c});a[0].setAttribute("href","https://twitter.com/intent/tweet?"+d)}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$httpParamSerializer"],t.default=n},"./src/app/ui/directives/weekdayTimePicker.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/lodash/find.js"),o=(n=s)&&n.__esModule?n:{default:n};function r(e,t,n,s){var r=e.getSortedWeekdays(),l=function(e){return Math.floor(e/86400)%7},i=function(e){return e%86400};return{replace:!0,restrict:"E",templateUrl:a("./src/templates/ui/weekdayTimePicker.tpl.html"),scope:{form:"="},compile:function(e){var a=Math.floor(1e16*Math.random()).toString(36);return e[0].querySelector(".timepicker").setAttribute("data-event-key",a),function(e,c,d){var u=d.datePickerKey,p=d.timestamp,m=d.disableInput,f=d.labelId,g=t(["timepicker"]),h=g.on,v=g.unsubscribe,b=g.dispatcher,y=function(e,t){return b.timepicker(e,t)},_=c.find(".week-day-selector");function w(){if(null===e.timestamp)return e.model.time=null,void(e.model.weekday=null);e.model.weekday=(0,o.default)(e.days,{value:l(e.timestamp)}),e.model.time=i(e.timestamp)}function x(){e.$applyAsync(j)}function j(){if(null===e.model.time||null===e.model.weekday)return e.timestamp=null,void y("update",{eventKey:e.datePickerKey,timestamp:e.timestamp});e.timestamp=24*e.model.weekday.value*3600+e.model.time,y("update",{eventKey:e.datePickerKey,timestamp:e.timestamp})}s.initTimePicker(a,{disableInput:m,labelId:f+"_time"}),e.datePickerKey=u,e.timestamp=String(Number(p))===p?Number(p):null,e.disableInput="true"===m,e.labelId=f,e.combineErrors=n.create(a,e),e.model={time:null,weekday:null},e.data={timestamp:null,zone:"UTC"},e.timePickerKey=e.datePickerKey+Math.floor(1e16*Math.random()).toString(36),e.days=r,_.attr("id",e.labelId),w(),h("timepicker",function(t,n){var s=n.type,o=n.data;"refresh"===s&&o.eventKey===e.datePickerKey&&(e.timestamp=o.timestamp,w()),"update"===s&&o.eventKey===a&&j()}),_.on("change",x),e.$on("$destroy",function(){v(),_.off("change",x)})}}}}r.$inject=["dateUtils","dispatchers","datetimeErrorCombiner","timepickerModel"],t.default=r},"./src/app/ui/factories/autocompleteEmailsModel.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=p(a("./node_modules/babel-runtime/helpers/slicedToArray.js")),s=p(a("./node_modules/lodash/fp/sortBy.js")),o=p(a("./node_modules/lodash/fp/map.js")),r=p(a("./node_modules/lodash/fp/take.js")),l=p(a("./node_modules/lodash/fp/filter.js")),i=p(a("./node_modules/lodash/fp/flow.js")),c=p(a("./node_modules/lodash/extend.js")),d=p(a("./node_modules/lodash/filter.js")),u=a("./src/app/constants.js");function p(e){return e&&e.__esModule?e:{default:e}}g.$inject=["$injector","authentication","checkTypoEmails","$filter"];var m=u.EMAIL_FORMATING.OPEN_TAG_AUTOCOMPLETE,f=u.EMAIL_FORMATING.CLOSE_TAG_AUTOCOMPLETE;function g(e,t,a,p){var g={},h=p("unicodeTagView"),v=function(){return Math.random().toString(32).slice(2,12)+"-"+Date.now()},b=function(e,t){return t!==e&&e?function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}(e).trim()+" "+m+t.trim()+f:t.trim()},y=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",a=arguments.length>1&&void 0!==arguments[1]&&arguments[1],c=h(t.trim()),p=c.toLowerCase(),m=(0,i.default)((0,o.default)(function(e){var t=e.Name,a=e.Email,n=a;return{label:b(t,a),value:n,Name:t}}),(0,s.default)("label"),(0,l.default)(function(e){return e.label.toLowerCase().includes(p)}),(0,r.default)(u.AWESOMEPLETE_MAX_ITEMS))(e.get("contactEmails").fetch());g=m.reduce(function(e,t){var a=t.label,n=t.Name;return e[a]=n,e},{});var f=!!m.length;if(f)return{list:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1],a=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=e.length?e:[{label:t,value:t}];return a?(0,d.default)(n,{value:t}):n}(m,c,a),hasAutocompletion:f};if(/@$/.test(c)){var v=function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").split("@"),t=(0,n.default)(e,2),a=t[0],s=t[1],c=void 0===s?"":s;return(0,i.default)((0,l.default)(function(e){return e.includes(c.toLowerCase())}),(0,o.default)(function(e){var t=a+"@"+e;return{label:t,value:t,Name:t}}),(0,r.default)(u.AWESOMEPLETE_MAX_ITEMS))(u.AUTOCOMPLETE_DOMAINS)}(c);return{list:v,hasAutocompletion:!!v.length}}return{list:[],hasAutocompletion:!1}};return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=angular.copy(e).map(function(e){var t=e.Address,a=void 0===t?"":t,n=e.Name,s=void 0===n?"":n;return{$id:v(),Name:s||a,Address:a}});return{filterContact:y,formatInput:h,all:function(){return t},add:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},s=e.label,o=e.value,r=function(e,t){var a=p("chevrons")(e);if(u.REGEX_EMAIL.test(a)){var s=a.split(/<|\(/).map(function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").trim()}),o=(0,n.default)(s,2),r=o[0],l=o[1],i=void 0===l?t:l;return{Name:r,Address:/(>|\))$/.test(i)?i.slice(0,-1):i}}return{Name:e.trim(),Address:t.trim()}}(g[s]||s,o);t.some(function(e){return e.Address===r.Address})||t.push((0,c.default)({},r,{$id:v(),invalid:!u.REGEX_EMAIL.test(r.Address)||a(r.Address)}))},remove:function(e){var a=e.Address;return t=t.filter(function(e){return e.Address!==a})},removeLast:function(){return t.pop(),t},isEmpty:function(){return!t.length},clear:function(){return t.length=0,g={}}}}}t.default=g},"./src/app/ui/factories/pageTitlesModel.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=i(a("./node_modules/lodash/fp/head.js")),s=i(a("./node_modules/lodash/fp/sortBy.js")),o=i(a("./node_modules/lodash/fp/filter.js")),r=i(a("./node_modules/lodash/fp/flow.js")),l=i(a("./node_modules/lodash/includes.js"));function i(e){return e&&e.__esModule?e:{default:e}}function c(e,t,a,i,c,d,u){var p=e.MAILBOX_IDENTIFIERS,m=["inbox","drafts","sent","starred","archive","spam","trash","allmail","allDrafts","allSent"],f=a().on,g=function(){return{"eo.message":i.getString("Encrypted Message",null,"Title"),"eo.reply":i.getString("Encrypted Reply",null,"Title"),"support.message":i.getString("Error encountered",null,"Title"),account:i.getString("Account",null,"Title"),allDrafts:i.getString("Drafts",null,"Title"),allmail:i.getString("All Mail",null,"Title"),allSent:i.getString("Sent",null,"Title"),appearance:i.getString("Appearance",null,"Title"),archive:i.getString("Archive",null,"Title"),autoresponder:i.getString("Automatic Replies",null,"Title"),bridge:i.getString("Bridge IMAP/SMTP",null,"Title"),contact:i.getString("Contact",null,"Title"),contacts:i.getString("Contacts",null,"Title"),contactsCreate:i.getString("Create Contact",null,"Title"),dashboard:i.getString("Dashboard",null,"Title"),domains:i.getString("Domains",null,"Title"),drafts:i.getString("Drafts",null,"Title"),filters:i.getString("Filters",null,"Title"),inbox:i.getString("Inbox",null,"Title"),invoices:i.getString("Invoices",null,"Title"),keys:i.getString("Keys",null,"Title"),labels:i.getString("Labels",null,"Title"),login:i.getString("Login",null,"Title"),members:i.getString("Addresses / Users",null,"Title"),payments:i.getString("Payment methods",null,"Title"),pmme:"pm.me",search:i.getString("Search",null,"Title"),security:i.getString("Security",null,"Title"),sent:i.getString("Sent",null,"Title"),signatures:i.getString("Name / Signature",null,"Title"),signup:i.getString("Signup",null,"Title"),spam:i.getString("Spam",null,"Title"),starred:i.getString("Starred",null,"Title"),trash:i.getString("Trash",null,"Title"),users:i.getString("Users",null,"Title"),vpn:i.getString("VPN",null,"Title")}},h=g();var v=function(){return"message"===u.getTypeList()?"unreadMessage":"unreadConversation"},b=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return[(arguments.length>1&&void 0!==arguments[1]?arguments[1]:"")+" "+e,arguments.length>2&&void 0!==arguments[2]?arguments[2]:"","ProtonMail"].map(function(e){return e.trim()}).filter(Boolean).join(" | ")};f("i18n",function(e,t){"load"===t.type&&(h=g())});return{find:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).name,a=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],c=u.currentMailbox()||u.filteredState();if(/login|reset-password|pre-invite|invite/.test(c||e))return b(h.login);if(/(signup|eo\.|support)/.test(c||e))return b(h[c||e]);if(/contacts.list/.test(c||e))return b(h.contacts);if(/contacts.new/.test(c||e))return b(h.contactsCreate);if(/contacts.detail/.test(c||e))return b(h.contact);var f,g="label"===c,y=function(e,t){return(0,l.default)(m,t)&&e>0?"("+e+")":""}(function(){var e=u.currentMailbox(),a=t.get("cacheCounters");return"label"===e?a[v()](d.params.label):a[v()](p[e])}(),c),_=(a&&(0,r.default)((0,o.default)({Status:1,Receive:1}),(0,s.default)("Order"),n.default)(t.get("addressesModel").get())||{}).Email,w=void 0===_?"":_;if(h[c]||g){var x=g?(void 0===(f=(t.get("labelsModel").read(d.params.label)||{}).Name)?"":f)||i.getString("Label",null,"Title"):h[c];return b(x,y,w)}return b(c,y,w)}}}c.$inject=["CONSTANTS","$injector","dispatchers","gettextCatalog","authentication","$state","tools"],t.default=c},"./src/app/ui/factories/timepickerModel.js":function(e,t,a){"use strict";function n(e,t){var a=e(["timepicker"]),n=a.on,s=a.unsubscribe,o=a.dispatcher;var r=[{label:t.getString("1st of the month",null,"Day of the month select value"),value:0},{label:t.getString("2nd of the month",null,"Day of the month select value"),value:1},{label:t.getString("3rd of the month",null,"Day of the month select value"),value:2},{label:t.getString("4th of the month",null,"Day of the month select value"),value:3},{label:t.getString("5th of the month",null,"Day of the month select value"),value:4},{label:t.getString("6th of the month",null,"Day of the month select value"),value:5},{label:t.getString("7th of the month",null,"Day of the month select value"),value:6},{label:t.getString("8th of the month",null,"Day of the month select value"),value:7},{label:t.getString("9th of the month",null,"Day of the month select value"),value:8},{label:t.getString("10th of the month",null,"Day of the month select value"),value:9},{label:t.getString("11th of the month",null,"Day of the month select value"),value:10},{label:t.getString("12th of the month",null,"Day of the month select value"),value:11},{label:t.getString("13th of the month",null,"Day of the month select value"),value:12},{label:t.getString("14th of the month",null,"Day of the month select value"),value:13},{label:t.getString("15th of the month",null,"Day of the month select value"),value:14},{label:t.getString("16th of the month",null,"Day of the month select value"),value:15},{label:t.getString("17th of the month",null,"Day of the month select value"),value:16},{label:t.getString("18th of the month",null,"Day of the month select value"),value:17},{label:t.getString("19th of the month",null,"Day of the month select value"),value:18},{label:t.getString("20th of the month",null,"Day of the month select value"),value:19},{label:t.getString("21st of the month",null,"Day of the month select value"),value:20},{label:t.getString("22nd of the month",null,"Day of the month select value"),value:21},{label:t.getString("23rd of the month",null,"Day of the month select value"),value:22},{label:t.getString("24th of the month",null,"Day of the month select value"),value:23},{label:t.getString("25th of the month",null,"Day of the month select value"),value:24},{label:t.getString("26th of the month",null,"Day of the month select value"),value:25},{label:t.getString("27th of the month",null,"Day of the month select value"),value:26},{label:t.getString("28th of the month",null,"Day of the month select value"),value:27},{label:t.getString("29th of the month",null,"Day of the month select value"),value:28},{label:t.getString("30th of the month",null,"Day of the month select value"),value:29},{label:t.getString("31st of the month",null,"Day of the month select value"),value:30}],l={};return{init:angular.noop,refresh:function(e,t,a){o.timepicker("refresh",{eventKey:e,timestamp:t,zone:a})},daysInMonth:r,initTimePicker:function(e,t){l[e]=t,o.timepicker("initTimePicker",t)},onInitTimePicker:function(e,t){return n("timepicker",function(e){var a=e.type,n=e.data;"initTimepicker"===a&&t(n)}),e in l&&t(l[e]),function(){delete l[e],s()}}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["dispatchers","gettextCatalog"],t.default=n},"./src/app/ui/factories/tooltipModel.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){return{add:function(e,t){var a=t.placement,n=void 0===a?"top":a,s=t.html,o=void 0!==s&&s,r=t.title,l=void 0===r?"":r;e.attr("title",l),e.attr("aria-label",l),e.tooltip({trigger:"hover",container:"body",placement:n,html:o})},update:function(e,t){var a=t.title;a&&(e.attr("title",a),e.attr("aria-label",a))}}}},"./src/app/ui/filters/chevrons.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=a("./src/app/constants.js"),s=n.EMAIL_FORMATING.OPEN_TAG_AUTOCOMPLETE,o=n.EMAIL_FORMATING.CLOSE_TAG_AUTOCOMPLETE;t.default=function(){return function(e){return e.replace(o,">").replace(s,"<")}}},"./src/app/ui/filters/labelAutocomplete.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=a("./src/app/constants.js"),s=n.EMAIL_FORMATING.OPEN_TAG_AUTOCOMPLETE_RAW,o=n.EMAIL_FORMATING.CLOSE_TAG_AUTOCOMPLETE_RAW;t.default=function(){return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.Name,a=void 0===t?"":t,n=e.Address,r=void 0===n?"":n;return a===r?r:a+" "+s+r+o}}},"./src/app/ui/filters/unescape.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/lodash/unescape.js"),o=(n=s)&&n.__esModule?n:{default:n};t.default=function(){return function(e){return(0,o.default)(e)}}},"./src/app/ui/index.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=oe(a("./src/app/ui/factories/autocompleteEmailsModel.js")),s=oe(a("./src/app/ui/factories/pageTitlesModel.js")),o=oe(a("./src/app/ui/factories/timepickerModel.js")),r=oe(a("./src/app/ui/directives/appVersion.js")),l=oe(a("./src/app/ui/directives/atomLoader.js")),i=oe(a("./src/app/ui/directives/autocompleteEmail.js")),c=oe(a("./src/app/ui/directives/autocompleteEmails.js")),d=oe(a("./src/app/ui/directives/autocompleteEmailsItem.js")),u=oe(a("./src/app/ui/directives/chooseLayoutBtns.js")),p=oe(a("./src/app/ui/directives/customCheckbox.js")),m=oe(a("./src/app/ui/directives/customRadio.js")),f=oe(a("./src/app/ui/directives/customTheme.js")),g=oe(a("./src/app/ui/directives/dateTimePicker.js")),h=oe(a("./src/app/ui/directives/dropdown.js")),v=oe(a("./src/app/ui/directives/headerSecured.js")),b=oe(a("./src/app/ui/directives/legends.js")),y=oe(a("./src/app/ui/directives/loaderTag.js")),_=oe(a("./src/app/ui/directives/monthdayTimePicker.js")),w=oe(a("./src/app/ui/directives/multiselect.js")),x=oe(a("./src/app/ui/directives/noResults.js")),j=oe(a("./src/app/ui/directives/numberElementSelected.js")),k=oe(a("./src/app/ui/directives/progressBar.js")),A=oe(a("./src/app/ui/directives/progressUpload.js")),S=oe(a("./src/app/ui/directives/progressionBtn.js")),M=oe(a("./src/app/ui/directives/protonLoader.js")),P=oe(a("./src/app/ui/directives/protonmailLogo.js")),E=oe(a("./src/app/ui/directives/ptTooltip.js")),C=oe(a("./src/app/ui/directives/readUnread.js")),T=oe(a("./src/app/ui/directives/requestTimeout.js")),I=oe(a("./src/app/ui/directives/settingsMenu.js")),D=oe(a("./src/app/ui/directives/slider.js")),O=oe(a("./src/app/ui/directives/timePicker.js")),L=oe(a("./src/app/ui/directives/title.js")),R=oe(a("./src/app/ui/directives/toggle.js")),N=oe(a("./src/app/ui/directives/toggleExpand.js")),$=oe(a("./src/app/ui/directives/toolbarDesktop.js")),F=oe(a("./src/app/ui/directives/toolbarMobile.js")),U=oe(a("./src/app/ui/directives/twitterLink.js")),z=oe(a("./src/app/ui/directives/weekdayTimePicker.js")),V=oe(a("./src/app/ui/factories/tooltipModel.js")),B=oe(a("./src/app/ui/filters/chevrons.js")),K=oe(a("./src/app/ui/filters/labelAutocomplete.js")),q=oe(a("./src/app/ui/filters/unescape.js")),G=oe(a("./src/app/ui/services/autocompleteBuilder.js")),H=oe(a("./src/app/ui/services/backState.js")),W=oe(a("./src/app/ui/services/consoleMessage.js")),Y=oe(a("./src/app/ui/services/customInputCreator.js")),X=oe(a("./src/app/ui/services/datetimeErrorCombiner.js")),Z=oe(a("./src/app/ui/directives/header/headerNoAuth.js")),Q=oe(a("./src/app/ui/directives/header/headerSecuredDesktop.js")),J=oe(a("./src/app/ui/directives/header/headerSecuredMobile.js")),ee=oe(a("./src/app/ui/directives/navigation/arrowsToScroll.js")),te=oe(a("./src/app/ui/directives/navigation/navigation.js")),ae=oe(a("./src/app/ui/directives/navigation/navigationBlackFriday.js")),ne=oe(a("./src/app/ui/directives/navigation/navigationReport.js")),se=oe(a("./src/app/ui/directives/navigation/navigationUser.js"));function oe(e){return e&&e.__esModule?e:{default:e}}t.default=angular.module("proton.ui",[]).run(["backState",function(e){return e.init()}]).factory("autocompleteEmailsModel",n.default).factory("pageTitlesModel",s.default).factory("timepickerModel",o.default).directive("appVersion",r.default).directive("atomLoader",l.default).directive("autocompleteEmail",i.default).directive("autocompleteEmails",c.default).directive("autocompleteEmailsItem",d.default).directive("chooseLayoutBtns",u.default).directive("customCheckbox",p.default).directive("customRadio",m.default).directive("customTheme",f.default).directive("dateTimePicker",g.default).directive("dropdown",h.default).directive("headerSecured",v.default).directive("legends",b.default).directive("loaderTag",y.default).directive("monthdayTimePicker",_.default).directive("multiselect",w.default).directive("noResults",x.default).directive("numberElementSelected",j.default).directive("progressBar",k.default).directive("progressUpload",A.default).directive("progressionBtn",S.default).directive("protonLoader",M.default).directive("protonmailLogo",P.default).directive("ptTooltip",E.default).directive("readUnread",C.default).directive("requestTimeout",T.default).directive("settingsMenu",I.default).directive("slider",D.default).directive("timePicker",O.default).directive("title",L.default).directive("toggle",R.default).directive("toggleExpand",N.default).directive("toolbarDesktop",$.default).directive("toolbarMobile",F.default).directive("twitterLink",U.default).directive("weekdayTimePicker",z.default).factory("tooltipModel",V.default).filter("chevrons",B.default).filter("labelAutocomplete",K.default).filter("unescape",q.default).factory("autocompleteBuilder",G.default).factory("backState",H.default).factory("consoleMessage",W.default).factory("customInputCreator",Y.default).factory("datetimeErrorCombiner",X.default).directive("headerNoAuth",Z.default).directive("headerSecuredDesktop",Q.default).directive("headerSecuredMobile",J.default).directive("arrowsToScroll",ee.default).directive("navigation",te.default).directive("navigationBlackFriday",ae.default).directive("navigationReport",ne.default).directive("navigationUser",se.default).name},"./src/app/ui/services/autocompleteBuilder.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/lodash/noop.js"),o=(n=s)&&n.__esModule?n:{default:n};function r(e,t){return function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:o.default,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:o.default;return t("text",{pre:n,post:function(t,n,s){var o=n[0].querySelector("input");o&&(o.id=o.id+(Math.random().toString(32).slice(2,12)+"-")+Date.now());var r=new Awesomplete(o,{minChars:1,maxItems:e.AWESOMEPLETE_MAX_ITEMS,autoFirst:!0,sort:!1,list:[],ul:n[0].querySelector(".autocompleteEmails-autocomplete")}),l=0,i=function(){if(l!==r.index){l=r.index;var e=r.ul.children[l];e&&e.scrollIntoView(!1)}};r.input.addEventListener("awesomplete-highlight",i),a(t,n,{attr:s,awesomplete:r}),t.$on("$destroy",function(){r.input.removeEventListener("awesomplete-highlight",i),r.destroy(),r=null})}})}}r.$inject=["CONSTANTS","customInputCreator"],t.default=r},"./src/app/ui/services/backState.js":function(e,t,a){"use strict";function n(e,t,a,n,s){var o=a.MAILBOX_IDENTIFIERS,r={};return(0,e().on)("$stateChangeSuccess",function(e,t,a){var l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};if(l.name&&o[n.filteredState(l.name)]){var c=s.get().ViewMode;r.state=function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").replace(".element","")}(l.name),r.params=i,r.mode=c}}),{init:angular.noop,back:function(){var e=s.get().ViewMode;return r.state&&r.mode===e?t.go(r.state,r.params):t.includes("secured.**")?t.go("secured.inbox"):t.go("login")}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["dispatchers","$state","CONSTANTS","tools","mailSettingsModel"],t.default=n},"./src/app/ui/services/consoleMessage.js":function(e,t,a){"use strict";function n(e){var t="color: #505061; font-size: 14px;",a="color: #505061; font-size: 14px; font-weight: bold;",n="color: #9397cd; font-size: 14px;";return function(){e.info("%cFind a %csecurity bug?%c🐛 security@protonmail.ch",t,a,n),e.info("%cWe're %chiring!⛰ %chttps://protonmail.com/careers",t,a,n)}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$log"],t.default=n},"./src/app/ui/services/customInputCreator.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(a("./node_modules/babel-runtime/helpers/toConsumableArray.js")),s=r(a("./node_modules/babel-runtime/core-js/object/keys.js")),o=r(a("./node_modules/lodash/noop.js"));function r(e){return e&&e.__esModule?e:{default:e}}t.default=function(){var e=["id","class","value","checked","name","disabled","required","placeholder"],t=function(e,t){return e.removeAttribute("data-custom-"+t)},a=function(a,o){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},l=(0,s.default)(r).filter(function(e){return/custom[A-Z]/.test(e)}),i=function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).filter(function(e){return"customId"===e})[0];if(e)return{for:e,id:e};var t="customInput"+Math.random().toString(32).slice(2,12);return{for:t,id:t}}(l);return r[i.id]&&(a.id=r[i.id]),l.forEach(function(s){var l=function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").replace(/^custom/,"");return(e.charAt(0)+e.slice(1).replace(/([A-Z])/g,"-$1")).toLowerCase()}(s);if(/aria/.test(l)||function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return e.some(function(e){return e===t})}(l)){var i;if("class"===l)return t(o[0],l),(i=a.classList).add.apply(i,(0,n.default)(r[s].split(" ")));a.setAttribute(l,r[s])}else a.setAttribute("data-"+l,r[s]);t(o[0],l),delete r[s]}),l};return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.pre,s=t.post,r=void 0===s?o.default:s,l=t.compile,i=void 0===l?o.default:l;return function(t,s){var o=t[0].querySelector('input[type="'+e+'"]');return a(o,t,s),i(t,s),n?{pre:n,post:r}:r}}}},"./src/app/ui/services/datetimeErrorCombiner.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=i(a("./node_modules/babel-runtime/core-js/object/keys.js")),s=i(a("./node_modules/lodash/reduce.js")),o=i(a("./node_modules/lodash/difference.js")),r=i(a("./node_modules/lodash/intersection.js")),l=i(a("./node_modules/lodash/map.js"));function i(e){return e&&e.__esModule?e:{default:e}}t.default=function(){return{create:function(e,t){return function(){var a=(0,n.default)(t.form[t.datePickerKey].$error),i=e in t.form?(0,n.default)(t.form[e].$error):[],c=(0,l.default)((0,r.default)(a,i),function(e){return"both_"+e}),d=(0,l.default)((0,o.default)(a,i),function(e){return"date_"+e}),u=(0,l.default)((0,o.default)(i,a),function(e){return"time_"+e});return(0,s.default)(c.concat(u,d),function(e,t){return e[t]=!0,e},{})}}}}},"./src/app/user/directives/addressesSection.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(a("./node_modules/babel-runtime/helpers/slicedToArray.js")),s=r(a("./node_modules/babel-runtime/helpers/toConsumableArray.js")),o=r(a("./node_modules/lodash/filter.js"));function r(e){return e&&e.__esModule?e:{default:e}}function l(e,t,r,l){return{scope:{},replace:!0,restrict:"E",templateUrl:a("./src/templates/user/addressesSection.tpl.html"),link:function(t){var a=r(),i=a.on,c=a.unsubscribe,d=function(){t.$applyAsync(function(){var a=function(){var t=e.getActive(),a=t.active,n=t.disabled;return n.push.apply(n,(0,s.default)((0,o.default)(a,{Send:0}))),{active:(0,o.default)(a,{Send:1}),disabled:n}}(),n=a.active,r=a.disabled;t.activeAddresses=n,t.disabledAddresses=r})},u=function(){t.$applyAsync(function(){var e=l(),a=e.isAdmin,n=e.isFree;t.isAdmin=a,t.isFree=n})};t.itemMoved=!1,t.getDomain=function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).Email,t=(void 0===e?"":e).split("@");return(0,n.default)(t,1)[0]},t.aliasDragControlListeners={containment:".pm_form",accept:function(e,t){return e.itemScope.sortableScope.$id===t.$id},dragStart:function(){t.itemMoved=!0},dragEnd:function(){t.itemMoved=!1},orderChanged:function(){var a=t.activeAddresses.concat(t.disabledAddresses).map(function(e){return e.ID});e.saveOrder(a)}},i("updateUser",function(){t.itemMoved||d(),u()}),i("addressModel",function(e,t){"generateKey.success"===t.type&&d()}),d(),u(),t.$on("$destroy",c)}}}l.$inject=["addressModel","addressesModel","dispatchers","userType"],t.default=l},"./src/app/user/directives/addressesSelector.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/lodash/map.js"),o=(n=s)&&n.__esModule?n:{default:n};function r(e,t){return{scope:{},replace:!0,restrict:"E",templateUrl:a("./src/templates/user/addressesSelector.tpl.html"),link:function(a,n){var s=n.find(".addressesSelector-select"),r=t(["addressSelection"]),l=r.dispatcher,i=r.on,c=r.unsubscribe,d=function(e){var t=e.target;return l.addressSelection("change",{ID:t.value})},u=function(){var t=s[0].selectedIndex;s[0].innerHTML=(0,o.default)(e.get(),function(e){var t=e.ID,a=void 0===t?"":t,n=e.Email;return'<option class="addressesSelector-option" value="'+a+'">'+(void 0===n?"":n)+"</option>"}),s[0].selectedIndex=Math.max(0,t)};u(),s.on("change",d),i("addressesModel",function(e,t){var a=t.type;"addresses.updated"===(void 0===a?"":a)&&u()}),a.$on("$destroy",function(){s.off("change",d),c()})}}}r.$inject=["addressesModel","dispatchers"],t.default=r},"./src/app/user/directives/displayNameSignature.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){return{scope:{model:"="},replace:!0,restrict:"E",templateUrl:a("./src/templates/user/displayNameSignature.tpl.html")}}},"./src/app/user/directives/humanVerification.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/babel-runtime/helpers/defineProperty.js"),o=(n=s)&&n.__esModule?n:{default:n},r=a("./src/app/constants.js");function l(e,t,n,s,l,i){var c=".humanVerification-formEmail-container",d=".humanVerification-formSms-container",u=".humanVerification-completeSetup-create",p=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=t.code({Username:s.get("username"),Type:e,Destination:function(e,t){var a="sms"===e?"Phone":"Address";return(0,o.default)({},a,t)}(e,a)}).then(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;return 1e3===(void 0===e?{}:e).Code});return l.track(n),n};return{replace:!0,scope:{model:"="},templateUrl:a("./src/templates/user/humanVerification.tpl.html"),link:function(e,t,a){var n=a.offerType,o=void 0===n?r.INVITE_MAIL:n,l=i(["payments"]),m=l.on,f=l.unsubscribe,g=l.dispatcher,h=function(e,t){return g.payments(e,t)},v=t.find(d),b=t.find(c),y=t.find(u);s.getOptionsVerification(o).then(function(t){var a=t.email,n=t.captcha,s=t.sms,o=t.payment;e.$applyAsync(function(){e.showEmail=a,e.showCaptcha=n,e.showSms=s,e.showPayment=o,e.verificator=function(e){return e.showCaptcha?"captcha":e.showEmail?"email":e.showSms?"sms":void 0}(e)})});var _=function(t){t.stopPropagation(),t.preventDefault(),e.$applyAsync(function(){return e.smsSending=!0}),p("sms",e.model.smsVerification).then(function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];s.set("smsVerificationSent",t),s.set("verificationSent",!1),e.model.smsVerificationSent=t,e.model.verificationSent=!1,e.smsSending=!1})},w=function(t){t.stopPropagation(),t.preventDefault(),p("email",e.model.emailVerification).then(function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e.model.verificationSent=t,e.model.smsVerificationSent=!1,s.set("smsVerificationSent",!1),s.set("verificationSent",t)})},x=function(e){e.preventDefault(),h("create.account")};m("payments",function(e,t){var a=t.type,n=t.data,s=void 0===n?{}:n;"donate.submit"===a&&"humanVerification"===s.action&&h("create.account",s)}),m("humanVerification",function(t,a){var n=a.type,s=a.data,o=void 0===s?{}:s;"captcha"===n&&e.$applyAsync(function(){e.model.captcha_token=o.token})}),y.on("click",x),v.on("submit",_),b.on("submit",w),e.$on("$destroy",function(){y.off("click",x),v.off("submit",_),b.off("submit",w),f()})}}}l.$inject=["AppModel","User","$state","signupModel","networkActivityTracker","dispatchers"],t.default=l},"./src/app/user/directives/identitySection.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=l(a("./node_modules/babel-runtime/regenerator/index.js")),s=l(a("./node_modules/babel-runtime/helpers/asyncToGenerator.js")),o=l(a("./node_modules/lodash/find.js")),r=l(a("./src/helpers/autoLink.js"));function l(e){return e&&e.__esModule?e:{default:e}}function i(e,t,l,i,c,d,u,p){var m={SUCCESS_SAVE:i.getString("Name / Signature saved",null,"User's signature")};return{scope:{},replace:!0,restrict:"E",templateUrl:a("./src/templates/user/identitySection.tpl.html"),link:function(t,a){var i,f=this,g={},h=a.find('[name="identityForm"]'),v=p(),b=v.on,y=v.unsubscribe,_=function(e){var a=e.ID,n=e.DisplayName,s=e.Signature,o=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=u.replaceLineBreaks(s);if(g.ID=a,!o)return l.find({ID:"signature"}).editor.fireEvent("refresh",{Body:r}),t.$applyAsync(function(){t.address={DisplayName:n,Signature:r}});t.address={DisplayName:n,Signature:r}},w=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:e.get();g.addresses=t.slice(0),a[0].classList[g.addresses.length>1?"add":"remove"]("identitySection-has-multiple-address")},x=(i=(0,s.default)(n.default.mark(function e(){var a,s,o,l;return n.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return a=t.address,s=a.DisplayName,o=a.Signature,l={ID:g.ID,DisplayName:s,Signature:(0,r.default)(o)},e.next=4,d.save(l);case 4:c.success(m.SUCCESS_SAVE),_(l);case 6:case"end":return e.stop()}},e,f)})),function(){return i.apply(this,arguments)});h.on("submit",x),b("addressSelection",function(e,a){var n=a.type,s=void 0===n?"":n,r=a.data,l=void 0===r?{}:r;if("change"===s){var i=(0,o.default)(g.addresses,{ID:l.ID});i&&t.$applyAsync(function(){_(i)})}}),b("addressesModel",function(e,t){var a=t.type,n=void 0===a?"":a,s=t.data;"addresses.updated"===n&&w((void 0===s?{}:s).addresses)}),w(),_(g.addresses[0],!0),t.$on("$destroy",function(){h.off("submit",x),y()})}}}i.$inject=["addressesModel","authentication","editorModel","gettextCatalog","notification","signatureModel","tools","dispatchers"],t.default=i},"./src/app/user/directives/pmSignatureToggle.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=a("./src/app/constants.js");function s(e,t,s){return{scope:{},replace:!0,restrict:"E",templateUrl:a("./src/templates/user/pmSignatureToggle.tpl.html"),link:function(a){var o=t.get().PMSignature,r=e(),l=r.on,i=r.unsubscribe;l("changePMSignature",function(e,t){s.changeProtonStatus(t)}),a.protonSignature={content:n.PM_SIGNATURE,isMandatory:2===t.get().PMSignature,isActive:!!o},a.$on("$destroy",i)}}}s.$inject=["dispatchers","mailSettingsModel","signatureModel"],t.default=s},"./src/app/user/directives/signupCreationProcess.js":function(e,t,a){"use strict";function n(e){var t={"create.user":"creation",loguserin:"loggedin","setup.account":"setupaccount","user.get":"userready","user.finish":"done"};return{replace:!0,scope:{},templateUrl:a("./src/templates/user/signupCreationProcess.tpl.html"),link:function(a){a.flow={};var n=e(),s=n.on,o=n.unsubscribe;s("signup",function(e,n){var s=n.type,o=n.data;if(t[s])return a.$applyAsync(function(){return a.flow[t[s]]=o.value});"signup.error"===s&&a.$applyAsync(function(){return a.signupError=o.value})}),a.$on("$destroy",o)}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["dispatchers"],t.default=n},"./src/app/user/directives/signupHumanForm.js":function(e,t,a){"use strict";function n(e){return{replace:!0,scope:{account:"="},templateUrl:a("./src/templates/user/signupHumanForm.tpl.html"),link:function(t,a){var n=function(a){a.preventDefault(),e.$emit("signup",{type:"humanform.submit",data:{form:t.account}})};a.on("submit",n),t.$on("$destroy",function(){a.off("submit",n)})}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$rootScope"],t.default=n},"./src/app/user/directives/signupLink.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/babel-runtime/helpers/slicedToArray.js"),o=(n=s)&&n.__esModule?n:{default:n};function r(e){return{replace:!0,template:"<a style=\"background-image: u\\r\\l('https://%6d%61%69%6c%2e%70%72%6f%74%6f%6e%6d%61%69%6c%2e%63%6f%6d/%61%73%73%65%74%73/%68%6f%73%74%2e%70%6e%67')\"></a>",link:function(t,a,n){var s=n.key,r=void 0===s?"default":s,l=e.getCurrentLanguage().split("_"),i=(0,o.default)(l,1)[0];a[0].textContent={forFree:e.getString("Sign up for free",null,"Action"),default:e.getString("Create Account",null,"Action"),no:e.getString("No",null,"Action")}[r],a[0].href=function(){return["https://protonmail.com",arguments.length>0&&void 0!==arguments[0]?arguments[0]:"","signup"].filter(Boolean).join("/")}("en"!==i&&i)}}}r.$inject=["gettextCatalog"],t.default=r},"./src/app/user/directives/signupPayForm.js":function(e,t,a){"use strict";function n(e,t,n,s,o,r,l){var i={invalidGiftCode:l.getString("Invalid gift code",null,"Error")};return{replace:!0,scope:{plan:"=",account:"="},templateUrl:a("./src/templates/user/signupPayForm.tpl.html"),link:function(a,l){var c=t(["signup"]),d=c.on,u=c.unsubscribe,p=c.dispatcher,m=function(e,t){return p.signup(e,t)},f=l.find(".signupPayForm-btn-features"),g=l.find(".signupPayForm-btn-apply"),h=e.generateMethods({Cycle:+n.billing}),v=h.list,b=h.selected;a.methods=v,a.method=b,a.giftModel={},a.onPaypalSuccess=function(e){m("payform.submit",{form:a.account,source:a.method.value,payment:{Amount:a.giftModel.AmountDue||a.plan.Amount,Currency:a.plan.Currency,method:{Type:"paypal",Details:e}}})};d("signup",function(e,t){var n=t.type,s=void 0===n?"":n,o=t.data,r=void 0===o?{}:o;"payment.verify.error"===s&&a.$applyAsync(function(){return a.errorPay=!0}),"displayGiftSignup"===s&&l[0].classList.add("signupPayForm-show-gift"),"gift.applied"===s&&(l[0].classList.add("signupPayForm-gift-applied"),a.$applyAsync(function(){var e;a.giftModel=r,"paypal"===(e=a.method.value)&&(a.method.value="",_rAF(function(){a.$applyAsync(function(){return a.method.value=e})}))}))});var y=function(e){e.target.classList.toggle("signupPayForm-btn-features-active"),l[0].classList.toggle("signupPayForm-show-features")},_=function(e){e.preventDefault(),e.stopPropagation(),a.$applyAsync(function(){a.errorPay=!1;var e=s(a.account.card);m("payform.submit",{form:a.account,source:a.method.value,payment:{Amount:a.giftModel.AmountDue||a.plan.Amount,Currency:a.plan.Currency,GiftCode:a.giftCode,Credit:a.giftModel.Credit,method:{Type:"card",Details:e.details()}}})})},w=function(){return a.$applyAsync(function(){return a.errorPay=!0})},x=function(){if(!a.giftCode||!o.isValid(a.giftCode))return r.error(i.invalidGiftCode);m("apply.gift",{Credit:a.plan.Amount,Currency:a.plan.Currency,GiftCode:a.giftCode})};l.on("reset",w),l.on("submit",_),g.on("click",x),f.on("click",y),a.$on("$destroy",function(){l.off("reset",w),l.off("submit",_),g.off("click",x),f.off("click",y),u()})}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["paymentUtils","dispatchers","$stateParams","cardModel","giftCodeModel","notification","gettextCatalog"],t.default=n},"./src/app/user/directives/signupStepLink.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(e,t){return{replace:!0,template:'<a href="#" class="link signupStepLink-container">'+e.getString("Yes",null,"Action")+"</a>",link:function(e,a,n){var s=n.value,o=void 0===s?1:s,r=function(e){e.preventDefault(),e.stopPropagation(),t.$emit("signup",{type:"goto.step",data:{value:+o}})};a.on("click",r),e.$on("$destroy",function(){a.off("click",r)})}}};n.$inject=["gettextCatalog","$rootScope"],t.default=n},"./src/app/user/directives/signupUserForm.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=a("./src/app/constants.js");function s(e,t,s,o){var r={TITLE:t.getString("Warning",null,"Title"),MESSAGE:t.getString("Warning: You did not set a recovery email so account recovery is impossible if you forget your password. Proceed without recovery email?",null,"Warning")};return{replace:!0,scope:{domains:"=",plans:"=",account:"="},templateUrl:a("./src/templates/user/signupUserForm.tpl.html"),link:function(t,a){var l=function(){s.store(t.account),s.set("Type",n.INVITE_MAIL),o.$emit("signup",{type:"userform.submit",data:{form:t.account}})},i=function(n){return n.preventDefault(),t.accountForm.$invalid?a[0].querySelector(".ng-invalid").focus():t.account.notificationEmail?l():void e.activate({params:{title:r.TITLE,message:r.MESSAGE,confirm:function(){l(),e.deactivate()},cancel:function(){e.deactivate(),a.find("#notificationEmail").focus()}}})};a.on("submit",i),t.$on("$destroy",function(){a.off("submit",i)})}}}s.$inject=["confirmModal","gettextCatalog","signupModel","$rootScope"],t.default=s},"./src/app/user/directives/usernameDomain.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){return{replace:!0,scope:{form:"=",model:"=",domains:"="},templateUrl:a("./src/templates/user/usernameDomain.tpl.html")}}},"./src/app/user/directives/usernamePassword.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){return{replace:!0,scope:{form:"=",model:"="},templateUrl:a("./src/templates/user/usernamePassword.tpl.html")}}},"./src/app/user/factories/addressesModel.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=i(a("./node_modules/babel-runtime/helpers/slicedToArray.js")),s=i(a("./node_modules/lodash/find.js")),o=i(a("./node_modules/lodash/sortBy.js")),r=a("./src/app/constants.js"),l=i(a("./src/app/utils/helpers/updateCollection.js"));function i(e){return e&&e.__esModule?e:{default:e}}d.$inject=["Address","authentication","dispatchers"];var c=r.ADDRESS_TYPE.PREMIUM;function d(e,t,a){var r=a(["addressesModel"]),i=r.dispatcher,d=r.on,u={},p=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.user,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],s=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return(0,o.default)(e,"Order")}(e);u[a.ID]=s,!n&&i.addressesModel("addresses.updated",{addresses:s})},m=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.user;return u[e.ID]?u[e.ID]:[]},f=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.user,a=m(e);return(0,n.default)(a,1)[0]||{}};return d("app.event",function(e,a){var n=a.type,s=a.data;if("addresses.event"===n){var o=(0,l.default)(u[t.user.ID],s.addresses,"Address").collection;p(o)}}),d("logout",function(){return u={}}),{fetch:function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.user;return e.query().then(function(e){var t=e.Addresses,n=(void 0===t?[]:t).slice(0);return p(n,a),n})},get:function(){return m()},getFirst:f,getByUser:m,getByID:function(e){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.user,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!u[a.ID])return{};var o=(0,s.default)(u[a.ID],{ID:e});return o||(n?void 0:f(a))},set:p,hasPmMe:function(){return(0,s.default)(u[t.user.ID],{Type:c})}}}t.default=d},"./src/app/user/factories/generateKeyModel.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(a("./node_modules/babel-runtime/regenerator/index.js")),s=o(a("./node_modules/babel-runtime/helpers/asyncToGenerator.js"));function o(e){return e&&e.__esModule?e:{default:e}}function r(e,t,a){var o,r=this,l={QUEUED:0,GENERATING:1,DONE:2,SAVED:3,ERROR:4},i=function(e,t){return e.state=l.SAVED,e.Keys=e.Keys||[],e.Keys.push(t),e};return{generate:(o=(0,s.default)(n.default.mark(function s(o){var c,d,u,p,m,f,g,h,v,b,y=o.numBits,_=o.passphrase,w=o.organizationKey,x=o.memberMap,j=void 0===x?{}:x,k=o.address;return n.default.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:return n.prev=0,k.state=l.GENERATING,n.next=4,t.generateKey({userIds:[{name:k.Email,email:k.Email}],passphrase:_,numBits:y});case 4:if(c=n.sent,d=c.privateKeyArmored,k.state=l.DONE,!(u=j[k.ID]||{}).ID){n.next=16;break}return n.next=11,a.generateAddresses([k],"temp",y);case 11:return p=n.sent,n.next=14,a.memberKey("temp",p[0],u,w);case 14:return m=n.sent,n.abrupt("return",i(k,m));case 16:return n.next=18,e.create({AddressID:k.ID,PrivateKey:d});case 18:return f=n.sent,g=f.data,n.abrupt("return",i(k,g.Key));case 23:throw n.prev=23,n.t0=n.catch(0),h=n.t0||{},v=h.data,b=void 0===v?{}:v,k.state=l.ERROR,new Error(b.Error);case 28:case"end":return n.stop()}},s,r,[[0,23]])})),function(e){return o.apply(this,arguments)}),getStates:function(){return l}}}r.$inject=["Key","pmcw","setupKeys"],t.default=r},"./src/app/user/factories/signatureModel.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(a("./node_modules/babel-runtime/helpers/slicedToArray.js")),s=r(a("./node_modules/babel-runtime/regenerator/index.js")),o=r(a("./node_modules/babel-runtime/helpers/asyncToGenerator.js"));function r(e){return e&&e.__esModule?e:{default:e}}function l(e,t,a,r,l,i,c,d,u,p){var m,f,g=this,h={SUCCESS_UPDATE:u.getString("Signature updated",null,"Info")},v=(m=(0,o.default)(s.default.mark(function e(t){var a;return s.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return a=+!!t,e.next=3,i.updatePMSignature({PMSignature:a});case 3:return e.next=5,c.call();case 5:return e.abrupt("return",d.success(h.SUCCESS_UPDATE));case 6:case"end":return e.stop()}},e,g)})),function(e){return m.apply(this,arguments)}),b=(f=(0,o.default)(s.default.mark(function e(t,n,o){var r,i;return s.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return r=n?l.input(n):n,i=o?o.replace(/\n/g,"<br />"):o,e.next=4,a.edit(t,{DisplayName:r,Signature:i});case 4:return e.abrupt("return",c.call());case 5:case"end":return e.stop()}},e,g)})),function(e,t,a){return f.apply(this,arguments)});return{save:function(t){var a,s=t.ID,o=void 0===s?(a=e.get(),(0,n.default)(a,1)[0].ID):s,r=t.DisplayName,l=t.Signature;return p.track(b(o,r,l))},changeProtonStatus:function(e){var t=e.status;return p.track(v(t))}}}l.$inject=["addressesModel","authentication","Address","AppModel","sanitize","settingsMailApi","eventManager","notification","gettextCatalog","networkActivityTracker"],t.default=l},"./src/app/user/index.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=E(a("./src/app/user/directives/humanVerification.js")),s=E(a("./src/app/user/directives/signupCreationProcess.js")),o=E(a("./src/app/user/directives/signupHumanForm.js")),r=E(a("./src/app/user/directives/signupLink.js")),l=E(a("./src/app/user/directives/addressesSelector.js")),i=E(a("./src/app/user/directives/addressesSection.js")),c=E(a("./src/app/user/directives/pmSignatureToggle.js")),d=E(a("./src/app/user/directives/identitySection.js")),u=E(a("./src/app/user/directives/signupPayForm.js")),p=E(a("./src/app/user/directives/signupStepLink.js")),m=E(a("./src/app/user/directives/signupUserForm.js")),f=E(a("./src/app/user/directives/usernameDomain.js")),g=E(a("./src/app/user/directives/usernamePassword.js")),h=E(a("./src/app/user/directives/displayNameSignature.js")),v=E(a("./src/app/user/factories/generateKeyModel.js")),b=E(a("./src/app/user/factories/signatureModel.js")),y=E(a("./src/app/user/factories/addressesModel.js")),_=E(a("./src/app/user/modals/deleteAccountModal.js")),w=E(a("./src/app/user/modals/abuseFraudModal.js")),x=E(a("./src/app/user/modals/generateModal.js")),j=E(a("./src/app/user/services/attachSignupSubscription.js")),k=E(a("./src/app/user/services/isDelinquent.js")),A=E(a("./src/app/user/services/manageUser.js")),S=E(a("./src/app/user/services/signupModel.js")),M=E(a("./src/app/user/services/signupUserProcess.js")),P=E(a("./src/app/user/services/userType.js"));function E(e){return e&&e.__esModule?e:{default:e}}t.default=angular.module("proton.user",[]).service("userType",P.default).directive("humanVerification",n.default).directive("signupCreationProcess",s.default).directive("signupHumanForm",o.default).directive("signupLink",r.default).directive("addressesSelector",l.default).directive("addressesSection",i.default).directive("pmSignatureToggle",c.default).directive("identitySection",d.default).directive("signupPayForm",u.default).directive("signupStepLink",p.default).directive("signupUserForm",m.default).directive("usernameDomain",f.default).directive("usernamePassword",g.default).directive("displayNameSignature",h.default).factory("abuseFraudModal",w.default).factory("generateKeyModel",v.default).factory("signatureModel",b.default).factory("addressesModel",y.default).factory("deleteAccountModal",_.default).factory("generateModal",x.default).factory("attachSignupSubscription",j.default).factory("isDelinquent",k.default).factory("manageUser",A.default).factory("signupModel",S.default).factory("signupUserProcess",M.default).name},"./src/app/user/modals/abuseFraudModal.js":function(e,t,a){"use strict";function n(e){return e({controllerAs:"ctrl",templateUrl:a("./src/templates/modals/abuseFraudModal.tpl.html"),controller:["params",function(e){this.close=e.close}]})}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["pmModal"],t.default=n},"./src/app/user/modals/deleteAccountModal.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(a("./node_modules/babel-runtime/regenerator/index.js")),s=r(a("./node_modules/babel-runtime/helpers/asyncToGenerator.js")),o=a("./src/app/constants.js");function r(e){return e&&e.__esModule?e:{default:e}}function l(e,t,r,l,i,c,d,u,p,m,f){var g,h=(g=(0,s.default)(n.default.mark(function e(t,a){return n.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(!a){e.next=2;break}return e.abrupt("return",r.bug(t));case 2:case"end":return e.stop()}},e,this)})),function(e,t){return g.apply(this,arguments)}),v=o.CONSTANTS.CLIENT_TYPE,b={invalidForm:u.getString("Invalid email address or password",null,"Error reported when the delete account form is invalid")};return t({controllerAs:"ctrl",templateUrl:a("./src/templates/modals/deleteAccount.tpl.html"),controller:["params","$scope",function(t,a){var n=this;this.hasTwoFactor=m.get("TwoFactor"),this.isAdmin=f().isAdmin,this.cancel=t.close,this.email="",this.feedback="",this.password="",this.twoFactorCode="",this.submit=function(){if(a.deleteForm.$invalid)p.error(b.invalidForm);else{var t=c.user.Name,s=e.getFirst().Email,o={OS:"--",OSVersion:"--",Browser:"--",BrowserVersion:"--",BrowserExtensions:"--",Client:"--",ClientVersion:"--",ClientType:v,Title:"[DELETION FEEDBACK] "+t,Username:t,Email:n.email||s,Description:n.feedback},r=h(o,n.isAdmin).then(function(){return e={Password:n.password,TwoFactorCode:n.twoFactorCode},l.delete(e).then(function(e){var t=e.data;return void 0===t?{}:t});var e}).then(function(){return d.go("login")});i.track(r)}}}]})}l.$inject=["addressesModel","pmModal","Report","User","networkActivityTracker","authentication","$state","gettextCatalog","notification","userSettingsModel","userType"],t.default=l},"./src/app/user/modals/generateModal.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(a("./node_modules/babel-runtime/core-js/promise.js")),s=o(a("./node_modules/lodash/map.js"));function o(e){return e&&e.__esModule?e:{default:e}}function r(e,t,o,r,l,i,c,d,u,p,m){var f=d.getStates(),g={success:function(e){return u.getString("Key created for {{email}}",{email:e},"Generate key modal")},title:u.getString("Setting up your Addresses",null,"Title"),message:u.getString("Before you can start sending and receiving emails from your new addresses you need to create encryption keys for them. 4096-bit keys only work on high performance computers. For most users, we recommend using 2048-bit keys.",null,"Info")};return e({controllerAs:"ctrl",templateUrl:a("./src/templates/modals/generate.tpl.html"),controller:["params","$scope",function(e,t){var a=this;this.size=c.ENCRYPTION_DEFAULT,this.process=!1,this.title=e.title||g.title,this.message=e.message||g.message,this.askPassword=!1,this.password=e.password,this.cancel=function(){return e.close()},this.addresses=(0,s.default)(e.addresses,function(e){return e.state=f.QUEUED,e}),t.$on("updateUser",function(){!m.fromUser().length&&a.cancel()}),this.submit=function(){a.process=!0;var t=n.default.all((0,s.default)(a.addresses,function(t){return d.generate({address:t,numBits:a.size,passphrase:a.password,organizationKey:e.organizationKey,memberMap:e.memberMap})})).then(function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).forEach(function(e){var t=e.Email;return i.success(g.success(t))})}).then(e.onSuccess).catch(function(t){throw e.close(a.addresses,a.password),t});o.track(t)}}]})}r.$inject=["pmModal","authentication","networkActivityTracker","Key","pmcw","notification","CONSTANTS","generateKeyModel","gettextCatalog","setupKeys","addressWithoutKeys"],t.default=r},"./src/app/user/services/attachSignupSubscription.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=l(a("./node_modules/babel-runtime/core-js/promise.js")),s=l(a("./node_modules/babel-runtime/regenerator/index.js")),o=l(a("./node_modules/babel-runtime/helpers/defineProperty.js")),r=l(a("./node_modules/babel-runtime/helpers/asyncToGenerator.js"));function l(e){return e&&e.__esModule?e:{default:e}}function i(e,t,a,l,i,c,d,u,p){var m,f,g=this,h={ERROR_ORGA_KEY_GENERATION:c.getString("Error during the generation of new organization keys",null,"Error"),ERROR_ORGA_REQUEST:c.getString("Error during organization request",null,"Error organization creation")},v=(m=(0,r.default)(s.default.mark(function e(){var n,r,c,u,m,f,v,b,y;return s.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(n=t.get("temp.plan")||{},r=n.Name,c=n.Amount,u=n.Currency,m=n.Cycle,f=n.ID,!["plus","visionary"].includes(r)||c!==a.user.Credit){e.next=6;break}return v=function(){return p.subscribe({Amount:0,Currency:u,Cycle:m,PlanIDs:(0,o.default)({},f,1)}).catch(function(e){var t=e.data;throw Error((void 0===t?{}:t).Error)})},b=function(){return l.generateOrganization(a.getPassword()).then(function(e){return{PrivateKey:e.privateKeyArmored}}).catch(function(){throw new Error(h.ERROR_ORGA_KEY_GENERATION)})},y=function(e){return i.create(e).then(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;return void 0===e?{}:e}).catch(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;throw new Error((void 0===e?{}:e).Error||h.ERROR_ORGA_REQUEST)})},e.abrupt("return",v().then(b).then(y).then(d.call));case 6:case"end":return e.stop()}},e,g)})),function(){return m.apply(this,arguments)}),b=(f=(0,r.default)(s.default.mark(function e(){var a;return s.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if("card"!==(a=t.get("temp.method")||{}).Type){e.next=3;break}return e.abrupt("return",p.updateMethod(a).catch(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;throw Error((void 0===e?{}:e).Error)}));case 3:case"end":return e.stop()}},e,g)})),function(){return f.apply(this,arguments)});return function(){n.default.all([v(),b()]).then(function(){t.get()&&function(t){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};e.$emit("signup",{type:t,data:a})}("user.subscription.finished",{plan:t.get("temp.plan")})}).then(function(){return t.clear()}).catch(function(e){u.error(e),t.clear()})}}i.$inject=["$rootScope","signupModel","authentication","setupKeys","organizationApi","gettextCatalog","eventManager","notification","Payment"],t.default=i},"./src/app/user/services/isDelinquent.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(a("./node_modules/babel-runtime/regenerator/index.js")),s=r(a("./node_modules/babel-runtime/helpers/asyncToGenerator.js")),o=a("./src/app/constants.js");function r(e){return e&&e.__esModule?e:{default:e}}function l(e,t,a,r){var l,i=this,c={ERROR_MEMBER:t.getString("Your account currently has an overdue invoice. Please contact your administrator.",null,"Error"),ERROR_ADMIN:t.getString("Your account currently has an overdue invoice. Please pay all unpaid invoices.",null,"Error")},d=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"secured.payments",n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:c.ERROR_ADMIN;throw a.error(n),e.go(t),new Error(n)};return l=(0,s.default)(n.default.mark(function e(){return n.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(!(r.user.Delinquent<o.UNPAID_STATE.DELINQUENT)){e.next=2;break}return e.abrupt("return");case 2:r.user.Role===o.PAID_MEMBER_ROLE&&d("login",c.ERROR_MEMBER),d();case 4:case"end":return e.stop()}},e,i)})),function(){return l.apply(this,arguments)}}l.$inject=["$state","gettextCatalog","notification","authentication"],t.default=l},"./src/app/user/services/manageUser.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=u(a("./node_modules/babel-runtime/core-js/object/keys.js")),s=u(a("./node_modules/babel-runtime/core-js/object/create.js")),o=u(a("./node_modules/babel-runtime/regenerator/index.js")),r=u(a("./node_modules/babel-runtime/helpers/asyncToGenerator.js")),l=u(a("./node_modules/lodash/delay.js")),i=u(a("./node_modules/lodash/map.js")),c=u(a("./node_modules/lodash/extend.js")),d=u(a("./node_modules/lodash/each.js"));function u(e){return e&&e.__esModule?e:{default:e}}function p(e,t,a,u,p,m,f,g,h,v,b){var y,_,w=this,x=(y=(0,r.default)(o.default.mark(function n(s){var r,i,c,d,u,f=s.User,g=void 0===f?{}:f,v=s.Members,y=void 0===v?[]:v;return o.default.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:if(angular.isUndefined(A.previousRole)&&(A.previousRole=p.user.Role),!angular.isUndefined(g.Role)){n.next=3;break}return n.abrupt("return");case 3:if(g.Role===m.FREE_USER_ROLE&&t.$emit("organizationChange",{data:{PlanName:"free",HasKeys:0}}),A.previousRole!==m.PAID_ADMIN_ROLE||g.Role===m.PAID_ADMIN_ROLE){n.next=8;break}return A.previousRole=g.Role,_rAF(function(){return h.info(k.REVOKE_ADMIN_RELOAD+"<br>"+k.REVOKE_ADMIN_RELOAD_INFO)}),n.abrupt("return",(0,l.default)(function(){return window.location.reload()},5e3));case 8:return A.previousRole=g.Role,r=p.getPassword(),n.prev=10,n.next=13,S(g,r);case 13:return i=n.sent,n.next=16,b.decryptUser(g,a.get(),i,r);case 16:return c=n.sent,d=c.dirtyAddresses,u=c.keys,n.next=21,E(g,y,u);case 21:M(u),P(g,u,d),n.next=28;break;case 25:n.prev=25,n.t0=n.catch(10),n.t0&&e(n.t0);case 28:case"end":return n.stop()}},n,this,[[10,25]])})),function(e){return y.apply(this,arguments)}),j=f().on,k={REVOKE_ADMIN_RELOAD:g.getString("Your admin privileges have been revoked.",null,"Info"),REVOKE_ADMIN_RELOAD_INFO:g.getString("The app will now be reloaded in a few seconds",null,"Info")},A={},S=(_=(0,r.default)(o.default.mark(function e(){var t=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).OrganizationPrivateKey,a=arguments[1];return o.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(!t){e.next=2;break}return e.abrupt("return",v.decryptPrivateKey(t,a));case 2:case"end":return e.stop()}},e,w)})),function(){return _.apply(this,arguments)}),M=function(e){p.clearKeys(),(0,d.default)(e,function(e){var t=e.address,a=e.key,n=e.pkg;p.storeKey(t.ID,a.ID,n)})},P=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},o=arguments[1],r=arguments[2];(0,d.default)((0,n.default)(e),function(t){"Addresses"!==t&&(p.user[t]=e[t])}),function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],o=t.reduce(function(e,t){var a=t.address;return a.ID===m.MAIN_KEY||e.map[a.ID]||(e.map[a.ID]=!0,e.list.push(a)),e},{map:(0,s.default)(null),list:[]}).list.concat(n),r=o.length;r--;){var l=o[r],i=a.getByID(l.ID,e,!0);angular.isUndefined(i)&&o.splice(r,1)}a.set(o)}(e,o,r),(0,c.default)(t.user,p.user),t.$broadcast("updateUser")},E=function(e,t,a){return u.manage(e,(0,i.default)(t,"Member"),!0).then(function(){if((arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).length)throw new Error("Regenerate keys for addresses")},function(){return M(a)})};return j("logout",function(){delete A.previousRole}),x}p.$inject=["$exceptionHandler","$rootScope","addressesModel","addressWithoutKeysManager","authentication","CONSTANTS","dispatchers","gettextCatalog","notification","pmcw","setupKeys"],t.default=p},"./src/app/user/services/signupModel.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=i(a("./node_modules/babel-runtime/core-js/promise.js")),s=i(a("./node_modules/lodash/extend.js")),o=i(a("./node_modules/lodash/includes.js")),r=i(a("./node_modules/lodash/keys.js")),l=a("./src/app/constants.js");function i(e){return e&&e.__esModule?e:{default:e}}function c(e,t,a,i,c,d,u){var p={},m=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return u.$emit("signup",{type:e,data:t})},f=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"model",a=angular.copy(p[t]);return e?(a||{})[e]:a},g=function(e,t){var a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"model";return p[a][e]=angular.copy(t)},h=function(){return f().login.password};return{all:function(){return p},get:f,set:g,store:function(e){return p.model=angular.copy(e)},clear:function(){(0,r.default)(p).forEach(function(e){delete p[e]})},getEmail:function(){var e=f();return e.username+"@"+e.domain.value},getDomain:function(){return f("domain").value||""},getPassword:h,getOptionsVerification:function(s){return p.humanCheck?n.default.resolve(p.humanCheck):a.inviteToken?n.default.resolve({invitation:!0}):e.direct(s).then(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data,t=void 0===e?{}:e;return 1===t.Direct?p.humanCheck={email:(0,o.default)(t.VerifyMethods,"email"),captcha:(0,o.default)(t.VerifyMethods,"captcha"),sms:(0,o.default)(t.VerifyMethods,"sms"),payment:(0,o.default)(t.VerifyMethods,"payment")}:(window.location.href=l.INVITE_URL,t)}).catch(function(e){var a=e.data,n=void 0===a?{}:a;if(t.go("login"),n.Error)throw new Error(n.Error);throw e})},optionsHumanCheck:function(e){return f(e,"humanCheck")},createUser:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n={Username:f("username"),Email:f("notificationEmail"),Type:f("Type"),Referrer:i.search().ref};return a.inviteToken?(n.Token=a.inviteSelector+":"+a.inviteToken,n.TokenType="invite"):angular.isDefined(t.captcha_token)&&!1!==t.captcha_token?(n.Token=t.captcha_token,n.TokenType="captcha"):f("VerifyCode")?(n.Token=f("VerifyCode"),n.TokenType="payment"):f("smsVerificationSent")?(n.Token=t.smsCodeVerification,n.TokenType="sms"):f("verificationSent")&&(n.Token=t.codeVerification,n.TokenType="email"),e.create(n,h())},verify:function(e,t){var a=c.verify((0,s.default)({},e,{Username:f("username")})).then(function(){var a=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data,n=void 0===a?{}:a;return g("VerifyCode",n.VerifyCode),g("temp.plan",t),g("temp.method",e.Payment),n}).catch(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data,t=void 0===e?{}:e;if(t.Error)throw m("payment.verify.error",{error:t.Error}),new Error(t.Error)});return d.track(a),a},applyGiftCode:function(e){var t=c.validateVerify((0,s.default)({},e,{Username:f("username")})).then(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data,t=void 0===e?{}:e;return m("gift.applied",t),t});return d.track(t),t}}}c.$inject=["User","$state","$stateParams","$location","Payment","networkActivityTracker","$rootScope"],t.default=c},"./src/app/user/services/signupUserProcess.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=l(a("./node_modules/babel-runtime/regenerator/index.js")),s=l(a("./node_modules/babel-runtime/core-js/promise.js")),o=l(a("./node_modules/babel-runtime/helpers/asyncToGenerator.js")),r=a("./src/app/constants.js");function l(e){return e&&e.__esModule?e:{default:e}}function i(e,t,a,l,i,c,d,u,p,m,f){var g,h,v,b,y=this,_=(g=(0,o.default)(n.default.mark(function e(t){var a,o,r,l;return n.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return A("create.user",{value:!0}),e.prev=1,e.next=4,i.createUser(t);case 4:return a=e.sent,o=a.data,e.abrupt("return",o);case 9:if(e.prev=9,e.t0=e.catch(1),r=e.t0.data,12087!==(l=void 0===r?{}:r).Code){e.next=16;break}return A("creating",{value:!1}),A("chech.humanity",{value:!0}),e.abrupt("return",s.default.reject({error:new Error(l.Error),verbose:!1}));case 16:return e.abrupt("return",s.default.reject({error:new Error(e.t0.Error),verbose:!0}));case 17:case"end":return e.stop()}},e,this,[[1,9]])})),function(e){return g.apply(this,arguments)}),w=(h=(0,o.default)(n.default.mark(function t(){return n.default.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(!e.search().language){t.next=2;break}return t.abrupt("return",l.updateLocale({Locale:a.getCurrentLanguage()}));case 2:case"end":return t.stop()}},t,this)})),function(){return h.apply(this,arguments)}),x=(v=(0,o.default)(n.default.mark(function e(){var a,s,o,r;return n.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return A("setup.account",{value:!0}),e.prev=1,e.next=4,u.setup({Domain:i.getDomain()});case 4:return a=e.sent,s=a.data,k.setupPayload.keys[0].AddressID=s.Address.ID,e.abrupt("return",m.setup(k.setupPayload,i.getPassword()).then(function(){return c.savePassword(k.setupPayload.mailboxPassword),t.isLoggedIn=c.isLoggedIn(),t.isLocked=c.isLocked(),t.isSecure=c.isSecured(),s}));case 10:if(e.prev=10,e.t0=e.catch(1),o=e.t0.data,!(r=void 0===o?{}:o).Error){e.next=15;break}throw new Error(r.Error);case 15:throw e.t0;case 16:case"end":return e.stop()}},e,this,[[1,10]])})),function(){return v.apply(this,arguments)}),j=(b=(0,o.default)(n.default.mark(function e(){return n.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return A("user.get",{value:!0}),e.next=3,d.app();case 3:return e.abrupt("return",c.fetchUserInfo());case 4:case"end":return e.stop()}},e,this)})),function(){return b.apply(this,arguments)}),k={},A=function(e){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.$emit("signup",{type:e,data:a})},S={ERROR_ADDRESS_CREATION:a.getString("Something went wrong during address creation",null,"Error"),ERROR_PROCESS:a.getString("Something went wrong",null,"Error")};function M(){if(A("user.finish",{value:!0}),delete k.setupPayload,c.user.Delinquent<r.UNPAID_STATE.DELINQUENT)return p.go("secured.inbox",{welcome:r.WIZARD_ENABLED});p.go("secured.dashboard")}var P,E,C=(P=(0,o.default)(n.default.mark(function e(){var a,o;return n.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,(A("loguserin",{value:!0}),c.loginWithCredentials({Username:i.get("username"),Password:i.getPassword()}).then(function(e){var t=e.data;return c.receivedCredentials(t),c.setAuthCookie(t)}).then(function(){t.isLoggedIn=c.isLoggedIn(),t.isLocked=c.isLocked(),t.isSecure=c.isSecured()})).then(x);case 3:return e.abrupt("return",e.sent);case 6:if(e.prev=6,e.t0=e.catch(0),a=e.t0.data,!(o=void 0===a?{}:a).Error){e.next=11;break}return e.abrupt("return",s.default.reject({error:new Error(o.Error||S.ERROR_ADDRESS_CREATION),verbose:!0,redirect:"login"}));case 11:throw e.t0;case 12:case"end":return e.stop()}},e,y,[[0,6]])})),function(){return P.apply(this,arguments)}),T=(E=(0,o.default)(n.default.mark(function e(t){return n.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,_(t);case 3:return e.next=5,C();case 5:return e.abrupt("return",w().then(j).then(M));case 8:throw e.prev=8,e.t0=e.catch(0),e.t0;case 11:case"end":return e.stop()}},e,y,[[0,8]])})),function(e){return E.apply(this,arguments)});return{createAccount:function(e){T(e).catch(function(e){f.error(e.error?e.error.message:S.ERROR_PROCESS),A("signup.error",{value:!0}),console.error(e),e.redirect&&p.go(e.redirect)})},generateNewKeys:function(){return A("generate.newkeys",{value:!0}),m.generate([{ID:0,Email:i.getEmail()}],i.getPassword()).then(function(e){return k.setupPayload=e})}}}i.$inject=["$location","$rootScope","gettextCatalog","settingsApi","signupModel","authentication","lazyLoader","Address","$state","setupKeys","notification"],t.default=i},"./src/app/user/services/userType.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=a("./src/app/constants.js");l.$inject=["authentication"];var s=function(e){return 1&e.user.Subscribed},o=function(e){return!(1&e.user.Subscribed)},r=function(e){var t=e.user;return!o({user:t})&&t.Role===n.PAID_ADMIN_ROLE};function l(e){return function(){return{isAdmin:r(e),isFree:o(e),isPaid:s(e)}}}t.default=l},"./src/app/utils/directives/detectTimeWidth.js":function(e,t,a){"use strict";function n(e){return{link:function(){var t=setTimeout(function(){!function(t){document.body.insertAdjacentHTML("beforeEnd",'<div id="timeWidthTest" style="position:absolute;left:0;top:0;z-index:1;visibility:hidden">');var a=document.getElementById("timeWidthTest");a.textContent=e("readableTime")("29000668525");var n=Math.ceil(a.offsetWidth);if(n>0){var s="<style>\n .conversation .time { width: "+(n+5)+"px; }\n .conversation .row .meta { width: "+(n+55)+"px;}\n </style>";document.body.insertAdjacentHTML("beforeEnd",s)}document.body.removeChild(a),clearTimeout(t)}(t)},2400)}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$filter"],t.default=n},"./src/app/utils/directives/dropzone.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){return{scope:{dropzoneConfig:"&dropzone"},restrict:"A",link:function(e,t){Dropzone.autoDiscover=!1;var a=angular.isFunction(e.dropzoneConfig)?e.dropzoneConfig():e.dropzoneConfig,n=new Dropzone(t[0],a.options);angular.forEach(a.eventHandlers,function(e,t){n.on(t,e)}),e.$on("$destroy",function(){n.disable()})}}}},"./src/app/utils/directives/mailtoHandler.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/babel-runtime/helpers/extends.js"),o=(n=s)&&n.__esModule?n:{default:n};function r(e,t,a,n){var s=e(["composer.new"]).dispatcher,r=function(e){"A"===e.target.nodeName&&(e.target.getAttribute("href")||"").toLowerCase().startsWith("mailto:")&&(e.preventDefault(),function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};s["composer.new"](e,t)}("new",{message:(0,o.default)({},a(),n.mailtoParser(e.target.getAttribute("href")))}))};return{link:function(e){document.body.addEventListener("click",r),e.$on("$destroy",function(){document.body.removeEventListener("click",r)})}}}r.$inject=["dispatchers","sanitize","messageModel","mailUtils"],t.default=r},"./src/app/utils/directives/reloadState.js":function(e,t,a){"use strict";function n(e){var t=function(){return e.reload()};return{restrict:"A",scope:{},link:function(e,a){a.on("click",t),e.$on("$destroy",function(){a.off("click",t)})}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$state"],t.default=n},"./src/app/utils/directives/timeRefreshed.js":function(e,t,a){"use strict";function n(e){return{link:function(t,a,n){var s=n.timeRefreshed,o=n.timeInterval,r=void 0===o?1e3:o,l=n.timeFilter,i=void 0===l?"delay":l,c="TIME"===a[0].nodeName,d=e(i);c&&a[0].setAttribute("datetime",function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return new Date(1e3*+e||Date.now()).toISOString()}(s));var u=setInterval(p,r);function p(){a.text(d(s))}p(),t.$on("$destroy",function(){clearInterval(u)})}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["$filter"],t.default=n},"./src/app/utils/factories/askPassword.js":function(e,t,a){"use strict";function n(e){return function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:angular.noop;e.activate({params:{submit:function(a,n){e.deactivate(),t(a,n)},cancel:function(){e.deactivate()}}})}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["loginPasswordModal"],t.default=n},"./src/app/utils/factories/chunk.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){return function(e,t){return e.reduce(function(e,a,n){return n%t==0&&e.push([]),e[e.length-1].push(a),e},[])}}},"./src/app/utils/factories/dateUtils.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/lodash/sortBy.js"),o=(n=s)&&n.__esModule?n:{default:n};function r(e,t){var a={},n=function(){moment.relativeTimeThreshold("s",59),moment.relativeTimeThreshold("m",59),moment.relativeTimeThreshold("h",23)};return{init:function(){var e=moment.localeData().longDateFormat("L"),s=t.getString("YYYY",null,"Placeholder for YYYY in YYYY-MM-DD"),o=t.getString("MM",null,"Placeholder for MM in YYYY-MM-DD"),r=t.getString("DD",null,"Placeholder for DD in YYYY-MM-DD"),l=e.replace("YYYY",s).replace("MM",o).replace("DD",r);a.days=[{narrowLabel:t.getString("M",null,"Single letter code Monday"),shortLabel:t.getString("Mon",null,"Three letter code Monday"),longLabel:t.getString("Monday",null,"Full day name"),value:1},{narrowLabel:t.getString("T",null,"Single letter code Tuesday"),shortLabel:t.getString("Tue",null,"Three letter code Tuesday"),longLabel:t.getString("Tuesday",null,"Full day name"),value:2},{narrowLabel:t.getString("W",null,"Single letter code Wednesday"),shortLabel:t.getString("Wed",null,"Three letter code Wednesday"),longLabel:t.getString("Wednesday",null,"Full day name"),value:3},{narrowLabel:t.getString("T",null,"Single letter code Thursday"),shortLabel:t.getString("Thu",null,"Three letter code Thursday"),longLabel:t.getString("Thursday",null,"Full day name"),value:4},{narrowLabel:t.getString("F",null,"Single letter code Friday"),shortLabel:t.getString("Fri",null,"Three letter code Friday"),longLabel:t.getString("Friday",null,"Full day name"),value:5},{narrowLabel:t.getString("S",null,"Single letter code Saturday"),shortLabel:t.getString("Sat",null,"Three letter code Saturday"),longLabel:t.getString("Saturday",null,"Full day name"),value:6},{narrowLabel:t.getString("S",null,"Single letter code Sunday"),shortLabel:t.getString("Sun",null,"Three letter code Sunday"),longLabel:t.getString("Sunday",null,"Full day name"),value:0}],a.months=[t.getString("January",null,"Pikaday"),t.getString("February",null,"Pikaday"),t.getString("March",null,"Pikaday"),t.getString("April",null,"Pikaday"),t.getString("May",null,"Pikaday"),t.getString("June",null,"Pikaday"),t.getString("July",null,"Pikaday"),t.getString("August",null,"Pikaday"),t.getString("September",null,"Pikaday"),t.getString("October",null,"Pikaday"),t.getString("November",null,"Pikaday"),t.getString("December",null,"Pikaday")],a.localizedDatePlaceholder=l,n()},getSortedWeekdays:function(){var e=a.days.slice(),t=moment.localeData().firstDayOfWeek();return(0,o.default)(e,function(e){return(7+e.value-t)%7})},I18N:a}}r.$inject=["$injector","gettextCatalog"],t.default=r},"./src/app/utils/factories/desktopNotifications.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){return{status:function(){return Push.Permission.get()},request:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:angular.noop,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:angular.noop;Push.Permission.request(e,t)},create:function(e,t){Push.create(e,t)}}}},"./src/app/utils/factories/resurrecter.js":function(e,t,a){"use strict";function n(e,t,a){return window.addEventListener("online",function(){a.isLoggedIn()&&!t.is("onLine")&&e.call()}),{init:angular.noop}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["eventManager","AppModel","authentication"],t.default=n},"./src/app/utils/factories/tools.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(a("./node_modules/babel-runtime/core-js/object/keys.js")),s=r(a("./node_modules/lodash/includes.js")),o=a("./src/app/constants.js");function r(e){return e&&e.__esModule?e:{default:e}}function l(e,t,a,r){var l=(0,n.default)(o.CONSTANTS.MAILBOX_IDENTIFIERS),i=function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:e.$current.name).replace("secured.","").replace(".element","")};function c(){var e=i();return!!(0,s.default)(l,e)&&e}return{hash:function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").split("").reduce(function(e,t){return(e<<5)-e+t.charCodeAt(0)},0)},mobileResponsive:function(){r.set("mobile",document.body.offsetWidth<o.CONSTANTS.MOBILE_BREAKPOINT),r.set("tablet",document.body.offsetWidth<o.CONSTANTS.DESKTOP_BREAKPOINT&&document.body.offsetWidth>o.CONSTANTS.MOBILE_BREAKPOINT)},colors:function(){return["#7272a7","#8989ac","#cf5858","#cf7e7e","#c26cc7","#c793ca","#7569d1","#9b94d1","#69a9d1","#a8c4d5","#5ec7b7","#97c9c1","#72bb75","#9db99f","#c3d261","#c6cd97","#e6c04c","#e7d292","#e6984c","#dfb286"]},fixImages:function(e){var t=new RegExp("proton-(url|src|svg|background|poster)","g");return e.replace(t,"$1")},replaceLineBreaks:function(e){return e.replace(/(?:\r\n|\r|\n)/g,"<br />")},currentLocation:function(){var e=c();return"label"===e?t.label:o.CONSTANTS.MAILBOX_IDENTIFIERS[e]},filteredState:i,currentMailbox:c,getTypeList:function(e){var t=e||c();return a.get().ViewMode===o.CONSTANTS.MESSAGE_VIEW_MODE||(0,s.default)(["drafts","search","sent","allDrafts","allSent"],t)?"message":"conversation"},typeView:function(){return a.get().ViewMode===o.CONSTANTS.MESSAGE_VIEW_MODE?"message":"conversation"},cacheContext:function(){var e=i(),a=angular.isUndefined(t.filter),n=angular.isUndefined(t.sort);return"search"!==e&&n&&a}}}l.$inject=["$state","$stateParams","mailSettingsModel","AppModel"],t.default=l},"./src/app/utils/filters/bytes.js":function(e,t,a){"use strict";function n(e){var t=e.BASE_SIZE,a=["bytes","KB","MB","GB","TB","PB"];return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;if(isNaN(parseFloat(e))||!isFinite(e)||0===e)return"-";var s=Math.floor(Math.log(e)/Math.log(t)),o=0===s?0:n;return(e/Math.pow(t,Math.floor(s))).toFixed(o)+" "+a[s]}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["CONSTANTS"],t.default=n},"./src/app/utils/filters/capitalize.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return e?e.toUpperCase().substring(0,1)+e.toLowerCase().substring(1):e}}},"./src/app/utils/filters/currency.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){var e={},t={USD:"$",EUR:"€",CHF:"CHF"};function a(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=t[a]||a,s=Number(e).toFixed(2);return"USD"===a?((s<0?"-":"")+n+Math.abs(s)).trim():(s+" "+n).trim()}return function(t,n){return n?(!e[n]&&(e[n]=function(e){return function(t){return a(t,e)}}(n)),e[n](t)):a(t,n)}}},"./src/app/utils/filters/delay.js":function(e,t,a){"use strict";function n(e){return function(t){var a=moment(),n=moment.unix(t);if(n.isAfter(a)){var s=n.diff(a,"milliseconds",!0);s=n.diff(a,"milliseconds",!0);var o=Math.floor(moment.duration(s).asDays());s=(n=n.subtract(o,"days")).diff(a,"milliseconds",!0);var r=Math.floor(moment.duration(s).asHours());s=(n=n.subtract(r,"hours")).diff(a,"milliseconds",!0);var l=Math.floor(moment.duration(s).asMinutes());s=(n=n.subtract(l,"minutes")).diff(a,"milliseconds",!0);var i=Math.floor(moment.duration(s).asSeconds());return o+" "+e.getString("Days",null,"Delay")+" "+r+" "+e.getString("Hours",null,"Delay")+" "+l+" "+e.getString("Minutes",null,"Delay")+" "+i+" "+e.getString("Seconds",null,"Delay")}return""}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["gettextCatalog"],t.default=n},"./src/app/utils/filters/fixed.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){return function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;return e.toFixed(t)}}},"./src/app/utils/filters/humanSize.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(a("./node_modules/lodash/isNaN.js")),s=o(a("./node_modules/lodash/isNumber.js"));function o(e){return e&&e.__esModule?e:{default:e}}function r(e,t){var a={KB:e.BASE_SIZE,MB:e.BASE_SIZE*e.BASE_SIZE,GB:e.BASE_SIZE*e.BASE_SIZE*e.BASE_SIZE},o=function(e){return{KB:t.getString("KB",null,"fileSize format"),MB:t.getString("MB",null,"fileSize format"),GB:t.getString("GB",null,"fileSize format")}[e]};function r(e,t,n){return(e/a[t]).toFixed(2)+(n?"":" "+o(t))}return function(e,t,o){var l=void 0;return(0,s.default)(e)?l=e:(0,n.default)(parseInt(e,10))&&(l=0),o?r(l,o,t):l<a.MB?r(l,"KB",t):l<a.GB?r(l,"MB",t):r(l,"GB",t)}}r.$inject=["CONSTANTS","gettextCatalog"],t.default=r},"./src/app/utils/filters/localReadableTime.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){return function(e){return moment.unix(e).format("LL h:mm A")}}},"./src/app/utils/filters/longReadableTime.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){return function(e){var t=moment.unix(e);return t.isSame(moment(),"day")?t.isSame(moment(),"hour")?t.fromNow():t.format("LT"):t.format("l LT")}}},"./src/app/utils/filters/number.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){return function(e,t){if(isNaN(e))return e;var a="1"+Array(+(t>0&&t+1)).join("0");return Math.round(e*a)/a}}},"./src/app/utils/filters/percentage.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return Math.round(100*e/t)}}},"./src/app/utils/filters/readableTime.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){return function(e){var t=moment.unix(e);return t.isSame(moment(),"day")?t.format("LT"):t.format("ll")}}},"./src/app/utils/filters/unicodeTagView.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/babel-runtime/helpers/defineProperty.js"),o=(n=s)&&n.__esModule?n:{default:n},r=a("./src/app/constants.js");var l=r.EMAIL_FORMATING.OPEN_TAG_AUTOCOMPLETE,i=r.EMAIL_FORMATING.CLOSE_TAG_AUTOCOMPLETE,c=r.EMAIL_FORMATING.OPEN_TAG_AUTOCOMPLETE_RAW,d=r.EMAIL_FORMATING.CLOSE_TAG_AUTOCOMPLETE_RAW;t.default=function(){var e,t=(e={},(0,o.default)(e,c,l),(0,o.default)(e,d,i),e);return function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").replace(new RegExp(c+"|"+d,"ig"),function(e){return t[e]||""})}}},"./src/app/utils/filters/utcReadableTime.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){return function(e){return moment.unix(e).utc().format("LL LT")}}},"./src/app/utils/helpers/updateCollection.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=i(a("./node_modules/babel-runtime/helpers/defineProperty.js")),o=i(a("./node_modules/lodash/filter.js")),r=i(a("./node_modules/lodash/reduce.js")),l=a("./src/app/constants.js");function i(e){return e&&e.__esModule?e:{default:e}}var c=(n={},(0,s.default)(n,l.CONSTANTS.STATUS.DELETE,"remove"),(0,s.default)(n,l.CONSTANTS.STATUS.CREATE,"create"),(0,s.default)(n,l.CONSTANTS.STATUS.UPDATE,"update"),n);t.default=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",n=e.slice(0),s=t.reduce(function(e,t){var n=t.Action,s=t.ID,o=c[n];return"remove"===o?(e.remove[s]=!0,e):(e[o].push(t[a]),e)},{update:[],create:[],remove:{}}),l=(0,r.default)([].concat(s.create,s.update),function(e,t){var a=e.MAP[t.ID];if(void 0!==a)return e.collection[a]=t,e;var n=e.collection.push(t);return e.MAP[t.ID]=n-1,e},{collection:n,MAP:(0,r.default)(n,function(e,t,a){return e[t.ID]=a,e},{})}).collection;return{collection:(0,o.default)(l,function(e){var t=e.ID;return!s.remove[t]}),todo:s}}},"./src/app/utils/index.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=L(a("./src/app/utils/directives/detectTimeWidth.js")),s=L(a("./src/app/utils/directives/dropzone.js")),o=L(a("./src/app/utils/directives/timeRefreshed.js")),r=L(a("./src/app/utils/directives/reloadState.js")),l=L(a("./src/app/utils/factories/askPassword.js")),i=L(a("./src/app/utils/factories/chunk.js")),c=L(a("./src/app/utils/factories/dateUtils.js")),d=L(a("./src/app/utils/factories/desktopNotifications.js")),u=L(a("./src/app/utils/factories/resurrecter.js")),p=L(a("./src/app/utils/factories/tools.js")),m=L(a("./src/app/utils/filters/bytes.js")),f=L(a("./src/app/utils/filters/capitalize.js")),g=L(a("./src/app/utils/filters/currency.js")),h=L(a("./src/app/utils/filters/delay.js")),v=L(a("./src/app/utils/filters/fixed.js")),b=L(a("./src/app/utils/filters/humanSize.js")),y=L(a("./src/app/utils/filters/localReadableTime.js")),_=L(a("./src/app/utils/filters/longReadableTime.js")),w=L(a("./src/app/utils/filters/number.js")),x=L(a("./src/app/utils/filters/percentage.js")),j=L(a("./src/app/utils/filters/readableTime.js")),k=L(a("./src/app/utils/filters/unicodeTagView.js")),A=L(a("./src/app/utils/filters/utcReadableTime.js")),S=L(a("./src/app/utils/services/eventManager.js")),M=L(a("./src/app/utils/services/hotkeys.js")),P=L(a("./src/app/utils/services/openStatePostMessage.js")),E=L(a("./src/app/utils/services/strUtils.js")),C=L(a("./src/app/utils/services/firstLoadState.js")),T=L(a("./src/app/utils/services/lazyLoader.js")),I=L(a("./src/app/utils/services/sanitize.js")),D=L(a("./src/app/utils/directives/mailtoHandler.js")),O=L(a("./src/app/utils/services/mailUtils.js"));function L(e){return e&&e.__esModule?e:{default:e}}t.default=angular.module("proton.utils",["proton.constants"]).factory("mailUtils",O.default).directive("mailtoHandler",D.default).service("lazyLoader",T.default).directive("detectTimeWidth",n.default).directive("dropzone",s.default).directive("timeRefreshed",o.default).directive("reloadState",r.default).factory("askPassword",l.default).factory("chunk",i.default).factory("dateUtils",c.default).factory("desktopNotifications",d.default).factory("firstLoadState",C.default).factory("resurrecter",u.default).factory("tools",p.default).filter("bytes",m.default).filter("capitalize",f.default).filter("currency",g.default).filter("delay",h.default).filter("fixed",v.default).filter("humanSize",b.default).filter("localReadableTime",y.default).filter("longReadableTime",_.default).filter("number",w.default).filter("percentage",x.default).filter("readableTime",j.default).filter("unicodeTagView",k.default).filter("utcReadableTime",A.default).factory("eventManager",S.default).factory("hotkeys",M.default).factory("openStatePostMessage",P.default).factory("strUtils",E.default).factory("sanitize",I.default).name},"./src/app/utils/services/eventManager.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=c(a("./node_modules/babel-runtime/core-js/promise.js")),s=c(a("./node_modules/babel-runtime/helpers/slicedToArray.js")),o=c(a("./node_modules/lodash/isEqual.js")),r=c(a("./node_modules/lodash/find.js")),l=c(a("./node_modules/lodash/each.js")),i=c(a("./node_modules/lodash/map.js"));function c(e){return e&&e.__esModule?e:{default:e}}function d(e,t,c,d,u,p,m,f,g,h,v,b,y,_,w,x,j,k){var A=g.CONVERSATION_VIEW_MODE,S=g.INTERVAL_EVENT_TIMER,M=g.MAILBOX_IDENTIFIERS,P=g.STATUS,E=[1,1,2,3,5,8],C=M.inbox,T=M.allDrafts,I=M.drafts,D=M.allSent,O=M.sent,L=M.trash,R=M.spam,N=M.allmail,$=M.archive,F=M.starred,U=P.DELETE,z=P.CREATE,V=P.UPDATE,B=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return c.$emit("app.event",{type:e,data:t})},K={index:0,milliseconds:S},q=function(){return K.notification&&K.notification.close()},G=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:S;return K.milliseconds=e},H=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:K.ID;return K.ID=e},W=function(e){var t=e.Messages,a=void 0===t?[]:t;return a.length&&B("activeMessages",{messages:(0,i.default)(a,"Message")})},Y=function(e){var t=e.Subscription;return t&&B("subscription.event",{subscription:t})},X=function(e){var t=e.Addresses,a=void 0===t?[]:t;return a.length&&B("addresses.event",{addresses:a})};function Z(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.data;if((void 0===t?{}:t).Error)return v.getLatestID().then(function(e){var t=e.data;return H((void 0===t?{}:t).EventID)});throw e}function Q(){return K.ID?v.get(K.ID).catch(Z):v.getLatestID().catch(Z)}var J=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return e.length&&c.$emit("contacts",{type:"contactEvents",data:{events:e}})};function ee(){(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).forEach(function(e){var t=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e.Name=w.input(e.Name),e.Email=w.input(e.Email),e}(e.ContactEmail);e.Action===U?c.$emit("deleteContactEmail",e.ID):e.Action!==z&&e.Action!==V||c.$emit("updateContactEmail",e.ID,t)})}function te(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];if(e.length){var a=y.get().ViewMode===A,n=t.get("labelsModel").get("map").all;n[C]={Notify:1,ID:C},n[F]={Notify:1,ID:F},(0,l.default)(e,function(e){var t,o=e.Action,r=e.Message,l=void 0===r?{}:r,i=(void 0===(t=l.LabelIDs)?[]:t).map(function(e){return n[e]||{}}).filter(function(e){return e.Notify});if(1===o&&0===l.IsRead&&i.length){var c=(0,s.default)(i,1)[0].ID,u="secured."+(M[c]||"label")+".element",p=M[c]?null:c,m=b.getString("New mail from {{sender}}",{sender:l.Sender.Name||l.Sender.Address},"Notification user");h.create(m,{body:l.Subject,icon:"/assets/img/notification-badge.gif",onClick:function(){if(window.focus(),a)return d.go(u,{id:l.ConversationID,messageID:l.ID,label:p});d.go(u,{id:l.ID,label:p})}})}})}}function ae(s){return function(t){if(angular.isDefined(t)&&t.length>0)for(var n=new Date,s=new Date(n.getFullYear(),n.getMonth(),n.getDate()+14),o=0;o<t.length;o++){var r=t[o],l="NOTICE-"+openpgp.util.hexidump(openpgp.crypto.hash.md5(openpgp.util.str2Uint8Array(r)));e.get(l)||_({message:r,templateUrl:a("./src/templates/notifications/cross.tpl.html"),duration:"0",onClose:(i=l,e.put(i,"true",{expires:s}))})}var i}(s.Notices),H(s.EventID),s.Refresh?(1&s.Refresh&&(t.get("cache").reset(),f.clear(),t.get("cacheCounters").reset(),t.get("cache").callRefresh(),t.get("cacheCounters").query(),m.fetchUserInfo().then(function(){c.$broadcast("updateUser"),t.get("labelsModel").refresh()})),2&s.Refresh&&(c.$emit("resetContactEmails"),c.$emit("contacts",{type:"resetContacts"})),n.default.resolve()):(t.get("labelsModel").sync(s.Labels),i=s.MailSettings,angular.isDefined(i)&&y.set("all",i),d=s.VPNSettings,angular.isDefined(d)&&k.set("all",d),u=s.UserSettings,angular.isDefined(u)&&j.set("all",u),Y(s),ee(s.ContactEmails),J(s.Contacts),p=s.Messages,g=s.Conversations,h=[],angular.isArray(p)&&(h=h.concat(p)),angular.isArray(g)&&(h=h.concat(g)),h.length>0&&t.get("cache").events(h,!0),te(s.Messages),function(e){if(angular.isDefined(e)){var a=[C,T,I,D,O,L,R,N,$,F].concat(t.get("labelsModel").ids());(0,l.default)(a,function(a){var n=(0,r.default)(e,{LabelID:a});angular.isDefined(n)?t.get("cacheCounters").updateMessage(n.LabelID,n.Total,n.Unread):t.get("cacheCounters").updateMessage(a,0,0)}),c.$emit("messages.counter")}}(s.MessageCounts),function(e){if(angular.isDefined(e)){var a=[C,T,I,D,O,L,R,N,$,F].concat(t.get("labelsModel").ids());(0,l.default)(a,function(a){var n=(0,r.default)(e,{LabelID:a});angular.isDefined(n)?t.get("cacheCounters").updateConversation(n.LabelID,n.Total,n.Unread):t.get("cacheCounters").updateConversation(a,0,0)})}}(s.ConversationCounts),v=s.UsedSpace,angular.isDefined(v)&&(m.user.UsedSpace=v),b=s.Domains,angular.isDefined(b)&&(0,l.default)(b,function(e){e.Action===U?c.$emit("deleteDomain",e.ID):e.Action===z?c.$emit("createDomain",e.ID,e.Domain):e.Action===V&&c.$emit("updateDomain",e.ID,e.Domain)}),(w=s.Members)&&B("members",w),(x=s.Organization)&&t.get("organizationModel").set(x),A=s.Filters,angular.isArray(A)&&(0,l.default)(A,function(e){if(e.Action===U)c.$broadcast("deleteFilter",e.ID);else if(e.Action===z){var t=Sieve.fromTree(e.Filter.Tree);(0,o.default)(e.Filter.Tree,Sieve.toTree(t))?e.Filter.Simple=t:delete e.Filter.Simple,c.$broadcast("createFilter",e.ID,e.Filter)}else if(e.Action===V){var a=Sieve.fromTree(e.Filter.Tree);(0,o.default)(e.Filter.Tree,Sieve.toTree(a))?e.Filter.Simple=a:delete e.Filter.Simple,c.$broadcast("updateFilter",e.ID,e.Filter)}}),W(s),X(s),t.get("manageUser")(s).then(function(){if(1===s.More)return oe()}));var i,d,u,p,g,h,v,b,w,x,A}function ne(){u.cancel(K.promiseCancel),q(),se()}function se(){return Q().then(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data,t=void 0===e?{}:e;5003===t.Code?u.cancel(K.promiseCancel):(q(),K.index=0,G(),K.promiseCancel=u(se,K.milliseconds),ae(t)),p.set("onLine",!0)},function(){angular.isDefined(K.promiseCancel)&&(u.cancel(K.promiseCancel),q(),K.index<E.length-1&&K.index++,G(K.milliseconds*E[K.index]),K.promiseCancel=u(se,K.milliseconds,!1),K.notification=_({templateUrl:a("./src/templates/notifications/retry.tpl.html"),duration:"0",onClick:ne}),p.set("onLine",!1))})}function oe(){return Q().then(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data,t=void 0===e?{}:e;return p.set("onLine",!0),K.index&&(q(),G(),K.promiseCancel=u(se,K.milliseconds)),ae(t)}).catch(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).data;throw new Error((void 0===e?{}:e).Error||"Error event manager")})}return{setEventID:function(e){return H(e)},start:function(){K.promiseCancel||(K.promiseCancel=u(se,0,!1))},call:oe,stop:function(){u.cancel(K.promiseCancel),delete K.promiseCancel}}}d.$inject=["$cookies","$injector","$rootScope","$state","$timeout","AppModel","authentication","cachePages","CONSTANTS","desktopNotifications","Events","gettextCatalog","mailSettingsModel","notify","sanitize","subscriptionModel","userSettingsModel","vpnSettingsModel"],t.default=d},"./src/app/utils/services/firstLoadState.js":function(e,t,a){"use strict";function n(e,t){var a=!0,n=t.filteredState;return(0,e().on)("$stateChangeStart",function(e,t,s,o){a=n(o.name)!==n(t.name)}),{get:function(){return a},set:function(e){return a=e}}}Object.defineProperty(t,"__esModule",{value:!0}),n.$inject=["dispatchers","tools"],t.default=n},"./src/app/utils/services/hotkeys.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=l(a("./node_modules/lodash/fp/each.js")),s=l(a("./node_modules/lodash/fp/filter.js")),o=l(a("./node_modules/lodash/fp/flow.js")),r=l(a("./node_modules/lodash/includes.js"));function l(e){return e&&e.__esModule?e:{default:e}}function i(e,t,a,l,i,c){var d={OPEN_COMPOSER:c.getString("Open the composer",null,"Hotkey description"),CREATE_REPLY:c.getString("Create a reply",null,"Hotkey description"),CREATE_REPLY_ALL:c.getString("Create a reply all",null,"Hotkey description"),FORWARD_MSG:c.getString("Forward the message",null,"Hotkey description"),MARK_AS_READ:c.getString("Mark as read",null,"Hotkey description"),MARK_AS_UNREAD:c.getString("Mark as unread",null,"Hotkey description"),MOVE_TO_INBOX:c.getString("Move to inbox",null,"Hotkey description"),MOVE_TO_TRASH:c.getString("Move to trash",null,"Hotkey description"),MOVE_TO_ARCHIVE:c.getString("Move to archive",null,"Hotkey description"),MOVE_TO_SPAM:c.getString("Move to spam",null,"Hotkey description"),SHOW_HOTKEYS_LIST:c.getString("Show hotkeys available",null,"Hotkey description"),GO_TO_INBOX:c.getString("Go to inbox",null,"Hotkey description"),GO_TO_DRAFTS:c.getString("Go to drafts",null,"Hotkey description"),GO_TO_SENT:c.getString("Go to sent",null,"Hotkey description"),GO_TO_STARRED:c.getString("Go to starred",null,"Hotkey description"),GO_TO_ARCHIVE:c.getString("Go to archive",null,"Hotkey description"),GO_TO_SPAM:c.getString("Go to spam",null,"Hotkey description"),GO_TO_TRASH:c.getString("Go to trash",null,"Hotkey description"),SELECT_ALL:c.getString("Select all elements",null,"Hotkey description"),UNSELECT_ALL:c.getString("Unselect all elements",null,"Hotkey description")},u="keyup",p=function(e){return function(){return e(),!1}},m=function(e){return function(){return a.go(e)}},f=function(e){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return function(){"composer.new"===e&&(a.data.message=i.get("messageModel")()),t.$emit(e,a)}},g=function(e){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return function(){return t.$broadcast(e,a)}},h=p(m("secured.inbox")),v=p(m("secured.drafts")),b=p(m("secured.sent")),y=p(m("secured.starred")),_=p(m("secured.archive")),w=p(m("secured.spam")),x=p(m("secured.trash")),j=p(f("composer.new",{type:"new",data:{}})),k=p(f("hotkeys",{type:"commandPalette"})),A=p(f("hotkeys",{type:"save"})),S=p(f("replyConversation")),M=p(f("replyAllConversation")),P=p(f("forwardConversation")),E=p(f("selectElements",{type:"all",data:{isChecked:!0}})),C=p(f("selectElements",{type:"all",data:{isChecked:!1}})),T=p(f("hotkeys",{type:"slash"})),I=p(f("toggleStar")),D=p(g("selectMark")),O=p(g("markPrevious")),L=p(g("markNext")),R=p(f("hotkeys",{type:"escape"})),N=p(g("left")),$=p(g("right")),F=p(g("read")),U=p(g("unread")),z=p(g("move","inbox")),V=p(g("move","trash")),B=p(g("move","archive")),K=p(g("move","spam")),q=p(g("nextElement")),G=p(g("previousElement")),H=[{keyboard:"c",callback:j,description:d.OPEN_COMPOSER},{keyboard:"mod+s",callback:A,global:!0},{keyboard:"shift+space",callback:k},{keyboard:"shift+r",callback:S,description:d.CREATE_REPLY},{keyboard:"shift+a",callback:M,description:d.CREATE_REPLY_ALL},{keyboard:"shift+f",callback:P,description:d.FORWARD_MSG},{keyboard:"k",callback:G},{keyboard:"j",callback:q},{keyboard:"enter",callback:function(e){t.$broadcast("openMarked"),e.preventDefault()}},{keyboard:"r",callback:F,description:d.MARK_AS_READ,keyEventType:u},{keyboard:"u",callback:U,description:d.MARK_AS_UNREAD,keyEventType:u},{keyboard:".",callback:I},{keyboard:"i",callback:z,description:d.MOVE_TO_INBOX,keyEventType:u},{keyboard:["t","del","command+backspace"],callback:V,description:d.MOVE_TO_TRASH,keyEventType:u},{keyboard:"a",callback:B,description:d.MOVE_TO_ARCHIVE,keyEventType:u},{keyboard:"s",callback:K,description:d.MOVE_TO_SPAM,keyEventType:u},{keyboard:"?",callback:function(){return e.activate({params:{close:function(){e.deactivate()}}}),!1},description:d.SHOW_HOTKEYS_LIST},{keyboard:"g i",callback:h,description:d.GO_TO_INBOX},{keyboard:"g d",callback:v,description:d.GO_TO_DRAFTS},{keyboard:"g s",callback:b,description:d.GO_TO_SENT},{keyboard:"g .",callback:y,description:d.GO_TO_STARRED},{keyboard:"g a",callback:_,description:d.GO_TO_ARCHIVE},{keyboard:"g x",callback:w,description:d.GO_TO_SPAM},{keyboard:"g t",callback:x,description:d.GO_TO_TRASH},{keyboard:"* a",callback:E,description:d.SELECT_ALL},{keyboard:"* n",callback:C,description:d.UNSELECT_ALL},{keyboard:"x",callback:D},{keyboard:"left",callback:N},{keyboard:"right",callback:$},{keyboard:"up",callback:O},{keyboard:"down",callback:L},{keyboard:"escape",callback:R},{keyboard:"/",callback:T}],W=function(e){var t=e.keyboard,a=e.keyEventType;return Mousetrap.unbind(t,a)},Y=function(e){var t=e.keyboard,a=e.callback,n=e.keyEventType,s=e.global;if(void 0!==s&&s)return Mousetrap.bindGlobal(t,a,n);Mousetrap.bind(t,a,n)},X=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:angular.noop;(0,o.default)((0,s.default)(function(t){var a=t.keyboard;return(0,r.default)(e,a)}),(0,n.default)(t))(H)};return{trigger:Mousetrap.trigger,bind:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];if(!e.length)return H.forEach(Y);X(e,Y)},unbind:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];if(!e.length)return H.forEach(W);X(e,W)},reset:function(){Mousetrap.reset()},pause:function(){Mousetrap.pause()},unpause:function(){Mousetrap.unpause()},keys:function(){return angular.copy(H)},translations:function(e){return d[e]||d}}}i.$inject=["hotkeyModal","$rootScope","$state","authentication","$injector","gettextCatalog"],t.default=i},"./src/app/utils/services/lazyLoader.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(a("./node_modules/babel-runtime/regenerator/index.js")),s=o(a("./node_modules/babel-runtime/helpers/asyncToGenerator.js"));function o(e){return e&&e.__esModule?e:{default:e}}function r(e,t,a,o){var r,l,i=this,c={loaded:0},d=o.getString("You are using an outdated version of ProtonMail, please refresh the page",null,"Error"),u=o.getString("Reload ProtonMail",null,"Action"),p={app:"appLazy.32f968a824f1e4b9392721977784505f2375bb75.js",vendor:"vendorLazy.c5da088b29d487b293029dbd93f5152fc5a1a5de.js",vendor2:"vendorLazy2.06fc762596b247c585987ec3e66a22ad671a3205.js"},m=(r=(0,s.default)(n.default.mark(function t(s){return n.default.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,c[s]=e.load(p[s]),t.next=4,c[s];case 4:delete c[s],c.loaded++,t.next=12;break;case 8:t.prev=8,t.t0=t.catch(0),console.error(t.t0),a.error(d+"<br><br><a>"+u+"</a>",{duration:0,onClose:function(){window.location.reload()}});case 12:case"end":return t.stop()}},t,i,[[0,8]])})),function(e){return r.apply(this,arguments)});return{app:(l=(0,s.default)(n.default.mark(function e(){var a;return n.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(!c.vendor){e.next=2;break}return e.abrupt("return",c.vendor.then(function(){return m("app")}));case 2:if(!c.app){e.next=4;break}return e.abrupt("return",c.app);case 4:if(2!==c.loaded){e.next=6;break}return e.abrupt("return");case 6:return a=m("vendor").then(function(){return m("app")}),e.abrupt("return",t.track(a));case 8:case"end":return e.stop()}},e,i)})),function(){return l.apply(this,arguments)}),extraVendor:function(){return t.track(m("vendor2"))}}}r.$inject=["$ocLazyLoad","networkActivityTracker","notification","gettextCatalog"],t.default=r},"./src/app/utils/services/mailUtils.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=a("./src/helpers/browser.js");function s(e){function t(t){return e.input(t).split(",").map(function(e){return{Address:e,Name:e}})}return{mailtoParser:function(a){if(0===a.toLowerCase().indexOf("mailto:")){var s=a.indexOf("?");s<0&&(s=a.length);var o=e.input(a.substring(7,s)),r=(0,n.parseURL)(a.replace(/&/g,"&")).searchObject,l=void 0===r?{}:r,i={};return o&&(i.ToList=t(o)),l.subject&&(i.Subject=e.input(l.subject)),l.cc&&(i.CCList=t(l.cc)),l.bcc&&(i.BCCList=t(l.bcc)),l.body&&(i.DecryptedBody=e.message(l.body)),i}}}}s.$inject=["sanitize"],t.default=s},"./src/app/utils/services/openStatePostMessage.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/babel-runtime/helpers/slicedToArray.js"),o=(n=s)&&n.__esModule?n:{default:n};function r(e){return{open:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",a=arguments[1],n=arguments[2],s=n.message,r=void 0===s?{}:s,l=n.data,i=e.href(t,a,{absolute:!0}),c=window.location.href.split("/"),d=(0,o.default)(c,3),u=d[0],p=void 0===u?"http":u,m=d[2],f=p+"//"+(void 0===m?"":m);window.addEventListener("message",function e(t){t.data===r.ID&&(t.source.postMessage(l||r,f),window.removeEventListener("message",e,!1))},!1),window.open(i,"_blank")}}}r.$inject=["$state"],t.default=r},"./src/app/utils/services/sanitize.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/babel-runtime/helpers/extends.js"),o=(n=s)&&n.__esModule?n:{default:n};t.default=function(){var e={default:{ALLOWED_URI_REGEXP:/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|blob|xmpp|data):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i,ADD_TAGS:["proton-src","base"],ADD_ATTR:["target","proton-src"],FORBID_TAGS:["style","input","form"]},raw:{WHOLE_DOCUMENT:!0,RETURN_DOM:!0},content:{ALLOW_UNKNOWN_PROTOCOLS:!0,WHOLE_DOCUMENT:!1,RETURN_DOM:!0,RETURN_DOM_FRAGMENT:!0}},t=function(t){return(0,o.default)({},e.default,e[t]||{})};return{message:function(e){return DOMPurify.sanitize(e,t())},input:DOMPurify.sanitize,html:function(e){return DOMPurify.sanitize(e,t("raw"))},content:function(e){return DOMPurify.sanitize(e,t("content"))}}}},"./src/app/utils/services/strUtils.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){return{ucFirst:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return e.charAt(0).toUpperCase()+e.slice(1)}}}},"./src/helpers/autoLink.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=document.createElement("BODY"),s=new RegExp("(^|\\W)((?:\\+?\\d{1,3})?[-. (]*\\d{3}[-. )]*\\d{3}[-. ]*\\d{4}(?: *x\\d+)?)($|\\W)","g"),o=function(e){if("A"===e.nodeName)return!1;if("#text"!==e.nodeName)return!0;var t=e.textContent;return!!s.test(t)&&(e.parentNode.innerHTML=function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").replace(s,function(e,t,a,n){return t+'<a href="tel:'+a+'">'+a+"</a>"+n})}(t),!1)};t.default=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return n.innerHTML=e,function e(t,a){for(var n=t.childNodes,s=0;s<n.length;++s){var o=n[s];a(o)&&e(o,a)}}(n,o),n.innerHTML}},"./src/helpers/browser.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.parseURL=t.doNotTrack=t.prngAvailable=t.isFileSaverSupported=t.hasTouch=t.isMac=t.isChrome=t.isFirefox=t.isEdge=t.isIE11=t.isSafariMobile=t.isSafari=t.getOS=t.getDevice=t.getBrowser=t.hasCookie=t.hasSessionStorage=void 0;var n,s=a("./node_modules/babel-runtime/helpers/typeof.js"),o=(n=s)&&n.__esModule?n:{default:n};t.openWindow=function(e){if(l()){var t=document.createElement("A");return t.setAttribute("rel","noreferrer nofollow noopener"),t.setAttribute("target","_blank"),t.href=e,t.click()}var a=window.open();a.opener=null,a.location=e};t.hasSessionStorage=function(){var e="modernizr";try{return sessionStorage.setItem(e,e),sessionStorage.removeItem(e),!0}catch(e){return!1}},t.hasCookie=function(){return navigator.cookieEnabled},t.getBrowser=function(){return $.ua.browser},t.getDevice=function(){return $.ua.device};var r=t.getOS=function(){var e=$.ua.os,t=e.name,a=void 0===t?"other":t,n=e.version;return{name:a,version:void 0===n?"":n}},l=t.isSafari=function(){return["Safari","Mobile Safari"].includes($.ua.browser.name)};t.isSafariMobile=function(){return"Mobile Safari"===$.ua.browser.name},t.isIE11=function(){return"IE"===$.ua.browser.name&&"11"===$.ua.browser.major},t.isEdge=function(){return"Edge"===$.ua.browser.name},t.isFirefox=function(){return"Firefox"===$.ua.browser.name},t.isChrome=function(){return"Chrome"===$.ua.browser.name},t.isMac=function(){return"Mac OS"===r().name},t.hasTouch="ontouchstart"in document.documentElement,t.isFileSaverSupported=function(){return"download"in document.createElement("a")||navigator.msSaveOrOpenBlob},t.prngAvailable=function(){return!("undefined"==typeof window||!window.crypto||!window.crypto.getRandomValues)||"undefined"!=typeof window&&"object"===(0,o.default)(window.msCrypto)&&"function"==typeof window.msCrypto.getRandomValues},t.doNotTrack=function(){return"1"===navigator.doNotTrack||"yes"===navigator.doNotTrack||"1"===navigator.msDoNotTrack||"1"===window.doNotTrack};t.parseURL=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=document.createElement("a"),a={},n=void 0;t.href=e;for(var s=t.search.replace(/^\?/,"").split("&"),o=0;o<s.length;o++)a[(n=s[o].split("="))[0]]=n[1];return{protocol:t.protocol,host:t.host,hostname:t.hostname,port:t.port,pathname:t.pathname,search:t.search,searchObject:a,hash:t.hash}}},"./src/helpers/dedent.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){for(var t=arguments.length,a=Array(t>1?t-1:0),n=1;n<t;n++)a[n-1]=arguments[n];function s(){var e=-1;return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").replace(/\n(\s+)/g,function(t,a){return e<0&&(e=a.replace(/\t/g," ").length),"\n"+a.slice(Math.min(a.length,e))})}return"string"==typeof e?s(e):"function"==typeof e?function(){return s(e.apply(void 0,arguments))}:s(e.slice(0,a.length+1).map(function(e,t){return(0===t?"":a[t-1])+e}).join(""))}},"./src/helpers/dragScrollHelper.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=a("./node_modules/lodash/get.js"),o=(n=s)&&n.__esModule?n:{default:n};t.default=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.scrollableSelector,a=e.speed,n=void 0===a?10:a,s=e.margin,r=void 0===s?20:s,l={};return{dragStart:function(e){var a=(0,o.default)(e,"dest.sortableScope.element[0]");a&&(l.scrollableContainer=document.querySelector(t),l.listTop=a.offsetTop,l.listBottom=l.listTop+a.offsetHeight)},dragMove:function(e,t,a){if(a&&l.scrollableContainer){var s=l.scrollableContainer.scrollTop,o=l.scrollableContainer.offsetTop,i=l.scrollableContainer.offsetHeight,c=a.pageY,d=c+s;c-r>i&&d<=l.listBottom?l.scrollableContainer.scrollTop+=n:c-r<o&&d>=l.listTop&&(l.scrollableContainer.scrollTop-=n)}},dragEnd:function(){delete l.scrollableContainer}}}},"./src/helpers/fileHelper.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.toBase64=void 0;var n,s=a("./node_modules/babel-runtime/core-js/promise.js"),o=(n=s)&&n.__esModule?n:{default:n};t.toBase64=function(e){return new o.default(function(t){var a=new FileReader;a.onload=function(e){var a=e.target;t(a.result)},a.readAsDataURL(e)})}},"./src/helpers/imageHelper.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.downSize=t.toBlob=t.toFile=t.resizeImage=t.toImage=void 0;var n,s=a("./node_modules/babel-runtime/core-js/promise.js"),o=(n=s)&&n.__esModule?n:{default:n};var r=t.toImage=function(e){return new o.default(function(t){var a=new Image;a.onload=function(){t(a)},a.src=e})},l=t.resizeImage=function(e,t){var a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"image/jpeg",n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;return r(e).then(function(e){var s=document.createElement("canvas"),o=e.width,r=e.height;return o>r&&o>t?(r*=t/o,o=t):r>t&&(o*=t/r,r=t),s.width=o,s.height=r,s.getContext("2d").drawImage(e,0,0,o,r),s.toDataURL(a,n)})},i=function(e){var t=e.split(",");return{mime:t[0].match(/:(.*?);/)[1],base64:t[1]}},c=function(e){for(var t=atob(e),a=t.length,n=new Uint8Array(a);a--;)n[a]=t.charCodeAt(a);return n},d=(t.toFile=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"file",a=i(e),n=a.base64,s=a.mime;return new File([c(n)],t,{type:s})},t.toBlob=function(e){var t=i(e),a=t.base64,n=t.mime;return new Blob([c(a)],{type:n})});t.downSize=function(e,t){var a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"image/jpeg",n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;return r(e).then(function(s){var o=s.height,r=s.width;return function e(s,o){return l(s,o,a,n).then(function(a){return d(a).size<=t?a:e(a,Math.round(.9*o))})}(e,o>r?o:r)})}},"./src/helpers/vcardDateParser.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(a("./node_modules/babel-runtime/helpers/slicedToArray.js")),s=o(a("./node_modules/lodash/find.js"));function o(e){return e&&e.__esModule?e:{default:e}}t.default=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=[{regex:/^--(\d{2})-?(\d{2})$/,cb:function(e){var t=(0,n.default)(e,3);return{month:t[1],day:t[2]}}},{regex:/^--(\d{2})$/,cb:function(e){return{month:(0,n.default)(e,2)[1]}}},{regex:/^---(\d{2})$/,cb:function(e){return{day:(0,n.default)(e,2)[1]}}},{regex:/^(\d{4})-?(\d{2})$/,cb:function(e){var t=(0,n.default)(e,3);return{year:t[1],month:t[2]}}},{regex:/^(\d{4})$/,cb:function(e){return{year:(0,n.default)(e,2)[1]}}},{regex:/^(\d{4})(\d{2})(\d{2})$/,cb:function(e){var t=(0,n.default)(e,4);return{year:t[1],month:t[2],day:t[3]}}},{regex:/^(\d{4})-(\d{2})-(\d{2})$/,cb:function(e){var t=(0,n.default)(e,4);return{year:t[1],month:t[2],day:t[3]}}}],a=(0,s.default)(t,function(t){return t.regex.test(e)})||{},o=a.regex,r=a.cb;if(o)return r(e.match(o))}},"./src/helpers/vcardUniqueFields.js":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n={n:!0,bday:!0,anniversary:!0,gender:!0,prodid:!0,rev:!0,uid:!0};t.default=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return n[e.toLowerCase()]}},"./src/sass/app.scss":function(e,t,a){},"./src/templates recursive \\.html$":function(e,t,a){var n={"./address/addressKeysView.tpl.html":"./src/templates/address/addressKeysView.tpl.html","./address/setupAddressModal.tpl.html":"./src/templates/address/setupAddressModal.tpl.html","./attachments/attendeeItem.tpl.html":"./src/templates/attachments/attendeeItem.tpl.html","./attachments/btnDownloadAttachments.tpl.html":"./src/templates/attachments/btnDownloadAttachments.tpl.html","./attachments/eventsAttachments.tpl.html":"./src/templates/attachments/eventsAttachments.tpl.html","./authentication/loginForm.tpl.html":"./src/templates/authentication/loginForm.tpl.html","./authentication/loginTwoFactorForm.tpl.html":"./src/templates/authentication/loginTwoFactorForm.tpl.html","./authentication/modals/helpLoginModal.tpl.html":"./src/templates/authentication/modals/helpLoginModal.tpl.html","./authentication/modals/loginPassword.tpl.html":"./src/templates/authentication/modals/loginPassword.tpl.html","./authentication/modals/oldPasswordModal.tpl.html":"./src/templates/authentication/modals/oldPasswordModal.tpl.html","./authentication/twoFaField.tpl.html":"./src/templates/authentication/twoFaField.tpl.html","./autoresponder/autoresponder.tpl.html":"./src/templates/autoresponder/autoresponder.tpl.html","./autoresponder/autoresponderMessage.tpl.html":"./src/templates/autoresponder/autoresponderMessage.tpl.html","./autoresponder/autoresponderTimePicker.tpl.html":"./src/templates/autoresponder/autoresponderTimePicker.tpl.html","./autoresponder/autoresponderTimeSection.tpl.html":"./src/templates/autoresponder/autoresponderTimeSection.tpl.html","./autoresponder/autoresponderView.tpl.html":"./src/templates/autoresponder/autoresponderView.tpl.html","./autoresponder/durationselect.tpl.html":"./src/templates/autoresponder/durationselect.tpl.html","./autoresponder/subjectPrefix.tpl.html":"./src/templates/autoresponder/subjectPrefix.tpl.html","./blackFriday/blackFridayFree.tpl.html":"./src/templates/blackFriday/blackFridayFree.tpl.html","./blackFriday/blackFridayModal.tpl.html":"./src/templates/blackFriday/blackFridayModal.tpl.html","./blackFriday/blackFridayPaid.tpl.html":"./src/templates/blackFriday/blackFridayPaid.tpl.html","./blackFriday/blackFridayPrice.tpl.html":"./src/templates/blackFriday/blackFridayPrice.tpl.html","./bridge/bridgeFreePanel.tpl.html":"./src/templates/bridge/bridgeFreePanel.tpl.html","./bridge/bridgePaidPanel.tpl.html":"./src/templates/bridge/bridgePaidPanel.tpl.html","./bridge/bridgeView.tpl.html":"./src/templates/bridge/bridgeView.tpl.html","./bugReport/newBugReport.tpl.html":"./src/templates/bugReport/newBugReport.tpl.html","./command/autocompleteCommand.tpl.html":"./src/templates/command/autocompleteCommand.tpl.html","./command/commandPalette.tpl.html":"./src/templates/command/commandPalette.tpl.html","./composer/composerEncrypt.tpl.html":"./src/templates/composer/composerEncrypt.tpl.html","./composer/composerExpiration.tpl.html":"./src/templates/composer/composerExpiration.tpl.html","./contact/contactAddressInput.tpl.html":"./src/templates/contact/contactAddressInput.tpl.html","./contact/contactArrowsSort.tpl.html":"./src/templates/contact/contactArrowsSort.tpl.html","./contact/contactBeforeToLeaveModal.tpl.html":"./src/templates/contact/contactBeforeToLeaveModal.tpl.html","./contact/contactClear.tpl.html":"./src/templates/contact/contactClear.tpl.html","./contact/contactDetails.tpl.html":"./src/templates/contact/contactDetails.tpl.html","./contact/contactDisplay.tpl.html":"./src/templates/contact/contactDisplay.tpl.html","./contact/contactDisplayModal.tpl.html":"./src/templates/contact/contactDisplayModal.tpl.html","./contact/contactEncrypted.tpl.html":"./src/templates/contact/contactEncrypted.tpl.html","./contact/contactError.tpl.html":"./src/templates/contact/contactError.tpl.html","./contact/contactList.tpl.html":"./src/templates/contact/contactList.tpl.html","./contact/contactLoaderModal.tpl.html":"./src/templates/contact/contactLoaderModal.tpl.html","./contact/contactMerger.tpl.html":"./src/templates/contact/contactMerger.tpl.html","./contact/contactMergerModal.tpl.html":"./src/templates/contact/contactMergerModal.tpl.html","./contact/contactModal.tpl.html":"./src/templates/contact/contactModal.tpl.html","./contact/contactNoResult.tpl.html":"./src/templates/contact/contactNoResult.tpl.html","./contact/contactPhotoForm.tpl.html":"./src/templates/contact/contactPhotoForm.tpl.html","./contact/contactPhotoModal.tpl.html":"./src/templates/contact/contactPhotoModal.tpl.html","./contact/contactPhotoRow.tpl.html":"./src/templates/contact/contactPhotoRow.tpl.html","./contact/contactPlaceholder.tpl.html":"./src/templates/contact/contactPlaceholder.tpl.html","./contact/contactRightPanel.tpl.html":"./src/templates/contact/contactRightPanel.tpl.html","./contact/contactToolbar.tpl.html":"./src/templates/contact/contactToolbar.tpl.html","./contact/importCardDropzone.tpl.html":"./src/templates/contact/importCardDropzone.tpl.html","./contact/importContactModal.tpl.html":"./src/templates/contact/importContactModal.tpl.html","./dashboard/addonRow.tpl.html":"./src/templates/dashboard/addonRow.tpl.html","./dashboard/currencySelector.tpl.html":"./src/templates/dashboard/currencySelector.tpl.html","./dashboard/customProPlanModal.tpl.html":"./src/templates/dashboard/customProPlanModal.tpl.html","./dashboard/customVpnModal.tpl.html":"./src/templates/dashboard/customVpnModal.tpl.html","./dashboard/freeColumn.tpl.html":"./src/templates/dashboard/freeColumn.tpl.html","./dashboard/overviewSection.tpl.html":"./src/templates/dashboard/overviewSection.tpl.html","./dashboard/plusColumn.tpl.html":"./src/templates/dashboard/plusColumn.tpl.html","./dashboard/professionalColumn.tpl.html":"./src/templates/dashboard/professionalColumn.tpl.html","./dashboard/subscriptionSection.tpl.html":"./src/templates/dashboard/subscriptionSection.tpl.html","./dashboard/totalRows.tpl.html":"./src/templates/dashboard/totalRows.tpl.html","./dashboard/visionaryColumn.tpl.html":"./src/templates/dashboard/visionaryColumn.tpl.html","./dashboard/vpnColumns.tpl.html":"./src/templates/dashboard/vpnColumns.tpl.html","./dashboard/vpnDiscountPanel.tpl.html":"./src/templates/dashboard/vpnDiscountPanel.tpl.html","./dashboard/vpnRow.tpl.html":"./src/templates/dashboard/vpnRow.tpl.html","./dashboard/vpnSlider.tpl.html":"./src/templates/dashboard/vpnSlider.tpl.html","./dashboard/vpnTotal.tpl.html":"./src/templates/dashboard/vpnTotal.tpl.html","./directives/attachments/listAttachments.tpl.html":"./src/templates/directives/attachments/listAttachments.tpl.html","./directives/composer/composer-header.tpl.html":"./src/templates/directives/composer/composer-header.tpl.html","./directives/composer/composer.tpl.html":"./src/templates/directives/composer/composer.tpl.html","./directives/composer/composerAskEmbedded.tpl.html":"./src/templates/directives/composer/composerAskEmbedded.tpl.html","./directives/composer/composerAttachments.tpl.html":"./src/templates/directives/composer/composerAttachments.tpl.html","./directives/composer/composerAttachmentsSize.tpl.html":"./src/templates/directives/composer/composerAttachmentsSize.tpl.html","./directives/composer/composerInputMeta.tpl.html":"./src/templates/directives/composer/composerInputMeta.tpl.html","./directives/composer/composerSelectFrom.tpl.html":"./src/templates/directives/composer/composerSelectFrom.tpl.html","./directives/composer/composerSubject.tpl.html":"./src/templates/directives/composer/composerSubject.tpl.html","./directives/contact/contactItem.tpl.html":"./src/templates/directives/contact/contactItem.tpl.html","./directives/core/bugModalView.tpl.html":"./src/templates/directives/core/bugModalView.tpl.html","./directives/core/placeholderProgress.tpl.html":"./src/templates/directives/core/placeholderProgress.tpl.html","./directives/core/sidebarProgress.tpl.html":"./src/templates/directives/core/sidebarProgress.tpl.html","./directives/dropdownLabels.tpl.html":"./src/templates/directives/dropdownLabels.tpl.html","./directives/outside/composer.tpl.html":"./src/templates/directives/outside/composer.tpl.html","./directives/paginator.tpl.html":"./src/templates/directives/paginator.tpl.html","./directives/paginatorScope.tpl.html":"./src/templates/directives/paginatorScope.tpl.html","./directives/squire.tpl.html":"./src/templates/directives/squire.tpl.html","./directives/toggle.tpl.html":"./src/templates/directives/toggle.tpl.html","./directives/ui/noResults.tpl.html":"./src/templates/directives/ui/noResults.tpl.html","./directives/ui/progressUpload.tpl.html":"./src/templates/directives/ui/progressUpload.tpl.html","./directives/ui/protonLoader.tpl.html":"./src/templates/directives/ui/protonLoader.tpl.html","./directives/ui/protonmailLogo.tpl.html":"./src/templates/directives/ui/protonmailLogo.tpl.html","./directives/ui/readUnread.tpl.html":"./src/templates/directives/ui/readUnread.tpl.html","./directives/ui/requestTimeout.tpl.html":"./src/templates/directives/ui/requestTimeout.tpl.html","./directives/ui/settingsMenu.tpl.html":"./src/templates/directives/ui/settingsMenu.tpl.html","./domains/domainsMenuStep.tpl.html":"./src/templates/domains/domainsMenuStep.tpl.html","./elements/advancedFilterElement.tpl.html":"./src/templates/elements/advancedFilterElement.tpl.html","./elements/countElementsSelected.tpl.html":"./src/templates/elements/countElementsSelected.tpl.html","./elements/elementsSelector.tpl.html":"./src/templates/elements/elementsSelector.tpl.html","./elements/foldersElement.tpl.html":"./src/templates/elements/foldersElement.tpl.html","./elements/labelsElement.tpl.html":"./src/templates/elements/labelsElement.tpl.html","./elements/moveElement.tpl.html":"./src/templates/elements/moveElement.tpl.html","./elements/navElements.tpl.html":"./src/templates/elements/navElements.tpl.html","./elements/ptSelectElement.tpl.html":"./src/templates/elements/ptSelectElement.tpl.html","./elements/ptStar.tpl.html":"./src/templates/elements/ptStar.tpl.html","./filter/customFilterList.tpl.html":"./src/templates/filter/customFilterList.tpl.html","./filter/emailBlockButton.tpl.html":"./src/templates/filter/emailBlockButton.tpl.html","./filter/emailBlockList.tpl.html":"./src/templates/filter/emailBlockList.tpl.html","./filter/filterAddressModal.tpl.html":"./src/templates/filter/filterAddressModal.tpl.html","./filter/filterView.tpl.html":"./src/templates/filter/filterView.tpl.html","./filter/modal.tpl.html":"./src/templates/filter/modal.tpl.html","./filter/sieveLabelInput.tpl.html":"./src/templates/filter/sieveLabelInput.tpl.html","./filter/spamListSearch.tpl.html":"./src/templates/filter/spamListSearch.tpl.html","./filter/spamLists.tpl.html":"./src/templates/filter/spamLists.tpl.html","./formUtils/captcha.tpl.html":"./src/templates/formUtils/captcha.tpl.html","./formUtils/captchaView.tpl.html":"./src/templates/formUtils/captchaView.tpl.html","./formUtils/cardView.tpl.html":"./src/templates/formUtils/cardView.tpl.html","./formUtils/password.tpl.html":"./src/templates/formUtils/password.tpl.html","./labels/createLabel.tpl.html":"./src/templates/labels/createLabel.tpl.html","./labels/dropdownFolders.tpl.html":"./src/templates/labels/dropdownFolders.tpl.html","./layout/auth.tpl.html":"./src/templates/layout/auth.tpl.html","./layout/login.tpl.html":"./src/templates/layout/login.tpl.html","./layout/outside.tpl.html":"./src/templates/layout/outside.tpl.html","./layout/pre.tpl.html":"./src/templates/layout/pre.tpl.html","./layout/secured.tpl.html":"./src/templates/layout/secured.tpl.html","./layout/sidebar.tpl.html":"./src/templates/layout/sidebar.tpl.html","./members/restoreAdministratorPanel.tpl.html":"./src/templates/members/restoreAdministratorPanel.tpl.html","./message/allMessageLabels.tpl.html":"./src/templates/message/allMessageLabels.tpl.html","./message/displayContentBtn.tpl.html":"./src/templates/message/displayContentBtn.tpl.html","./message/filterButton.tpl.html":"./src/templates/message/filterButton.tpl.html","./message/foldersMessage.tpl.html":"./src/templates/message/foldersMessage.tpl.html","./message/message.tpl.html":"./src/templates/message/message.tpl.html","./message/messageAutoGenerated.tpl.html":"./src/templates/message/messageAutoGenerated.tpl.html","./message/messageContacts.tpl.html":"./src/templates/message/messageContacts.tpl.html","./message/messageDisplayError.tpl.html":"./src/templates/message/messageDisplayError.tpl.html","./message/messageExtra.tpl.html":"./src/templates/message/messageExtra.tpl.html","./message/messageView.tpl.html":"./src/templates/message/messageView.tpl.html","./modals/abuseFraudModal.tpl.html":"./src/templates/modals/abuseFraudModal.tpl.html","./modals/activateOrganization.tpl.html":"./src/templates/modals/activateOrganization.tpl.html","./modals/addAddress.tpl.html":"./src/templates/modals/addAddress.tpl.html","./modals/alert.tpl.html":"./src/templates/modals/alert.tpl.html","./modals/bug.tpl.html":"./src/templates/modals/bug.tpl.html","./modals/card.tpl.html":"./src/templates/modals/card.tpl.html","./modals/changeOrganizationPassword.tpl.html":"./src/templates/modals/changeOrganizationPassword.tpl.html","./modals/changePassword.tpl.html":"./src/templates/modals/changePassword.tpl.html","./modals/confirm.tpl.html":"./src/templates/modals/confirm.tpl.html","./modals/customizeInvoice.tpl.html":"./src/templates/modals/customizeInvoice.tpl.html","./modals/deleteAccount.tpl.html":"./src/templates/modals/deleteAccount.tpl.html","./modals/domain/address.tpl.html":"./src/templates/modals/domain/address.tpl.html","./modals/domain/dkim.tpl.html":"./src/templates/modals/domain/dkim.tpl.html","./modals/domain/dmarc.tpl.html":"./src/templates/modals/domain/dmarc.tpl.html","./modals/domain/domain.tpl.html":"./src/templates/modals/domain/domain.tpl.html","./modals/domain/mx.tpl.html":"./src/templates/modals/domain/mx.tpl.html","./modals/domain/spf.tpl.html":"./src/templates/modals/domain/spf.tpl.html","./modals/domain/verification.tpl.html":"./src/templates/modals/domain/verification.tpl.html","./modals/donate.tpl.html":"./src/templates/modals/donate.tpl.html","./modals/feedback.tpl.html":"./src/templates/modals/feedback.tpl.html","./modals/generate.tpl.html":"./src/templates/modals/generate.tpl.html","./modals/generateOrganization.tpl.html":"./src/templates/modals/generateOrganization.tpl.html","./modals/hotkey.tpl.html":"./src/templates/modals/hotkey.tpl.html","./modals/humanVerification.tpl.html":"./src/templates/modals/humanVerification.tpl.html","./modals/label.tpl.html":"./src/templates/modals/label.tpl.html","./modals/member.tpl.html":"./src/templates/modals/member.tpl.html","./modals/organizationRecovery.tpl.html":"./src/templates/modals/organizationRecovery.tpl.html","./modals/pay.tpl.html":"./src/templates/modals/pay.tpl.html","./modals/payment/modal.tpl.html":"./src/templates/modals/payment/modal.tpl.html","./modals/reactivate.tpl.html":"./src/templates/modals/reactivate.tpl.html","./modals/releaseNotes.tpl.html":"./src/templates/modals/releaseNotes.tpl.html","./modals/setupOrganization.tpl.html":"./src/templates/modals/setupOrganization.tpl.html","./modals/support.tpl.html":"./src/templates/modals/support.tpl.html","./modals/switchPasswordMode.tpl.html":"./src/templates/modals/switchPasswordMode.tpl.html","./modals/twofactor/recoveryCode.tpl.html":"./src/templates/modals/twofactor/recoveryCode.tpl.html","./modals/twofactor/sharedSecret.tpl.html":"./src/templates/modals/twofactor/sharedSecret.tpl.html","./modals/twofactor/twoFAIntroModal.tpl.html":"./src/templates/modals/twofactor/twoFAIntroModal.tpl.html","./modals/welcome.tpl.html":"./src/templates/modals/welcome.tpl.html","./notifications/base.tpl.html":"./src/templates/notifications/base.tpl.html","./notifications/cross.tpl.html":"./src/templates/notifications/cross.tpl.html","./notifications/retry.tpl.html":"./src/templates/notifications/retry.tpl.html","./notifications/welcome.tpl.html":"./src/templates/notifications/welcome.tpl.html","./organization/organizationFormName.tpl.html":"./src/templates/organization/organizationFormName.tpl.html","./partials/composer.tpl.html":"./src/templates/partials/composer.tpl.html","./partials/conversation-list-columns.tpl.html":"./src/templates/partials/conversation-list-columns.tpl.html","./partials/conversation-list-mobile.tpl.html":"./src/templates/partials/conversation-list-mobile.tpl.html","./partials/conversation-list-rows.tpl.html":"./src/templates/partials/conversation-list-rows.tpl.html","./partials/conversation-placeholder.tpl.html":"./src/templates/partials/conversation-placeholder.tpl.html","./partials/conversation.tpl.html":"./src/templates/partials/conversation.tpl.html","./partials/conversations.tpl.html":"./src/templates/partials/conversations.tpl.html","./partials/safari.attachment.warning.tpl.html":"./src/templates/partials/safari.attachment.warning.tpl.html","./partials/safari.warning.tpl.html":"./src/templates/partials/safari.warning.tpl.html","./partials/sidebar-responsive.tpl.html":"./src/templates/partials/sidebar-responsive.tpl.html","./partials/sidebar.tpl.html":"./src/templates/partials/sidebar.tpl.html","./partials/wizard.tpl.html":"./src/templates/partials/wizard.tpl.html","./payment/bitcoinView.tpl.html":"./src/templates/payment/bitcoinView.tpl.html","./payment/cardPanel.tpl.html":"./src/templates/payment/cardPanel.tpl.html","./payment/donation.tpl.html":"./src/templates/payment/donation.tpl.html","./payment/featuresList.tpl.html":"./src/templates/payment/featuresList.tpl.html","./payment/giftCodeBtn.tpl.html":"./src/templates/payment/giftCodeBtn.tpl.html","./payment/giftCodeInput.tpl.html":"./src/templates/payment/giftCodeInput.tpl.html","./payment/giftCodeModal.tpl.html":"./src/templates/payment/giftCodeModal.tpl.html","./payment/paymentForm.tpl.html":"./src/templates/payment/paymentForm.tpl.html","./payment/paypalView.tpl.html":"./src/templates/payment/paypalView.tpl.html","./payment/tosubscribeOverview.tpl.html":"./src/templates/payment/tosubscribeOverview.tpl.html","./pmMe/pmMeView.tpl.html":"./src/templates/pmMe/pmMeView.tpl.html","./search/btnAdvancedSearch.tpl.html":"./src/templates/search/btnAdvancedSearch.tpl.html","./search/searchContact.tpl.html":"./src/templates/search/searchContact.tpl.html","./search/searchForm.tpl.html":"./src/templates/search/searchForm.tpl.html","./settings/chooseComposerMode.tpl.html":"./src/templates/settings/chooseComposerMode.tpl.html","./settings/chooseRightToLeft.tpl.html":"./src/templates/settings/chooseRightToLeft.tpl.html","./sidebar/sidebarContact.tpl.html":"./src/templates/sidebar/sidebarContact.tpl.html","./sidebar/sidebarLabels.tpl.html":"./src/templates/sidebar/sidebarLabels.tpl.html","./sidebar/sidebarMobileHeader.tpl.html":"./src/templates/sidebar/sidebarMobileHeader.tpl.html","./squire/addFilePopover.tpl.html":"./src/templates/squire/addFilePopover.tpl.html","./squire/addLinkPopover.tpl.html":"./src/templates/squire/addLinkPopover.tpl.html","./squire/colorPopover.tpl.html":"./src/templates/squire/colorPopover.tpl.html","./squire/moreToggle.tpl.html":"./src/templates/squire/moreToggle.tpl.html","./squire/plainTextArea.tpl.html":"./src/templates/squire/plainTextArea.tpl.html","./squire/squireSelectColor.tpl.html":"./src/templates/squire/squireSelectColor.tpl.html","./squire/squireSelectFontFamily.tpl.html":"./src/templates/squire/squireSelectFontFamily.tpl.html","./squire/squireSelectFontSize.tpl.html":"./src/templates/squire/squireSelectFontSize.tpl.html","./squire/squireToolbar.tpl.html":"./src/templates/squire/squireToolbar.tpl.html","./ui/atomLoader.tpl.html":"./src/templates/ui/atomLoader.tpl.html","./ui/autoCompleteEmailsItem.tpl.html":"./src/templates/ui/autoCompleteEmailsItem.tpl.html","./ui/autocompleteEmail.tpl.html":"./src/templates/ui/autocompleteEmail.tpl.html","./ui/autocompleteEmails.tpl.html":"./src/templates/ui/autocompleteEmails.tpl.html","./ui/chooseLayoutBtns.tpl.html":"./src/templates/ui/chooseLayoutBtns.tpl.html","./ui/customCheckbox.tpl.html":"./src/templates/ui/customCheckbox.tpl.html","./ui/customRadio.tpl.html":"./src/templates/ui/customRadio.tpl.html","./ui/dateTimePicker.tpl.html":"./src/templates/ui/dateTimePicker.tpl.html","./ui/header/headerNoAuth.tpl.html":"./src/templates/ui/header/headerNoAuth.tpl.html","./ui/header/headerSecured.tpl.html":"./src/templates/ui/header/headerSecured.tpl.html","./ui/header/headerSecuredDesktop.tpl.html":"./src/templates/ui/header/headerSecuredDesktop.tpl.html","./ui/header/headerSecuredMobile.tpl.html":"./src/templates/ui/header/headerSecuredMobile.tpl.html","./ui/legends.tpl.html":"./src/templates/ui/legends.tpl.html","./ui/monthdayTimePicker.tpl.html":"./src/templates/ui/monthdayTimePicker.tpl.html","./ui/multiselect.tpl.html":"./src/templates/ui/multiselect.tpl.html","./ui/navigation/navigation.tpl.html":"./src/templates/ui/navigation/navigation.tpl.html","./ui/navigation/navigationBlackFriday.tpl.html":"./src/templates/ui/navigation/navigationBlackFriday.tpl.html","./ui/navigation/navigationReport.tpl.html":"./src/templates/ui/navigation/navigationReport.tpl.html","./ui/navigation/navigationUser.tpl.html":"./src/templates/ui/navigation/navigationUser.tpl.html","./ui/slider.tpl.html":"./src/templates/ui/slider.tpl.html","./ui/timePicker.tpl.html":"./src/templates/ui/timePicker.tpl.html","./ui/toolbarDesktop.tpl.html":"./src/templates/ui/toolbarDesktop.tpl.html","./ui/toolbarMobile.tpl.html":"./src/templates/ui/toolbarMobile.tpl.html","./ui/weekdayTimePicker.tpl.html":"./src/templates/ui/weekdayTimePicker.tpl.html","./user/addressesSection.tpl.html":"./src/templates/user/addressesSection.tpl.html","./user/addressesSelector.tpl.html":"./src/templates/user/addressesSelector.tpl.html","./user/defaultSignature.tpl.html":"./src/templates/user/defaultSignature.tpl.html","./user/displayNameSignature.tpl.html":"./src/templates/user/displayNameSignature.tpl.html","./user/humanVerification.tpl.html":"./src/templates/user/humanVerification.tpl.html","./user/identitySection.tpl.html":"./src/templates/user/identitySection.tpl.html","./user/pmSignatureToggle.tpl.html":"./src/templates/user/pmSignatureToggle.tpl.html","./user/signupCreationProcess.tpl.html":"./src/templates/user/signupCreationProcess.tpl.html","./user/signupHumanForm.html":"./src/templates/user/signupHumanForm.html","./user/signupHumanForm.tpl.html":"./src/templates/user/signupHumanForm.tpl.html","./user/signupPayForm.tpl.html":"./src/templates/user/signupPayForm.tpl.html","./user/signupUserForm.tpl.html":"./src/templates/user/signupUserForm.tpl.html","./user/usernameDomain.tpl.html":"./src/templates/user/usernameDomain.tpl.html","./user/usernamePassword.tpl.html":"./src/templates/user/usernamePassword.tpl.html","./views/account.tpl.html":"./src/templates/views/account.tpl.html","./views/appearance.tpl.html":"./src/templates/views/appearance.tpl.html","./views/contacts.tpl.html":"./src/templates/views/contacts.tpl.html","./views/dashboard.tpl.html":"./src/templates/views/dashboard.tpl.html","./views/domains.tpl.html":"./src/templates/views/domains.tpl.html","./views/invoices.tpl.html":"./src/templates/views/invoices.tpl.html","./views/keysView.tpl.html":"./src/templates/views/keysView.tpl.html","./views/labels.tpl.html":"./src/templates/views/labels.tpl.html","./views/login.tpl.html":"./src/templates/views/login.tpl.html","./views/members.tpl.html":"./src/templates/views/members.tpl.html","./views/message.print.tpl.html":"./src/templates/views/message.print.tpl.html","./views/outside.message.tpl.html":"./src/templates/views/outside.message.tpl.html","./views/outside.reply.tpl.html":"./src/templates/views/outside.reply.tpl.html","./views/outside.unlock.tpl.html":"./src/templates/views/outside.unlock.tpl.html","./views/payments.tpl.html":"./src/templates/views/payments.tpl.html","./views/pgp.tpl.html":"./src/templates/views/pgp.tpl.html","./views/reset-login-password.tpl.html":"./src/templates/views/reset-login-password.tpl.html","./views/security.tpl.html":"./src/templates/views/security.tpl.html","./views/setup.tpl.html":"./src/templates/views/setup.tpl.html","./views/signup.tpl.html":"./src/templates/views/signup.tpl.html","./views/support-message.tpl.html":"./src/templates/views/support-message.tpl.html","./views/unlock.tpl.html":"./src/templates/views/unlock.tpl.html","./vpn/changeVPNNameModal.tpl.html":"./src/templates/vpn/changeVPNNameModal.tpl.html","./vpn/changeVPNPasswordModal.tpl.html":"./src/templates/vpn/changeVPNPasswordModal.tpl.html","./vpn/openVpnSection.tpl.html":"./src/templates/vpn/openVpnSection.tpl.html","./vpn/vpnRessources.tpl.html":"./src/templates/vpn/vpnRessources.tpl.html","./vpn/vpnView.tpl.html":"./src/templates/vpn/vpnView.tpl.html"};function s(e){return a(o(e))}function o(e){var t=n[e];if(!(t+1))throw new Error("Cannot find module '"+e+"'.");return t}s.keys=function(){return Object.keys(n)},s.resolve=o,e.exports=s,s.id="./src/templates recursive \\.html$"},"./src/templates/address/addressKeysView.tpl.html":function(e,t){var a=window.angular,n="templates/address/addressKeysView.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_table addressKeysView-container" ng-class=displayMode> <table class="bordered absorbing"> <thead> <tr> <th data-display-mode=address class="key-size absorbing-column-half" translate-context=Title translate-comment="table heading" translate>Email</th> <th data-display-mode=user class="key-size absorbing-column-half" translate-context=Title translate-comment="table heading" translate>User</th> <th class="finger-print absorbing-column-half" translate-context=Title translate-comment="table heading" translate>Fingerprint</th> <th translate-context=Title translate-comment="table heading" translate>Key size</th> <th class="actions text-center" translate-context=Title translate-comment="table heading" translate>Download</th> </tr> </thead> <tbody> <tr ng-repeat-start="address in addresses | orderBy: \'order\' track by address.addressID"> <td> <span class=addressKeysView-toggle> <toggle-expand data-model=address></toggle-expand> </span> <span class="addressKeysView-email ellipsis" title="{{ address.email }}"><strong>{{ address.email }}</strong></span> </td> <td> <code>{{ address.fingerprint }}</code> </td> <td> {{ address.bitSize }} Bit <i class="fa fa-info-circle cursor-pointer" pt-tooltip-translate-context="address key bit size tooltip" pt-tooltip-translate="The ability to change key strength will be coming in a future ProtonMail release"></i> </td> <td class=text-center> <button data-display-mode=address class="pm_button link" ng-click="download(address.publicKey, address.email, \'public\')" translate-context=Action translate>Public key</button> <span data-display-mode=user translate translate-context=Action>None</span> </td> </tr> <tr class=hasTable ng-repeat-end ng-show="address.toggle === true && address.keys.length > 0"> <td colspan=5> <div class=pm_table> <table class=margin-top> <thead> <tr> <th class="finger-print absorbing-column-half" translate-context=Title translate-comment="table heading" translate>Fingerprint</th> <th class=key-size translate-context=Title translate-comment="table heading" translate>Key size</th> <th class=status translate-context=Title translate-comment="table heading" translate>Status</th> <th class="actions text-center" translate-context=Title translate-comment="table heading" translate>Actions</th> </tr> </thead> <tbody> <tr ng-repeat="key in address.keys"> <td> <code>{{ key.fingerprint }}</code> </td> <td> {{ key.bitSize }} Bit </td> <td> <span class="pm_badge primary" ng-show=$first translate translate-comment="key state badge">Primary</span> <span class="pm_badge success" ng-show=key.decrypted translate translate-comment="key state badge">Active</span> <span class="pm_badge error" ng-hide=key.decrypted translate translate-comment="key state badge">Inactive</span> </td> <td class=text-center> <button type=button class="pm_button link" ng-hide="key.decrypted || isSubUser" ng-click=reactivate(key) translate-context=Action translate>Reactivate</button> <span ng-show="key.decrypted || isSubUser" translate translate-context=Action>None</span> </td> </tr> </tbody> </table> </div> </td> </tr> </tbody> </table> </div> ')}])}e.exports=n},"./src/templates/address/setupAddressModal.tpl.html":function(e,t){var a=window.angular,n="templates/address/setupAddressModal.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal {{ctrl.class}}" role=dialog style=display:block> <form class=modal-dialog name=addressForm ng-submit=ctrl.submit() novalidate> <button type=button ng-click=ctrl.cancel() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <h4 class=modal-title translate translate-context=Title>Confirm address</h4> </div> <div class="modal-body pm_form"> <display-name-signature data-model=ctrl.model></display-name-signature> </div> </div> <div class="modal-footer text-right"> <button type=button class=pm_button ng-click=ctrl.cancel() translate translate-context=Action>Cancel</button> <button class="pm_button primary" translate translate-context=Action>Add</button> </div> </form> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/attachments/attendeeItem.tpl.html":function(e,t){var a=window.angular,n="templates/attachments/attendeeItem.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,"<span class=attendeeItem-container></span> ")}])}e.exports=n},"./src/templates/attachments/btnDownloadAttachments.tpl.html":function(e,t){var a=window.angular,n="templates/attachments/btnDownloadAttachments.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<a class=btnDownloadAttachments-container pt-tooltip-translate-context="Download attachments" pt-tooltip-translate="Download all"> <i class="fa fa-cog fa-spin btnDownloadAttachments-icon-loader"></i> <i class="fa fa-download btnDownloadAttachments-icon-download"></i> </a> ')}])}e.exports=n},"./src/templates/attachments/eventsAttachments.tpl.html":function(e,t){var a=window.angular,n="templates/attachments/eventsAttachments.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="eventsAttachments-container eventsAttachments-hidden"> <details class=eventsAttachments-details ng-repeat="event in model.events track by event.uid"> <summary class=eventsAttachments-summary> <i class="fa fa-calendar"></i> <span class=eventsAttachments-placeholder ng-if=!event.summary translate-context=Info translate>Attached Event</span> <span ng-if=event.summary> <strong>{{ event.summary }}</strong> / {{ ::dateFormat(event) }} </span> </summary> <div ng-if=event.summary class=eventsAttachments-details-wrapper> <table class=eventsAttachments-details-table> <tr ng-if=event.summary> <th translate translate-context=Info>Summary</th> <td> {{ ::event.summary }} <button class="pm_button link eventsAttachments-download-link" data-event-uid={{event.uid}}> <i class="fa fa-download btnDownloadAttachments-icon-download"></i> <span translate translate-context=Action>Download</span> </button> </td> </tr> <tr ng-if=event.description> <th translate translate-context=Info>Description</th> <td class=eventsAttachments-description ng-bind-html=::event.description></td> </tr> <tr> <th translate translate-context=Info>When</th> <td> {{ ::dateFormat(event, true) }} </td> </tr> <tr ng-if=event.organizer> <th translate translate-context=Info>Organizer</th> <td><attendee-item data-attendee="{{ ::event.organizer }}"></attendee-item></td> </tr> <tr ng-if=event.attendeesList.length> <th translate translate-context=Info>Attendees</th> <td> <ul> <li ng-repeat="attendee in event.attendeesList track by $id(attendee)"> <attendee-item data-attendee="{{ ::attendee }}"></attendee-item> </li> </ul> </td> </tr> <tr ng-if=event.location> <th translate translate-context=Info>Location</th> <td>{{ ::event.location }}</td> </tr> </table> </div> </details> </div> ')}])}e.exports=n},"./src/templates/authentication/loginForm.tpl.html":function(e,t){var a=window.angular,n="templates/authentication/loginForm.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<form method=post id=pm_login name=loginForm class="pm_panel alt pm_form loginForm-container" novalidate role=form autocomplete=on ng-submit=enterLoginPassword($event) action=login> <img src=assets/img/logo.png height=20 alt=ProtonMail class=logo /> <h4 class="text-center margin-bottom"> <i class="fa fa-user title-icon"></i> <span translate-context=Title translate>User login</span> </h4> <div class="alert alert-danger" id=error521 ng-if=error>{{ error.message }}</div> <input autofocus autocapitalize=off autocorrect=off type=text ng-model=username tabindex=1 id=username name=username placeholder-translate-context="login form" placeholder-translate=Username class="margin loginForm-input-username" required=""/> <password class="margin loginForm-input-password" data-id=password data-name=password data-value=password data-tabindex=2 data-form=loginForm placeholder-translate=Password></password> <div class=loginForm-actions> <div class=loginForm-actions-column> <button id=login_btn type=submit tabindex=3 class="loginForm-actions-main pm_button primary pull-right loginForm-btn-submit" ng-disabled=networkActivity.loading() translate-context=Action translate>Login</button> <div class=loginForm-actions-row> <button class=loginForm-btn-help ng-click=displayHelpModal() type=button translate-context=Action translate-comment="link for login help" translate>Need help?</button> <signup-link class="loginForm-link-signup loginForm-actions-right"></signup-link> </div> </div> </div> <input type=hidden id=hashed_pw name=hashed_pw /> </form> ')}])}e.exports=n},"./src/templates/authentication/loginTwoFactorForm.tpl.html":function(e,t){var a=window.angular,n="templates/authentication/loginTwoFactorForm.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<form method=post id=pm_loginTwoFactor name=loginTwoFactorForm class="pm_panel alt pm_form" novalidate role=form autocomplete=off ng-submit=enterTwoFactor($event) action=loginTwoFactor> <img src=assets/img/logo.png height=20 alt=ProtonMail class=logo /> <h4 class="text-center margin-bottom"> <i class="fa fa-user title-icon"></i> <span translate-context=Title translate>Two-Factor Authentication</span> </h4> <div class="alert alert-danger" id=error521 ng-if=error>{{ error.message }}</div> <div class=margin> <two-fa-field ng-model=twoFactorCode autofocus tabindex=2 id=twoFactorCode name=twoFactorCode placeholder-translate="Two-factor passcode"></two-fa-field> </div> <div class=loginForm-actions> <div class=loginForm-actions-column> <button id=login_btn_2fa type=submit tabindex=3 class="loginForm-actions-main pm_button primary pull-right" ng-disabled="networkActivity.loading() || loginTwoFactorForm.$invalid" translate-context=Action translate>Login</button> <a class="pm_button link pull-left" ng-click=displayHelpModal() translate-context=Action translate-comment="link for login help" translate>Need help?</a> </div> </div> </form> ')}])}e.exports=n},"./src/templates/authentication/modals/helpLoginModal.tpl.html":function(e,t){var a=window.angular,n="templates/authentication/modals/helpLoginModal.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal small {{this.class}}" role=dialog style=display:block> <div class="modal-dialog modal-sm"> <button type=button ng-click=ctrl.cancel() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <h3 class=modal-title translate translate-context=Title>Help</h3> </div> <div class="modal-body text-center"> <p> <a class="pm_button primary" ui-sref=support.reset-password ng-click=ctrl.cancel() translate translate-context=Action>Reset password</a> </p> <p> <a href=https://protonmail.com/username target=_self class="pm_button primary" translate translate-context=Action>Forgot username?</a> </p> <p> <a href=https://protonmail.com/support/knowledge-base/common-login-problems/ target=_blank class="pm_button primary" translate translate-context=Action>Common login problems</a> </p> <p> <a href=https://protonmail.com/support target=_blank class="pm_button primary" translate translate-context=Action>Email our support team</a> </p> </div> </div> <div class="modal-footer text-right"> <a id=cancelModalBtn class=pm_button ng-click=ctrl.cancel() translate translate-context=Action>Cancel</a> </div> </div> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/authentication/modals/loginPassword.tpl.html":function(e,t){var a=window.angular,n="templates/authentication/modals/loginPassword.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal small very-important {{ctrl.class}}" role=dialog style=display:block> <form method=post class=modal-dialog ng-submit="passwordModalForm.$valid && ctrl.submit()" name=passwordModalForm novalidate> <button type=button ng-click=ctrl.cancel() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <h4 class=modal-title translate translate-context=Title>Sign in again to continue</h4> </div> <div class="modal-body pm_form"> <div ng-if="ctrl.userPasswordMode === 1"> <label for=loginPassword translate>Enter your current password:</label> <input type=password autofocus ng-model=$parent.ctrl.loginPassword id=loginPassword placeholder-translate=Password name=loginPassword required/> </div> <div ng-if="ctrl.userPasswordMode === 2"> <label for=loginPassword translate>Enter your login password:</label> <input type=password autofocus ng-model=$parent.ctrl.loginPassword id=loginPassword placeholder-translate="Login password" name=loginPassword required/> </div> <div ng-messages=passwordModalForm.loginPassword.$error class=text-red ng-show="passwordModalForm.loginPassword.$touched || passwordModalForm.$submitted"> <p ng-message=required translate-context=Error translate>Field required</p> </div> <div ng-hide="(passwordModalForm.loginPassword.$touched || passwordModalForm.$submitted) && passwordModalForm.loginPassword.$invalid"> <p> </p> </div> <div ng-if=ctrl.hasTwoFactor> <label for=twoFactorCode translate>Enter two-factor passcode:</label> <two-fa-field ng-model=$parent.ctrl.twoFactorCode autofocus id=twoFactorCode name=twoFactorCode placeholder-translate="Two-factor passcode" placeholder-translate-context="Two-factor code field"></two-fa-field> <div ng-messages=passwordModalForm.twoFactorCode.$error class=text-red ng-show="passwordModalForm.twoFactorCode.$touched || passwordModalForm.$submitted"> <p ng-message=required translate-context=Error translate>Field required</p> <p ng-message=minlength translate-context=Error translate>The code must contain at least 6 characters</p> <p ng-message=maxlength translate-context=Error translate>The code is too long, max 8 characters</p> </div> <div ng-hide="(passwordModalForm.twoFactorCode.$touched || passwordModalForm.$submitted) && passwordModalForm.twoFactorCode.$invalid"> <p> </p> </div> </div> </div> </div> <div class="modal-footer text-right"> <button type=button class="pm_button pull-left" ng-click=ctrl.cancel() translate translate-context=Action>Cancel</button> <button type=submit class="pm_button primary" translate translate-context=Action>Submit</button> </div> </form> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/authentication/modals/oldPasswordModal.tpl.html":function(e,t){var a=window.angular,n="templates/authentication/modals/oldPasswordModal.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal small very-important {{ctrl.class}}" role=dialog style=display:block> <form class=modal-dialog ng-submit="passwordModalForm.$valid && ctrl.submit()" name=passwordModalForm novalidate> <button type=button ng-click=ctrl.cancel() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <h4 class=modal-title translate-context=Title translate>Key password</h4> </div> <div class="modal-body pm_form"> <div class=multi-line-label> <label ng-if="ctrl.passwordMode === 1" for=password translate translate-context="Label in the modal which ask the user to enter his password or mailbox password">Enter your previous mailbox password from before your account was reset:</label> <label ng-if="ctrl.passwordMode === 2" for=password translate translate-context="Label in the modal which ask the user to enter his password or mailbox password">Enter your previous password from before your account was reset:</label> </div> <input type=password autofocus ng-model=ctrl.password id=password placeholder-translate=Password name=password required/> <div ng-messages=passwordModalForm.password.$error class=text-red> <p ng-message=required translate-context=Error translate>Field required</p> </div> </div> </div> <div class="modal-footer text-right"> <button type=button class="pm_button pull-left" ng-click=ctrl.cancel() translate-context=Action translate>Cancel</button> <button class="pm_button primary" translate-context=Action translate>Submit</button> </div> </form> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/authentication/twoFaField.tpl.html":function(e,t){var a=window.angular,n="templates/authentication/twoFaField.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,"<input autocapitalize=off autocorrect=off autocomplete=off class=TwoFA-input type=text ng-minlength=6 ng-maxlength=8 required> ")}])}e.exports=n},"./src/templates/autoresponder/autoresponder.tpl.html":function(e,t){var a=window.angular,n="templates/autoresponder/autoresponder.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=autoresponder-container> <section class=pm_form ng-if=!mock> <p class="alert alert-info" translate-context=Info translate>Automatic replies can respond automatically to incoming messages (such as when you are on vacation and can\'t respond).</p> </section> <form name=autoresponderForm novalidate> <div class="pm_grid no-padding no-margin"> <autoresponder-time-section data-mock="{{ ::mock }}" data-form=autoresponderForm></autoresponder-time-section> <section class="pm_form col-1-2" ng-if=model.isEnabled> <div class=clearfix> <div class=col-1-4> <label for=autoresponder-message translate-context=Label translate>Response</label> </div> <div class=col-3-4> <autoresponder-message data-message=model.message data-disabled="{{ ::mock }}"></autoresponder-message> </div> </div> </section> </div> <div class="pm_grid no-padding no-margin"> <div class="col-1-8 desktopOnly"> </div> <div class=col-7-8> <button class="pm_button primary" id=autoresponder-save ng-if=model.isEnabled translate-context="Action autoresponder" translate ng-disabled="!isValid() || mock || submitting" type=submit>Save</button> <a href=https://protonmail.com/support/knowledge-base/autoresponder/ target=_blank class="pm_button link" translate-context=Link translate>Learn more</a> </div> </div> </form> </div> ')}])}e.exports=n},"./src/templates/autoresponder/autoresponderMessage.tpl.html":function(e,t){var a=window.angular,n="templates/autoresponder/autoresponderMessage.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=autoresponderMessageContainer ng-class="{\n autoresponderHalfFull: message.length > halfMessageLength,\n autoresponderFull: message.length >= maxMessageLength,\n autoresponderEmpty: isEmpty(message)\n }"> <div class=autoresponderMessageDisabler ng-if=disabled></div> <squire id=autoresponderMessage class="form-control no-resize error_tooltip" ng-class="message.length >= maxMessageLength ? \'pm_invalid\': \'\'" allow-data-uri=true data-value=message data-type-content=OOF-Message></squire> <div class=autoresponderEmptyMessage translate translate-context="Autoresponder empty"> The auto reply message cannot be empty. </div> <div class="autoresponderCharacters autoresponderLengthWarning"> <span class=autoresponderCharacterCount>{{message.length}}</span>/{{maxMessageLength - 1}} <span translate-context="Settings autoresponder, how many bites inside the message" translate>bytes used</span> </div> <div class="autoresponderCharacters autoresponderMessageTooLong"> <span translate-context="The message contains too many bytes, only xxx allowed (you are using xxx characters). Part 1/3" translate>The message contains too many bytes, only </span> {{maxMessageLength - 1}} <span translate-context="The message contains too many bytes, only xxx allowed (you are using xxx characters). Part 2/3" translate> allowed (you are using </span> <span class=autoresponderCharacterCount> {{message.length}} </span><span translate-context="The message contains too many bytes, only xxx allowed (you are using xxx characters). Part 3/3" translate> bytes).</span> </div> </div> ')}])}e.exports=n},"./src/templates/autoresponder/autoresponderTimePicker.tpl.html":function(e,t){var a=window.angular,n="templates/autoresponder/autoresponderTimePicker.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=col-3-4> <date-time-picker ng-if="repeat === constants.FIXED_INTERVAL" data-date-picker-key="{{ ::datePickerKey }}" data-label-id="{{ ::labelId }}" data-timestamp="{{ ::timestamp }}" data-zone="{{ ::zone }}" data-disable-input="{{ ::disableInput }}" data-form=form></date-time-picker> <div class="pm_grid no-padding no-margin datetimepicker" ng-if="repeat === constants.DAILY"> <div class=col-1-2> <time-picker data-event-key="{{ ::datePickerKey }}" ng-model=timestamp></time-picker> </div> <div class="col-1-1 text-red" ng-messages=form[datePickerKey].$error> <p ng-message=required translate-context="Error input" translate> Please enter a valid time. </p> </div> </div> <weekday-time-picker ng-if="repeat === constants.WEEKLY" data-date-picker-key="{{ ::datePickerKey }}" data-label-id="{{ ::labelId }}" data-timestamp="{{ ::timestamp }}" data-disable-input="{{ ::disableInput }}" data-form=form></weekday-time-picker> <monthday-time-picker ng-if="repeat === constants.MONTHLY" data-date-picker-key="{{ ::datePickerKey }}" data-label-id="{{ ::labelId }}" data-timestamp="{{ ::timestamp }}" data-disable-input="{{ ::disableInput }}" data-form=form></monthday-time-picker> </div> ')}])}e.exports=n},"./src/templates/autoresponder/autoresponderTimeSection.tpl.html":function(e,t){var a=window.angular,n="templates/autoresponder/autoresponderTimeSection.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<section class="pm_form col-1-2"> <div class=clearfix> <div class=col-1-4> <label for=enable translate-context=Label translate>Enable</label> </div> <div class=col-3-4> <toggle ng-disabled=mock name=autoresponder.toggle status=model.isEnabled on=ON off=OFF ng-if=!mock></toggle> </div> </div> <div class=clearfix ng-if=model.isEnabled> <div class=col-1-4> <label for=select-duration translate-context=Label translate>Duration</label> </div> <div class=col-3-4> <div class="pm_grid no-padding no-margin"> <div class=col-1-2> <div class=pm_select> <durationselect data-repeat="{{ ::model.repeat }}" data-disable-input="{{ ::mock }}"></durationselect> <i class="fa fa-angle-down"></i> </div> </div> </div> <p class=help ng-if="model.repeat === constants.FOREVER"> <i class="fa fa-info-circle ng-scope"></i> <span translate-context="Auto-reply duration description" translate> Auto-reply is active until you turn it off. </span> </p> <p class=help ng-if="model.repeat === constants.FIXED_INTERVAL"> <i class="fa fa-info-circle ng-scope"></i> <span translate-context="Auto-reply duration description" translate> Auto-reply is active from the start time to the end time. </span> </p> <p class=help ng-if="model.repeat === constants.DAILY"> <i class="fa fa-info-circle ng-scope"></i> <span translate-context="Auto-reply duration description" translate> Auto-reply is always active on the days of the week you select, between the selected hours. </span> </p> <p class=help ng-if="model.repeat === constants.WEEKLY"> <i class="fa fa-info-circle ng-scope"></i> <span translate-context="Auto-reply duration description" translate> Auto-reply is active each week between the selected start and end time. </span> </p> <p class=help ng-if="model.repeat === constants.MONTHLY"> <i class="fa fa-info-circle ng-scope"></i> <span translate-context="Auto-reply duration description" translate> Auto-reply is active each month between the selected start and end time. </span> </p> </div> </div> <div class=clearfix ng-if="model.repeat === constants.DAILY && model.isEnabled"> <div class=col-1-4> <label translate-context=Label translate>Days</label> </div> <div class=col-3-4> <multiselect name=autoresponder.daysSelected id=enabledDays data-options=days data-selected=model.daysSelected data-disabled="{{ ::mock }}"></multiselect> </div> </div> <div class=clearfix ng-if="model.repeat !== constants.FOREVER && model.isEnabled"> <div class=col-1-4> <label translate-context=Label translate for=startTime>Start time</label> </div> <autoresponder-time-picker data-date-picker-key=datetimepickerStartTime id=datetimepickerStartTime data-label-id=startTime data-repeat="{{ ::model.repeat }}" data-zone="{{ ::model.zone }}" data-timestamp="{{ ::model.startTime }}" data-disable-input="{{ ::mock }}" data-form=form></autoresponder-time-picker> </div> <div class=clearfix ng-if="model.repeat !== constants.FOREVER && model.isEnabled"> <div class=col-1-4> <label translate-context=Label translate for=endTime>End time</label> </div> <autoresponder-time-picker data-date-picker-key=datetimepickerEndTime id=datetimepickerEndTime data-label-id=endTime data-repeat="{{ ::model.repeat }}" data-zone="{{ ::model.zone }}" data-timestamp="{{ ::model.endTime }}" data-disable-input="{{ ::mock }}" data-form=form></autoresponder-time-picker> </div> <div class=clearfix ng-if="model.repeat !== constants.FOREVER && model.isEnabled"> <div class=col-1-4> <label for=time-zone translate-context=Label translate>Time zone</label> </div> <div class=col-3-4> <div class="pm_grid no-padding no-margin"> <div class=col-1-2> <div class=pm_select> <zoneselect data-zone="{{ ::model.zone }}" data-disable-input="{{ ::mock }}"></zoneselect> <i class="fa fa-angle-down"></i> </div> </div> </div> </div> </div> <div class="clearfix desktopOnly"> </div> </section> ')}])}e.exports=n},"./src/templates/autoresponder/autoresponderView.tpl.html":function(e,t){var a=window.angular,n="templates/autoresponder/autoresponderView.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=autoresponderViewContainer id=pm_settings> <div class="settings autoresponderView"> <div class=row> <header-block class=autoresponderHeader> <h2 class=settingsVpn-title-resources translate translate-context=Title>Automatic Replies</h2> </header-block> <p ng-if=isFree class="alert alert-info" translate translate-context=Translate>Automatic replies is a paid feature. Please <a ui-sref="secured.dashboard({scroll: true})">upgrade</a> to a paid account to use this feature.</p> <autoresponder data-mock="{{ ::isFree }}"></autoresponder> </div> </div> </div> ')}])}e.exports=n},"./src/templates/autoresponder/durationselect.tpl.html":function(e,t){var a=window.angular,n="templates/autoresponder/durationselect.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<select id=select-duration name=selectDuration ng-options="option.label for option in frequencies track by option.value" ng-model=repeat> </select> ')}])}e.exports=n},"./src/templates/autoresponder/subjectPrefix.tpl.html":function(e,t){var a=window.angular,n="templates/autoresponder/subjectPrefix.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,"<input id=subject-prefix name=subject-prefix type=text placeholder-translate=auto maxlength=30> ")}])}e.exports=n},"./src/templates/blackFriday/blackFridayFree.tpl.html":function(e,t){var a=window.angular,n="templates/blackFriday/blackFridayFree.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=blackFridayFree-container> <div class=blackFridayFree-plans> <div class="blackFridayFree-plan blackFridayFree-mail-plan"> <i class=blackFridayFree-tag><span>-33%</span> <span>off</span></i> <h3 class=blackFridayFree-title translate-context=Title translate>ProtonMail Plus 2-year plan</h3> <black-friday-price data-amount=79 data-strike=120 data-currency=ctrl.currency></black-friday-price> <p translate-context=Info translate>ProtonMail Plus adds a number of powerful features to your secure inbox: 5GB storage, 5 extra addresses, Filters, Folders, Labels, IMAP/SMTP support (beta), use your own domain name.</p> <button type=button ng-disabled=!ctrl.loaded class="pm_button primary blackFridayFree-buy" ng-click="ctrl.buy(\'plus\')" translate-context=Action translate>Buy</button> </div> <div class="blackFridayFree-plan blackFridayFree-vpn-plan"> <i class=blackFridayFree-tag><span>-33%</span> <span>off</span></i> <h3 class=blackFridayFree-title translate-context=Title translate>ProtonVPN Plus 2-year plan</h3> <black-friday-price data-amount=159 data-strike=240 data-currency=ctrl.currency></black-friday-price> <p translate-context=Info translate>ProtonVPN encrypts your internet connection, ensuring your online activity stays private. 100+ servers in 14 countries. Secure core network, Tor integration, protect up to 5 devices.</p> <button type=button ng-disabled=!ctrl.loaded class="pm_button primary blackFridayFree-buy" ng-click="ctrl.buy(\'vpnplus\')" translate-context=Action translate>Buy</button> </div> <div class="blackFridayFree-plan blackFridayFree-mail-vpn-plan"> <i class=blackFridayFree-tag><span>-45%</span> <span>off</span></i> <h3 class=blackFridayFree-title translate-context=Title translate>ProtonMail + VPN Plus 2-year plan</h3> <black-friday-price data-amount=192 data-strike=360 data-currency=ctrl.currency></black-friday-price> <p translate-context=Info translate>The ultimate internet privacy package, combining the most popular ProtonMail and ProtonVPN plans. By buying both together with our special 2-year plan, you can save 45% off of the regular monthly price.</p> <button type=button ng-disabled=!ctrl.loaded class="pm_button primary blackFridayFree-buy" ng-click="ctrl.buy(\'plus+vpnplus\')" translate-context=Action translate>Buy</button> </div> </div> <footer class=blackFridayFree-footer> <button type=button class="blackFridayFree-dropdown-currency pm_button link" dropdown translate-context=Dropdown translate>Change currency <i class="fa fa-caret-down"></i></button> <ul class="pm_dropdown blackFridayFree-currencies"> <li><button type=button ng-click="ctrl.changeCurrency(\'EUR\')">EUR</button></li> <li><button type=button ng-click="ctrl.changeCurrency(\'USD\')">USD</button></li> <li><button type=button ng-click="ctrl.changeCurrency(\'CHF\')">CHF</button></li> </ul> <button type=button class="pm_button link blackFridayFree-dashboard" ng-click=ctrl.dashboard() translate-context=Action translate>For custom 2-year plans, click here</button> </footer> </div>')}])}e.exports=n},"./src/templates/blackFriday/blackFridayModal.tpl.html":function(e,t){var a=window.angular,n="templates/blackFriday/blackFridayModal.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal blackFridayModal {{ctrl.class}}" role=dialog style=display:block> <div class=modal-dialog> <button type=button ng-click=ctrl.close() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <h3 class=modal-title translate-context=Title translate>Black Friday Offer</h3> </div> <div class=modal-body> <p class=blackFriday-intro translate-context=Info translate>For a strictly limited period between Black Friday and Cyber Monday (November 24-27), we are having the first ever sale in ProtonMail\'s history! For these 4 days only, it is possible to get up to 45% off regular price for ProtonMail and ProtonVPN with our special 2-year plans. Once subscribed to this promotion, you keep the discount as long as your subscription is active.</p> <black-friday-free ng-if=ctrl.isFreeUser></black-friday-free> <black-friday-paid ng-if=ctrl.isPaidUser></black-friday-paid> <p class="blackFriday-end text-center" translate-context=Info translate>ProtonMail is entirely community funded as we don\'t sell ads or abuse your privacy. Your support allows us to continue to improve ProtonMail and make the Internet a better place.</p> </div> </div> </div> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/blackFriday/blackFridayPaid.tpl.html":function(e,t){var a=window.angular,n="templates/blackFriday/blackFridayPaid.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=blackFridayPaid-container> <img class="blackFridayPaid-banner notMobile" src=/assets/sale/blackFriday.jpg alt="Promo banner"> <img class="blackFridayPaid-banner mobileOnly" src=/assets/sale/blackFriday-mobile.jpg alt="Promo banner"> <ul class=blackFridayPaid-actions> <li> <button type=button ng-disabled=!ctrl.loaded class="blackFridayPaid-switch-button pm_button primary" ng-click=ctrl.buy() translate-context=Action translate>Switch current subscription to a 2-year plan</button> </li> <li> <button type=button class="blackFridayPaid-get-button pm_button link" ng-click=ctrl.dashboard() translate-context=Action translate>Get a new 2-year plan</button> </li> <ul> </ul></ul></div> ')}])}e.exports=n},"./src/templates/blackFriday/blackFridayPrice.tpl.html":function(e,t){var a=window.angular,n="templates/blackFriday/blackFridayPrice.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,"<div class=blackFridayPrice-container> <section class=blackFridayPrice-top> <strong class=blackFridayPrice-amount>{{ amount | currency: currency }}</strong> <s class=blackFridayPrice-strike>{{ strike | currency: currency }}</s> </section> <small class=blackFridayPrice-monthly>{{ amount / 24 | currency: currency }}/mo</small> </div>")}])}e.exports=n},"./src/templates/bridge/bridgeFreePanel.tpl.html":function(e,t){var a=window.angular,n="templates/bridge/bridgeFreePanel.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=bridgeFreePanel-container> <button type=button class="bridgeFreePanel-btn pm_button primary">Activate</button> </div>')}])}e.exports=n},"./src/templates/bridge/bridgePaidPanel.tpl.html":function(e,t){var a=window.angular,n="templates/bridge/bridgePaidPanel.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=bridgePaidPanel-container> <p class="alert alert-info" translate-context=Info translate>ProtonMail supports IMAP/SMTP via the ProtonMail Bridge application. Thunderbird, Microsoft Outlook, and Apple Mail are officially supported on both Windows and MacOS.</p> <a class="pm_button primary" href=https://protonmail.com/bridge/ target=_blank translate-context=Link translate>Download bridge</a> </div>')}])}e.exports=n},"./src/templates/bridge/bridgeView.tpl.html":function(e,t){var a=window.angular,n="templates/bridge/bridgeView.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div id=pm_settings> <div class=settings> <div class=row> <div class="setting pm_form full"> <header-block class=settingsLabels-header-bridge> <h2 class=settingsLabels-title-bridge translate-context=Title translate>IMAP/SMTP</h2> </header-block> <bridge-free-panel ng-if=isFree></bridge-free-panel> <bridge-paid-panel ng-if=!isFree></bridge-paid-panel> </div> </div> </div> </div> ')}])}e.exports=n},"./src/templates/bugReport/newBugReport.tpl.html":function(e,t){var a=window.angular,n="templates/bugReport/newBugReport.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<button type=button class=newBugReport-container> <div class=newBugReport-wrapper> <i class="newBugReport-icon fa fa-bug sidebarApp-icon"></i> <span translate-context=Action translate>Report bug</span> </div> </button> ')}])}e.exports=n},"./src/templates/command/autocompleteCommand.tpl.html":function(e,t){var a=window.angular,n="templates/command/autocompleteCommand.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=autocompleteCommand-container> <div class=autocomplete-container> <mark class=autocompleteCommand-scope>{{mode.value}}</mark> <input id=autocompleteCommand name=autocompleteCommand placeholder-translate="Type a command" type=text ng-model=value autocomplete=off spellcheck=false autocapitalize=off class=autocompleteCommand-input> </div> <ul class=autocompleteEmails-autocomplete></ul> </div> ')}])}e.exports=n},"./src/templates/command/commandPalette.tpl.html":function(e,t){var a=window.angular,n="templates/command/commandPalette.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<form class=commandPalette-container novalidate ng-class="{ \'commandPalette-visible\': isVisible }"> <button type=reset class="commandPalette-btn-close fa fa-close"></button> <div class=commandPalette-field> <label for="" class=commandPalette-label>Command</label> <autocomplete-command data-is-visible=isVisible class=commandPalette-input-command></autocomplete-command> </div> </form>')}])}e.exports=n},"./src/templates/composer/composerEncrypt.tpl.html":function(e,t){var a=window.angular,n="templates/composer/composerEncrypt.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<form class="options composerEncrypt-container pm_form pm_grid" name=encryptForm> <header class=composerEncrypt-header> <h3 translate translate-context=Title>Encrypt for non-ProtonMail users</h3> <a href=https://protonmail.com/support/knowledge-base/encrypt-for-outside-users/ target=_blank> <i class="fa fa-info-circle"></i> </a> </header> <div ng-class="{\'has-error\': encryptForm.outsidePw.$touched && encryptForm.outsidePw.$error.required}" class=clearfix> <label for=outsidePw class="text-muted col-1-3" translate translate-context=Title>Message Password</label> <div class=col-2-3> <input style=display:none type=password name=foilautofill /> <input type=password autocomplete=off name=outsidePw id=outsidePw ng-model=model.password placeholder-translate=Password class=composer-options-input required> </div> </div> <div ng-class="{\'has-error\': encryptForm.outsidePwConfirm.$touched && encryptForm.outsidePwConfirm.$error.required}" class=clearfix> <label for=outsidePwConfirm class="text-muted col-1-3" translate translate-context=Title>Confirm Password</label> <div class=col-2-3> <input style=display:none type=password name=foilautofill> <input type=password autocomplete=off name=outsidePwConfirm id=outsidePwConfirm ng-model=model.confirm placeholder-translate="Confirm password" class=composer-options-input required> </div> </div> <div class=clearfix> <label for=outsidePwHint class="text-muted col-1-3"> <span translate translate-context=Title>Password Hint</span> (<em>Optional</em>) </label> <div class=col-2-3> <input type=text class=composer-options-input autocomplete=off name=outsidePwHint id=outsidePwHint ng-model=model.hint placeholder-translate=Hint> </div> </div> <p class=clear> <i class=help-block translate translate-context=Info>Encrypted messages to non-ProtonMail recipients will expire in 28 days unless a shorter expiration time is set.</i> </p> <footer class=text-right> <button type=button class="pm_button pull-left mobileFull composer-options-btn-cancel composerEncrypt-btn-cancel" translate translate-context=Action>Cancel</button> <button type=submit class="pm_button primary mobileFull composer-options-btn-submit" ng-disabled=encryptForm.$invalid translate translate-context=Action>Set</button> </footer> </form> ')}])}e.exports=n},"./src/templates/composer/composerExpiration.tpl.html":function(e,t){var a=window.angular,n="templates/composer/composerExpiration.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<form class=composerExpiration-container name=expirationForm> <header class=composerExpiration-header> <h3 translate translate-context=Title>Expiration time</h3> <a href=https://protonmail.com/support/knowledge-base/expiration/ target=_blank> <i class="fa fa-info-circle"></i> </a> </header> <p class="alert alert-info" translate translate-context=Info>This message will expire in</p> <div class="pm_form alert text-center composerExpiration-fields-container"> <div class=composerExpiration-field-weeks> <div class=pm_select> <select name=weeks id=weeks class=composer-options-select-week ng-model=model.weeks ng-options="option.label for option in options.week track by option.label"></select> <i class="fa fa-angle-down"></i> </div> <label translate translate-context=Delay for=weeks>Weeks</label> </div> <div class=composerExpiration-field-days> <div class=pm_select> <select name=days id=days class=composer-options-select-day ng-model=model.days ng-options="option.label for option in options.day track by option.label"></select> <i class="fa fa-angle-down"></i> </div> <label translate translate-context=Delay for=days>Days</label> </div> <div class=composerExpiration-field-hours> <div class=pm_select> <select name=hours id=hours class=composer-options-select-hour ng-model=model.hours ng-options="option.label for option in options.hour track by option.label"></select> <i class="fa fa-angle-down"></i> </div> <label translate translate-context=Delay for=hours>Hours</label> </div> </div> <footer class=text-right> <button type=button class="pm_button pull-left mobileFull composer-options-btn-cancel composerExpiration-btn-cancel" translate translate-context=Action>Cancel</button> <button class="pm_button primary mobileFull composer-options-btn-submit" translate translate-context=Action>Set</button> </footer> </form> ')}])}e.exports=n},"./src/templates/contact/contactAddressInput.tpl.html":function(e,t){var a=window.angular,n="templates/contact/contactAddressInput.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=contactAddressInput-container> <textarea name=default tabindex=2 ng-model=model.default class="contactAddressInput-default contactItem-input-with-icon" placeholder-translate=Address></textarea> <label class="contactAddressInput-label contactAddressInput-post-box-label" translate-context="Label for address input in contact details" translate>Post office box</label> <input type=text name=postBox ng-model=model.postBox class="contactAddressInput-field contactAddressInput-post-box" placeholder-translate="Post office box"> <label class="contactAddressInput-label contactAddressInput-extended-label" translate-context="Label for address input in contact details" translate>Extended address (apartment or suite number)</label> <input type=text name=extended tabindex=2 ng-model=model.extended class="contactAddressInput-field contactAddressInput-extended" placeholder-translate="Extended address (apartment or suite number)"> <label class=contactAddressInput-label translate-context="Label for address input in contact details" translate>Street address</label> <textarea name=street tabindex=2 ng-model=model.street class="contactAddressInput-field contactAddressInput-street" placeholder-translate="Street address"></textarea> <label class=contactAddressInput-label translate-context="Label for address input in contact details" translate>City</label> <input type=text name=locality tabindex=2 ng-model=model.locality class="contactAddressInput-field contactAddressInput-locality" placeholder-translate=City> <div class=contactAddressInput-grid> <div class=contactAddressInput-col> <label class=contactAddressInput-label translate-context="Label for address input in contact details" translate>State/Region</label> <input type=text name=region tabindex=2 ng-model=model.region class="contactAddressInput-field contactAddressInput-region" placeholder-translate=State/Region> </div> <div class=contactAddressInput-col> <label class=contactAddressInput-label translate-context="Label for address input in contact details" translate>Postal code</label> <input type=text name=postalCode tabindex=2 ng-model=model.postalCode class="contactAddressInput-field contactAddressInput-postal-code" placeholder-translate="Postal code"> </div> </div> <label class=contactAddressInput-label translate-context="Label for address input in contact details" translate>Country</label> <input type=text name=country tabindex=2 ng-model=model.country class="contactAddressInput-field contactAddressInput-country" placeholder-translate=Country> </div> ')}])}e.exports=n},"./src/templates/contact/contactArrowsSort.tpl.html":function(e,t){var a=window.angular,n="templates/contact/contactArrowsSort.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=contactArrowsSort-container> <i class="fa fa-sort-desc"></i> <i class="fa fa-sort-asc"></i> </div> ')}])}e.exports=n},"./src/templates/contact/contactBeforeToLeaveModal.tpl.html":function(e,t){var a=window.angular,n="templates/contact/contactBeforeToLeaveModal.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal small {{ctrl.class}}" role=dialog style=display:block> <form name=beforeForm class=modal-dialog ng-submit=ctrl.save() novalidate> <button type=button ng-click=ctrl.cancel() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <h4 class=modal-title translate-context="Title for contact modal" translate>Save Changes?</h4> </div> <div class=modal-body> <div class="alert no-margin-bottom" translate-context="Message for contact modal" translate>There are unsaved changes to the contact you are editing. Do you want to save changes?\'</div> </div> </div> <div class="modal-footer text-right"> <button type=button class=pm_button ng-click=ctrl.discard() translate-context="Action to not save contact details and switch to the new page" translate>Discard</button> <button autofocus class="pm_button primary" translate-context="Action to save contact details and switch to the new page" translate>Save</button> </div> </form> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/contact/contactClear.tpl.html":function(e,t){var a=window.angular,n="templates/contact/contactClear.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<section class=contactClear-container> <section class=contactDetails-fields-container> <legend class=contactDetails-fields-ico> <i class="fa fa-check contactEncrypted-signed-icon" pt-tooltip-translate="Digital signature verified"></i> </legend> <contact-error></contact-error> <contact-item data-form=contactForm data-model=model data-state=state data-datas="get(\'Name\')" data-type=Name></contact-item> <contact-item data-form=contactForm data-model=model data-state=state data-datas="get(\'Emails\')" data-type=Emails></contact-item> </section> </section> ')}])}e.exports=n},"./src/templates/contact/contactDetails.tpl.html":function(e,t){var a=window.angular,n="templates/contact/contactDetails.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<form class=contactDetails-container name=contactForm novalidate> <nav class=contactDetails-nav> <h1 class=contactDetails-nav-title translate translate-context=Title>Contact Details</h1> <div class=contactDetails-nav-left> <button ng-hide=contactForm.$dirty type=button class="contactDetails-download pm_button fa fa-download" data-action=downloadContact pt-tooltip-translate="Export contact in vCard format"></button> <button ng-disabled=contactForm.$pristine class="save pm_button primary main" translate-context=Action translate-comment="contact details" translate>Save</button> </div> <div class="contactDetails-nav-right lowResolution"> <button type=button class="contactDetails-back pm_button fa fa-arrow-left" data-action=back></button> <button type=button class="contactDetails-download notMobile pm_button fa fa-download" data-action=downloadContact pt-tooltip-translate="Export contact in vCard format"></button> <button type=button class="contactDetails-delete pm_button fa fa-trash" data-action=deleteContact></button> <button ng-disabled=contactForm.$pristine class="save pm_button primary main fa fa-save"></button> </div> </nav> <div class=contactDetails-details tabindex=1> <contact-clear class=contactDetails-clear></contact-clear> <contact-encrypted class=contactDetails-encrypted></contact-encrypted> </div> </form> ')}])}e.exports=n},"./src/templates/contact/contactDisplay.tpl.html":function(e,t){var a=window.angular,n="templates/contact/contactDisplay.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=contactDisplay> <div class=contactDisplay-item-group ng-repeat="property in ::properties track by property.field"> <div class=contactDisplay-item ng-repeat="value in ::property.items" data-field="{{ ::property.field }}" data-key="{{ ::value.key }}" data-group="{{ ::value.group }}"> <label class=contactDisplay-item-label> <i class=fa ng-class=::value.icon></i>{{ ::value.label }} </label> <span class=contactDisplay-item-value>{{ ::value.value }}</span> <img ng-if="value.key === \'photo\'" class=contactDisplay-item-image ng-src="{{ ::value.value }}" alt=Photo> </div> </div> </div> ')}])}e.exports=n},"./src/templates/contact/contactDisplayModal.tpl.html":function(e,t){var a=window.angular,n="templates/contact/contactDisplayModal.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal small important {{ctrl.class}}" role=dialog style=display:block> <div class=modal-dialog> <button type=button ng-click=ctrl.onClickClose() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <h4 class=modal-title translate-context="Contact modal title" translate>Contact details</h4> </div> <div class=modal-body> <contact-display data-vcard=ctrl.vcard data-modal=true></contact-display> </div> </div> <div class="modal-footer text-right" ng-if=ctrl.onClickMerge> <button class="pm_button pull-left" ng-click=ctrl.onClickClose() translate-context=Action translate>Close</button> <button class="pm_button primary" ng-click=ctrl.onClickMerge() tabindex=1 name=merge translate-context=Action translate>Merge</button> </div> <div class="modal-footer text-right" ng-if=!ctrl.onClickMerge> <button class="pm_button primary" ng-click=ctrl.onClickClose() translate-context=Action tabindex=1 translate>Close</button> </div> </div> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/contact/contactEncrypted.tpl.html":function(e,t){var a=window.angular,n="templates/contact/contactEncrypted.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<section class=contactEncrypted-container> <section class=contactDetails-fields-container> <legend class=contactDetails-fields-ico> <i class=contactEncrypted-encrypted-and-signed-icon pt-tooltip-translate="Encrypted data with verified digital signature"></i> </legend> <div> <div ng-if=state.isFree class=contactDetails-fields-locked> <div class=contactDetails-fields-locked-notice> <p><a class="pm_button primary" ui-sref="secured.dashboard({ scroll: true })" translate translate-context=Action>Upgrade now</a></p> <p translate translate-context=Info>This feature is only available for paid users.</p> </div> </div> <contact-error></contact-error> <contact-item data-form=contactForm data-model=model data-state=state data-datas="get(\'Tels\')" data-type=Tels></contact-item> <contact-item data-form=contactForm data-model=model data-state=state data-datas="get(\'Adrs\')" data-type=Adrs></contact-item> <contact-item data-form=contactForm data-model=model data-state=state data-datas="get(\'Personals\')" data-type=Personals></contact-item> <button type=button class=contactDetails-toggle-custom-fields></button> <contact-item class=contactDetails-custom-fields data-form=contactForm data-model=model data-state=state data-datas="get(\'Customs\')" data-type=Customs></contact-item> <contact-item data-form=contactForm data-model=model data-state=state data-datas="get(\'Notes\')" data-type=Notes></contact-item> <contact-item data-form=contactForm data-model=model data-state=state data-datas="get(\'Photos\')" data-type=Photos></contact-item> </div> </section> </section> ')}])}e.exports=n},"./src/templates/contact/contactError.tpl.html":function(e,t){var a=window.angular,n="templates/contact/contactError.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=contactError-container> <section class=contactError-item-encrypted> <h2 translate-context=Info translate-comment="errors for contact" translate>Decryption error</h2> <p translate-context=Info translate-comment="errors for contact" translate>Decryption of this content failed</p> <p class=contactError-row> <a ui-sref=secured.keys translate-context=Link translate>Reactivate keys</a> <a href=https://protonmail.com/support/knowledge-base/encrypted-contacts/ target=_blank translate-context=Link translate>Learn more</a> </p> </section> <section class=contactError-item-verification> <h2 translate-context=Info translate-comment="errors for contact" translate>Verification error</h2> <p translate-context=Info translate-comment="errors for contact" translate>Verification of this content’s signature failed</p> <p><a href=https://protonmail.com/support/knowledge-base/encrypted-contacts/ target=_blank translate-context=Link translate>Learn more</a></p> </section> </div> ')}])}e.exports=n},"./src/templates/contact/contactList.tpl.html":function(e,t){var a=window.angular,n="templates/contact/contactList.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=contactList-container> <request-timeout></request-timeout> <contact-no-result ng-if=!contacts.length></contact-no-result> <div class=pm_table ng-if=contacts.length> <table class="contactList-table fixedLayout"> <thead class=contactList-thead> <tr> <th class=checkbox></th> <th data-sort=Name data-action=toggleSort> <span translate-context=Title translate-comment="table heading" translate> Name </span> <contact-arrows-sort data-sort=Name></contact-arrows-sort> </th> <th data-sort=emails data-action=toggleSort> <span translate-context=Title translate-comment="table heading" translate> Email </span> <contact-arrows-sort data-sort=emails></contact-arrows-sort> </th> </tr> </thead> <tbody class=contactList-tbody data-vs-repeat data-vs-excess=6 data-vs-scroll-parent=.contactList-container> <tr class=contactList-item data-contact-id="{{ ::contact.ID }}" ng-class="{ \'contactList-item-activeCursorContact\': isSelected(contact), \'contactList-item-activeContact\': isActive(contact) }" ng-repeat="contact in contacts track by contact.ID"> <td class="text-center contactList-checkbox"> <custom-checkbox data-custom-contact-id="{{ ::contact.ID }}" data-custom-ng-model=contact.selected></custom-checkbox> </td> <td data-contact-id="{{ ::contact.ID }}" class=contactList-item-name data-action=showContact> <span>{{ contact.Name }}</span> </td> <td data-contact-id="{{ ::contact.ID }}" class="text-muted contactList-item-email" data-action=showContact> <ul class=inlineList> <li>{{ contact.emails }}</li> </ul> </td> </tr> </tbody> </table> </div> </div> ')}])}e.exports=n},"./src/templates/contact/contactLoaderModal.tpl.html":function(e,t){var a=window.angular,n="templates/contact/contactLoaderModal.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal small very-important {{ctrl.class}}" role=dialog style=display:block> <div class=modal-dialog> <button type=button ng-click=ctrl.close() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class="modal-content contactLoaderModal-container"> <div class=modal-header> <h4 class=modal-title>{{ ::ctrl.title }}</h4> </div> <div class=modal-body> <p class="alert alert-info contactLoaderModal-info">{{ ::ctrl.info }}</p> <loader-tag></loader-tag> <progress-bar id=contactsProgressBar></progress-bar> <label class=contactLoaderModal-label></label> <div class=contactLoaderModal-success></div> <div class=contactLoaderModal-error></div> </div> <div class="modal-footer text-right"> <button class=pm_button ng-click=ctrl.close() translate-context=Action translate>Close</button> </div> </div> </div> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/contact/contactMerger.tpl.html":function(e,t){var a=window.angular,n="templates/contact/contactMerger.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=contactMergerList-table> <div ng-repeat="(key, contacts) in groups track by key" data-as-sortable=dragControlListener data-ng-model=contacts data-email="{{ ::key }}" class=contactMergerList-group> <div ng-repeat="contact in contacts track by contact.id" ng-class="{\n deleted: contact.deleted,\n included: contact.included\n }" data-as-sortable-item data-email="{{ ::key }}" data-i="{{ $index }}" class="contactMergerList-item as-sortable-item"> <div class=contactMergerList-priority> <span class=value>{{ $index + 1 }}</span> </div> <div data-as-sortable-item-handle class=contactMergerList-name ng-class="{ \'as-sortable-item-handle\': contact.included}"> <custom-checkbox class=checkbox data-custom-ng-model=contact.selected data-custom-name=select></custom-checkbox> <span class=contactMergerList-name-span>{{ ::contact.name }}</span> </div> <div class=contactMergerList-emails>{{ ::contact.email }}</div> <div class=contactMergerList-actions> <button name=details type=button class=details pt-tooltip-translate="Contact details" pt-tooltip-translate-context=Action> <i class="fa fa-vcard-o"></i> </button> <button type=button class=delete name=delete pt-tooltip-translate=Delete pt-tooltip-translate-context=Action> <i class="fa fa-trash-o"></i> </button> <button type=button class=undelete name=undelete pt-tooltip-translate=Undo pt-tooltip-translate-context=Action> <i class="fa fa-undo"></i> </button> </div> </div> <div class=contactMergerList-group-footer> <button name=preview class="pm_button contactMergerList-group-preview" ng-disabled=!willMerge(key) translate-context=Contact translate> Preview Contact </button> </div> </div> </div> ')}])}e.exports=n},"./src/templates/contact/contactMergerModal.tpl.html":function(e,t){var a=window.angular,n="templates/contact/contactMergerModal.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal {{ctrl.class}}" role=dialog style=display:block> <div class=modal-dialog> <button type=button name=cancel ng-click=ctrl.onClickClose() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <h4 class=modal-title>{{ ::ctrl.title }}</h4> </div> <div class=modal-body> <div class="alert alert-info" translate translate-context=Info> <p><i class="fa fa-info-circle"></i> Use Drag and Drop to rank merging priority between contacts.</p> <p>Uncheck contacts you do <b>not</b> want to merge.</p> </div> <contact-merger details=ctrl.onClickDetails preview=ctrl.onClickPreview groups=ctrl.duplicates></contact-merger> </div> </div> <div class="modal-footer text-right"> <button class="pm_button pull-left" ng-click=ctrl.onClickClose() name=cancel translate-context=Action translate> Cancel </button> <button class="pm_button primary" ng-click=ctrl.onClickMerge() tabindex=1 name=merge translate-context=Action translate> Merge </button> </div> </div> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/contact/contactModal.tpl.html":function(e,t){var a=window.angular,n="templates/contact/contactModal.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal {{ctrl.class}}" role=dialog style=display:block> <div class=modal-dialog> <button type=button ng-click=ctrl.cancel() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <h4 class=modal-title ng-if=!ctrl.contact.ID translate-context="Contact modal title" translate>Add contact</h4> <h4 class=modal-title ng-if=ctrl.contact.ID translate-context="Contact modal title" translate>Edit contact</h4> </div> <div class=modal-body> <contact-details data-contact=ctrl.contact data-modal=true></contact-details> </div> </div> <div class="modal-footer text-right"> <button class="pm_button pull-left" ng-click=ctrl.cancel() ng-disabled=ctrl.networkActivity translate-context=Action translate>Cancel</button> <button class="pm_button primary" tabindex=1 ng-click=ctrl.submit() ng-disabled=ctrl.networkActivity translate-context=Action translate>Save</button> </div> </div> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/contact/contactNoResult.tpl.html":function(e,t){var a=window.angular,n="templates/contact/contactNoResult.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=contactNoResult-container> <i class="fa contactNoResult-icon fa-address-book-o"></i> <h3 class="contactNoResult-title contactNoResult-title-empty" translate-context=Info translate>You have no contacts</h3> <h3 class="contactNoResult-title contactNoResult-title-no-result" translate-context=Info translate>No contact found</h3> <div class=contactNoResult-text-block> <span>You can</span> <button class="pm_button primary" data-action=add translate-context=Action translate-comment="Add contact button in no result placeholder" translate>Add contact</button> <span>or</span> <button class="pm_button contactNoResult-import" data-action=import translate-context=Action translate-comment="Import contacts button in no result placeholder" translate>Import contacts</button> </div> </div> ')}])}e.exports=n},"./src/templates/contact/contactPhotoForm.tpl.html":function(e,t){var a=window.angular,n="templates/contact/contactPhotoForm.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<form class="contactPhotoForm-container pm_form" name=contactPhotoForm ng-submit=ctrl.submit() novalidate> <div class=pm_grid> <div class=col-1-3> <label for=contactPhotoModal-uri translate-context=Label translate>Add image URL</label> </div> <div class=col-2-3> <input type=url id=contactPhotoModal-uri ng-model=ctrl.uri placeholder-translate="Image URL"> </div> </div> <div class=pm_grid> <div class=col-1-3> <label for=contactPhotoModal-upload translate-context=Label translate>Upload picture</label> </div> <div class=col-2-3> <label for=contactPhotoModal-upload class=contactPhotoModal-input-label translate-context=Action translate>Upload picture</label> <input type=file accept=image/* class=contactPhotoModal-input-file id=contactPhotoModal-upload> </div> </div> </form> ')}])}e.exports=n},"./src/templates/contact/contactPhotoModal.tpl.html":function(e,t){var a=window.angular,n="templates/contact/contactPhotoModal.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal small important {{ctrl.class}}" role=dialog style=display:block> <div class=modal-dialog> <button type=button ng-click=ctrl.cancel() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <h4 class=modal-title translate-context="Contact modal title" translate>Add image</h4> </div> <div class=modal-body> <contact-photo-form></contact-photo-form> </div> </div> <div class="modal-footer text-right"> <button class="pm_button pull-left" ng-click=ctrl.cancel() translate-context=Action translate>Cancel</button> <button class="pm_button primary" tabindex=1 ng-click=ctrl.submit(ctrl.uri) translate-context=Action translate>Save</button> </div> </div> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/contact/contactPhotoRow.tpl.html":function(e,t){var a=window.angular,n="templates/contact/contactPhotoRow.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=contactPhotoRow-container> <img class=contactPhotoRow-image alt=Photo ng-src="{{ uri }}" data-action=edit> <button class="contactPhotoRow-edit-button pm_button" data-action=edit type=button translate-context=Action translate>Edit photo</button> <button class="contactPhotoRow-clear-button pm_button" data-action=clear type=button translate-context=Action translate>Clear</button> </div> ')}])}e.exports=n},"./src/templates/contact/contactPlaceholder.tpl.html":function(e,t){var a=window.angular,n="templates/contact/contactPlaceholder.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=contactPlaceholder-container> <count-elements-selected ng-if=!welcomePlaceholder id=pm_placeholder></count-elements-selected> <div ng-if=welcomePlaceholder> <i class="contactPlaceholder-icon fa fa-address-book-o"></i> <p class=contactPlaceholder-message translate-context=Info translate-comment="Message displayed in the contact placeholder section" transalate> Click on a contact to view or edit details. </p> </div> </div> ')}])}e.exports=n},"./src/templates/contact/contactRightPanel.tpl.html":function(e,t){var a=window.angular,n="templates/contact/contactRightPanel.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,"<div class=contactRightPanel-container> <contact-placeholder></contact-placeholder> <div class=contactRightPanel-content> <contact-details ng-if=contact data-contact=contact></contact-details> <loader-tag></loader-tag> </div> </div> ")}])}e.exports=n},"./src/templates/contact/contactToolbar.tpl.html":function(e,t){var a=window.angular,n="templates/contact/contactToolbar.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<nav class=contactsToolbar-container> <label class=contactsToolbar-selectAll> <custom-checkbox data-custom-ng-model=checkAll data-custom-ng-disabled=disabled data-custom-ng-change=selectAll($event)></custom-checkbox> </label> <button data-action=addContact class="pm_button primary" translate-context=Action translate-comment="contacts toolbar menu option" translate>Add</button> <button class="delete pm_button" type=button data-action=deleteSelectedContacts ng-disabled=noSelection translate-comment="contacts toolbar menu option" translate>Delete</button> <button class="compose pm_button" type=button data-action=composeSelectedContacts ng-disabled=noSelection translate-context=Action translate-comment="contacts toolbar menu option" translate>Compose</button> <button class="merge pm_button" type=button data-action=mergeContacts ng-disabled="selectedLength <= 1" translate-context=Action translate-comment="contacts toolbar menu option" translate>Merge</button> <div class=contactsToolbar-right> <div class=pull-right> <paginator-scope data-type=contacts data-page=currentPage data-total-items=totalItems data-items-per-page=numPerPage data-change=selectPage> </paginator-scope> </div> </div> </nav> ')}])}e.exports=n},"./src/templates/contact/importCardDropzone.tpl.html":function(e,t){var a=window.angular,n="templates/contact/importCardDropzone.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=importCardDropzone-container> <div class="dropzone dropzone--with-click importCardDropzone-dropzone" id=dropzone></div> <p class="text-center bold importCardDropzone-file">{{ fileDropped }}</p> </div> ')}])}e.exports=n},"./src/templates/contact/importContactModal.tpl.html":function(e,t){var a=window.angular,n="templates/contact/importContactModal.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal small {{ctrl.class}}" role=dialog style=display:block> <div class=modal-dialog> <button type=button ng-click=ctrl.cancel() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <h3 class=modal-title translate translate-context=Title>Import</h3> </div> <div class=modal-body> <p translate translate-context=Info>We support importing CSV files from Outlook, Outlook Express, Yahoo! Mail, Hotmail, Eudora and some other apps. We also support importing vCard. (UTF-8 encoding). <a href=https://protonmail.com/support/knowledge-base/adding-contacts/ target=_blank>Need help?</a></p> <import-card-dropzone></import-card-dropzone> </div> </div> <div class=modal-footer> <button type=button class=pm_button ng-click=ctrl.cancel() translate translate-context=Action>Cancel</button> <button type=button class="pm_button primary pull-right" ng-disabled=!ctrl.fileDropped ng-click=ctrl.import() translate translate-context=Action>Import</button> </div> </div> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/dashboard/addonRow.tpl.html":function(e,t){var a=window.angular,n="templates/dashboard/addonRow.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=addonRow-container> <div class="pm_select inline addonRow-select-row"> <select class=addonRow-select></select> <i class="fa fa-angle-down"></i> </div> <div class=addonRow-placeholder-row> <span class=addonRow-placeholder></span> <button class="pm_button link addonRow-edit" type=button translate-context=Action translate>Edit</button> </div> </div> ')}])}e.exports=n},"./src/templates/dashboard/currencySelector.tpl.html":function(e,t){var a=window.angular,n="templates/dashboard/currencySelector.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=currencySelector-container> <button class="currencySelector-button pm_button" value=EUR>EUR</button> <button class="currencySelector-button pm_button" value=USD>USD</button> <button class="currencySelector-button pm_button" value=CHF>CHF</button> </div> ')}])}e.exports=n},"./src/templates/dashboard/customProPlanModal.tpl.html":function(e,t){var a=window.angular,n="templates/dashboard/customProPlanModal.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal {{ctrl.class}}" role=dialog style=display:block> <form class="modal-dialog customProPlan-modal" name=customPlanForm ng-submit=ctrl.submit() ng-class="{ \'customProPlan-needMoreMember\': ctrl.needMoreMember }" novalidate> <button type=button ng-click=ctrl.close() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <h4 class=modal-title translate-context="Title for the custom plan modal" translate>Plan Details</h4> </div> <div class=modal-body> <label translate-context="Label in the custom plan modal" translate>Users</label> <div class=pm_grid> <div class=col-3-4> <slider data-value=ctrl.sliders.members.value data-options=ctrl.sliders.members.options></slider> </div> <div class=col-1-4> <strong class="customProPlan-counter customProPlan-members-counter">{{ ctrl.format(\'members\') }}</strong> <button type=button ng-click=ctrl.needMore() class="pm_button link customProPlan-members-link" translate-context=Action translate>Need more users?</button> </div> </div> <label translate-context="Label in the custom plan modal" translate>Total Storage</label> <div class=pm_grid> <div class=col-3-4> <slider data-value=ctrl.sliders.storage.value data-options=ctrl.sliders.storage.options></slider> </div> <div class=col-1-4> <strong class=customProPlan-counter>{{ ctrl.format(\'storage\') }}</strong> </div> </div> <label translate-context="Label in the custom plan modal" translate>Total Addresses</label> <div class=pm_grid> <div class=col-3-4> <slider data-value=ctrl.sliders.addresses.value data-options=ctrl.sliders.addresses.options></slider> </div> <div class=col-1-4> <strong class=customProPlan-counter>{{ ctrl.format(\'addresses\') }}</strong> </div> </div> <p class="alert alert-info" translate-context="Info present in the custom professional plan modal" translate>Each user adds 5GB of storage and 5 addresses to your organization. Professional plans start with 5 addresses included. Storage and addresses can be distributed among users however you wish.</p> </div> </div> <div class="modal-footer text-right"> <button type=button ng-click=ctrl.close() class="pm_button pull-left" translate-context=Action translate>Cancel</button> <button tabindex=1 class="pm_button primary" translate-context=Action translate>Save</button> </div> </form> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/dashboard/customVpnModal.tpl.html":function(e,t){var a=window.angular,n="templates/dashboard/customVpnModal.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal {{ctrl.class}}" role=dialog style=display:block> <form class=modal-dialog name=customPlanForm ng-submit=ctrl.submit() novalidate> <button type=button ng-click=ctrl.close() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <h4 class=modal-title translate-context="Title for the vpn modal" translate>ProtonVPN Plans</h4> </div> <div class="modal-body customVpnModal-body" ng-class=::ctrl.fromPlan> <p class="alert alert-info"> <span translate-context="Info for the vpn modal" translate>ProtonVPN encrypts your internet connection, adding a powerful layer of security to your devices and ensuring your online activity stays private.</span> <a href=https://protonvpn.com target=_blank translate-context=Link translate>Learn more</a> </p> <vpn-columns></vpn-columns> <button ng-if=ctrl.hasVpn type=button class=customVpnModal-remove ng-click=ctrl.remove() translate-context="Remove button for the vpn form" translate>Remove VPN protection</button> <vpn-slider></vpn-slider> <vpn-total></vpn-total> </div> </div> <div class="modal-footer text-right"> <button type=button ng-click=ctrl.close() class="pm_button pull-left" translate-context=Action translate>Cancel</button> <button tabindex=1 class="pm_button primary" translate-context=Action translate>Save</button> </div> </form> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/dashboard/freeColumn.tpl.html":function(e,t){var a=window.angular,n="templates/dashboard/freeColumn.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=freeColumn-container> <header class=freeColumn-header> <div class=isCurrent translate-context="Dashboard plan title" translate>Current Plan</div> <h1>Free</h1> </header> <div class=freeColumn-user translate-context="Dashboard plan information" translate>1 User</div> <div class=freeColumn-space translate-context="Dashboard plan information" translate>500 MB Storage</div> <div class=freeColumn-address> <span translate-context="Dashboard plan information" translate>1 Address</span> <i class="fa fa-info-circle" pt-tooltip-translate="Add additional addresses to your account like <u>username2@protonmail.com</u>" pt-tooltip-translate-context="Dashboard plan detail" pt-html=true></i> </div> <div class="freeColumn-domain disabled"> <s translate-context="Dashboard plan information" translate>Custom Domains</s> <i class="fa fa-info-circle" pt-tooltip-translate="Allows you to host emails for your own domain(s) at ProtonMail, e.g. <u>john.smith@example.com</u>" pt-tooltip-translate-context="Dashboard plan detail" pt-html=true></i> </div> <div class=freeColumn-sending translate-context="Dashboard plan information" translate>150 Messages per day</div> <div class=freeColumn-labels translate-context="Dashboard plan information" translate>3 Folders / 3 Labels</div> <div class=freeColumn-support translate-context="Dashboard plan information" translate>Limited Support</div> <div class="freeColumn-filters disabled"><s translate-context="Dashboard plan information" translate>Custom Filters</s></div> <div class="freeColumn-autoresponder disabled"><s translate-context="Dashboard plan information" translate>Autoresponder</s></div> <div class="freeColumn-catch-all disabled"><s translate-context="Dashboard plan information" translate>Catch-all email</s></div> <div class="freeColumn-members disabled"><s translate-context="Dashboard plan information" translate>Multi-User Support</s></div> <vpn-row data-plan=free class=freeColumn-vpn></vpn-row> <total-rows data-plan=free></total-rows> <div class=freeColumn-free translate-context="Dashboard plan type" translate>FREE</div> <footer class=freeColumn-footer> <select-plan data-plan=free></select-plan> </footer> </div> ')}])}e.exports=n},"./src/templates/dashboard/overviewSection.tpl.html":function(e,t){var a=window.angular,n="templates/dashboard/overviewSection.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<table class=overviewSection-container ng-class="{\n \'overviewSection-plan-free\': organization.PlanName === \'free\'\n}"> <tbody class=overviewSection-tbody> <tr> <th translate-context=Title translate>Username</th> <td colspan=2> <strong>{{ user.Name }}</strong> </td> </tr> <tr> <th translate-context=Title translate>Domains</th> <td> <strong class=overviewSection-domains-name>{{ organization.UsedDomains }} <span translate-context="dashboard page. how many domains exist for an organization as well as the total number allowed." translate>of</span> {{ organization.MaxDomains }}</strong> <strong class=overviewSection-domains-free>0</strong> </td> <td class="text-right actions"> <a ui-sref=secured.domains class="text-purple overviewSection-link-manage" translate-context=Action translate>Manage</a> <a href=# class="text-purple scroll overviewSection-link-upgrade" translate-context=Action translate>Upgrade</a> </td> </tr> <tr> <th translate-context=Title translate>Addresses</th> <td> <strong class=overviewSection-addresses-total>{{ organization.UsedAddresses }} <span translate-context="dashboard page. how many addresses exist for an organization as well as the total number allowed." translate>of</span> {{ organization.MaxAddresses }}</strong> <strong class=overviewSection-addresses-free>1</strong> </td> <td class="text-right actions"> <a ui-sref="secured.members({ action: \'scroll\' })" class="text-purple overviewSection-link-signatureManager" translate-context=Action translate>Manage</a> <a href=# class="text-purple scroll overviewSection-link-signatureUpgrade" translate-context=Action translate>Upgrade</a> </td> </tr> <tr> <th translate-context=Title translate>Storage</th> <td colspan=2 class=overviewSection-storage> <strong class=overviewSection-storage-size>{{ organization.UsedSpace | humanSize }} <span translate-context="show used storage for an account" translate>of</span> {{ organization.MaxSpace | humanSize }}</strong> <strong class=overviewSection-storage-free>{{ user.UsedSpace | humanSize }} <span translate-context="show used storage for an account" translate>of</span> {{ user.MaxSpace | humanSize }}</strong> <br> <progress-bar id=storageBar></progress-bar> </td> </tr> </tbody> <tbody class=overviewSection-tbody-billing> <tr> <th translate-context=Title translate>Credit</th> <td> <strong>{{ (user.Credit || 0) / 100 | currency: user.Currency }}</strong> </td> <td> <donate-btn class=topUp-button data-item=topUp></donate-btn> <gift-code-btn data-action=modal></gift-code-btn> </td> </tr> <tr ng-if=subscription.CouponCode> <th translate-context=Title translate>Coupon</th> <td colspan=2> <code class=overviewSection-couponCode>{{ subscription.CouponCode }}</code> </td> </tr> </tbody> </table> ')}])}e.exports=n},"./src/templates/dashboard/plusColumn.tpl.html":function(e,t){var a=window.angular,n="templates/dashboard/plusColumn.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=plusColumn-container> <header class=plusColumn-header> <div class=isCurrent translate-context="Dashboard plan title" translate>Current Plan</div> <h1>Plus</h1> <plan-price data-plan=plus></plan-price> </header> <div class=plusColumn-user translate-context="Dashboard plan information" translate>1 User</div> <div class=plusColumn-space> <addon-row data-addon=space data-plan=plus></addon-row> </div> <div class=plusColumn-address> <addon-row data-addon=address data-plan=plus></addon-row> <i class="fa fa-info-circle" pt-tooltip-translate="Add additional addresses to your account like <u>username2@protonmail.com</u>" pt-tooltip-translate-context="Dashboard plan detail" pt-html=true></i> </div> <div class=plusColumn-domain> <addon-row data-addon=domain data-plan=plus></addon-row> <i class="fa fa-info-circle" pt-tooltip-translate="Allows you to host emails for your own domain(s) at ProtonMail, e.g. <u>john.smith@example.com</u>" pt-tooltip-translate-context="Dashboard plan detail" pt-html=true></i> </div> <div class=plusColumn-sending translate-context="Dashboard plan information" translate>1000 Messages per day</div> <div class=plusColumn-labels translate-context="Dashboard plan information" translate>200 Folders / 200 Labels</div> <div class=plusColumn-support translate-context="Dashboard plan information" translate>Support</div> <div class=plusColumn-filters translate-context="Dashboard plan information" translate>Custom Filters</div> <div class=plusColumn-autoresponder translate-context="Dashboard plan information" translate>Autoresponder</div> <div class="plusColumn-catch-all disabled"><s translate-context="Dashboard plan information" translate>Catch-all email</s></div> <div class="plusColumn-members disabled"><s translate-context="Dashboard plan information" translate>Multi-User Support</s></div> <vpn-row data-plan=plus class=plusColumn-vpn></vpn-row> <total-rows data-plan=plus></total-rows> <footer class=plusColumn-footer> <select-plan data-plan=plus></select-plan> </footer> </div> ')}])}e.exports=n},"./src/templates/dashboard/professionalColumn.tpl.html":function(e,t){var a=window.angular,n="templates/dashboard/professionalColumn.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=professionalColumn-container> <header class=professionalColumn-header> <div class=isCurrent translate-context="Dashboard plan title" translate>Current Plan</div> <h1>Professional</h1> <plan-price data-plan=professional></plan-price> </header> <div class=professionalColumn-user> <addon-row data-addon=member data-plan=professional></addon-row> </div> <div class=professionalColumn-space> <span class=professionalColumn-space-value translate-context="Dashboard plan information" translate>5 GB Storage / User</span> <i class="fa fa-info-circle" pt-tooltip-translate="Click INFO to view total storage for your plan" pt-tooltip-translate-context=Info></i> <button type=button class="professionalColumn-customize pm_button link" transalte-context="Dashboard plan button" translate>Info</button> </div> <div class=professionalColumn-address> <span class=professionalColumn-address-value translate-context="Dashboard plan information" translate>5 Addresses / User</span> <i class="fa fa-info-circle" pt-tooltip-translate="Click INFO to view total number of addresses for your plan" pt-tooltip-translate-context="Dashboard plan detail"></i> <button type=button class="professionalColumn-customize pm_button link" transalte-context="Dashboard plan button" translate>Info</button> </div> <div class=professionalColumn-domain> <addon-row data-addon=domain data-plan=professional></addon-row> <i class="fa fa-info-circle" pt-tooltip-translate="Allows you to host emails for your own domain(s) at ProtonMail, e.g. <u>john.smith@example.com</u>" pt-tooltip-translate-context="Dashboard plan detail" pt-html=true></i> </div> <div class=professionalColumn-sending> <span translate-context="Dashboard plan information" translate>Unlimited sending</span> <i class="fa fa-info-circle" pt-tooltip-translate="ProtonMail cannot be used for mass emailing or spamming. Legitimate emails are unlimited."></i> </div> <div class=professionalColumn-labels translate-context="Dashboard plan information" translate>Unlimited Folders / Labels</div> <div class=professionalColumn-support translate-context="Dashboard plan information" translate>Priority Support</div> <div class=professionalColumn-filters translate-context="Dashboard plan information" translate>Custom Filters</div> <div class=professionalColumn-autoresponder translate-context="Dashboard plan information" translate>Autoresponder</div> <div class=professionalColumn-catch-all translate-context="Dashboard plan information" translate>Catch-all email</div> <div class=professionalColumn-members translate-context="Dashboard plan information" translate>Multi-User Support</div> <vpn-row data-plan=professional class=professionalColumn-vpn></vpn-row> <total-rows data-plan=professional></total-rows> <footer class=professionalColumn-footer> <select-plan data-plan=professional></select-plan> </footer> </div> ')}])}e.exports=n},"./src/templates/dashboard/subscriptionSection.tpl.html":function(e,t){var a=window.angular,n="templates/dashboard/subscriptionSection.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<table class=subscriptionSection-table> <tbody class=subscriptionSection-tbody-plans> <tr> <td colspan=3> <strong translate-context="subscription title" translate>Plans</strong> </td> </tr> <tr ng-repeat="plan in subscription.Plans | filter: { Type: 1 } track by plan.ID" class=subscriptionSection-list> <td colspan=2 class=subscriptionSection-item-title>{{ plan.Title }}</td> <td class=subscriptionSection-item-price>{{ plan.Amount / 100 / plan.Cycle | currency: plan.Currency }}/mo</td> <td class=subscriptionSection-item-addons> <table class=subscriptionSection-addons> <tbody class=subscriptionSection-tbody-addons> <tr ng-repeat="(key, plan) in plan.addons track by plan.ID"> <td class=subscriptionSection-item-title>{{ plan.Title }}</td> <td class=subscriptionSection-item-price>{{ plan.Amount / 100 / plan.Cycle | currency: plan.Currency }}/mo</td> </tr> </tbody> </table> </td> </tr></tbody> <tbody class=subscriptionSection-tbody-billing> <tr ng-hide="subscription.CouponCode === \'LIFETIME\'"> <td> <strong translate-context="subscription details" translate>Billing cycle end</strong> </td> <td>{{ subscription.PeriodEnd | readableTime }}</td> </tr> <tr> <td> <strong translate-context="subscription price label" translate>Total price</strong> ({{ subscription.cycle }}) <span ng-if=subscription.CouponCode translate-context="subscription price label information" translate>(with coupon)</span> </td> <td>{{ (subscription.Amount || 0) / 100 | currency: subscription.Currency }} ({{ subscription.cycle }})</td> </tr> <tr> <td> <strong translate-context="subscription title" translate>Payment</strong> </td> <td> {{ method }} <a ui-sref=secured.payments class=text-purple translate-context="subscription link" translate>Manage</a> </td> </tr> </tbody> </table> ')}])}e.exports=n},"./src/templates/dashboard/totalRows.tpl.html":function(e,t){var a=window.angular,n="templates/dashboard/totalRows.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=totalRows-container> <label class=totalRows-label> <div class=totalRows-label-left> <custom-radio data-custom-ng-model=cycle data-custom-ng-value=1 data-custom-ng-change=onChange()></custom-radio> <span class=totalRows-cycle translate-comment="Make sure this string is short please" translate-context="Billing cycle for the dashboard" translate>Pay monthly</span> <span class="totalRows-discount totalRows-discount-with-vpn" pt-tooltip-translate="Monthly subscription with VPN discount">-20%</span> </div> <div class=totalRows-label-right> <div class=totalRows-wrapper> <strong class=totalRows-monthly-price></strong> <span translate translate-context="month price">/mo</span> </div> </div> </label> <label class=totalRows-label> <div class=totalRows-label-left> <custom-radio data-custom-ng-model=cycle data-custom-ng-value=12 data-custom-ng-change=onChange()></custom-radio> <span class=totalRows-cycle translate-comment="Make sure this string is short please" translate-context="Billing cycle for the dashboard" translate>Pay annually</span> <span class="totalRows-discount totalRows-discount-without-vpn" pt-tooltip-translate="Annual subscription discount">-20%</span> <span class="totalRows-discount totalRows-discount-with-vpn" pt-tooltip-translate="Annual subscription with VPN discount">-36%</span> </div> <div class=totalRows-label-right> <div class=totalRows-wrapper> <strong class=totalRows-yearly-price></strong> <span translate translate-context="month price">/mo</span> </div> <small class=totalRows-yearly-billed-price></small> </div> </label> <label class="totalRows-label totalRows-label-2-year"> <div class=totalRows-label-left> <custom-radio data-custom-ng-model=cycle data-custom-ng-value=24 data-custom-ng-change=onChange()></custom-radio> <span class=totalRows-cycle translate-comment="Make sure this string is short please" translate-context="Billing cycle for the dashboard" translate>2-year plan</span> <span class="totalRows-discount totalRows-discount-without-vpn" pt-tooltip-translate="2-year subscription discount">-33%</span> <span class="totalRows-discount totalRows-discount-with-vpn" pt-tooltip-translate="2-year subscription with VPN discount">-45%</span> </div> <div class=totalRows-label-right> <div class=totalRows-wrapper> <strong class=totalRows-2-years-price></strong> <span translate translate-context="month price">/mo</span> </div> <small class=totalRows-2-years-billed-price></small> </div> </label> </div> ')}])}e.exports=n},"./src/templates/dashboard/visionaryColumn.tpl.html":function(e,t){var a=window.angular,n="templates/dashboard/visionaryColumn.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=visionaryColumn-container> <header class=visionaryColumn-header> <div class=isCurrent translate-context="Dashboard free plan title" translate>Current Plan</div> <h1>Visionary</h1> <plan-price data-plan=visionary></plan-price> </header> <div class=visionaryColumn-user translate-context="Dashboard plan information" translate>6 Users</div> <div class=visionaryColumn-space translate-context="Dashboard plan information" translate>20 GB Storage</div> <div class=visionaryColumn-address> <span translate-context="Dashboard plan information" translate>50 Addresses</span> <i class="fa fa-info-circle" pt-tooltip-translate="Add additional addresses to your account like <u>username2@protonmail.com</u>" pt-tooltip-translate-context="Dashboard plan detail" pt-html=true></i> </div> <div class=visionaryColumn-domain> <span translate-context="Dashboard plan information" translate>10 Custom Domains</span> <i class="fa fa-info-circle" pt-tooltip-translate="Allows you to host emails for your own domain(s) at ProtonMail, e.g. <u>john.smith@example.com</u>" pt-tooltip-translate-context="Dashboard plan detail" pt-html=true></i> </div> <div class=visionaryColumn-sending> <span translate-context="Dashboard plan information" translate>Unlimited sending</span> <i class="fa fa-info-circle" pt-tooltip-translate="ProtonMail cannot be used for mass emailing or spamming. Legitimate emails are unlimited."></i> </div> <div class=visionaryColumn-labels translate-context="Dashboard plan information" translate>Unlimited Folders / Labels</div> <div class=visionaryColumn-support translate-context="Dashboard plan information" translate>Priority Support</div> <div class=visionaryColumn-filters translate-context="Dashboard plan information" translate>Custom Filters</div> <div class=visionaryColumn-autoresponder translate-context="Dashboard plan information" translate>Autoresponder</div> <div class=visionaryColumn-catch-all translate-context="Dashboard plan information" translate>Catch-all email</div> <div class=visionaryColumn-members translate-context="Dashboard plan information" translate>Multi-User Support</div> <div class=visionaryColumn-vpn translate-context="Dashboard plan information" translate>ProtonVPN Visionary included</div> <total-rows data-plan=visionary></total-rows> <footer class=visionaryColumn-footer> <select-plan data-plan=visionary></select-plan> </footer> </div> ')}])}e.exports=n},"./src/templates/dashboard/vpnColumns.tpl.html":function(e,t){var a=window.angular,n="templates/dashboard/vpnColumns.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=vpnColumns-container> <div class=vpnColumns-col> <label class=vpnColumns-label translate-context="Label for the vpn columns" translate>Speed</label> <label class=vpnColumns-label translate-context="Label for the vpn columns" translate>Connections/Devices</label> <label class=vpnColumns-label>Tor VPN <i class="fa fa-info-circle" pt-tooltip-translate="Send all your traffic through the Tor network with a single click"></i></label> <label class=vpnColumns-label>Secure Core <i class="fa fa-info-circle" pt-tooltip-translate="Provides additional protection against VPN server compromise by routing connections through our Secure Core network"></i></label> </div> <div class="vpnColumns-col vpnColumns-vpnbasic-col"> <header class=vpnColumns-header> <span class=vpnColumns-selected>Selected plan</span> <span class=vpnColumns-vpnbasic-title>ProtonVPN Basic</span> <span class=vpnColumns-vpnbasic-amount>{{ ::vpnbasicAmount }}</span> </header> <div> <strong translate-context="Info for the vpn columns" translate>High</strong> </div> <div> <strong>2</strong> </div> <div> <i class="fa fa-times"></i> </div> <div> <i class="fa fa-times"></i> </div> <footer class=vpnColumns-footer> <button type=button data-action=vpnbasic translate-context="Action for the vpn columns" translate>Add ProtonVPN Basic</button> <button type=button disabled=disabled translate-context="Action for the vpn columns" translate>ProtonVPN Basic Selected</button> </footer> </div> <div class="vpnColumns-col vpnColumns-vpnplus-col"> <header class=vpnColumns-header> <span class=vpnColumns-selected>Selected plan</span> <span class=vpnColumns-vpnplus-title>ProtonVPN Plus</span> <span class=vpnColumns-vpnplus-amount>{{ ::vpnplusAmount }}</span> </header> <div> <strong translate-context="Info for the vpn columns" translate>Highest</strong> </div> <div> <strong>5</strong> </div> <div> <i class="fa fa-check"></i> </div> <div> <i class="fa fa-check"></i> </div> <footer class=vpnColumns-footer> <button type=button data-action=vpnplus translate-context="Action for the vpn columns" translate>Add ProtonVPN Plus</button> <button type=button disabled=disabled translate-context="Action for the vpn columns" translate>ProtonVPN Plus Selected</button> </footer> </div> </div>')}])}e.exports=n},"./src/templates/dashboard/vpnDiscountPanel.tpl.html":function(e,t){var a=window.angular,n="templates/dashboard/vpnDiscountPanel.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<p class="vpnDiscountPanel-container alert"> <strong translate-context="Discount displayed in the dashboard" translate>Get 20% off when you get both ProtonMail and ProtonVPN</strong> <span translate-context="Discount displayed in the dashboard" translate>(discount shown at checkout)</span> </p> ')}])}e.exports=n},"./src/templates/dashboard/vpnRow.tpl.html":function(e,t){var a=window.angular,n="templates/dashboard/vpnRow.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=vpnRow-container> <span class=vpnRow-info></span> <button type=button class="vpnRow-add pm_button" data-action=open-vpn-modal translate>Add VPN Protection</button> <i class="fa fa-info-circle vpnRow-icon" pt-tooltip-translate="ProtonVPN encrypts your internet connection to keep your online activity private."></i> </div>')}])}e.exports=n},"./src/templates/dashboard/vpnSlider.tpl.html":function(e,t){var a=window.angular,n="templates/dashboard/vpnSlider.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="vpnSlider-container pm_grid"> <div class=col-1-3> <label translate-context="Label for vpn form" translate>Number of connections</label> <i class="fa fa-info-circle" pt-tooltip-translate="Number of VPN connections which can be assigned to users."></i> <strong class=vpnSlider-count></strong> </div> <div class=col-2-3> <slider data-value=value data-options=options></slider> <p class=vpnSlider-vpnbasic-info> <i class="fa fa-info-circle"></i> <span translate-context="Information for the custom vpn modal" translate>Need more connections?</span> <a href=# data-action=vpnplus translate-context="Link for the custom vpn modal" translate>Upgrade to ProtonVPN Plus</a> </p> <p class=vpnSlider-vpnplus-info> <i class="fa fa-info-circle"></i> <span translate-context="Information for the custom vpn modal" translate>Each connected device consumes one VPN connection.</span> </p> </div> </div>')}])}e.exports=n},"./src/templates/dashboard/vpnTotal.tpl.html":function(e,t){var a=window.angular,n="templates/dashboard/vpnTotal.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="vpnTotal-container pm_grid"> <div class=col-1-3> <label translate-context="Label attach to vpn total" translate>Total</label> </div> <div class="col-2-3 text-right"> <strong class=vpnTotal-amount></strong> </div> </div> ')}])}e.exports=n},"./src/templates/directives/attachments/listAttachments.tpl.html":function(e,t){var a=window.angular,n="templates/directives/attachments/listAttachments.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div id=attachmentArea class=listAttachments-container> <header> <span class=title> <strong class=listAttachments-title-size>{{ model.attachmentsSize() | humanSize }}</strong> <span ng-if="model.Attachments.length - model.NumEmbedded > 0" class=listAttachments-title-files> <i class="fa fa-paperclip"></i> {{ model.Attachments.length - model.NumEmbedded }} <span translate translate-n="model.Attachments.length - model.NumEmbedded" translate-plural="files attached">file attached</span> </span> <span ng-if="model.NumEmbedded > 0" class=listAttachments-title-embedded> <i class="fa fa-image embedded"></i> {{ model.NumEmbedded }} <span translate-n=model.NumEmbedded translate-plural="embedded images">embedded image</span> </span> <span ng-if="model.Attachments.length - model.NumEmbedded > 1" class=listAttachments-title-download> <btn-download-attachments data-model=model class=listAttachments-btn-downloadAll></btn-download-attachments> </span> </span> </header> <section class=listAttachments-list> <div class="listAttachments-att pm_button" ng-repeat="attachment in model.Attachments track by $id(attachment)"> <a data-attachment-id={{::attachment.ID}} class=listAttachments-item ng-class="{ \'dead\': attachment.decrypting, \'remove\': (\'eo.reply\' | includedByState) }" data-download-text="{{ \'Download\' | translate }}" title="{{ ::attachment.Name }} ({{ ::attachment.Size | humanSize }})"> <em></em> <icon-attachment class=listAttachments-icon></icon-attachment> <i class="fa fa-cog fa-spin listAttachments-icon-loader"></i> <i class="fa fa-download listAttachments-icon-download"></i> <strong class=name>{{ ::attachment.Name }}</strong> <span class=size>{{ ::attachment.Size | humanSize }}</span> </a> <button data-attachment-id={{::attachment.ID}} class="listAttachments-btn-action-remove removeButton"> <i class="fa fa-times"></i> </button> </div> </section> </div> ')}])}e.exports=n},"./src/templates/directives/composer/composer-header.tpl.html":function(e,t){var a=window.angular,n="templates/directives/composer/composer-header.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<header responsive-composer=message class=composerHeader-container> <span ng-click=unminimize(message); class="subject composerHeader-subject">{{subject(message)}}</span> <div class="composerHeader-actions actions text-right"> <button type=button ng-show=!!!message.minimized class="pm_button link minimize-button hidden-xs composerHeader-btn composer-action-minimize" ng-click=minimize(message) pt-tooltip-translate-context=Action pt-tooltip-translate=Minimize pt-placement=top> <i class="fa fa-minus composerHeader-btn-icon"></i> </button> <button type=button ng-show=!!message.minimized class="pm_button link expand-button hidden-xs composerHeader-btn composer-action-expand" ng-click=unminimize(message) pt-tooltip-translate-context=Action pt-tooltip-translate=Expand pt-placement=top> <i class="fa fa-minus composerHeader-btn-icon"></i> </button> <button type=button ng-show=!!!message.maximized class="pm_button link maximize-button hidden-xs hidden-sm composerHeader-btn composer-action-maximize" ng-click=normalize(message);maximize(message) pt-tooltip-translate-context=Action pt-tooltip-translate=Fullscreen pt-placement=top> <i class="fa fa-expand composerHeader-btn-icon"></i> </button> <button type=button ng-show=!!message.maximized class="pm_button link maximize-button hidden-xs composerHeader-btn composer-action-maximize" ng-click=normalize(message) pt-tooltip-translate-context=Action pt-tooltip-translate="Exit fullscreen" pt-placement=top> <i class="fa fa-compress composerHeader-btn-icon"></i> </button> <button type=button class="pm_button link close-button composerHeader-btn composer-action-close" ng-click=openCloseModal(message) pt-tooltip-translate-context=Action pt-tooltip-translate=Close pt-placement=top> <i class="fa fa-times composerHeader-btn-icon"></i> </button> </div> </header> ')}])}e.exports=n},"./src/templates/directives/composer/composer.tpl.html":function(e,t){var a=window.angular,n="templates/directives/composer/composer.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="composer animate composer-container" data-composer-id={{::message.ID}}> <div class=composer-dropzone-wrapper></div> <composer-header></composer-header> <composer-encrypt class="composerOptions-container composer-options-encryption" data-message=message ng-class="{ \'show\': message.panelName == \'encrypt\' }"></composer-encrypt> <composer-expiration class="composerOptions-container composer-options-expiration" data-message=message ng-class="{ \'show\': message.panelName == \'expiration\' }"></composer-expiration> <div class="meta composer-meta" ng-class="{\'composer-toggle-ccbcc\': message.ccbcc}"> <composer-select-from class="row fromRow composer-field-From" data-model=message></composer-select-from> <composer-input-meta data-model=message data-label=To data-key=ToList class="row toRow composer-field-ToList"></composer-input-meta> <composer-input-meta data-model=message data-label=CC data-key=CCList class="row ccRow composer-field-CCList"></composer-input-meta> <composer-input-meta data-model=message data-label=BCC data-key=BCCList class="row bccRow composer-field-BCCList"></composer-input-meta> <composer-subject class="row subjectRow composer-field-Subject"></composer-subject> </div> <section class="flex composer-section" ng-form=composeForm{{$index}}> <div class="composeEditor fill"> <composer-ask-embedded class="askEmbedding composer-askEmbedding"></composer-ask-embedded> <div class="dropzone composer-dropzone fill" composer-dropzone id=dropzone_message{{::message.ID}} ng-show=message.focussed></div> <squire class=composer-editor data-message=message data-allow-embedded=true ng-click="attHide(message); message.autocompletesFocussed = false;"></squire> </div> </section> <composer-attachments data-model=message></composer-attachments> <footer ng-hide=message.minimized ng-class="{ \'disabled\': message.displayPanel }"> <button class="pm_button composer-btn-attachment needsclick" data-action-compose=::message data-action-compose-type=addFile ng-disabled="message.disableOthers() || message !== selected" ng-class="{\n \'active\': message.displayPanel && message.panelName == \'attachments\',\n \'primary\': message.Attachments && message.Attachments.length > 0\n }" pt-tooltip-translate=Attachments pt-placement=top> <i class="fa fa-paperclip"></i> </button> <button class="pm_button composer-btn-encryption" ng-class="{\n \'active\': message.displayPanel && message.panelName == \'encrypt\',\n \'primary\': message.IsEncrypted === 1\n }" ng-disabled="message.disableOthers() || message !== selected" pt-placement=top pt-tooltip-context=Action pt-tooltip-translate=Encryption ng-click="togglePanel(message, \'encrypt\')"> <i class="fa fa-lock"></i> </button> <button class="pm_button composer-btn-expiration" ng-class="{\n \'active\': message.displayPanel && message.panelName == \'expiration\',\n \'primary\': message.ExpirationTime > 0\n }" ng-disabled="message.disableOthers() || message !== selected" pt-placement=top pt-tooltip-translate="Expiration time" pt-tooltip-translate-context=Action ng-click="togglePanel(message, \'expiration\')"> <i class="fa fa-hourglass-end"></i> </button> <div class=pull-right> <composer-time class=desktopOnly></composer-time> <button class="pm_button composer-btn-discard" ng-disabled=message.disableDiscard() ng-click=discard(message) pt-tooltip-translate="Delete draft" pt-tooltip-translate-context=Action pt-placement=top pt-tooltip-context=Action> <i class="fa fa-trash-o"></i> <span ng-show=!!message.maximized translate translate-context=Action>Discard</span> </button> <button class="pm_button composer-btn-save" ng-disabled="message.disableSave() || message !== selected" ng-click="save(message, true, false)" pt-tooltip-translate=Save pt-placement=top pt-tooltip-translate-context=Action> <i class="fa fa-floppy-o"></i> <span ng-show="message.maximized === true" translate translate-context=Action>Save</span> </button> <btn-send-message class="pm_button primary mobileFull composer-btn-send" data-message=message></btn-send-message> </div> </footer> </div> ')}])}e.exports=n},"./src/templates/directives/composer/composerAskEmbedded.tpl.html":function(e,t){var a=window.angular,n="templates/directives/composer/composerAskEmbedded.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=composerAskEmbdded-container> <div class=composerAskEmbdded-details> <button type=button data-action=cancel class=composerAskEmbdded-btn-cancel>cancel <i class="fa fa-close"></i></button> <h4 class=composerAskEmbdded-title>No images detected</h4> <div class=mobile-display-column> <span>Insert images</span> <button type=button class="pm_button primary composerAskEmbdded-btn-attachment" data-action=attachment pt-tooltip-translate=Attachments pt-placement=top>as attachment</button> <span>or</span> <button type=button class="pm_button primary composerAskEmbdded-btn-inline" data-action=inline pt-tooltip-translate="inline image" pt-placement=top>inline</button> </div> </div> </div> ')}])}e.exports=n},"./src/templates/directives/composer/composerAttachments.tpl.html":function(e,t){var a=window.angular,n="templates/directives/composer/composerAttachments.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="composerAttachments-container composerAttachments-close"> <div class=composerAttachments-header> <composer-attachments-size class=composerAttachments-size></composer-attachments-size> <span class=composerAttachments-counter-attachments ng-show="message.Attachments.length > message.NumEmbedded"> <i class="fa fa-paperclip"></i> {{ message.Attachments.length - message.NumEmbedded }} <span translate translate-n="message.Attachments.length - message.NumEmbedded" translate-plural="files attached">file attached</span> </span> <span class=composerAttachments-counter-embedded ng-show="message.NumEmbedded > 0"> <i class="fa fa-image embedded"></i> {{ message.NumEmbedded }} <span translate translate-n=message.NumEmbedded translate-plural="embedded images">embedded image</span> </span> <span class=composerAttachments-action> <i>{{ labelHeader }}</i> </span> </div> <div class=composerAttachments-loaders> <composer-attachments-item ng-repeat="attachment in list track by attachment.id" class="composerAttachments-loader uploading"> </composer-attachments-item> </div> </div> ')}])}e.exports=n},"./src/templates/directives/composer/composerAttachmentsSize.tpl.html":function(e,t){var a=window.angular,n="templates/directives/composer/composerAttachmentsSize.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,"<strong class=composerAttachmentsSize-container></strong> ")}])}e.exports=n},"./src/templates/directives/composer/composerInputMeta.tpl.html":function(e,t){var a=window.angular,n="templates/directives/composer/composerInputMeta.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=composerInputMeta-container ng-class="{\'composerInputMeta-recipients\': containsRecipient(), \'composerInputMeta-overlay-hidden\': message.autocompletesFocussed || containsInvalid(message) }"> <div class=composerInputMeta-overlay> <label class=composerInputMeta-overlay-label translate translate-context=Title>Recipients</label> <div class=composerInputMeta-overlay-list>{{ message | recipients }}</div> </div> <label to=composerAutocompleteTo class=composerInputMeta-label translate translate-context=Title>To</label> <autocomplete-emails class=composerInputMeta-autocomplete data-name=composerAutocompleteTo data-emails=message.ToList></autocomplete-emails> <button class="pm_button link composerInputMeta-overlay-button" ng-class="{\'fa-rotate-180\': message.ccbcc}" tabindex=-1 pt-tooltip-translate="CC BCC" pt-placement=left pt-tooltip-translate-context=Action> <i class="fa fa-angle-down"></i> </button> </div> ')}])}e.exports=n},"./src/templates/directives/composer/composerSelectFrom.tpl.html":function(e,t){var a=window.angular,n="templates/directives/composer/composerSelectFrom.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=composerSelectFrom-container> <label translate translate-context=Title for=fromMessage{{::message.ID}}>From</label> <select class=flex id=fromMessage{{::message.ID}} name=fromMessage{{::message.ID}} ng-model=message.From ng-options="address.Email for address in addresses track by address.Email"></select> <button class="pm_button link"> <i class="fa fa-angle-down"></i> </button> </div> ')}])}e.exports=n},"./src/templates/directives/composer/composerSubject.tpl.html":function(e,t){var a=window.angular,n="templates/directives/composer/composerSubject.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=composerSubject-container> <input title=Subject class="flex subject" placeholder-translate=Subject ng-model=message.Subject required/> </div> ')}])}e.exports=n},"./src/templates/directives/contact/contactItem.tpl.html":function(e,t){var a=window.angular,n="templates/directives/contact/contactItem.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<ul class=contactItem-container data-is-disabled=!UI.sortableState data-as-sortable=itemContactDragControlListeners data-ng-model=UI.items> <li class=contactItem-row ng-if=!item.hide ng-repeat="item in UI.items" as-sortable-item> <div class="contactItem-sortable-wrapper ng-message-wrapper" as-sortable-item-handle> <label class=contactItem-label> <input type=text placeholder="{{ UI.placeholder }}" class=form-control tabindex=2 ng-model=item.label ng-class="{ \'contactItem-label-editable\' : UI.allowCustom, \'contactItem-label-selectable\': UI.selectable }" ng-change=setLabel(item) ng-readonly=!UI.allowCustom ng-required=UI.required ng-focus=onFocus(item) ng-blur=onBlur(item)> <i class="fa itemIcon" ng-class=UI.iconClass></i> <i class="fa fa-chevron-down" ng-mousedown="toggleSelector($event, item)"></i> <ul class=contactItem-selectType ng-show="item.displaySelector && UI.labels.length > 1"> <li ng-repeat="label in UI.labels" ng-class="{ selected: item.label.toUpperCase() === label.toUpperCase() }"> <a ng-mousedown="setLabel(item, label)">{{ label }}</a> </li> </ul> </label> <div class=contactItem-aside> <div class=contactItem-inputs> <input ng-if="UI.mode === \'singleLine\'" type="{{ ::UI.inputType }}" name="{{ ::UI.inputName+$index }}" data-valid-email placeholder="{{ UI.placeholder }}" class="form-control contactItem-field" tabindex=2 ng-class="{ \'contactItem-input-with-icon\': UI.inputType === \'email\' }" ng-model=item.value ng-change=change()> <textarea ng-if="UI.mode === \'multiLine\'" placeholder="{{ UI.placeholder }}" class="form-control contactItem-field" tabindex=2 ng-model=item.value ng-change=change()></textarea> <contact-address-input ng-if="UI.mode === \'address\'" data-focused=config.isFocusedAddress data-value=item.value data-form=form></contact-address-input> <contact-photo-row ng-if="UI.mode === \'photo\'" data-value=item.value data-form=form></contact-photo-row> </div> <div class=contactItem-actions> <copy ng-if="UI.mode === \'address\' && !config.isFocusedAddress" data-value=getAddressValue(item) pt-tooltip-translate="Copy address" pt-tooltip-translate-context=Action></copy> <button ng-if="UI.inputType === \'email\'" type=button class="contactItem-compose fa fa-send-o" data-action=composeTo data-email="{{ item.value }}" pt-tooltip-translate="Compose to" pt-tooltip-translate-context=Action></button> <button ng-if="!UI.unique && visibleItems().length > 1" type=button class=contactItem-delete data-action=remove data-index="{{ $index }}" pt-tooltip-translate="Remove Entry" pt-tooltip-translate-context=Action></button> <button ng-if="!UI.unique && visibleItems().length" type=button class=contactItem-add data-action=add pt-tooltip-translate="Add Entry" pt-tooltip-translate-context=Action></button> </div> <div class=contactItem-validation ng-messages=form[UI.inputName+$index].$error role=alert> <div class=ng-messages-errors> <p ng-message=email class=text-red translate-context=Error translate>Invalid email</p> </div> </div> </div> </div> </li> <div class=contactItem-footer> <button ng-if="UI.items.length > 1 && UI.sortable" type=button data-action=toggleSortable class=contactItem-toggle-sort> <span class=contactItem-toggle-sort-enable translate translate-context=Action>Change order</span> <span class=contactItem-toggle-sort-save translate translate-context=Action>Save order</span> </button> </div> </ul> ')}])}e.exports=n},"./src/templates/directives/core/bugModalView.tpl.html":function(e,t){var a=window.angular,n="templates/directives/core/bugModalView.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="bugModalView-container pm_form"> <p class="alert alert-info" translate translate-context=Info> <i class="fa fa-info-circle"></i> Refreshing the page or <a href=https://protonmail.com/support/knowledge-base/how-to-clean-cache-and-cookies/ target=_blank>clearing your browser cache</a> will automatically resolve most issues. </p> <div class=pm_grid> <div class=col-1-4> <label for=bug_os translate translate-context=Title>Operating system</label> </div> <div class=col-1-4> <input type=text placeholder-translate="OS Name" name=bug_os id=bug_os ng-model=model.OS> </div> <div class=col-1-4> <label for=bug_os_version translate translate-context=Title>OS version</label> </div> <div class=col-1-4> <input placeholder-translate="OS version" type=text id=bug_os_version ng-model=model.OSVersion /> </div> </div> <div class=pm_grid> <div class=col-1-4> <label for=bug_browser translate translate-context="bug report modal label">Browser</label> </div> <div class=col-1-4> <input type=text name=bug_browser id=bug_browser placeholder-translate=Browser ng-model=model.Browser /> </div> <div class=col-1-4> <label for=bug_browser_version translate translate-context="bug report modal label">Browser version</label> </div> <div class=col-1-4> <input type=text name=bug_browser_version id=bug_browser_version placeholder-translate="Browser version" placeholder-translate-context="bug report modal" ng-model=model.BrowserVersion /> </div> </div> <div class=pm_grid> <div class=col-1-4> <label for=bugEmail translate translate-context="bug report modal label">Email address</label> </div> <div class="col-3-4 ng-message-wrapper"> <input type=email required name=bugEmail id=bugEmail data-validator-typo-email placeholder-translate-context="bug report modal" placeholder-translate="Please make sure to give us a way to contact you" ng-model=model.Email> <div ng-messages=form.bugEmail.$error role=alert> <div class=ng-messages-errors> <p ng-message=required translate-context=Error translate>You must set an email</p> <p ng-message=email translate-context=Error translate>Invalid email</p> </div> <div class=ng-messages-warning> <p ng-message-warning=typo-email translate-context=Error translate>Are you sure your email address is correct ?</p> </div> </div> </div> </div> <div class=pm_grid> <div class=col-1-4> <label for=bug_description translate translate-context="bug report modal label">What happened?</label> </div> <div class="col-3-4 ng-message-wrapper"> <textarea ng-model=model.Description required name=bug_description rows=6 id=bug_description placeholder-translate-context="bug report modal description" placeholder-translate="Please describe the problem and include any error messages"></textarea> <div ng-messages=form.bug_description.$error role=alert> <div class=ng-messages-errors> <p ng-message=required translate-context=Error translate>Add a description to help us improve ProtonMail</p> </div> </div> </div> </div> <div class="pm_grid no-margin bugModalView-upload-row"> <div class=col-1-4> <label translate translate-context=Title translate-comment="but report form heading label">Attach screenshot</label> </div> <div class=col-3-4> <label class=bugModalView-input-label for=bugModalView-upload translate-context=Action translate>Add screenshots</label> <input type=file multiple=multiple accept=image/* class=bugModalView-input-file id=bugModalView-upload> <a class="pm_button link bugModalView-upload-info" href=https://protonmail.com/support/knowledge-base/screenshot-reporting-bugs/ target=_blank translate-context=Link translate>Learn more</a> <div class=bugModalView-upload-success> <i class="fa fa-image"></i> <span class=bugModalView-upload-success-message translate-context="Success message" translate>Screenshot(s) attached</span> <button class="pm_button bugModalView-clear-upload" type=button translate-context=Action translate>Clear</button> </div> </div> </div> <div class="pm_grid flex absorbing flex-row"> <div class=col-1-4></div> <div class=col-3-4> <p class=help translate translate-context=Info>Bug reports are not end-to-end encrypted, please do not send any sensitive information.</p> <p class="alert alert-info" translate translate-context=Info>Contact us at <a href=mailto:security@protonmail.com>security@protonmail.com</a> for critical security issues.</p> </div> </div> </div> ')}])}e.exports=n},"./src/templates/directives/core/placeholderProgress.tpl.html":function(e,t){var a=window.angular,n="templates/directives/core/placeholderProgress.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,"<div class=storageArea> <span class=current>{{ ::usedSpace }}</span> <div class=storageBar> <div class=storageBar-progress ng-style=::storageStyle()></div> </div> <span class=total>{{ ::maxSpace }}</span> </div> ")}])}e.exports=n},"./src/templates/directives/core/sidebarProgress.tpl.html":function(e,t){var a=window.angular,n="templates/directives/core/sidebarProgress.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=storageProgress-container> <div class=link hide-upgrade=space> <a ui-sref="secured.dashboard({scroll: true})"> <span translate translate-context=Action>Upgrade storage</span> </a> </div> <div class="storage text-center"> <strong title=Storage>{{ storageValue() }}</strong> </div> <div class=storageBar> <div class=storageBar-progress ng-style=storageStyle()></div> </div> </div> ')}])}e.exports=n},"./src/templates/directives/dropdownLabels.tpl.html":function(e,t){var a=window.angular,n="templates/directives/dropdownLabels.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<form novalidate class=dropdown-label-container ng-class="{\'dropdown-label-hasLabels\': labels.length}" autocomplete=off> <div class=dropdown-label-title> <p class=dropdown-label-title-hasLabels translate translate-context=title>Label as</p> <p class="alert alert-info" translate translate-context=Info>No labels</p> </div> <label class=dropdown-label-search> <i class="fa fa-search dropdown-label-search-icon"></i> <input class=dropdown-label-search-input type=search placeholder-translate="Filter labels" ng-model=searchLabels ng-minlength=1> </label> <div class="dropdown-label-scrollbox scrollbox-container" ng-if="labels.length > 0"> <ul class=scrollbox-container-group> <li class=scrollbox-container-group-item ng-repeat="label in (filteredLabels = (labels | filter: {Name: searchLabels} | orderBy: \'Order\')) track by label.ID" data-label-id={{::label.ID}}> <label class=dropdown-label-scrollbox-label data-label-id={{::label.ID}}> <span class=dropdown-label-scrollbox-label-text ng-style=::color(label)> <i class="dropdown-label-scrollbox-label-icon fa fa-tag" data-label-id={{::label.ID}}></i> <span class="dropdown-label-scrollbox-label-text-ellipsis ellipsis">{{ ::label.Name }}</span> </span> <div class=dropdown-label-scrollbox-label-checkbox> <custom-checkbox data-custom-ng-model=label.Selected data-custom-class=scrollbox-container-group-item-empty data-custom-ui-indeterminate="label.Selected === null"></custom-checkbox> </div> </label> </li> <li class=scrollbox-container-group-item-empty ng-show="filteredLabels.length === 0" translate translate-context=Info>no label found</li> </ul> </div> <create-label data-class=dropdown-label-create data-message=message data-label-name=searchLabels></create-label> <label class=dropdown-label-alsoArchive> <span class="dropdown-label-alsoArchive-txt label-fillWidth" translate translate-comment="Form checkbox option">Also Archive</span> <div class=dropdown-label-alsoArchive-checkbox> <custom-checkbox data-custom-ng-model=alsoArchive data-custom-ng-change=changeAlsoArchive() data-custom-class=dropdownLabels-input-archive></custom-checkbox> </div> </label> <button class="pm_button primary dropdown-label-apply" tabindex=1 ng-disabled=networkActivity.loading() translate-context=Action translate>Apply</button> </form> ')}])}e.exports=n},"./src/templates/directives/outside/composer.tpl.html":function(e,t){var a=window.angular,n="templates/directives/outside/composer.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=composer-outside-container> <div class="composeEditor fill"> <composer-ask-embedded class="askEmbedding composer-askEmbedding" data-action=outside></composer-ask-embedded> <div class="dropzone composer-dropzone fill" data-composer-dropzone data-action=outside ng-show=message.focussed></div> <squire data-action=outside data-message=message allow-embedded=true class="composer-editor composer-outside-editor"></squire> </div> </div> ')}])}e.exports=n},"./src/templates/directives/paginator.tpl.html":function(e,t){var a=window.angular,n="templates/directives/paginator.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<span class="pm_buttons paginator paginator-container"> <a pt-tooltip-translate=Previous pt-tooltip-translate-context=Action class=paginator-btn-previous> <i class="fa fa-chevron-left"></i> </a> <span class="pull-left paginator-dropdown-list"> <a class="pm_trigger paginator-dropdown" dropdown pt-tooltip-translate="Page number" pt-tooltip-translate-context=Action> <small>{{ ::page }}</small> <i class="fa fa-angle-down"></i> </a> <span class="pm_dropdown right"> <a ng-repeat="p in pages track by p" data-value={{::p}} class=paginator-dropdown-item> <em class=paginator-label translate translate-comment="current page dropdown in paginator">Page</em> {{ ::p }} </a> </span> </span> <a class=paginator-btn-next pt-tooltip-translate=Next pt-tooltip-translate-context=Action> <i class="fa fa-chevron-right"></i> </a> </span> ')}])}e.exports=n},"./src/templates/directives/paginatorScope.tpl.html":function(e,t){var a=window.angular,n="templates/directives/paginatorScope.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<span class="pm_buttons paginator"> <a pt-tooltip-translate=Previous pt-tooltip-translate-context=Action ng-click=previous() ng-class="{\'disabled\': disableP}"> <i class="fa fa-chevron-left"></i> </a> <span class="pull-left paginator-dropdown-list"> <a class=pm_trigger dropdown ng-class="{\'disabled\': disableMain}" pt-tooltip-translate="Page number" pt-tooltip-translate-context=Action> <small>{{ page }}</small> <i class="fa fa-angle-down"></i> </a> <span class="pm_dropdown right"> <a ng-repeat="p in pages" ng-click=select(p)> <em translate translate-comment="current page dropdown in paginator">Page</em> {{ p }} </a> </span> </span> <a pt-tooltip-translate=Next pt-tooltip-translate-context=Action ng-click=next() ng-class="{\'disabled\': disableN}"> <i class="fa fa-chevron-right"></i> </a> </span> ')}])}e.exports=n},"./src/templates/directives/squire.tpl.html":function(e,t){var a=window.angular,n="templates/directives/squire.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="angular-squire fill squire-container"> <div class=squire-drozone-continer> <div class=squire-dropzone> <span translate-context=Info translate>Drop an image here to insert</span> </div> </div> <div class="editor-container fill"> <div ng-if=isLoaded> <squire-toolbar class=squire-toolbar></squire-toolbar> <add-link-popover class=squire-popover></add-link-popover> <add-file-popover class=squire-popover></add-file-popover> </div> <plain-text-area></plain-text-area> <div class="angular-squire-wrapper fill"> <iframe frameborder=0 border=0 marginwidth=0 marginheight=0 src=about:blank class=squireIframe></iframe> </div> </div> </div> ')}])}e.exports=n},"./src/templates/directives/toggle.tpl.html":function(e,t){var a=window.angular,n="templates/directives/toggle.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,"<div class=pm_toggle ng-class=\"{ 'on': status, 'off': !status }\"> <span class=on>{{ ::on }}</span> <span class=off>{{ ::off }}</span> <span class=knob></span> </div> ")}])}e.exports=n},"./src/templates/directives/ui/noResults.tpl.html":function(e,t){var a=window.angular,n="templates/directives/ui/noResults.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=messagePlaceholder> <i class="fa messagePlaceholder-icon"></i> <span class=messagePlaceholder-text-block></span> <h3 class=messagePlaceholder-title></h3> </div> ')}])}e.exports=n},"./src/templates/directives/ui/progressUpload.tpl.html":function(e,t){var a=window.angular,n="templates/directives/ui/progressUpload.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,"<div class=\"progressLoader-container pm_button progressUpload-uploading\"> <div class=progressLoader-attachment> <i class=progressLoader-icon ng-class=\"(model.packet.Inline === 1) ? 'fa fa-image embedded' : 'fa fa-paperclip'\"></i> <span class=progressLoader-name>{{ ::model.packet.filename }}</span> </div> <progression-btn data-action=close class=progressLoader-btn-close></progression-btn> <progression-btn data-action=remove class=progressLoader-btn-remove></progression-btn> </div> ")}])}e.exports=n},"./src/templates/directives/ui/protonLoader.tpl.html":function(e,t){var a=window.angular,n="templates/directives/ui/protonLoader.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div id=pm_loading class=protonLoader ng-class="{ \'show\': loggingOut }"> <div class=protonLoaderIcon> <svg xmlns=http://www.w3.org/2000/svg xmlns:xlink=http://www.w3.org/1999/xlink version=1.1 width=12px height=16px> <g xmlns=http://www.w3.org/2000/svg> <path fill=#9397cd d="M5.642,0.23c0,0-4.677-0.154-5.642,5.035v3.534c0,0,0.04,0.378,1.104,1.146 c1.064,0.768,3.817,2.931,4.538,2.931s3.475-2.163,4.538-2.931c1.064-0.768,1.104-1.146,1.104-1.146V5.264 C10.319,0.076,5.642,0.23,5.642,0.23z M8.845,7.191H5.642H2.439V5.264c0.65-2.577,3.203-2.612,3.203-2.612s2.553,0.035,3.203,2.612 V7.191z"/> <path fill=#9397cd d="M5.642,13.672c0,0-0.725-0.071-1.292-0.465C3.783,12.813,0,10.11,0,10.11v5.35c0,0,0.032,0.622,0.718,0.622 s4.925,0,4.925,0s4.239,0,4.925,0s0.718-0.622,0.718-0.622v-5.35c0,0-3.783,2.703-4.35,3.097 C6.367,13.601,5.642,13.672,5.642,13.672z"/> </g> </svg> </div> </div> ')}])}e.exports=n},"./src/templates/directives/ui/protonmailLogo.tpl.html":function(e,t){var a=window.angular,n="templates/directives/ui/protonmailLogo.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<a href=# ui-sref=secured.inbox class="protonmailLogo-container logo"></a> ')}])}e.exports=n},"./src/templates/directives/ui/readUnread.tpl.html":function(e,t){var a=window.angular,n="templates/directives/ui/readUnread.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<span class="pm_buttons readUnread-container" data-ng-class="{ disabled: isDisabled(), \'readUnread-container-ur\': messageButtons === 1 }"> <a href=# class="fa fa-eye readUnread-btn-read" data-action=read pt-tooltip-translate="Mark as read" pt-tooltip-translate-context=Action></a> <a href=# class="fa fa-eye-slash readUnread-btn-unread" data-action=unread pt-tooltip-translate="Mark as unread" pt-tooltip-translate-context=Action></a> </span> ')}])}e.exports=n},"./src/templates/directives/ui/requestTimeout.tpl.html":function(e,t){var a=window.angular,n="templates/directives/ui/requestTimeout.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=request-timeout> <i class="fa fa-exclamation-triangle request-timeout-icon" aria-hidden=true></i> <h3 class=request-timeout-title translate translate-context=Title>Request timed out, please try again.</h3> <button class="pm_button request-timeout-button-refresh"> <div> <span translate translate-context=Action>Try again</span> </div> </button> </div> ')}])}e.exports=n},"./src/templates/directives/ui/settingsMenu.tpl.html":function(e,t){var a=window.angular,n="templates/directives/ui/settingsMenu.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<section class="pm_opensans sidebar sidebarApp-container settingsMenu-container"> <sidebar-mobile-header class=settingsMenu-about-app></sidebar-mobile-header> <div class=sidebarApp-wrapper> <button class="sidebar-btn-back sidebarApp-link" type=button> <i class="sidebarApp-icon fa fa-arrow-left"></i> <span translate-context="Back button in the contact sidebar" translate>Back to mail</span> </button> <ul class="menu sidebarApp-menu"> <navigation-settings class=sidebarApp-item data-key={{::state}} ng-repeat="state in listStates track by $id(state)"></navigation-settings> <li class="sidebarApp-item settingsMenu-item-donate"><donate-btn></donate-btn></li> </ul> </div> <div class=footer> <app-version class=version></app-version> </div> </section> ')}])}e.exports=n},"./src/templates/domains/domainsMenuStep.tpl.html":function(e,t){var a=window.angular,n="templates/domains/domainsMenuStep.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,"<ul class=\"domainMenu pm_tabs domainsMenuStep-container\"> <li ng-class=\"{ 'active': ctrl.step === 1 }\"> <a class=pm_button ng-class=\"{\n 'dead': ctrl.step === 1,\n 'disabled': !ctrl.domain.DomainName\n }\" ng-click=\"ctrl.open('domain')\">1.<br><span translate translate-context=Title>Domain</span></a> </li> <li ng-class=\"{ 'active': ctrl.step === 2 }\"> <a class=pm_button ng-class=\"{\n 'dead': ctrl.step === 2,\n 'disabled': !ctrl.domain.DomainName\n }\" ng-click=\"ctrl.open('verification')\">2.<br><span translate translate-context=Title>Verify</span></a> </li> <li ng-class=\"{ 'active': ctrl.step === 3 }\"> <a class=pm_button ng-class=\"{\n 'dead': ctrl.step === 3,\n 'disabled': ctrl.domain.State === 0 || !ctrl.domain.DomainName\n }\" ng-click=\"ctrl.open('address')\">3.<br><span translate translate-context=Title>Addresses</span></a> </li> <li ng-class=\"{ 'active': ctrl.step === 4 }\"> <a class=pm_button ng-class=\"{\n 'dead': ctrl.step === 4,\n 'disabled': ctrl.domain.State === 0 || !ctrl.domain.DomainName\n }\" ng-click=\"ctrl.open('mx')\">4.<br><span>MX</span></a> </li> <li ng-class=\"{ 'active': ctrl.step === 5 }\"> <a class=pm_button ng-class=\"{\n 'dead': ctrl.step === 5,\n 'disabled': ctrl.domain.State === 0 || !ctrl.domain.DomainName\n }\" ng-click=\"ctrl.open('spf')\">5.<br><span>SPF</span></a> </li> <li ng-class=\"{ 'active': ctrl.step === 6 }\"> <a class=pm_button ng-class=\"{\n 'dead': ctrl.step === 6,\n 'disabled': ctrl.domain.State === 0 || !ctrl.domain.DomainName\n }\" ng-click=\"ctrl.open('dkim')\">6.<br><span>DKIM</span></a> </li> <li ng-class=\"{ 'active': ctrl.step === 7 }\"> <a class=pm_button ng-class=\"{\n 'dead': ctrl.step === 7,\n 'disabled': ctrl.domain.State === 0 || !ctrl.domain.DomainName\n }\" ng-click=\"ctrl.open('dmarc')\">7.<br><span>DMARC</span></a> </li> </ul> ")}])}e.exports=n},"./src/templates/elements/advancedFilterElement.tpl.html":function(e,t){var a=window.angular,n="templates/elements/advancedFilterElement.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_buttons advancedFilterElement-container" ng-class="{\n \'advancedFilterElement-state-drafts\': (\'secured.drafts.**\' | includedByState) || (\'secured.allDrafts.**\' | includedByState),\n \'advancedFilterElement-state-spam\': (\'secured.spam.**\' | includedByState),\n \'advancedFilterElement-state-trash\': (\'secured.trash.**\' | includedByState)\n}"> <a class="pm_trigger advancedFilterElement-btn-dropdown" dropdown> <small translate>More</small> <i class="fa fa-angle-down"></i> </a> <div class="pm_dropdown widest noPadding advancedFilterElement-content"> <button class=advancedFilterElement-btn-drafts data-action=empty data-action-arg=drafts> <div> <i class="fa fa-times-circle-o"></i> <span translate translate-context=Action>Empty drafts</span> </div> </button> <button class=advancedFilterElement-btn-spam data-action=empty data-action-arg=spam> <div> <i class="fa fa-times-circle-o"></i> <span translate translate-context=Action>Empty spam</span> </div> </button> <button class=advancedFilterElement-btn-trash data-action=empty data-action-arg=trash> <div> <i class="fa fa-times-circle-o"></i> <span translate translate-context=Action>Empty trash</span> </div> </button> <button class=advancedFilterElement-btn-folder data-action=empty data-action-arg=folder> <div> <i class="fa fa-times-circle-o"></i> <span translate translate-context=Action>Empty folder</span> </div> </button> <button class=advancedFilterElement-btn-small-to-large data-action=orderBy data-action-arg=size> <div> <i class="fa fa-sort-amount-asc"></i> <span translate translate-context=Action>Size: Small to large</span> </div> </button> <button class=advancedFilterElement-btn-large-to-small data-action=orderBy data-action-arg=-size> <div> <i class="fa fa-sort-amount-desc"></i> <span translate translate-context=Action>Size: Large to small</span> </div> </button> <button class=advancedFilterElement-btn-new-to-old data-action=orderBy data-action-arg=-date> <div> <i class="fa fa-clock-o"></i> <span translate translate-context=Action>Date: New to old</span> </div> </button> <button class=advancedFilterElement-btn-old-to-new data-action=orderBy data-action-arg=date> <div> <i class="fa fa-history"></i> <span translate translate-context=Action>Date: Old to new</span> </div> </button> <button class=advancedFilterElement-btn-show-all data-action=clearFilter> <div> <i class="fa fa-list"></i> <span translate translate-context=Action>Show all</span> </div> </button> <button class=advancedFilterElement-btn-unread data-action=filterBy data-action-arg=unread> <div> <i class="fa fa-eye-slash"></i> <span translate translate-context=Action>Show unread</span> </div> </button> <button class=advancedFilterElement-btn-read data-action=filterBy data-action-arg=read> <div> <i class="fa fa-eye"></i> <span translate translate-context=Action>Show read</span> </div> </button> <moved-button class=advancedFilterElement-btn-moved ng-if="\n (\'secured.drafts.**\' | includedByState) ||\n (\'secured.allDrafts.**\' | includedByState) ||\n (\'secured.sent.**\' | includedByState) ||\n (\'secured.allSent.**\' | includedByState)\n "></moved-button> </div> </div> ')}])}e.exports=n},"./src/templates/elements/countElementsSelected.tpl.html":function(e,t){var a=window.angular,n="templates/elements/countElementsSelected.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="countElementsSelected-container pm-flex-content-vertical-center"> <i class="fa fa-check-square countElementsSelected-icon"></i> <number-element-selected class=countElementsSelected-title data-number=numberElementChecked></number-element-selected> <div> <button class="pm_button countElementsSelected-btn-unselect conversationPlaceholder-btn-unselect" ng-show="numberElementChecked > 0" translate translate-context=Action>Deselect all</button> </div> </div> ')}])}e.exports=n},"./src/templates/elements/elementsSelector.tpl.html":function(e,t){var a=window.angular,n="templates/elements/elementsSelector.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=elements-selector ng-class="{disabled: !conversations.length}"> <div class=elements-selector-check> <label class=elements-selector-label> <custom-checkbox class=elements-selector-label ng-class="{disabled: !conversations.length}" for=selectAll pt-tooltip-translate="Select messages" pt-tooltip-translate-context=Action data-custom-id=selectAll data-custom-name=selectAll data-custom-class="elements-selector-checkbox element-selector-input" data-custom-ng-checked="checkedSelectorState() && conversations.length" data-custom-ng-click=$event.stopPropagation() data-custom-value=all data-custom-pt-select-elements data-custom-ng-disabled=!conversations.length></custom-checkbox> </label> </div> <a class="inheritPadding pm_trigger elements-selector-trigger-dropdown" dropdown ng-class="{disabled: !conversations.length}" ng-if="!idDefined() || viewLayout === 0"> <i class="elements-selector-trigger-dropdown-fa-angle-down fa fa-angle-down"></i> </a> <span class="element-selector-set-scope pm_dropdown"></span> </div> ')}])}e.exports=n},"./src/templates/elements/foldersElement.tpl.html":function(e,t){var a=window.angular,n="templates/elements/foldersElement.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,"<span class=folderConversations-container></span> ")}])}e.exports=n},"./src/templates/elements/labelsElement.tpl.html":function(e,t){var a=window.angular,n="templates/elements/labelsElement.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_labels labelsElement-container" data-format=stack> <div ng-repeat="label in labels track by label.ID" data-label-id="{{ ::label.ID }}" title="{{ ::label.Name }}" class=labelsElement-label ng-style=::color(label)> <span class=labelsElement-name>{{ ::label.Name }}</span> <button class="labelsElement-btn-remove fa fa-times" data-label-id={{::label.ID}}></button> </div> <div class="labelsElement-more labelsElement-hidden" pt-tooltip-translate="More labels">…</div> </div> ')}])}e.exports=n},"./src/templates/elements/moveElement.tpl.html":function(e,t){var a=window.angular,n="templates/elements/moveElement.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_buttons moveElement-container"> <button type=button class="pm_buttons-child fa fa-trash-o toolbar-btn-trash moveElement-btn-trash" pt-tooltip-translate="Move to trash" data-action=trash pt-tooltip-translate-context=Action></button> <button type=button class="pm_buttons-child fa fa-inbox toolbar-btn-inbox moveElement-btn-inbox" pt-tooltip-translate="Move to inbox" data-action=inbox pt-tooltip-translate-context=Action></button> <button type=button class="pm_buttons-child fa fa-archive toolbar-btn-archive moveElement-btn-archive" pt-tooltip-translate="Move to archive" data-action=archive pt-tooltip-translate-context=Action></button> <button type=button class="pm_buttons-child fa fa-ban toolbar-btn-spam moveElement-btn-spam" pt-tooltip-translate="Move to spam" data-action=spam pt-tooltip-translate-context=Action></button> <button type=button class="pm_buttons-child fa fa-times-circle-o toolbar-btn-delete moveElement-btn-delete" pt-tooltip-translate=Delete data-action=delete pt-tooltip-translate-context=Action></button> </div> ')}])}e.exports=n},"./src/templates/elements/navElements.tpl.html":function(e,t){var a=window.angular,n="templates/elements/navElements.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="navElements-container pm_buttons"> <button class="navElements-btn-next pm_button" data-dest=next pt-tooltip-translate=Previous pt-tooltip-translate-context=Action> <i class="fa fa-chevron-left"></i> </button> <button class="navElements-btn-previous pm_button" data-dest=previous pt-tooltip-translate=Next pt-tooltip-translate-context=Action> <i class="fa fa-chevron-right"></i> </button> </div> ')}])}e.exports=n},"./src/templates/elements/ptSelectElement.tpl.html":function(e,t){var a=window.angular,n="templates/elements/ptSelectElement.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="selection ptSelectConversation-container"> <label class=ptSelectConversation-label> <custom-checkbox data-custom-class=ptSelectConversation-input data-custom-ng-checked=conversations[$index].Selected data-custom-index="{{ $index }}"></custom-checkbox> </label> </div> ')}])}e.exports=n},"./src/templates/elements/ptStar.tpl.html":function(e,t){var a=window.angular,n="templates/elements/ptStar.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=starButton ng-class="isStarred() ? \'starButton-starred\' : \'\'"> <a pt-tooltip-translate=Unstar pt-tooltip-translate-context="Toggle Star message/conversation" class="starButton-unstar fa fa-star"></a> <a pt-tooltip-translate=Star pt-tooltip-translate-context="Toggle Star message/conversation" class="starButton-star fa fa-star-o"></a> </div> ')}])}e.exports=n},"./src/templates/filter/customFilterList.tpl.html":function(e,t){var a=window.angular,n="templates/filter/customFilterList.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=row> <div class="setting pm_form full"> <header-block class=settingsLabels-header-filter> <h2 class=settingsLabels-title-filter translate translate-context=Title>Custom Filters</h2> </header-block> <p translate translate-context=Info class="alert alert-info">Add a custom filter to perform actions such as automatically labeling or archiving messages.</p> <p class="alert alert-info" ng-show="isFree === true && customFilters.length > 0" translate translate-context=Info>Free ProtonMail accounts are limited to 1 custom filter. Please <a ui-sref="secured.dashboard({scroll: true})">upgrade</a> to get unlimited filters.</p> <div class=settingsFilters-actions> <section class=settingsFilters-actions-buttons> <button class="pm_button primary" translate translate-context=Action ng-click=addCustomFilter()>Add Filter</button> <button class="pm_button link" translate translate-context=Action ng-click=addSieveFilter()>Add Sieve Filter</button> </section> <section class="settingsFilters-actions-notice help-dnd" ng-if="customFilters.length > 0" translate-context=Help translate>You can drag and drop custom filter to order them.</section> </div> <p class="alert alert-info" ng-show="customFilters.length === 0" translate translate-context=Info>You have no custom filters.</p> <div ng-show="customFilters.length > 0"> <ul class="settingsFilters-sort-container pm_sort-container" data-as-sortable=filterDragControlListeners is-disabled="customFilters.length === 1" ng-class="{ \'as-sortable-disabled\': customFilters.length === 1 }" data-ng-model=customFilters> <li class=pm_sort-item ng-repeat="filter in customFilters | orderBy: \'Priority\'" as-sortable-item=""> <div class=pm_sort-item-content as-sortable-item-handle=""> <div> <span class=ellipsis title="{{ filter.Name }}">{{ filter.Name }}</span> </div> <toggle class=settingsFilters-sort-toggle data-status=filter.Status data-on=ON data-off=OFF data-name=changeCustomFilterStatus data-id="{{ filter.ID }}"></toggle> <div> <button class="pm_button link" ng-show=isSimple(filter) ng-click=editCustomFilter(filter)>Edit</button> <button class="pm_button link" ng-click="editCustomFilter(filter, true)">Edit sieve</button> <button class="pm_button link text-red" ng-click=deleteCustomFilter(filter)>Delete</button> </div> </div> </li> </ul> </div> </div> </div> ')}])}e.exports=n},"./src/templates/filter/emailBlockButton.tpl.html":function(e,t){var a=window.angular,n="templates/filter/emailBlockButton.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<button class="pm_button primary" translate translate-context=Action>Add</button> ')}])}e.exports=n},"./src/templates/filter/emailBlockList.tpl.html":function(e,t){var a=window.angular,n="templates/filter/emailBlockList.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=emailBlockList-container> <header-block data-level=2 class=settingsLabels-header-blocklist> <h2 class="settingsLabels-title-blocklist margin-bottom email-block-list-name">{{::filterName}}</h2> <email-block-button data-target-list={{::listType}}></email-block-button> </header-block> <div> <p class="alert alert-info" translate translate-context=Info ng-if="entries.length === 0"> No emails in the <span class=email-block-list-name>{{::filterName}}</span>, click <b>Add</b> to add addresses to the <span class=email-block-list-name>{{::filterName}}</span>. </p> <div class="pm_table block-list" ng-class="{ empty: entries.length === 0 }"> <table class="bordered limited"> <tbody class=emailBlockList-list> <tr ng-repeat="entry in entries track by entry.ID" class=emailBlockList-row> <td class=blocklist-email-value>{{ ::entry.Email }}</td> <td class=text-right> <button data-entry-id="{{ ::entry.ID }}" class="pm_button link emailBlockList-btn-switch" pt-tooltip-translate-translate="Move item to another list" pt-tooltip-translate=Switch> <i class="fa fa-arrows-h"></i> </button> <button data-entry-id="{{ ::entry.ID }}" class="pm_button link emailBlockList-btn-delete" pt-tooltip-translate-translate="Remove item from the list" pt-tooltip-translate=Delete> <i class="fa fa-times text-red"></i> </button> </td> </tr> </tbody> </table> </div> </div> </div> ')}])}e.exports=n},"./src/templates/filter/filterAddressModal.tpl.html":function(e,t){var a=window.angular,n="templates/filter/filterAddressModal.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal small {{ctrl.class}}" role=dialog> <form class=modal-dialog name=filterAddressForm ng-submit="filterAddressForm.emailAddress.$valid && ctrl.create()" novalidate> <button type=button ng-click=ctrl.cancel() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <header class=modal-header> <h3 class=modal-title ng-if="ctrl.type === \'whitelist\'" translate translate-context=Title>Add to Whitelist</h3> <h3 class=modal-title ng-if="ctrl.type === \'blacklist\'" translate translate-context=Title>Add to Blacklist</h3> </header> <div class="modal-body pm_form ng-message-wrapper"> <input type=email ng-model=ctrl.filter.Email id=emailAddress name=emailAddress placeholder-translate="Email Address"> <div ng-messages=filterAddressForm.emailAddress.$error role=alert> <div class=ng-messages-errors> <p ng-message=email class=text-red translate-context=Error translate>Invalid email</p> </div> </div> </div> </div> <footer class=modal-footer> <button type=button class=pm_button ng-click=ctrl.cancel() ng-disabled=networkActivity.loading() translate translate-context=Action>Cancel</button> <button class="pm_button primary pull-right" ng-disabled=networkActivity.loading() translate translate-context=Action>Save</button> </footer> </form> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/filter/filterView.tpl.html":function(e,t){var a=window.angular,n="templates/filter/filterView.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div id=pm_settings> <div class="settings settingsFilters-container"> <custom-filter-list></custom-filter-list> <spam-lists></spam-lists> </div> </div> ')}])}e.exports=n},"./src/templates/filter/modal.tpl.html":function(e,t){var a=window.angular,n="templates/filter/modal.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal {{ctrl.class}} filter-modal-container" ng-class="ctrl.mode === \'complex\' ? \'filter-modal-complex\' : \'filter-modal-simple\'" role=dialog> <div class=modal-dialog> <button type=button ng-click=ctrl.cancel() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <h3 class=modal-title translate-context="Filter modal title" translate>Custom Filter</h3> </div> <div class="modal-body pm_form filter-form"> <p translate translate-context=Info class="alert alert-info filter-complex-only">To find out how to write Sieve filters, <a target=_blank href=https://protonmail.com/support/knowledge-base/sieve/ >click here</a>.</p> <div class=pm_grid> <div class=col-1-8> <label for=filterName translate translate-context=Title>Name</label> </div> <div class=col-7-8> <input class=filter-modal-input-name type=text id=filterName name=filterName ng-model=ctrl.filter.Name /> <p class="filter-modal-alert text-red" translate-context=Error translate>Field required</p> </div> </div> <sieve-label-input sieve=ctrl.filter.Sieve></sieve-label-input> <p translate translate-context=Info class="alert alert-info">Custom filters work on all new emails, including incoming emails as well as sent emails</p> <div class=filter-simple-only> <legend translate-context=Title translate translate-context=Title>Conditions</legend> <div class=filter-modal-conditions ng-repeat="condition in ctrl.filter.Simple.Conditions"> <p class="filter-modal-simple-condition bold text-center" ng-hide="$index === 0"> <span class="pm_select inline"> <select ng-model=ctrl.filter.Simple.Operator ng-options="operator.label for operator in ctrl.operators"></select><i class="fa fa-angle-down"></i> </span> </p> <div class="filter-modal-condition alert" style=position:relative> <div class=filter-modal-condition-remove> <button type=button title=Remove ng-hide="ctrl.filter.Simple.Conditions.length === 1" ng-click=ctrl.removeCondition(condition) class="pm_button white"> <i class="fa fa-trash"></i> </button> </div> <div class=filter-modal-condition-settings> <span class="filter-modal-condition-if bold" translate-context="Filter modal condition" translate>If</span> <span class="pm_select inline"> <select ng-model=condition.Type ng-options="type.label for type in ctrl.types"></select> <i class="fa fa-angle-down"></i> </span> <span class=filter-modal-condition-attachments ng-if="condition.Type.value === \'attachments\'"> <label> <custom-radio data-custom-ng-change="ctrl.onChangeAttachements(condition, \'contains\')" data-custom-ng-model=condition.Comparator.value data-custom-ng-value="\'contains\'" data-custom-value=contains></custom-radio> <span translate translate-context=Title>With Attachments</span> </label> <label> <custom-radio data-custom-ng-change="ctrl.onChangeAttachements(condition, \'!contains\')" data-custom-ng-model=condition.Comparator.value data-custom-ng-value="\'!contains\'" data-custom-value=!contains></custom-radio> <span translate translate-context=Title>Without Attachments</span> </label> </span> <span class="pm_select inline" ng-show="condition.Type.value === \'subject\' || condition.Type.value === \'sender\' || condition.Type.value === \'recipient\'"> <select class=autoWidth ng-model=condition.Comparator ng-options="comparator.label for comparator in ctrl.comparators"></select> <i class="fa fa-angle-down"></i> </span> <div class=filter-modal-condition-settings-item ng-if="condition.Type.value === \'subject\' || condition.Type.value === \'sender\' || condition.Type.value === \'recipient\'"> <div ng-if="condition.Values.length > 0"> <span class=filter-modal-condition-badges ng-repeat="value in condition.Values track by $id(value)"> <span class="filter-modal-condition-badge pm_badge default none">{{ value }} <a href=# ng-click="condition.Values.splice($index, 1)"><i class="fa fa-times"></i></a> </span> <span class=filter-modal-condition-or translate-context="Filter modal value OR value" translate>or</span> </span> </div> </div> <form class="filter-modal-add-condition-settings-item filter-modal-add-condition" ng-show="condition.Type.value === \'subject\'" ng-submit=ctrl.addValue(condition)> <input class=filter-modal-add-condition-input type=text ng-model=condition.value placeholder-translate="Text or pattern" placeholder-translate-context="Filter modal condition" ng-blur=ctrl.addValue(condition) /> <button class="filter-modal-add-condition-button pm_button" ng-disabled=!condition.value type=submit> <i class="fa fa-check"></i> </button> </form> <form class="filter-modal-add-condition-settings-item filter-modal-add-condition filter-modal-add-condition-autocomplete" ng-show="condition.Type.value === \'sender\' || condition.Type.value === \'recipient\'" ng-submit=ctrl.addValue(condition)> <autocomplete-email class=filter-modal-add-condition-input data-email=condition.value data-event-type=filter-modal-add-condition-input data-event-data={{$index}}></autocomplete-email> <button class="filter-modal-add-condition-button pm_button" ng-disabled=!condition.value type=submit> <i class="fa fa-check"></i> </button> </form> </div> </div> </div> <p> <a href=# class="pm_button link" ng-click=ctrl.addCondition() translate translate-context=Action>Add Condition</a> </p> <legend translate-context=Title translate translate-context=Title>Actions</legend> <label> <custom-checkbox data-custom-ng-model=ctrl.hasLabels></custom-checkbox> <span translate-context="Filter modal label" translate>Apply Labels</span> </label> <div class="alert pm_grid filter-modal-label-container" ng-show=ctrl.hasLabels> <div class=col-1-4 ng-repeat="label in ctrl.filter.Simple.Actions.Labels track by label.ID | orderBy: \'Order\'"> <label class=filter-modal-label> <custom-checkbox data-custom-ng-model=label.Selected></custom-checkbox> <i class=fa ng-class="{ \'fa-folder\': label.Exclusive, \'fa-tag\': !label.Exclusive }" ng-style="{color: label.Color}"></i> <span class=ellipsis title="{{ ::label.Name }}">{{ ::label.Name }}</span> </label> </div> <div class="col-1-4 filter-modal-label-add"> <button class="pm_button white" ng-click=ctrl.addLabel() translate translate-context=Action>Add label</button> </div> </div> <label> <custom-checkbox data-custom-ng-model=ctrl.hasMove></custom-checkbox> <span translate-context="Filter modal label" translate>Move To</span> </label> <div class="alert pm_grid" ng-show=ctrl.hasMove> <div class=col-1-4> <label> <custom-radio data-custom-ng-model=ctrl.filter.Simple.Actions.Move data-custom-value=inbox></custom-radio> <span class=ellipsis translate translate-context=Label>Inbox</span> </label> </div> <div class=col-1-4> <label> <custom-radio data-custom-ng-model=ctrl.filter.Simple.Actions.Move data-custom-value=archive></custom-radio> <span class=ellipsis translate translate-context=Label>Archive</span> </label> </div> <div class=col-1-4> <label> <custom-radio data-custom-ng-model=ctrl.filter.Simple.Actions.Move data-custom-value=spam></custom-radio> <span class=ellipsis translate translate-context=Label>Spam</span> </label> </div> <div class=col-1-4> <label> <custom-radio data-custom-ng-model=ctrl.filter.Simple.Actions.Move data-custom-value=trash></custom-radio> <span class=ellipsis translate translate-context=Label>Trash</span> </label> </div> <div class=col-1-4 ng-repeat="folder in ctrl.folders track by folder.ID"> <label> <custom-radio data-custom-ng-model=ctrl.filter.Simple.Actions.Move data-custom-value="{{ ::folder.Name }}"></custom-radio> <span class=ellipsis title="{{ ::folder.Name }}">{{ ::folder.Name }}</span> </label> </div> <div class="col-1-4 filter-modal-folder-add"> <button class="pm_button white" ng-click=ctrl.addFolder() translate translate-context=Action>Add folder</button> </div> </div> <label> <custom-checkbox data-custom-ng-model=ctrl.hasMark></custom-checkbox> <span translate-context="Filter modal label" translate>Mark As</span> </label> <div class="alert pm_grid" ng-show=ctrl.hasMark> <div class=col-1-4> <label> <custom-checkbox data-custom-ng-model=ctrl.filter.Simple.Actions.Mark.Read></custom-checkbox> <span class=ellipsis translate translate-context=Label>Read</span> </label> </div> <div class=col-1-4> <label> <custom-checkbox data-custom-ng-model=ctrl.filter.Simple.Actions.Mark.Starred></custom-checkbox> <span class=ellipsis translate translate-context=Label>Starred</span> </label> </div> </div> </div> </div> </div> <div class=modal-footer> <button type=button class=pm_button ng-click=ctrl.cancel() ng-disabled=networkActivity.loading() translate translate-context=Action>Cancel</button> <button type=button ng-click=ctrl.save() class="pm_button primary pull-right" ng-disabled="networkActivity.loading() || ctrl.valid() === false" translate translate-context=Action>Save</button> </div> </div> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/filter/sieveLabelInput.tpl.html":function(e,t){var a=window.angular,n="templates/filter/sieveLabelInput.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_grid sieve-script filter-complex-only"> <div class=col-1-8> <label translate translate-context=Title>Sieve Script</label> </div> <div class=col-7-8 id=filterScriptContainer> <div ui-codemirror="{ onLoad : codeMirrorLoaded }" id=filterScript ng-model=sieve data-ui-codemirror-opts=codeMirrorOptions></div> </div> </div> ')}])}e.exports=n},"./src/templates/filter/spamListSearch.tpl.html":function(e,t){var a=window.angular,n="templates/filter/spamListSearch.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=pm_grid> <form class=col-1-1> <input type=search class="search ng-pristine ng-untouched ng-valid ng-empty" placeholder="Search Whitelist and Blacklist"> </form> </div> ')}])}e.exports=n},"./src/templates/filter/spamLists.tpl.html":function(e,t){var a=window.angular,n="templates/filter/spamLists.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=row> <div class="setting pm_form full"> <header-block class=settingsLabels-header-spam> <h2 class=settingsLabels-title-spam translate translate-context=Title>Spam Filters</h2> </header-block> <p class="alert alert-info"> <span translate translate-context=Info> Sender specific spam rules can be applied here. Whitelist addresses always go to Inbox while Blacklist addresses always go to Spam. Marking a message as spam adds the address to the Blacklist. Marking a message as not spam adds the address to the Whitelist. </span> <a href=https://protonmail.com/support/knowledge-base/spam-filtering/ target=_blank translate="" translate-context=Link>Learn More</a> </p> <spam-list-search></spam-list-search> <div class=pm_grid> <div class=col-1-2> <email-block-list id=whitelist data-list-type=whitelist data-switch-to=blacklist></email-block-list> </div> <div class=col-1-2> <email-block-list id=blacklist data-list-type=blacklist data-switch-to=whitelist></email-block-list> </div> </div> </div> </div> ')}])}e.exports=n},"./src/templates/formUtils/captcha.tpl.html":function(e,t){var a=window.angular,n="templates/formUtils/captcha.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div id=captchaFrame class=spacing-top> <span class=loading translate>Loading...</span> <iframe id=pm_captcha sandbox="allow-scripts allow-same-origin"></iframe> </div> ')}])}e.exports=n},"./src/templates/formUtils/captchaView.tpl.html":function(e,t){var a=window.angular,n="templates/formUtils/captchaView.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=captchaView> <div class="loading pm-flex-content-vertical-center text-center"> <loader-tag></loader-tag> </div> <iframe sandbox="allow-scripts allow-same-origin"></iframe> </div> ')}])}e.exports=n},"./src/templates/formUtils/cardView.tpl.html":function(e,t){var a=window.angular,n="templates/formUtils/cardView.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=card-container> <div class="pm_grid card-name"> <label for=fullname translate translate-context=Label>Name on card</label> <div class=input-icon> <i class="fa fa-user"></i> <input type=text autofocus id=fullname name=fullname ng-model=card.fullname placeholder="Thomas Anderson" required/> <div ng-messages=form.fullname.$error> <p ng-message=required class=text-red translate-context=Error translate>Field required</p> </div> </div> </div> <div class="pm_grid card-number"> <label for=cardnumber translate translate-context=Label>Card Number</label> <div class=input-icon> <card-icon class=card-number-icon number=card.number></card-icon> <input type=text id=cardnumber name=cardnumber ng-model=card.number placeholder="0000 0000 0000 0000" data-card-number maxlength=20 required/> <div ng-messages=form.cardnumber.$error> <p ng-message=required class=text-red translate-context=Error translate>Field required</p> <p ng-message=cardNumber class=text-red translate-context=Error translate>Invalid card number</p> </div> </div> </div> <div class="pm_grid card-metas"> <div class="col-1-3 card-metas-expiry"> <label translate translate-context=Label>Expiry Date</label> <span class=pm_select> <select ng-model=card.month ng-options="month for month in months" ng-init="card.month = months[0]"></select> <i class="fa fa-angle-down"></i> </span> </div> <div class="col-1-3 card-metas-year"> <label> </label> <span class=pm_select> <select ng-model=card.year ng-options="year for year in years" ng-init="card.year = years[0]"></select> <i class="fa fa-angle-down"></i> </span> </div> <div class="col-1-3 card-metas-cvc"> <label for=cvc translate translate-context=Label>Security Code</label> <div class="input-icon right"> <i class="fa fa-question-circle" data-cvc-tooltip></i> <input type=text id=cvc name=cvc ng-model=card.cvc maxlength=4 card-cvc required/> <div ng-messages=form.cvc.$error> <p ng-message=required class=text-red translate-context=Error translate>Field required</p> <p ng-message=cardCvc class=text-red translate-context=Error translate>Invalid CVC</p> </div> </div> </div> </div> <div class="pm_grid card-zip"> <div class="col-1-2 card-zip-code"> <label for=zip translate translate-context=Label>ZIP/Postal Code</label> <input type=text minlength=3 maxlength=9 id=zip name=zip ng-model=card.zip required/> <div ng-messages=form.zip.$error> <p ng-message=required class=text-red translate-context=Error translate>Field required</p> </div> </div> <div class="col-1-2 card-zip-country"> <label for=country translate translate-context=Label>Country</label> <span class=pm_select> <select id=country ng-model=card.country ng-options="country.label disable when country.disabled for country in countries"></select> <i class="fa fa-angle-down"></i> </span> </div> </div> </div> ')}])}e.exports=n},"./src/templates/formUtils/password.tpl.html":function(e,t){var a=window.angular,n="templates/formUtils/password.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,"<div class=password-container> <input type=password class=password-input ng-model=value autocapitalize=off autocorrect=off autocomplete=off required data-toggle-password> <div class=password-messages ng-messages=message> <p ng-message=required class=text-red translate-context=Error translate>Field required</p> <p ng-message=compareTo class=text-red translate-context=Error translate>Passwords do not match</p> </div> </div> ")}])}e.exports=n},"./src/templates/labels/createLabel.tpl.html":function(e,t){var a=window.angular,n="templates/labels/createLabel.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=pm-flex-content> <button type=button class=createLabel-button ng-class="{\'createLabel-withName\': name.length}"> <span class=createLabel-new-name> <span translate translate-context=action> Create label </span> <i>"{{ name }}"</i> ? </span> <span class=createLabel-new-label translate translate-context=action>Create a new label</span> </button> </div> ')}])}e.exports=n},"./src/templates/labels/dropdownFolders.tpl.html":function(e,t){var a=window.angular,n="templates/labels/dropdownFolders.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=dropdown-folder-container> <div class=dropdown-folder-title> <p translate translate-context=title>Move to</p> </div> <label class=dropdown-folder-search> <i class="fa fa-search dropdown-folder-search-icon"></i> <input class=dropdown-folder-search-input type=search placeholder-translate="Filter folders" ng-model=searchValue ng-minlength=1> </label> <div class="dropdown-folder-fullwidth scrollbox-container" ng-if="labels.length > 0"> <ul class=scrollbox-container-group> <li class=dropdown-folder-scrollbox-group-item ng-repeat="label in (filteredLabels = (labels | filter: {Name: searchValue} | orderBy: \'Order\')) track by label.ID"> <button class=dropdown-folder-scrollbox-group-item-button data-folder-id="{{ ::label.ID }}"> <div> <i class="fa dropdown-folder-scrollbox-group-item-icon" ng-class=label.className ng-style=::color(label)></i> <span class=ellipsis>{{ ::label.Name }}</span> </div> </button> </li> <li class=scrollbox-container-group-item-empty ng-show="filteredLabels.length === 0" translate translate-context=Info>no folder found</li> </ul> </div> <div class=dropdown-folder-create> <button class=dropdown-folder-create-button translate-context=Action translate>Create a new folder</button> </div> </div> ')}])}e.exports=n},"./src/templates/layout/auth.tpl.html":function(e,t){var a=window.angular,n="templates/layout/auth.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,"<header-no-auth></header-no-auth> <div id=mainContainer class=container-fluid> <div class=row> <div ui-view=panel></div> </div> </div> ")}])}e.exports=n},"./src/templates/layout/login.tpl.html":function(e,t){var a=window.angular,n="templates/layout/login.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,"<header-no-auth></header-no-auth> <div class=row> <div ui-view=panel></div> </div> <div id=pm_footer> <p><app-copyright></app-copyright> <app-version></app-version></p> </div> ")}])}e.exports=n},"./src/templates/layout/outside.tpl.html":function(e,t){var a=window.angular,n="templates/layout/outside.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,"<header-no-auth></header-no-auth> <div class=outside> <div ui-view=content></div> </div> <div id=pm_footer> <p><app-copyright></app-copyright> <app-version></app-version></p> </div> ")}])}e.exports=n},"./src/templates/layout/pre.tpl.html":function(e,t){var a=window.angular,n="templates/layout/pre.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<header-login></header-login> <div class="pm_panel text-center" id=content> <p translate-context=Info translate>Verifying invite link...</p> </div> ')}])}e.exports=n},"./src/templates/layout/secured.tpl.html":function(e,t){var a=window.angular,n="templates/layout/secured.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,"<header-secured></header-secured> <div id=ptSidebar ui-view=sidebar></div> <div id=pm_main ui-view=content></div> <composer-message></composer-message> <wizard></wizard> <mailto-handler></mailto-handler> <command-palette></command-palette> <detect-time-width></detect-time-width> ")}])}e.exports=n},"./src/templates/layout/sidebar.tpl.html":function(e,t){var a=window.angular,n="templates/layout/sidebar.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<settings-menu ng-if="settingsSidebar && !(mobileMode && !showSidebar)"></settings-menu> <sidebar-contact ng-if="contactSidebar && !(mobileMode && !showSidebar)"></sidebar-contact> <sidebar id=pm_sidebar ng-if="inboxSidebar && !mobileMode"></sidebar> <sidebar-mobile id=pm_sidebarMobile ng-if="showSidebar && mobileMode && inboxSidebar"></sidebar-mobile> ')}])}e.exports=n},"./src/templates/members/restoreAdministratorPanel.tpl.html":function(e,t){var a=window.angular,n="templates/members/restoreAdministratorPanel.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<p class="alert alert-danger"> <span translate-context="Restore administrator panel" translate>Due to a password change, your organization administrator privileges have been restricted. The following actions are no longer permitted:</span><br/> <br/> <span translate-context="Restore administrator panel" translate>* Creating new sub-users</span><br/> <span translate-context="Restore administrator panel" translate>* Reading emails of non-private subusers</span><br/> </p> <p> <button class=pm_button type=button translate-context=Action translate>Restore administrator privileges</button> <a href=https://protonmail.com/support/knowledge-base/business/ target=_blank class="pm_button link" translate-context=Link translate>Learn more</a> </p> ')}])}e.exports=n},"./src/templates/message/allMessageLabels.tpl.html":function(e,t){var a=window.angular,n="templates/message/allMessageLabels.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="allMessageLabels-container labelz"> <folders-message class=allMessageLabels-list></folders-message> <labels-element data-button=remove data-format=inline data-limit=none data-element=message class=allMessageLabels-list></labels-element> </div> ')}])}e.exports=n},"./src/templates/message/displayContentBtn.tpl.html":function(e,t){var a=window.angular,n="templates/message/displayContentBtn.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,"<section class=displayContentBtn-container ng-class=\"{\n 'displayContentBtn-type-embedded': message.showEmbedded === false,\n 'displayContentBtn-type-remote': message.showImages === false}\"> <div class=displayContentBtn-notice> <span class=displayContentBtn-notice-text></span> </div> <button class=\"displayContentBtn-button pm_button\" translate translate-context=Action>Load</button> </section> ")}])}e.exports=n},"./src/templates/message/filterButton.tpl.html":function(e,t){var a=window.angular,n="templates/message/filterButton.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=pm_buttons> <a href=# class="pm_trigger open-label" pt-tooltip-translate="Custom Filter" pt-tooltip-translate-context=Action pt-tooltip-translate-comment=Tooltip dropdown> <small><i class="fa fa-filter"></i> <i class="fa fa-angle-down"></i></small> </a> <div class="pm_dropdown wide"> <ul class=filterButton-container> <li><b translate-context="Filter message" translate>Filter on:</b></li> <li class=filterButton-item> <label class=filterButton-label> <span class=filterButton-label-text translate-context="Filter message" translate>Subject</span> <custom-checkbox class=filterButton-checkbox data-custom-ng-model=model.subject></custom-checkbox> </label> </li> <li class=filterButton-item> <label class=filterButton-label> <span class=filterButton-label-text translate-context="Filter message" translate>Sender</span> <custom-checkbox class=filterButton-checkbox data-custom-ng-model=model.sender></custom-checkbox> </label> </li> <li class=filterButton-item> <label class=filterButton-label> <span class=filterButton-label-text translate-context="Filter message" translate>Recipient</span> <custom-checkbox class=filterButton-checkbox data-custom-ng-model=model.recipient></custom-checkbox> </label> </li> <li class=filterButton-item> <label class=filterButton-label translate-context="Filter message" translate><span class=filterButton-label-text>Attachments</span> <custom-checkbox class=filterButton-checkbox data-custom-ng-model=model.attachments></custom-checkbox> </label> </li> </ul> <footer class=filterButton-footer> <button class="pm_button primary filterButton-btn-next" translate-context="Filter message" translate>Next</button> </footer> </div> </div> ')}])}e.exports=n},"./src/templates/message/foldersMessage.tpl.html":function(e,t){var a=window.angular,n="templates/message/foldersMessage.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,"<span class=foldersMessage-container></span> ")}])}e.exports=n},"./src/templates/message/message.tpl.html":function(e,t){var a=window.angular,n="templates/message/message.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<article class=message ng-class="{\n \'open\': message.expand,\n \'errorDecryption\': message.failedDecryption,\n \'marked\': message.ID === marked.ID,\n \'unread\': message.IsRead === 0,\n \'details\': message.toggleDetails === true,\n \'draft\': message.Type === 1,\n \'sent\': message.Type === 2 || message.Type === 3,\n \'hasSender\': message.Sender.Address.length,\n \'message-mode-plain\': message.viewMode === \'plain\'\n}"> <div class=summary toggle-message> <div class=pull-left> <div class=meta> <i class="history fa fa-reply" ng-if="message.IsReplied === 1"></i> <i class="history fa fa-reply-all" ng-if="message.IsRepliedAll === 1"></i> <i class="history fa fa-mail-forward" ng-if="message.IsForwarded === 1"></i> <span class="contact message-contact"> <span class="from message-contact-from"><span translate-context="Message sender label" translate>From</span>:</span> <strong>{{ ::message.Sender | contact:\'Name\' }}</strong> <em>{{ ::message.Sender | contact:\'Address\' }}<message-compose-to class=message-contact-sender data-key=Sender></message-compose-to></em> </span> </div> <div class="location message-summary-folder"> <folders-message></folders-message> </div> </div> <div class="labels message-summary-labels"> <labels-element data-button=remove data-element=message class=message-summary-labels-list></labels-element> </div> <div class=time> <i class="fa fa-paperclip" ng-show="message.NumAttachments > 0"></i> <time class=time-readable>{{ ::message.Time | localReadableTime }}</time> <time class=time-machine time-refreshed="{{ ::message.Time }}" time-filter=messageTime time-interval=30000></time> </div> <div class=status> <pt-star data-model=message class=singleStar data-pt-star-type=message></pt-star> <span class="fa locks" ng-class="{\n \'fa-lock\': !!!(message.IsEncrypted == \'0\'),\n \'text-purple\': !!(message.IsEncrypted == \'1\') || !!(message.IsEncrypted == \'3\') || !!(message.IsEncrypted == \'5\') || !!(message.IsEncrypted == \'6\'),\n \'fa-unlock-alt\': !!(message.IsEncrypted == \'0\'),\n \'pgp\': !!(message.IsEncrypted == \'7\') || !!(message.IsEncrypted == \'8\')\n }" title="{{ ::message.encryptionType() }}"> </span> </div> </div> <div ng-if=message.expand> <div class=details> <div class=recipients-summary> <strong translate-context="Message recipient label" translate>To</strong>: <span class=recipients-summary-label ng-repeat="email in recipients() track by $id(email)" title="{{ ::email | contact:\'Address\' }}">{{::email | contact: \'Name\': true | nameRecipient}}</span> <span ng-if=::noRecipients() class=recipients-summary-label translate-context="No recipients to display in the message header" translate>Undisclosed Recipients</span> </div> <div class=recipients-details> <message-contacts class=recipients-details-toGroup ng-if=message.ToList.length data-model=::message.ToList data-list=To></message-contacts> <message-contacts class=recipients-details-ccGroup ng-if=message.CCList.length data-model=::message.CCList data-list=CC></message-contacts> <message-contacts class=recipients-details-bccGroup ng-if=message.BCCList.length data-model=::message.BCCList data-list=BCC></message-contacts> </div> <all-message-labels ng-if=message.toggleDetails></all-message-labels> <div class=action-row> <div class="actions pull-right" ng-if="message.decrypting === false"> <div class=pm_buttons> <filter-button data-message=message></filter-button> <div class=pm_buttons> <a class="pm_trigger open-folder pull-left" pt-tooltip-translate="Move to" pt-tooltip-translate-context=Action pt-tooltip-translate-comment=Tooltip dropdown> <small><i class="fa fa-folder"></i> <i class="fa fa-angle-down"></i></small> </a> <div class="pm_dropdown right wide pull-left"> <dropdown-folders data-elements=getElements></dropdown-folders> </div> </div> <div class=pm_buttons> <a class="pm_trigger open-label pull-left" pt-tooltip-translate="Label as" pt-tooltip-translate-context=Action pt-tooltip-translate-comment=Tooltip dropdown> <small><i class="fa fa-tag"></i> <i class="fa fa-angle-down"></i></small> </a> <div class="pm_dropdown right wide pull-left"> <dropdown-labels data-messages=getMessage data-message=message data-save=saveLabels></dropdown-labels> </div> </div> </div> <nav class=pm_buttons> <a class=message-actionBtn-reply data-action-compose=::message data-action-compose-type=reply pt-tooltip-translate=Reply pt-tooltip-translate-context=Action> <i class="fa fa-mail-reply"></i> </a> <a class=message-actionBtn-replyall data-action-compose=::message data-action-compose-type=replyall pt-tooltip-translate="Reply all" pt-tooltip-translate-context=Action> <i class="fa fa-mail-reply-all"></i> </a> <a class=message-actionBtn-forward data-action-compose=::message data-action-compose-type=forward pt-tooltip-translate=Forward pt-tooltip-translate-context=Action> <i class="fa fa-mail-forward"></i> </a> <a href=# class=pm_trigger dropdown pt-tooltip-translate=More pt-tooltip-translate-context=Action> <i class="fa fa-angle-down"></i> </a> <div class="pm_dropdown wide right"> <button data-action-message=move data-action-message-type=inbox> <i class="fa fa-inbox"></i> <span translate translate-context=Action>Move to inbox</span> </button> <button data-action-message=move data-action-message-type=trash> <i class="fa fa-trash-o"></i> <span translate translate-context=Action>Move to trash</span> </button> <button data-action-message=unread> <i class="fa fa-eye-slash"></i> <span translate translate-context=Action>Mark as unread</span> </button> <button data-action-message=move data-action-message-type=spam ng-hide="\'secured.spam.**\' | includedByState"> <i class="fa fa-ban"></i> <span translate translate-context=Action>Mark as spam</span> </button> <button data-action-message=delete ng-if="\'secured.trash.**\' | includedByState"> <i class="fa fa-times"></i> <span translate translate-context=Action>Delete</span> </button> <button data-action-message=togglePlainHtml> <span ng-show="message.viewMode === \'html\'"> <i class="fa fa-file-text-o"></i> <span translate translate-context=Action>View source code</span> </span> <span ng-show="message.viewMode === \'plain\'"> <i class="fa fa-file-photo-o"></i> <span translate translate-context=Action>View rendered HTML</span> </span> </button> <button data-action-message=viewPgp> <i class="fa fa-code"></i> <span translate translate-context=Action ng-if="message.IsEncrypted !== 0">View headers</span> <span translate translate-context=Action ng-if="message.IsEncrypted === 0">View original</span> </button> <button data-action-message=downloadEml> <i class="fa fa-download"></i> <span translate-context=Action translate>Export</span> </button> <button data-action-message=print> <i class="fa fa-print"></i> <span translate translate-context=Action>Print</span> </button> </div> </nav> </div> <button class=toggleDetails data-action-message=toggleDetails> <span class=toggleDetails-label-show translate translate-context=Action>Show details</span> <span class=toggleDetails-label-hide translate translate-context=Action>Hide details</span> </button> </div> </div> <div ng-if="message.ExpirationTime > 0" class=expiration> <i class="fa fa-hourglass-end"></i> <span translate-context="Message expiration label" translate>This message will expire in</span> <time time-refreshed="{{ ::message.ExpirationTime }}"></time> </div> <message-extra></message-extra> <events-attachments data-model=message></events-attachments> <div class="frame message-frame" data-embedded-img-loader data-inject-message-media> <loader-tag ng-if="message.decrypting === true"></loader-tag> <message-display-error ng-if=message.hasError></message-display-error> <div class="bodyDecrypted email message-body-container" ng-class="{\'plain\': message.isPlain}" render-message-body ng-if="message.viewMode === \'html\' && !message.failedDecryption" toggle-blockquote scroll=true></div> <pre class="email message-body-container" ng-if="message.viewMode === \'plain\' || message.failedDecryption">{{message.plainText()}}</pre> </div> <list-attachments ng-if=message.Attachments.length data-model=message></list-attachments> </div> <div class=clear></div> </article> ')}])}e.exports=n},"./src/templates/message/messageAutoGenerated.tpl.html":function(e,t){var a=window.angular,n="templates/message/messageAutoGenerated.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,"<div class=message-autogenerated-container> <div class=message-autogenerated-notice> <div class=message-autogenerated-notice-text translate-context=Info translate> This message is automatically generated as a response to a previous message. </div> <a class=message-autogenerated-notice-link href=https://protonmail.com/support/knowledge-base/autoresponder/ target=_blank translate-context=Info translate>Learn more</a> </div> </div> ")}])}e.exports=n},"./src/templates/message/messageContacts.tpl.html":function(e,t){var a=window.angular,n="templates/message/messageContacts.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,"<div class=messageContacts-container> <span class=messageContacts-where></span> <ul class=messageContacts-list> <li class=messageContacts-list-item ng-repeat=\"email in model track by $id(email)\"> <span title=\"{{ ::email | contact:'Address' }}\">{{ ::email | contact:'Name' }}</span> <em class=messageContacts-email>{{ ::email | contact:'Address' }}<message-compose-to class=messageContacts-btn-compose></message-compose-to> </em> </li> </ul> </div> ")}])}e.exports=n},"./src/templates/message/messageDisplayError.tpl.html":function(e,t){var a=window.angular,n="templates/message/messageDisplayError.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="messageDisplayError-container alert alert-danger"> <div ng-if="message.failedDecryption && !message.networkError"> <span class="pull-left fa fa-exclamation-triangle"></span> <strong translate translate-context="Message decryption error">Decryption error</strong> <div translate translate-context="Message decryption error">Decryption of this message\'s encryption content failed.</div> <a href=# data-reload-state translate-context="Action to reload the current state" translate>Try again</a> </div> <div ng-if="!message.failedDecryption && !message.networkError && message.errorInfo"> <span class="pull-left fa fa-exclamation-triangle"></span> <strong translate translate-context="Message network error">Sanitization error</strong> <a href=# class=messageDisplayError-btn-report translate-context="Action to report an error for the message" translate>Report problem</a> </div> <div ng-if=message.networkError> <span class="pull-left fa fa-exclamation-triangle"></span> <strong translate translate-context="Message network error">Network error</strong> <div translate translate-context="Message network error">Please check your connection and try again.</div> <a href=# reload-state translate-context="Action to reload the current state" translate>Try again</a> </div> </div> ')}])}e.exports=n},"./src/templates/message/messageExtra.tpl.html":function(e,t){var a=window.angular,n="templates/message/messageExtra.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<section class=messageExtra-container> <message-spam-score class=messageExtra-container-error ng-if="message.SpamScore === 100 || message.SpamScore === 101" data-score="{{ ::message.SpamScore }}"></message-spam-score> <message-pgp-attachments class=messageExtra-container-error ng-if=message.PgpMimeWithAttachments></message-pgp-attachments> <div class=messageExtra-container-error ng-if=message.MIMEParsingFailed> <div class=messageMimeParsing-container> <div class=messageMimeParsing-notice> <div class=messageMimeParsing-notice-sub translate-context=Error translate>The email body is not a valid MIME message.</div> </div> </div> </div> <unsubscribe-panel ng-if="!unsubscribed && message.getListUnsubscribe()"></unsubscribe-panel> <message-auto-generated ng-if=message.isAutoReply></message-auto-generated> <display-content-btn data-action=remote></display-content-btn> <display-content-btn data-action=embedded></display-content-btn> </section> ')}])}e.exports=n},"./src/templates/message/messageView.tpl.html":function(e,t){var a=window.angular,n="templates/message/messageView.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,"<div class=messageView-contaniner> <header id=conversationHeader> <h1>{{message.Subject}}</h1> </header> <div id=pm_thread tabindex=0> <message ng-if=message data-model=message data-last=true data-index=0></message> </div> </div> ")}])}e.exports=n},"./src/templates/modals/abuseFraudModal.tpl.html":function(e,t){var a=window.angular,n="templates/modals/abuseFraudModal.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal small {{ctrl.class}}" role=dialog style=display:block> <div class=modal-dialog> <button type=button ng-click=ctrl.close() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <h3 class=modal-title>Account disabled</h3> </div> <div class=modal-body> <div class="alert alert-info"> <p translate-context="Info for the abuse / fraud modal" translate>Account disabled for abuse or fraud.</p> <p translate-context="Info for the abuse / fraud modal" translate>You can find more information and <a href=https://protonmail.com/abuse target=_blank>contact us here</a>.</p> </div> </div> </div> <div class="modal-footer text-right"> <button tabindex=1 autofocus type=button class=pm_button ng-click=ctrl.close() translate translate-context=Action>OK</button> </div> </div> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/modals/activateOrganization.tpl.html":function(e,t){var a=window.angular,n="templates/modals/activateOrganization.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal small {{ctrl.class}}" role=dialog style=display:block> <form method=post class=modal-dialog ng-submit="activationModalForm.$valid && ctrl.submit()" name=activationModalForm novalidate> <button type=button ng-click=ctrl.cancel() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <h4 class=modal-title>{{ ctrl.title }}</h4> </div> <div class="modal-body pm_form"> <div class="alert alert-info" ng-show=ctrl.message.length ng-bind-html=ctrl.message></div> <p>{{ ctrl.prompt }}</p> <div class=margin> <password data-autofocus=true data-value=ctrl.inputCode data-id=inputCode placeholder-translate=Password data-name=inputCode data-form=activationModalForm></password> </div> <div class="{{ ctrl.alertClass }}" ng-show=ctrl.alert.length>{{ ctrl.alert }}</div> </div> </div> <div class="modal-footer text-right"> <button type=button class="pm_button pull-left" ng-click=ctrl.cancel() translate translate-context=Action>Cancel</button> <button type=button class=pm_button ng-click=ctrl.reset() ng-show=ctrl.showReset translate translate-context=Action>Reset Keys</button> <button type=submit class="pm_button primary" translate translate-context=Action>Submit</button> </div> </form> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/modals/addAddress.tpl.html":function(e,t){var a=window.angular,n="templates/modals/addAddress.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal {{ctrl.class}}" role=dialog style=display:block> <form class=modal-dialog name=addressForm ng-submit=ctrl.submit() novalidate> <button type=button ng-click=ctrl.cancel() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <h4 class=modal-title translate translate-context=Title>Create Address</h4> </div> <div class="modal-body pm_form"> <div class=pm_grid ng-if="\'secured.members\' | includedByState"> <div class=col-3-8> <label translate-context=Label translate>User</label> </div> <div class=col-5-8> <strong>{{ ctrl.members[0].Name }}</strong> </div> </div> <div class=pm_grid ng-if="\'secured.domains\' | includedByState"> <div class=col-3-8> <label translate-context=Label translate>Choose the user who will own this address</label> </div> <div class=col-5-8> <div class=col-1-2> <span class=pm_select> <select ng-model=ctrl.member ng-options="member.Name for member in ctrl.members"></select> <i class="fa fa-angle-down"></i> </span> </div> <div class=col-1-2 ng-show=ctrl.showAddMember> <button type=button ng-click=ctrl.addMember() class=pm_button translate-context=Action translate-comment=button translate>Add user</button> </div> </div> </div> <div class=pm_grid> <div class=col-3-8> <label translate-context=Label translate>Enter address</label> </div> <div class=col-5-8> <div class=col-1-2> <input autofocus type=text ng-model=ctrl.address placeholder=thomas.anderson /> </div> <div class=col-1-3 ng-show="ctrl.domains.length === 1"> <label class=bold>@{{ ctrl.domain.DomainName }}</label> </div> <div class=col-1-3 ng-show="ctrl.domains.length > 1"> <span class=pm_select> <select ng-model=ctrl.domain ng-options="\'@\'+domain.DomainName for domain in ctrl.domains"></select> <i class="fa fa-angle-down"></i> </span> </div> </div> </div> <p ng-hide=ctrl.domain.ID class="alert alert-info" translate translate-context=Info>ProtonMail addresses can never be deleted (only disabled). ProtonMail addresses will always count towards your address limit whether enabled or not. <a href=https://protonmail.com/support/knowledge-base/aliases-within-protonmail/ target=_blank>Learn more</a></p> <h3 translate-context="Title in the address modal" ranslate>Name / Signature</h3> <display-name-signature data-model=ctrl.model></display-name-signature> </div> </div> <div class="modal-footer text-right"> <button type=button class=pm_button ng-click=ctrl.cancel() ng-disabled=networkActivity.loading() translate translate-context=Action>Cancel</button> <button class="pm_button primary" ng-disabled=networkActivity.loading() translate translate-context=Action>Save</button> </div> </form> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/modals/alert.tpl.html":function(e,t){var a=window.angular,n="templates/modals/alert.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal {{ctrl.class}}" role=dialog style=display:block> <div class=modal-dialog> <button type=button ng-click=ctrl.cancel() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header ng-show=ctrl.title> <h3 class=modal-title>{{ ctrl.title }}</h3> </div> <div class=modal-body> <p class="alert {{ ctrl.alert }}" ng-bind-html=ctrl.message></p> </div> </div> <div class="modal-footer text-right"> <button tabindex=1 autofocus type=button class="pm_button primary" ng-click=ctrl.ok() translate translate-context=Action>OK</button> </div> </div> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/modals/bug.tpl.html":function(e,t){var a=window.angular,n="templates/modals/bug.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal {{ctrl.class}}" role=dialog style=display:block> <form class="modal-dialog pm_form bugModalForm" ng-submit="bugModalForm.$valid && ctrl.submit()" name=bugModalForm novalidate> <button type=button ng-click=ctrl.cancel() title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <h3 class=modal-title translate translate-context=Title>Report Bug</h3> </div> <div class=modal-body> <bug-modal-view data-form=bugModalForm data-model=ctrl.form></bug-modal-view> </div> </div> <div class="modal-footer text-right"> <button id=cancelModalBtn type=button class="pm_button pull-left" ng-click=ctrl.cancel() translate-context=Action translate>Cancel</button> <button id=confirmModalBtn class="pm_button primary" ng-disabled=networkActivity.loading() translate-context=Action translate>Submit</button> </div> </form> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/modals/card.tpl.html":function(e,t){var a=window.angular,n="templates/modals/card.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal small {{ctrl.class}}" role=dialog style=display:block> <div class=modal-dialog> <form method=post ng-submit="cardForm.$valid && ctrl.submit()" novalidate="" name=cardForm> <button type=button ng-click=ctrl.cancel() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <h4 class=modal-title translate translate-context=Title>Payment details</h4> </div> <div class="modal-body pm_form"> <p class="alert alert-info">{{ ctrl.text }}</p> <card-view ng-if="ctrl.mode === \'edition\'" card=ctrl.card form=cardForm></card-view> <card-panel ng-if="ctrl.mode === \'display\'" ng-click=ctrl.edit() card=ctrl.panel><card-panel> </card-panel></card-panel></div> </div> <div class=modal-footer> <button type=reset class=pm_button ng-click=ctrl.cancel() ng-disabled=networkActivity.loading() translate translate-context=Action>Cancel</button> <button type=submit class="pm_button primary pull-right" ng-disabled="networkActivity.loading() || ctrl.mode === \'display\'" translate translate-context=Action>Submit</button> </div> </form> </div> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/modals/changeOrganizationPassword.tpl.html":function(e,t){var a=window.angular,n="templates/modals/changeOrganizationPassword.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal small {{ctrl.class}}" role=dialog style=display:block> <div class=modal-dialog> <form method=post ng-submit="passwordForm.$valid && ctrl.submit()" novalidate="" name=passwordForm> <button type=button ng-click=ctrl.cancel() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <h4 class=modal-title translate translate-context=Title>Change Organization Password</h4> </div> <div class="modal-body pm_form"> <p class="alert alert-info" translate-context=Info translate>Other administrators exist in your organization, you are responsible for communicating the new password to them.</p> <label for=newPassword translate-context=Label translate>New Organization Password</label> <password data-id=newPassword data-name=newPassword data-value=ctrl.newPassword form=passwordForm></password> <label for=confirmPassword translate-context=Label translate>Confirm Password</label> <password data-id=confirmPassword data-name=confirmPassword data-value=ctrl.confirmPassword compare=ctrl.newPassword form=passwordForm></password> <p class="alert alert-warning"> <span translate-context=Info translate>* Do NOT forget this password. If you forget it, you will not be able to manage your organization.</span><br/> <span translate-context=Info translate>* Save your password somewhere safe. Click on <i class="fa fa-eye"></i> icon to confirm you that have typed your password correctly.</span> </p> </div> </div> <div class=modal-footer> <button type=button class=pm_button ng-click=ctrl.cancel() translate translate-context=Action>Cancel</button> <button type=submit class="pm_button primary pull-right" ng-disabled=networkActivity.loading() translate-context=Action translate>Save</button> </div> </form> </div> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/modals/changePassword.tpl.html":function(e,t){var a=window.angular,n="templates/modals/changePassword.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal small {{ctrl.class}}" role=dialog style=display:block> <div class=modal-dialog> <form method=post ng-submit="passwordForm.$valid && ctrl.submit()" novalidate="" name=passwordForm> <button type=button ng-click=ctrl.cancel() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <h4 ng-if="ctrl.type === \'password\' && ctrl.mode === 1" class=modal-title translate translate-context=Title>Change Password</h4> <h4 ng-if="ctrl.type === \'password\' && ctrl.mode === 2" class=modal-title translate translate-context=Title>Switch to One-Password Mode</h4> <h4 ng-if="ctrl.type === \'login\' && ctrl.mode === 2" class=modal-title translate translate-context=Title>Change Login Password</h4> <h4 ng-if="ctrl.type === \'login\' && ctrl.mode === 1" class=modal-title translate translate-context=Title>Switch to Two-Password Mode</h4> <h4 ng-if="ctrl.type === \'mailbox\' && ctrl.mode === 2" class=modal-title translate translate-context=Title>Change Mailbox Password</h4> <h4 ng-if="ctrl.type === \'mailbox\' && ctrl.mode === 1" class=modal-title translate translate-context=Title>Switch to Two-Password Mode</h4> <h4 ng-if="ctrl.type === \'organization\'" class=modal-title translate translate-context=Title>Change Organization Password</h4> </div> <div class="modal-body pm_form"> <p ng-if="ctrl.type === \'organization\'" class="alert alert-info" translate-context=Info translate>Other administrators exist in your organization, you are responsible for communicating the new password to them.</p> <p ng-if="ctrl.type === \'password\' && ctrl.mode === 2" class="alert alert-info" translate-context=Info translate>ProtonMail can also be used with a single password which replaces both the login and mailbox password. To switch to single password mode, enter the single password you would like to use and click Save.</p> <p ng-if="ctrl.type === \'login\' && ctrl.mode === 1" class="alert alert-info" translate-context=Info translate>Two-password mode uses separate passwords for login and mailbox decryption. This provides a minor security benefit in some situations, however we recommend one-password mode for most users. To switch to two password mode, first set a login password and then set a mailbox password.</p> <label ng-if="ctrl.type === \'password\'" for=newPassword translate-context=Label translate>New Password</label> <label ng-if="ctrl.type === \'login\'" for=newPassword translate-context=Label translate>New Login Password</label> <label ng-if="ctrl.type === \'mailbox\'" for=newPassword translate-context=Label translate>New Mailbox Password</label> <label ng-if="ctrl.type === \'organization\'" for=newPassword translate-context=Label translate>New Organization Password</label> <password data-id=newPassword data-name=newPassword data-value=ctrl.newPassword form=passwordForm></password> <label for=confirmPassword translate-context=Label translate>Confirm Password</label> <password data-id=confirmPassword data-name=confirmPassword data-value=ctrl.confirmPassword compare=ctrl.newPassword form=passwordForm></password> <p class="alert alert-warning" ng-if="ctrl.type === \'password\' || ctrl.type === \'login\' || ctrl.type === \'mailbox\'"> <span translate-context=Info translate>* Do NOT forget this password. If you forget it, you will not be able to login or decrypt your messages.</span><br/> <span translate-context=Info translate>* Save your password somewhere safe. Click on <i class="fa fa-eye"></i> icon to confirm you that have typed your password correctly.</span><br/> <span translate-context=Info translate>* We recommend adding a recovery email address first. Otherwise, you cannot recover your account if something goes wrong.</span> </p> <p class="alert alert-warning" ng-if="ctrl.type === \'organization\'"> <span translate-context=Info translate>* Do NOT forget this password. If you forget it, you will not be able to manage your organization.</span><br/> <span translate-context=Info translate>* Save your password somewhere safe. Click on <i class="fa fa-eye"></i> icon to confirm you that have typed your password correctly.</span> </p> </div> </div> <div class=modal-footer> <button type=button class=pm_button ng-click=ctrl.cancel() translate translate-context=Action>Cancel</button> <button type=submit class="pm_button primary pull-right" ng-disabled=networkActivity.loading()> <span ng-if="ctrl.type !== \'login\' || ctrl.mode !== 1" translate-context=Action translate>Save</span> <span ng-if="ctrl.type === \'login\' && ctrl.mode === 1" translate-context=Action translate>Next</span> </button> </div> </form> </div> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/modals/confirm.tpl.html":function(e,t){var a=window.angular,n="templates/modals/confirm.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal small {{ctrl.class}}" role=dialog style=display:block> <form name=confirmForm class=modal-dialog ng-submit=ctrl.confirm() novalidate> <button type=button ng-click=ctrl.cancel() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header ng-show=ctrl.title> <h4 class=modal-title>{{ ctrl.title }}</h4> </div> <div class=modal-body> <div class="no-margin-bottom {{::ctrl.classNameMessage}}" ng-bind-html=::ctrl.message></div> </div> </div> <div class=modal-footer> <button id=cancelModalBtn type=button class=pm_button ng-click=ctrl.cancel()>{{ ::ctrl.cancelText }}</button> <button id=confirmModalBtn autofocus class="pm_button primary pull-right">{{ ::ctrl.confirmText }}</button> </div> </form> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/modals/customizeInvoice.tpl.html":function(e,t){var a=window.angular,n="templates/modals/customizeInvoice.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal small {{ctrl.class}}" role=dialog style=display:block> <form name=customizeInvoiceModalForm novalidate class=modal-dialog> <button type=button ng-click=ctrl.cancel() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class="modal-content pm_form"> <div class=modal-header> <h4 class=modal-title translate translate-context=Title>Add invoice details</h4> <p class="alert alert-info" translate translate-context=Info>Add your name (or company name) and address to your invoices.</p> </div> <div class=modal-body> <label for=customText translate translate-context=Title>Customize invoices</label> <div class=ng-messages-wrapper> <textarea ng-model=ctrl.text name=customText rows=5 data-is-valid-invoice-text id=customText placeholder-translate="Add your name (or company name) and address to your invoices." placeholder-translate-context=Info></textarea> <div ng-messages=customizeInvoiceModalForm.$error> <p class=text-red ng-message=isValidInvoiceText translate-context=Error translate>Invoice text has too many lines (limit: 5)</p> <p class=text-red ng-message=isValidInvoiceTextLine translate-context=Error translate>A line contains too many characters (limit: 40)</p> </div> </div> </div> </div> <div class=modal-footer> <button type=button class="pm_button primary pull-right" ng-click=ctrl.submit() translate translate-context=Action>Submit</button> <button type=button class=pm_button ng-click=ctrl.cancel() translate translate-context=Action>Cancel</button> </div> </form> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/modals/deleteAccount.tpl.html":function(e,t){var a=window.angular,n="templates/modals/deleteAccount.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal small {{ctrl.class}}" role=dialog style=display:block> <form class=modal-dialog name=deleteForm ng-submit=ctrl.submit() autocomplete=off novalidate> <button type=button ng-click=ctrl.cancel() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class="modal-content pm_form"> <div class=modal-header> <h4 class=modal-title translate translate-context=Title>Delete account</h4> </div> <div class=modal-body> <p class="alert alert-warning"> <strong translate translate-context=Info translate-comment="account deletion warning">WARNING: DELETION IS PERMANENT</strong><br/> <span translate translate-context=Info>If you wish to delete in order to combine this account with another one, do NOT delete your account. You need to instead follow</span> <a href=https://protonmail.com/support/knowledge-base/combine-accounts/ target=_blank translate translate-context=Link>the procedure</a>. </p> <p class="alert alert-warning"> <strong translate translate-context=Info translate-comment="account deletion warning">WARNING: THIS ALSO DELETES ALL CONNECTED SERVICES (ex: <i>ProtonVPN</i>)</strong> </p> <div class=margin ng-if=ctrl.isAdmin> <label translate translate-context=Label>We are sorry to see you go!</label> <label translate translate-context=Label>Please tell us why you are leaving:</label> <textarea ng-model=ctrl.feedback placeholder-translate=Feedback></textarea> </div> <div class=margin> <label translate translate-context=Label>Please provide an email address in case we need to contact you (optional):</label> <input type=email ng-model=ctrl.email placeholder-translate=Email /> </div> <div class=margin> <label translate translate-context=Label>Enter your login password to confirm your identity:</label> <input type=password ng-model=ctrl.password placeholder-translate="Login password" required/> </div> <div class=margin ng-if=ctrl.hasTwoFactor> <label translate translate-context=Label>Enter two-factor passcode:</label> <two-fa-field ng-model=ctrl.twoFactorCode placeholder-translate="Two-factor passcode"></two-fa-field> </div> </div> </div> <div class=modal-footer> <button type=submit class="pm_button error pull-right" ng-disabled=networkActivity.loading() translate-context=Action translate>Delete</button> <button type=button class=pm_button ng-click=ctrl.cancel() translate-context=Action translate>Cancel</button> </div> </form> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/modals/domain/address.tpl.html":function(e,t){var a=window.angular,n="templates/modals/domain/address.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal {{ctrl.class}} domains" role=dialog style=display:block> <div class=modal-dialog> <button type=button ng-click=ctrl.close() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <domains-menu-step></domains-menu-step> <h4 class=modal-title>3. <span translate translate-context=Title>Addresses</span> (<em translate>Required</em>)</h4> </div> <div class="modal-body pm_form"> <p translate>Please add addresses to send and receive email with this domain</p> <button ng-click=ctrl.addAddress() class="pm_button primary" translate-context=Action translate-comment=button translate>Add Address</button> <button ng-click=ctrl.addMember() ng-show=ctrl.showMember class=pm_button translate-context=Action translate-comment=button translate>Add user</button> <div ng-if="ctrl.domain.Addresses.length > 0"> <p><strong translate translate-context=Title translate-comment="added addesses table label / heading">Domain addresses</strong></p> <div class=pm_table> <table class="pm_form fixedLayout bordered"> <thead> <tr> <th translate translate-context=Title translate-comment="table heading">User</th> <th translate translate-context=Title translate-comment="table heading">Address</th> </tr> </thead> <tbody> <tr ng-repeat="address in ctrl.domain.Addresses" ng-class="{\'disabled\': address.Status === 0}"> <td ng-bind=address.Email></td> </tr> </tbody> </table> </div> </div> </div> </div> <div class="modal-footer clearfix"> <button type=button class="pm_button primary pull-right" ng-click=ctrl.next() ng-show="ctrl.domain.State > 0" translate translate-context=Action>Next</button> <button type=button class=pm_button ng-click=ctrl.close() translate translate-context=Action>Close</button> </div> </div> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/modals/domain/dkim.tpl.html":function(e,t){var a=window.angular,n="templates/modals/domain/dkim.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal {{ctrl.class}} domains" role=dialog style=display:block> <div class=modal-dialog> <button type=button ng-click=ctrl.close() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <domains-menu-step></domains-menu-step> <span ng-show="ctrl.domain.DkimState === 0" class="pull-right pm_badge error" translate>Not set</span> <span ng-show="ctrl.domain.DkimState === 1 || ctrl.domain.DkimState === 2 || ctrl.domain.DkimState === 3" class="pull-right pm_badge error" translate translate-context="DKIM configuration status badge">Not set properly</span> <span ng-show="ctrl.domain.DkimState === 4" class="pull-right pm_badge success" translate translate-context="DKIM configuration status badge">On</span> <span ng-show="ctrl.domain.DkimState === 5" class="pull-right pm_badge success" translate translate-context="DKIM configuration status badge">Off</span> <h4 class=modal-title>6. <span translate translate-context=Title>DKIM</span> <em translate>Recommended</em></h4> </div> <div class="modal-body pm_form"> <p translate>ProtonMail supports DKIM signing for custom domains! To use DKIM authentication, please add the following TXT record into your DNS for this domain. This can typically be done in the control panel of your domain name registrar.</p> <p translate>Please add the follow TXT record. Note, DNS records can take several hours to update.</p> <p><a target=_blank href=https://protonmail.com/support/knowledge-base/anti-spoofing/ translate translate-context=Action>Learn more</a></p> <div class=pm_table> <table class=record> <tr> <th style=width:3rem translate translate-context=Title>Type</th> <th style=width:12.5rem translate translate-context=Title>Host name</th> <th style=width:12rem translate translate-context=Title>Value / Data / Points to</th> </tr> <tr> <td><code>TXT</code></td> <td><code>protonmail._domainkey</code></td> <td><code>{{ ctrl.domain.DkimPublicKey }}</code></td> </tr> </table> </div> <p class="alert alert-info" translate translate-context=Info>Keep this record in your DNS for as long as you want to use DKIM. You can change its Value to <code>off</code> to disable DKIM</p> </div> </div> <div class="modal-footer clearfix"> <button class="pm_button primary pull-right" ng-click=ctrl.next() translate translate-context=Action>Next</button> <button class=pm_button ng-click=ctrl.close() translate translate-context=Action>Close</button> </div> </div> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/modals/domain/dmarc.tpl.html":function(e,t){var a=window.angular,n="templates/modals/domain/dmarc.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal {{ctrl.class}} domains" role=dialog style=display:block> <div class=modal-dialog> <button type=button ng-click=ctrl.close() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <domains-menu-step></domains-menu-step> <span ng-show="ctrl.domain.DmarcState === 0 || ctrl.domain.DmarcState === 1 || ctrl.domain.DmarcState === 2" class="pull-right pm_badge error" translate translate-comment="DMARC status badge">Not set</span> <span ng-show="ctrl.domain.DmarcState === 3" class="pull-right pm_badge success" translate translate-comment="DMARC status badge">Set</span> <h4 class=modal-title>7. DMARC <em translate translate-comment="DMARC status badge">Optional</em><em>, </em><em translate translate-comment="DMARC status badge">advanced</em></h4> </div> <div class="modal-body pm_form"> <p><span translate translate-context=Info>If you have set both SPF and DKIM, DMARC allows you to specify how other email services should deliver email for your domain if both SPF and DKIM checks have failed. This can make it harder for spammers pretending to be you but may also cause delivery issues if not done properly. Feel free to ignore and skip DMARC unless you really want strict policies such as <strong>p=quarantine</strong> or <strong>p=reject</strong>.</span> <a target=_blank href=https://protonmail.com/support/knowledge-base/anti-spoofing/ translate translate-context=Action>Learn more</a></p> <p translate translate-context=Info>Here is a basic DMARC record that does nothing except email you reports.</p> <div class=pm_table> <table class=record> <tr> <th style=width:3rem translate translate-context=Title translate-context="table heading">Type</th> <th style=width:6.5rem translate translate-context=Title translate-context="table heading">Host name</th> <th style=width:12rem translate translate-context=Title translate-context="table heading">Value / Data / Points to</th> </tr> <tr> <td><code>TXT</code></td> <td><code>_dmarc</code></td> <td><code>v=DMARC1; p=none; rua=mailto:address@yourdomain.com</code></td> </tr> </table> </div> <p class="alert alert-info"><strong>p=none</strong> has no effect on email delivery.</p> <p class="alert alert-info"><strong>address@yourdomain.com</strong> is where you will receive DMARC reports from other email services</p> </div> </div> <div class="modal-footer clearfix"> <button type=button class="pm_button primary pull-right" ng-click=ctrl.verify() translate translate-context=Action>Finish</button> <button type=button class=pm_button ng-click=ctrl.close() translate translate-context=Action>Close</button> </div> </div> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/modals/domain/domain.tpl.html":function(e,t){var a=window.angular,n="templates/modals/domain/domain.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal {{ctrl.class}} domains" role=dialog style=display:block> <form method=post class=modal-dialog ng-submit=ctrl.submit()> <button type=button ng-click=ctrl.cancel() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <domains-menu-step></domains-menu-step> <span ng-show=ctrl.domain.DomainName class="pull-right pm_badge success" translate-context="Add a new domain label" translate>Set</span> <h4 class=modal-title>1. <span translate translate-context=Title>Domain</span></h4> </div> <div class="modal-body pm_form"> <p><span translate-comment="label for adding a new custom domain" translate translate-context=Info>Add a domain that you own to your ProtonMail account.</span> <a target=_blank href=https://protonmail.com/support/knowledge-base/custom-domains/ translate translate-context=Action>Learn more</a></p> <input ng-hide=ctrl.domain type=text autofocus ng-model=ctrl.name placeholder-translate-context="Add a domain" placeholder-translate="Domain name"> <p class="alert alert-warning" ng-show="ctrl.beginsWith(\'www.\')" translate-context=domains translate>\'www\' subdomains are typically not used for email. Are you sure you want to use this domain value?</p> <textarea rows=1 ng-show=ctrl.domain readonly=readonly ng-bind=::ctrl.domain.DomainName></textarea> </div> </div> <div class="modal-footer clearfix"> <button type=button class=pm_button ng-disabled=networkActivity.loading() ng-click=ctrl.cancel() translate translate-context=Action>Close</button> <button type=submit class="pm_button primary pull-right" ng-hide=ctrl.domain.DomainName ng-disabled=networkActivity.loading() translate translate-context=Action>Next</button> <button type=button class="pm_button primary pull-right" ng-show=ctrl.domain.DomainName ng-click=ctrl.next() translate translate-context=Action>Next</button> </div> </form> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/modals/domain/mx.tpl.html":function(e,t){var a=window.angular,n="templates/modals/domain/mx.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal {{ctrl.class}} domains" role=dialog style=display:block> <div class=modal-dialog> <button type=button ng-click=ctrl.close() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <domains-menu-step></domains-menu-step> <span ng-show="ctrl.domain.MxState === 0" class="pull-right pm_badge error" translate translate-comment="MX status badge">Not set</span> <span ng-show="ctrl.domain.MxState === 1 || ctrl.domain.MxState === 2" class="pull-right pm_badge error" translate translate-comment="MX status badge">Not set properly</span> <span ng-show="ctrl.domain.MxState === 3" class="pull-right pm_badge success" translate translate-comment="MX status badge">Good</span> <h4 class=modal-title>4. <span>MX Record</span> <em translate>Required</em></h4> </div> <div class="modal-body pm_form"> <p translate translate-context=Info>Before you can receive emails for your custom domain addresses at ProtonMail, you need to add the following MX record to your DNS. This can typically be done in the control panel of your domain name registrar.</p> <p translate translate-context=Info>Please add the following MX record. Note, DNS records can take several hours to update.</p> <p><a target=_blank href=https://protonmail.com/support/knowledge-base/dns-records/ translate translate-context=Action>Learn more</a></p> <div class=pm_table> <table class=record> <tr> <th style=width:3rem translate translate-context=Title>Type</th> <th style=width:6.5rem translate translate-context=Title>Host name</th> <th style=width:12rem translate translate-context=Title>Value / Data / Points to</th> <th style=width:4rem translate translate-context=Title>Priority</th> </tr> <tr> <td><code>MX</code></td> <td><code>@</code></td> <td><code>mail.protonmail.ch</code></td> <td><code>10</code></td> </tr> </table> </div> <p class="alert alert-info" translate translate-context=Info>Delete any other MX records or make sure ProtonMail\'s Priority is the lowest number.</p> <p class="alert alert-info" translate translate-context=Info>If this domain is currently actively receiving emails, create all used email addresses in Step 3 before changing MX record to ensure a smooth transition.</p> </div> </div> <div class="modal-footer clearfix"> <button class="pm_button primary pull-right" ng-click=ctrl.next() translate translate-context=Action>Next</button> <button class=pm_button ng-click=ctrl.close() translate translate-context=Action>Close</button> <div class=clear></div> </div> </div> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/modals/domain/spf.tpl.html":function(e,t){var a=window.angular,n="templates/modals/domain/spf.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal {{ctrl.class}} domains" role=dialog style=display:block> <div class=modal-dialog> <button type=button ng-click=ctrl.close() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <domains-menu-step></domains-menu-step> <span ng-show="ctrl.domain.SpfState === 0" class="pull-right pm_badge error" translate translate-comment="SPF status badge">Not set</span> <span ng-show="ctrl.domain.SpfState === 1 || ctrl.domain.SpfState === 2" class="pull-right pm_badge error" translate translate-comment="SPF status badge">Not set properly</span> <span ng-show="ctrl.domain.SpfState === 3" class="pull-right pm_badge success" translate translate-comment="SPF status badge">Good</span> <h4 class=modal-title>5. <span translate translate-context=Title>SPF</span> <em translate>Recommended</em></h4> </div> <div class="modal-body pm_form"> <p translate translate-context=Info>SPF is used to specify who is allowed to send email for the domain so we strongly recommend including ProtonMail in your SPF record. Please add the following TXT record into your DNS. This can typically be done in the control panel of your domain name registrar.</p> <p translate translate-context=Info>Please add the following TXT record. Note, DNS records can take several hours to update.</p> <p><a target=_blank href=https://protonmail.com/support/knowledge-base/anti-spoofing/ translate translate-context=Action>Learn more</a></p> <div class=pm_table> <table class=record> <tr> <th style=width:3rem translate translate-context=Title>Type</th> <th style=width:6.5rem translate translate-context=Title>Host name</th> <th style=width:14rem translate translate-context=Title>Value / Data / Points to</th> </tr> <tr> <td><code>TXT</code></td> <td><code>@</code></td> <td><code>v=spf1 include:_spf.protonmail.ch mx ~all</code></td> </tr> </table> </div> <p class="alert alert-info" translate translate-context=Info>If you want to keep an existing SPF record, you can just add <code>include:_spf.protonmail.ch</code> to it after the <code>v=spf1</code>. Do not create multiple SPF records.</p> </div> </div> <div class="modal-footer clearfix"> <button class="pm_button primary pull-right" ng-click=ctrl.next() translate translate-context=Action>Next</button> <button class=pm_button ng-click=ctrl.close() translate translate-context=Action>Close</button> </div> </div> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/modals/domain/verification.tpl.html":function(e,t){var a=window.angular,n="templates/modals/domain/verification.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal {{ctrl.class}} domains" role=dialog style=display:block> <div class=modal-dialog> <button type=button ng-click=ctrl.close() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <domains-menu-step></domains-menu-step> <span ng-show="ctrl.domain.VerifyState === 0" class="pull-right pm_badge error" translate translate-comment="Verification status badge">Not set</span> <span ng-show="ctrl.domain.VerifyState === 1" class="pull-right pm_badge error" translate translate-comment="Verification status badge">Not set properly</span> <span ng-show="ctrl.domain.VerifyState === 2" class="pull-right pm_badge success" translate translate-comment="Verification status badge">Good</span> <h4 class=modal-title>2. <span translate translate-context=Title>Verify</span> <em translate>Required</em></h4> </div> <div class="modal-body pm_form"> <div> <p translate translate-context=Info>For security reasons, we need to verify that you are the owner of your domain. Please add the following code into your DNS. <strong>Do not remove it even after successful verification</strong>. This can typically be done in the control panel of your domain name registrar.</p> <p translate translate-context=Info>Please add the following TXT record:</p> <p><a target=_blank href=https://protonmail.com/support/knowledge-base/dns-records/ translate translate-context=Action>Learn more</a></p> <div class=pm_table> <table class=record> <tr> <th style=width:3rem translate translate-context=Title>Type</th> <th style=width:6.5rem translate translate-context=Title>Host name</th> <th style=width:14rem translate translate-context=Title>Value / Data / Points to</th> </tr> <tr> <td><code>TXT</code></td> <td><code>@</code></td> <td><code>{{ ctrl.domain.VerifyCode }}</code></td> </tr> </table> </div> <p class="alert alert-info" translate translate-context=Info>It can take up to a day for DNS changes to update.</p> </div> </div> </div> <div class="modal-footer clearfix"> <button ng-show="ctrl.domain.VerifyState === 0 || ctrl.domain.VerifyState === 1" class="pm_button primary pull-right" ng-click=ctrl.submit() translate translate-context=Action>Verify</button> <button ng-show="ctrl.domain.State > 0" class="pm_button primary pull-right" ng-click=ctrl.next() translate translate-context=Action>Next</button> <button class=pm_button ng-click=ctrl.close() translate translate-context=Action>Close</button> </div> </div> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/modals/donate.tpl.html":function(e,t){var a=window.angular,n="templates/modals/donate.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal small {{ctrl.class}}" role=dialog style=display:block> <div class="modal-dialog donateModal-container donateModal-type-{{::ctrl.typeOfModal}}" ng-class="{\n \'donateModal-mode-cash\': ctrl.method.value === \'cash\',\n \'donateModal-mode-paypal\': ctrl.method.value === \'paypal\',\n \'donateModal-mode-bitcoin\': ctrl.method.value === \'bitcoin\'\n }" name=donateForm> <button type=button ng-click=ctrl.close() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <h4 class="modal-title donateModal-title-donate" translate translate-context=Title>Donate</h4> <h4 class="modal-title donateModal-title-topUp" translate translate-context=Title>Add credits</h4> </div> <div class="modal-body pm_form"> <donation data-type="{{ ::ctrl.typeOfModal }}" data-processing=ctrl.process data-method=ctrl.method></donation> </div> </div> <div class="modal-footer text-right donateModal-group-btn"> <button type=button class="pm_button donateModal-btn-cancel" ng-click=ctrl.close() translate translate-context=Action>Cancel</button> <button type=button class="pm_button donateModal-btn-close" ng-click=ctrl.close() translate translate-context=Action>Close</button> <button data-donation-external-submit ng-disabled="ctrl.process === true" class="pm_button primary donateModal-btn-donation"> <span class=donateModal-action-donate translate-context=Action translate>Donate</span> <span class=donateModal-action-topUp translate-context=Action translate>top Up</span> </button> </div> </div> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/modals/feedback.tpl.html":function(e,t){var a=window.angular,n="templates/modals/feedback.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal {{ctrl.class}} feedback" role=dialog style=display:block> <form method=post class=modal-dialog ng-submit=ctrl.submit()> <button type=button ng-click=ctrl.close() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <h4 class=modal-title translate translate-context=Title>Feedback form</h4> </div> <div class="modal-body pm_form"> <p translate translate-context=Info>What do you think of ProtonMail version 3.0?</p> <textarea ng-model=ctrl.fdbckTxt placeholder-translate-context="Write a feedback about ProtonMail" placeholder-translate="Your thoughts..."></textarea> <p class="alert alert-info" translate-context=Info translate-comment="feedback modal text" translate><strong>This will only be shown once.</strong> ProtonMail is a global effort. Your feedback is very important in our mission to make encryption available for everyone. Thank You!</p> </div> </div> <div class="modal-footer text-right"> <button class="pm_button pull-left" ng-click=ctrl.close() translate translate-context=Action>Close</button> <button tabindex=1 type=button class="pm_button primary" ng-click=ctrl.submit() translate translate-context=Action>Send</button> </div> </form> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/modals/generate.tpl.html":function(e,t){var a=window.angular,n="templates/modals/generate.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal important {{ctrl.class}} generateModal-container" ng-class="{ \'generateModal-process\': ctrl.process }" role=dialog> <form method=post class=modal-dialog ng-submit=ctrl.submit() novalidate> <button type=button ng-click=ctrl.cancel() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <h4 class=modal-title>{{ ::ctrl.title }}</h4> </div> <div class="modal-body pm_form"> <p ng-show=ctrl.message class=generateModal-key-about>{{ ::ctrl.message }}</p> <div class=pm_grid ng-if=ctrl.askPassword> <div class=col-1-2> <label for=password translate translate-context=Title>Password</label> </div> <div class=col-1-2> <input id=password type=password ng-model=ctrl.password /> </div> </div> <div class="pm_grid generateModal-key-config"> <div class="col-1-2 text-center"> <label class=checkbox> <custom-radio data-custom-ng-model=ctrl.size data-custom-ng-value=2048></custom-radio> <strong translate translate-context=Title translate-comment="form option heading">High security</strong> <small>(2048-bit)</small> </label> </div> <div class="col-1-2 text-center"> <label class=checkbox> <custom-radio data-custom-ng-model=ctrl.size data-custom-ng-value=4096></custom-radio> <strong translate translate-context=Title translate-comment="form option heading">Highest security</strong> <small>(4096-bit)</small> </label> </div> </div> <p class="alert alert-info generateModal-key-about" ng-if="ctrl.size === 4096" translate-context=Info translate>Generating 4096-bit encryption keys may crash or freeze your browser. 4096-bit keys are only recommended for high performance computers - not recommended for tablet and mobile devices.</p> <p class=generateModal-process-about translate-context=Info translate>We are now generating encryption keys for your address, this may take several minutes and temporarily freeze your browser.</p> <div class=pm_table> <table> <thead> <tr> <th translate translate-context=Title translate-comment="table heading">Address</th> <th style=width:6rem class=text-right translate translate-context=Title translate-comment="table heading">Status</th> </tr> </thead> <tbody> <tr class=generateModal-row data-state={{address.state}} ng-repeat="address in ctrl.addresses | orderBy: \'Order\' track by address.ID"> <td>{{ ::address.Email }}</td> <td class=text-right> <span class="pm_badge generateModal-state-queued" translate translate-context="key generation progrss">Queued</span> <span class="generateModal-state-generating pm_badge"><i class="fa fa-spinner fa-spin"></i> <span translate translate-context="key generation progrss">Generating</span></span> <span class="generateModal-state-done pm_badge success" translate translate-context="key generation progrss">Done</span> <span class="generateModal-state-saved pm_badge success" translate translate-context="key generation progrss">Saved</span> <span class="generateModal-state-error pm_badge error" translate translate-context=Error translate-comment="key generation progrss">Error</span> </td> </tr> </tbody> </table> </div> </div> </div> <div class=modal-footer> <button type=button class=pm_button ng-click=ctrl.cancel() ng-disabled="ctrl.process === true" translate translate-context=Action>Cancel</button> <button type=submit class="pm_button primary pull-right" ng-disabled="ctrl.process === true" translate translate-context=Action>Generate Keys</button> </div> </form> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/modals/generateOrganization.tpl.html":function(e,t){var a=window.angular,n="templates/modals/generateOrganization.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal small {{ctrl.class}}" role=dialog style=display:block> <form method=post class=modal-dialog ng-submit="generateOrganizationForm.$valid && ctrl.submit()" name=generateOrganizationForm novalidate> <button type=button ng-click=ctrl.cancel() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <h4 class=modal-title translate translate-context=Title>Change Organization Keys</h4> </div> <div class="modal-body pm_form"> <div class=pm_grid> <div class=col-1-2> <label class=checkbox> <custom-radio data-custom-ng-model=ctrl.size data-custom-ng-value=2048></custom-radio> <strong translate translate-context=Title translate-comment="form option heading">High security</strong> <small>(2048-bit)</small> </label> </div> <div class=col-1-2> <label class=checkbox> <custom-radio data-custom-ng-model=ctrl.size data-custom-ng-value=4096></custom-radio> <strong translate translate-context=Title translate-comment="form option heading">Highest security</strong> <small>(4096-bit)</small> </label> </div> </div> <p class="alert alert-info" ng-show="ctrl.size === 4096" translate translate-context=Info>Generating 4096-bit encryption keys may crash or freeze your browser. 4096-bit keys are only recommended for high performance computers - not recommended for tablet and mobile devices.</p> <label for=newRecoveryPassword translate-context=Title translate>Key recovery password</label> <password data-id=newRecoveryPassword data-name=newRecoveryPassword data-value=ctrl.newRecoveryPassword form=generateOrganizationForm></password> <label for=confirmRecoveryPassword title translate>Confirm recovery Password</label> <password data-id=confirmRecoveryPassword data-name=confirmRecoveryPassword data-value=ctrl.confirmRecoveryPassword form=generateOrganizationForm compare=ctrl.newRecoveryPassword></password> <p class="alert alert-warning" ng-show=ctrl.otherAdmins translate translate-context=Info>Other administrators exist in your organization. You must communicate the new key recovery password to them in order for them to reactivate their full administrator privileges.</p> </div> </div> <div class=modal-footer> <button type=button class=pm_button ng-click=ctrl.cancel() ng-disabled=networkActivity.loading() translate translate-context=Action>Cancel</button> <button type=submit class="pm_button primary pull-right" ng-disabled=networkActivity.loading() translate translate-context=Action>Generate Keys</button> </div> </form> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/modals/hotkey.tpl.html":function(e,t){var a=window.angular,n="templates/modals/hotkey.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal {{ctrl.class}}" role=dialog style=display:block> <div class=modal-dialog> <button type=button ng-click=ctrl.close() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <h4 class=modal-title translate translate-context=Title>Hotkeys</h4> </div> <div class=modal-body> <details class=modal-details open> <summary class=modal-summary>General</summary> <div class="pm_grid modal-content-details"> <div class=col-1-2> <legend class=bold translate translate-context=Title>Application</legend> <p translate translate-context=Info><kbd>?</kbd> Opens the <strong>help modal</strong>.</p> <p translate translate-context=Info><kbd>/</kbd> Focus the <strong>search input</strong>.</p> <p translate translate-context=Info><kbd>enter</kbd> Confirms <strong>the active modal</strong>.</p> <p translate translate-context=Info><kbd>escape</kbd> Closes <strong>the active modal</strong>.</p> <p translate translate-context=Info><kbd>shift</kbd> + <kbd>space</kbd> Opens <strong>the command palette</strong>.</p> </div> <div class=col-1-2> <legend class=bold translate translate-context=Title>Composer</legend> <p translate translate-context=Info><kbd>c</kbd> Opens a new <strong>composer</strong>.</p> <p translate translate-context=Info ng-hide=ctrl.isMac><kbd>ctrl</kbd> + <kbd>enter</kbd> <strong>Sends</strong> the message.</p> <p translate translate-context=Info ng-show=ctrl.isMac><kbd>command</kbd> + <kbd>enter</kbd> <strong>Sends</strong> the message.</p> <p translate translate-context=Info ng-hide=ctrl.isMac><kbd>ctrl</kbd> + <kbd>s</kbd> <strong>Saves</strong> the message.</p> <p translate translate-context=Info ng-show=ctrl.isMac><kbd>command</kbd> + <kbd>s</kbd> <strong>Saves</strong> the message.</p> <p translate translate-context=Info><kbd>escape</kbd> Closes the active <strong>composer</strong>.</p> </div> </div> </details> <details class=modal-details> <summary class=modal-summary>Mail</summary> <div class="pm_grid modal-content-details"> <div class=col-1-2> <legend class=bold translate translate-context=Title>Jumping</legend> <p translate translate-context=Info><kbd>g</kbd> then <kbd>i</kbd> Goes to <strong>inbox</strong>.</p> <p translate translate-context=Info><kbd>g</kbd> then <kbd>d</kbd> Goes to <strong>drafts</strong>.</p> <p translate translate-context=Info><kbd>g</kbd> then <kbd>s</kbd> Goes to <strong>sent</strong>.</p> <p translate translate-context=Info><kbd>g</kbd> then <kbd>.</kbd> Goes to <strong>starred</strong>.</p> <p translate translate-context=Info><kbd>g</kbd> then <kbd>a</kbd> Goes to <strong>archive</strong>.</p> <p translate translate-context=Info><kbd>g</kbd> then <kbd>x</kbd> Goes to <strong>spam</strong>.</p> <p translate translate-context=Info><kbd>g</kbd> then <kbd>t</kbd> Goes to <strong>trash</strong>.</p> </div> <div class=col-1-2> <legend class=bold translate translate-context=Title>Navigation</legend> <p translate translate-context=Info><kbd><i class="fa fa-long-arrow-up"></i></kbd> Marks the <strong>previous</strong> message/conversation.</p> <p translate translate-context=Info><kbd><i class="fa fa-long-arrow-down"></i></kbd> Marks the <strong>next</strong> message/conversation.</p> <p translate translate-context=Info><kbd><i class="fa fa-long-arrow-left"></i></kbd> Marks the last message.</p> <p translate translate-context=Info><kbd><i class="fa fa-long-arrow-right"></i></kbd> Unmarks the message.</p> <p translate translate-context=Info><kbd>k</kbd> Displays the <strong>newer</strong> conversation.</p> <p translate translate-context=Info><kbd>j</kbd> Displays the <strong>older</strong> conversation.</p> <p translate translate-context=Info><kbd>enter</kbd> Opens the <strong>marked</strong> message/conversation.</p> <p translate translate-context=Info><kbd>escape</kbd> Back to the list.</p> </div> </div> <div class="pm_grid modal-content-details"> <div class=col-1-2> <legend class=bold translate translate-context=Title>Threadlist</legend> <p translate translate-context=Info><kbd>*</kbd> then <kbd>a</kbd> <strong>Select all</strong> conversations.</p> <p translate translate-context=Info><kbd>*</kbd> then <kbd>n</kbd> <strong>Unselect all</strong> conversations.</p> <p translate translate-context=Info><kbd>x</kbd> Selects the message/conversation marked.</p> <p translate translate-context=Info><kbd>r</kbd> Marks the message/conversation as <strong>read</strong>.</p> <p translate translate-context=Info><kbd>u</kbd> Marks the message/conversation as <strong>unread</strong>.</p> <p translate translate-context=Info><kbd>.</kbd> Marks or unmarks the message/conversation as <strong>starred</strong>.</p> <p translate translate-context=Info><kbd>i</kbd> Moves the message/conversation to <strong>inbox</strong>.</p> <p translate translate-context=Info><kbd>t</kbd> Moves the message/conversation to <strong>trash</strong>.</p> <p translate translate-context=Info><kbd>a</kbd> Moves the message/conversation to <strong>archive</strong>.</p> <p translate translate-context=Info><kbd>s</kbd> Moves the message/conversation to <strong>spam</strong>.</p> </div> <div class=col-1-2> <legend class=bold translate translate-context=Title>Actions</legend> <p translate translate-context=Info><kbd>shift</kbd> + <kbd>r</kbd> Reply to a message/conversation.</p> <p translate translate-context=Info><kbd>shift</kbd> + <kbd>a</kbd> Reply to all recipients for a message/conversation.</p> <p translate translate-context=Info><kbd>shift</kbd> + <kbd>f</kbd> Forward a message/conversation.</p> </div> </div> </details> <details class=modal-details> <summary class=modal-summary>Contacts</summary> <div class="pm_grid modal-content-details"> <div class=col-1-2> <legend class=bold translate translate-context=Title>Contact List</legend> <p translate translate-context=Info><kbd><i class="fa fa-long-arrow-up"></i></kbd> + <kbd><i class="fa fa-long-arrow-down"></i></kbd> <strong>Moving</strong> between contacts.</p> <p translate translate-context=Info><kbd><i class="fa fa-long-arrow-right"></i></kbd> <strong>To enter</strong> contact details.</p> <p translate translate-context=Info><kbd>t</kbd> <strong>To delete</strong> contact.</p> </div> <div class=col-1-2> <legend class=bold translate translate-context=Title>Contact Details</legend> <p translate translate-context=Info><kbd><i class="fa fa-long-arrow-left"></i></kbd> <strong>Exits</strong> contact details.</p> <p translate translate-context=Info><kbd>TAB</kbd> <strong>Navigates</strong> between fields.</p> <p translate translate-context=Info><kbd>command</kbd> + <kbd>s</kbd> <strong>Saves</strong> the contact.</p> </div> </div> </details> </div> </div> <div class="modal-footer text-right"> <button tabindex=1 type=button class=pm_button ng-click=ctrl.close() translate translate-context=Action>Close</button> </div> </div> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/modals/humanVerification.tpl.html":function(e,t){var a=window.angular,n="templates/modals/humanVerification.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal small very-important {{ctrl.class}}" role=dialog style=display:block> <form method=post class=modal-dialog ng-submit=ctrl.submit() name=humanVerificationForm novalidate> <button type=button ng-click=ctrl.cancel() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <h4 class=modal-title translate translate-context=Title>Human verification</h4> </div> <div class="modal-body pm_form"> <p class="alert alert-info" translate translate-context=Info>For security reasons, please verify that you are not a robot.</p> <div ng-if="::ctrl.methods.length > 1"> <label ng-if=ctrl.showCaptcha> <custom-radio data-custom-ng-model=ctrl.verificator data-custom-value=captcha></custom-radio> <span translate translate-context=Label>Captcha</span> </label> <hr/> </div> <captcha-view ng-if="ctrl.verificator === \'captcha\'" data-token="{{ ::ctrl.token }}"></captcha-view> </div> </div> <div class=modal-footer> <button type=button class=pm_button ng-click=ctrl.cancel() translate translate-context=Action>Cancel</button> <button type=submit ng-disabled=!ctrl.tokens[ctrl.verificator] class="pm_button primary pull-right" translate translate-context=Action>Submit</button> </div> </form> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/modals/label.tpl.html":function(e,t){var a=window.angular,n="templates/modals/label.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<section class="pm_modal small important {{ctrl.class}} labelModal-container" role=dialog id=labelModal> <form class="modal-dialog labelModal-form" name=editLabelForm ng-submit=ctrl.create(editLabelForm)> <button ng-click=ctrl.cancel() type=button aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <header class=modal-header ng-show=ctrl.title> <h3 class=modal-title>{{ ::ctrl.title }}</h3> </header> <div class="modal-body pm_form pm_grid"> <div class=row> <label for=labelName class=col-1-4 translate translate-context=Label>Name</label> <div class="col-3-4 ng-message-wrapper"> <input tabindex=1 type=text class="form-control labelModal-input-name" autofocus id=labelName name=label data-valid-label ng-model=ctrl.name placeholder-translate=Name required> <div ng-messages=editLabelForm.label.$error role=alert class="text-red labelModal-errors"> <p ng-message=required translate-context=Error translate>You must set a name</p> <p ng-message=validLabel> <span translate-context=Error translate>Invalid name. Forbidden char. ex:</span> <> </p> </div> </div> </div> <div class=row> <label class=col-1-4 translate translate-context=Label>Color</label> <div class="text-center col-3-4"> <ul class="palette list-inline labelModal-list"> <li class=labelModal-item ng-repeat="c in ctrl.colors track by c" ng-style="{ \'color\': c }"> <input tabindex="{{ 2 + $index}}" type=radio ng-value=c name=paletteColor ng-model=ctrl.color aria-labelledby="Color {{::c}}" class=labelModal-input-color> <div class=labelModal-item-mask><i class="fa fa-check"></i></div> </li> </ul> </div> </div> <div class=row ng-if="ctrl.ID && ctrl.exclusive"> <label for=labelNotify class=col-1-4 translate translate-context=Title translate-comment="Desktop notification">Notification</label> <div class=col-3-4> <toggle status=ctrl.notify on=ON off=OFF id=labelNotify></toggle> </div> </div> </div> </div> <footer class=modal-footer> <button class="pm_button labelModal-btn-cancel" type=button ng-click=ctrl.cancel() ng-disabled=networkActivity.loading() translate translate-context=Action>Cancel</button> <button class="pm_button primary pull-right labelModal-btn-save" ng-disabled=networkActivity.loading() translate translate-context=Action>Save</button> </footer> </form> <div class=modal-overlay></div> </section> ')}])}e.exports=n},"./src/templates/modals/member.tpl.html":function(e,t){var a=window.angular,n="templates/modals/member.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal {{ctrl.class}}" role=dialog style=display:block> <form class=modal-dialog id=addUserModal name=memberForm ng-submit="memberForm.$valid && ctrl.submit()" novalidate> <button type=button ng-click=ctrl.cancel() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class="modal-content pm_form"> <div class=modal-header> <h4 class=modal-title ng-if=!ctrl.ID translate-context=Title translate>Create user</h4> <h4 class=modal-title ng-if=ctrl.ID translate-context=Title translate>Update user</h4> </div> <div class=modal-body> <div class=pm_grid> <div class=col-1-3> <label translate translate-context=Label>Name</label> </div> <div class=col-1-3> <input autofocus type=text ng-model=ctrl.name placeholder-translate="ex: Thomas Anderson" placeholder-translate-context="Exemple name for the user" required> </div> <div class=col-1-3 ng-if=!ctrl.ID> <label> <custom-checkbox data-custom-ng-model=ctrl.private></custom-checkbox> <span translate translate-context=Action translate-comment="Form checkbox option">Private</span> <i class="fa fa-info-circle" pt-tooltip-translate-context="Information about this user" pt-tooltip-translate="Organization administrators cannot access the messages of private users."></i> </label> </div> </div> <div class=pm_grid ng-if="ctrl.showKeys && !ctrl.private"> <div class=col-1-3> <label translate translate-context=Label>Key Strength</label> </div> <div class=col-1-3> <label class=checkbox> <custom-radio data-custom-ng-model=ctrl.size data-custom-ng-value=2048></custom-radio> <strong translate translate-context=Label translate-comment="form option heading">High security</strong> <small>(2048-bit)</small> </label> </div> <div class=col-1-3> <label class=checkbox> <custom-radio data-custom-ng-model=ctrl.size data-custom-ng-value=4096 data-custom-ng-disabled=ctrl.process></custom-radio> <strong translate translate-context=Label translate-comment="form option heading">Highest security</strong> <small>(4096-bit)</small> </label> </div> </div> <div class=pm_grid ng-if="!ctrl.ID || ctrl.showKeys"> <div class=col-1-3> <label translate translate-context=Label>Password</label> </div> <div class=col-1-3> <password data-value=ctrl.temporaryPassword data-name=newPassword form=memberForm placeholder-translate=Password></password> </div> <div class=col-1-3> <password data-value=ctrl.confirmPassword data-name=confirmPassword form=memberForm placeholder-translate="Confirm Password" compare=ctrl.temporaryPassword></password> </div> </div> <div class=pm_grid ng-if=ctrl.showAddress> <div class=col-1-3> <label translate translate-context=Label>Address</label> </div> <div class=col-1-3> <input type=text ng-model=ctrl.address placeholder-translate=Address required/> </div> <div class=col-1-3 ng-if="ctrl.domains.length === 1"> <label>@{{ ctrl.domain.DomainName }}</label> </div> <div class=col-1-3 ng-if="ctrl.domains.length > 1"> <span class=pm_select> <select ng-model=ctrl.domain ng-options="\'@\'+domain.DomainName for domain in ctrl.domains"></select> <i class="fa fa-angle-down"></i> </span> </div> </div> <div class="pm_grid padding-top"> <div class=col-1-3> <label translate translate-context=Label>Account storage</label> </div> <div class=col-2-3> <label class=bold>{{ ctrl.storageSliderValue * ctrl.unit | humanSize }}</label> <slider value=ctrl.storageSliderValue options=ctrl.storageSliderOptions></slider> <legends list=ctrl.storageLegends></legends> </div> </div> <div class="pm_grid padding-top" ng-if=::ctrl.hasVPN> <div class=col-1-3> <label> <span translate-context=Label translate>VPN Connections</span> <a target=_blank class=text-purple href=https://protonmail.com/support/knowledge-base/vpn-connections/ > <i class="fa fa-info-circle"></i> </a> </label> </div> <div class=col-2-3> <label class=bold>{{ ctrl.vpnSliderValue | number:0 }}</label> <slider value=ctrl.vpnSliderValue options=ctrl.vpnSliderOptions></slider> <legends list=ctrl.vpnLegends></legends> </div> </div> <p ng-if="ctrl.showKeys && !ctrl.private" class="alert alert-warning" translate translate-context=Info> 4096-bit keys only work on high performance computers. For most users, we recommend using 2048-bit keys. Clicking <strong>Save</strong> will generate encryption keys and may freeze ProtonMail for several minutes </p> <p class="alert alert-info" ng-if=!ctrl.ID translate>Please give the address and temporary password to the new member so they can log in.</p> </div> </div> <div class="modal-footer text-right"> <button type=button class=pm_button ng-click=ctrl.cancel() ng-disabled=networkActivity.loading() translate translate-context=Action>Cancel</button> <button type=submit class="pm_button primary" ng-disabled="memberForm.$invalid || networkActivity.loading()" translate translate-context=Action>Save</button> </div> </form> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/modals/organizationRecovery.tpl.html":function(e,t){var a=window.angular,n="templates/modals/organizationRecovery.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal {{this.class}}" role=dialog style=display:block> <form method=post class=modal-dialog ng-submit=ctrl.submit()> <button type=button ng-click=ctrl.cancel() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <h3 class=modal-title translate translate-context=Title>Organization recovery password</h3> </div> <div class="modal-body text-center"> <p translate>Please enter your organization recovery password:</p> <input type=password ng-model=ctrl.password /> </div> </div> <div class="modal-footer text-right"> <button class="pm_button pull-left" ng-click=ctrl.cancel() translate translate-context=Action>Cancel</button> <button tabindex=1 type=button class="pm_button primary" ng-click=ctrl.submit() translate translate-context=Action>Submit</button> </div> </form> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/modals/pay.tpl.html":function(e,t){var a=window.angular,n="templates/modals/pay.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal payInvoiceModal-container small {{ctrl.class}}" role=dialog style=display:block> <form class="modal-dialog payInvoiceModal-form" novalidate ng-class="{\n \'payInvoiceModal-method-card\': ctrl.method.value === \'use.card\',\n \'payInvoiceModal-method-paypal\': ctrl.method.value === \'paypal\',\n \'payInvoiceModal-method-bitcoin\': ctrl.method.value === \'bitcoin\',\n \'payInvoiceModal-method-newcard\': ctrl.method.value === \'card\',\n \'payInvoiceModal-method-cash\': ctrl.method.value === \'cash\'\n }" ng-submit="payForm.$valid && ctrl.submit()" name=payForm> <button type=button ng-click=ctrl.cancel() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <h4 class=modal-title translate translate-context=Title>Pay invoice</h4> </div> <div class="modal-body pm_form"> <div class=pm_table> <table> <tbody> <tr> <th style=width:8rem translate translate-context=Title>Amount</th> <td class=text-right>{{ ctrl.checkInvoice.Amount / 100 | currency: ctrl.checkInvoice.Currency }}</td> </tr> <tr ng-if="ctrl.checkInvoice.Credit !== 0"> <th translate translate-context=Title>Credit</th> <td class=text-right>{{ ctrl.checkInvoice.Credit / 100 | currency: ctrl.checkInvoice.Currency }}</td> </tr> <tr> <th translate translate-context=Title>Amount due</th> <td class=text-right>{{ ctrl.checkInvoice.AmountDue / 100 | currency: ctrl.checkInvoice.Currency }}</td> </tr> </tbody> </table> </div> <div ng-if="ctrl.checkInvoice.AmountDue > 0"> <p class="alert alert-info" ng-show="ctrl.methods.length === 0" translate translate-context=Info>You need to add a credit card if you want to pay your invoice.</p> <div class="margin pm_grid"> <div class=col-1-2> <label for=paymentMethod translate translate-context=Title translate-comment="form label">Select payment method:</label> </div> <div class=col-1-2> <div class=pm_select> <select id=paymentMethod ng-model=ctrl.method ng-options="method.label for method in ctrl.methods"></select> <i class="fa fa-angle-down"></i> </div> </div> </div> <card-view data-card=ctrl.card ng-if="ctrl.method.value === \'card\'" data-form=payForm></card-view> <paypal-view ng-if="ctrl.method.value === \'paypal\'" data-type=invoice data-amount=ctrl.checkInvoice.AmountDue data-currency=ctrl.checkInvoice.Currency data-callback=ctrl.paypalCallback></paypal-view> <bitcoin-view data-type=invoice ng-if="ctrl.method.value === \'bitcoin\'" data-currency=ctrl.checkInvoice.Currency data-amount=ctrl.checkInvoice.AmountDue></bitcoin-view> <p ng-if="ctrl.method.value === \'cash\'" class="alert alert-info" translate-context=Info translate>To pay via Cash, please email us at <strong>contact@protonmail.ch</strong> for instructions.</p> </div> </div> </div> <div class="modal-footer payInvoiceModal-group-btn"> <button type=button class="pm_button payInvoiceModal-btn-cancel" ng-click=ctrl.cancel() translate translate-context=Action>Cancel</button> <button type=button class="pm_button payInvoiceModal-btn-close" ng-click=ctrl.cancel() translate translate-context=Action>Close</button> <button type=submit class="pm_button primary pull-right payInvoiceModal-btn-submit" ng-disabled="ctrl.process === true" translate translate-context=Info>Submit</button> </div> </form> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/modals/payment/modal.tpl.html":function(e,t){var a=window.angular,n="templates/modals/payment/modal.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,"<form class=\"paymentsModal-container pm_modal {{::ctrl.class}}\" ng-class=\"{\n 'paymentsModal-enough-credit': !ctrl.valid.AmountDue,\n 'paymentsModal-method-paypal': ctrl.method.value === 'paypal',\n 'paymentsModal-method-card': ctrl.method.value === 'card',\n 'paymentsModal-method-bitcoin': ctrl.method.value === 'bitcoin',\n 'paymentsModal-method-cash': ctrl.method.value === 'cash',\n 'paymentsModal-step-pay': ctrl.step === 'payment',\n 'paymentsModal-step-process': ctrl.step === 'process',\n 'paymentsModal-step-thanks': ctrl.step === 'thanks'\n }\" name=paymentsModalForm role=dialog novalidate ng-submit=ctrl.submit()> <div class=modal-dialog id=paymentsModal> <button type=button ng-click=ctrl.cancel() aria-hidden=true title-translate=Close title-translate-context=Action class=\"fa fa-times close\"></button> <div class=modal-content> <header class=modal-header> <h4 class=\"modal-title paymentsModal-title\" translate translate-context=Title>Payment</h4> </header> <payment-form data-form=paymentsModalForm data-ctrl=ctrl class=\"modal-body paymentsModal-paymentForm\"></payment-form> <div class=\"modal-body text-center paymentsModal-process\"> <p> </p> <p class=\"alert alert-info\" translate translate-context=Info>You're upgrading your account. Once we successfully process payment, we'll immediately upgrade your account. Thanks for choosing to become a paying customer!</p> <p> </p> <p translate translate-context=Info>Your account is being updated, this may take up to 30 seconds.</p> <p> </p> <loader-tag></loader-tag> </div> <div class=\"modal-body text-center paymentsModal-thanks\"> <h3 translate translate-context=Title>Thank you for your subscription!</h3> <p translate translate-context=Info>Your new features are now available.</p> <p><strong translate translate-context=\"Info payment\">Start customizing!</strong></p> <features-list data-ctrl=ctrl></features-list> </div> </div> <div class=\"modal-footer paymentsModal-group-btn\"> <button type=button class=\"pm_button paymentsModal-btn-cancel\" ng-click=ctrl.cancel() translate translate-context=Action>Cancel</button> <button type=button class=\"pm_button paymentsModal-btn-close\" ng-click=ctrl.cancel() translate translate-context=Action>Close</button> <button type=submit class=\"pm_button primary pull-right paymentsModal-btn-submit\" translate translate-context=Action>Submit</button> </div> </div> <div class=modal-overlay></div> </form>")}])}e.exports=n},"./src/templates/modals/reactivate.tpl.html":function(e,t){var a=window.angular,n="templates/modals/reactivate.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal small {{ctrl.class}}" role=dialog style=display:block> <form method=post class=modal-dialog ng-submit=ctrl.submit()> <button type=button ng-click=ctrl.cancel() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <h4 class=modal-title translate translate-context=Title>Reactivate key pair</h4> </div> <div class="modal-body pm_form"> <p translate>Enter your login password:</p> <input type=password ng-model=ctrl.loginPassword placeholder-translate="Login password"/> <p translate>Enter the key password:</p> <input type=password ng-model=ctrl.keyPassword placeholder-translate="Key password"/> </div> </div> <div class="modal-footer text-right"> <button class="pm_button pull-left" ng-click=ctrl.cancel() translate translate-context=Action>Cancel</button> <button type=button class="pm_button primary" ng-click=ctrl.submit() translate translate-context=Action>Submit</button> </div> </form> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/modals/releaseNotes.tpl.html":function(e,t){var a=window.angular,n="templates/modals/releaseNotes.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div role=dialog class="pm_modal releaseNotesModal-container"> <div class=modal-dialog> <button type=button ng-click=ctrl.close() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <h4 class="modal-title donateModal-title-donate" translate translate-context=Title>Release notes</h4> <a data-prefix=v href={{::ctrl.articleLink}} title={{::ctrl.dateVersion}} class=infoLink target=_blank> More info </a> </div> <div class=modal-body lazy-inject={{::ctrl.changelogPath}}> </div> </div> <div class="modal-footer text-right releaseNotes-group-btn"> <button type=button class="pm_button primary" ng-click=ctrl.close() translate translate-context=Action> Close </button> </div> </div> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/modals/setupOrganization.tpl.html":function(e,t){var a=window.angular,n="templates/modals/setupOrganization.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal small {{ctrl.class}}" role=dialog style=display:block> <form class=modal-dialog ng-submit=ctrl.next() novalidate name=setupOrganizationForm> <button type=button ng-click=ctrl.cancel() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <h4 ng-if="ctrl.step === \'name\'" class=modal-title translate translate-context=Title>Setting up your Organization</h4> <h4 ng-if="ctrl.step === \'keys\'" class=modal-title translate translate-context=Title>Setting up your Keys</h4> <h4 ng-if="ctrl.step === \'password\'" class=modal-title translate translate-context=Title>Set Organization Password</h4> <h4 ng-if="ctrl.step === \'storage\'" class=modal-title translate translate-context=Title>Allocate Storage</h4> <h4 ng-if="ctrl.step === \'vpn\'" class=modal-title translate translate-context=Title>Allocate VPN Connections</h4> </div> <div class="modal-body pm_form"> <div ng-if="ctrl.step === \'name\'"> <p class="alert alert-info" translate-context=Info translate>Pick a name for your Organization.</p> <input ng-model=ctrl.name type=text name=name placeholder-translate="Organization name" ng-maxlength=100 required/> <div ng-messages=setupOrganizationForm.name.$error> <p ng-message=required class=text-red translate-context=Error translate>Field required</p> <p ng-message=maxlength class=text-red translate-context=Error translate>Name exceeds maximum length</p> </div> </div> <div ng-if="ctrl.step === \'keys\'"> <p class="alert alert-info" translate-context=Info translate>This will create a new encryption key for your organization. 4096-bit keys only work on high performance computers, for most users, we recommend using 2048-bit keys.</p> <div class=pm_grid> <div class=col-1-2> <label class=checkbox> <custom-radio data-custom-ng-model=ctrl.size data-custom-ng-value=2048></custom-radio> <strong translate translate-context=Title translate-comment="form option heading">High security</strong> <small>(2048-bit)</small> </label> </div> <div class=col-1-2> <label class=checkbox> <custom-radio data-custom-ng-model=ctrl.size data-custom-ng-value=4096 data-custom-ng-disabled="ctrl.process === true"></custom-radio> <strong translate translate-context=Title translate-comment="form option heading">Highest security</strong> <small>(4096-bit)</small> </label> </div> </div> </div> <div ng-if="ctrl.step === \'password\'"> <p class="alert alert-info" translate-context=Info translate>Your organization password can be shared with other users you wish to give administrative privileges. It is also an emergency recovery code to gain access to your organization in case you lose access to your account. Please save this password and keep it safe.</p> <div class=margin> <password data-id=organizationPassword data-name=organizationPassword data-value=ctrl.organizationPassword data-form=setupOrganizationForm placeholder-translate="Organization password"></password> </div> <div class=margin> <password data-id=confirmOrganizationPassword data-name=confirmOrganizationPassword data-value=ctrl.confirmOrganizationPassword data-form=setupOrganizationForm compare=ctrl.organizationPassword placeholder-translate="Confirm organization password"></password> </div> <p class="alert alert-warning"> <span translate-context=Info translate>* Do NOT forget this password. If you forget it, you will not be able to manage your organization.</span><br/> <span translate-context=Info translate>* Save your password somewhere safe. Click on <i class="fa fa-eye"></i> icon to confirm you that have typed your password correctly.</span> </p> </div> <div ng-if="ctrl.step === \'storage\'"> <p class="alert alert-info" translate-context=Info translate>Currently all available storage is allocated to the administrator account. Please reduce the admin account allocation to free up space for additional users. You can increase the total storage at any time by upgrading your account.</p> <label> <strong translate-context=Label translate>Admin Account Storage:</strong> {{ ctrl.sliderValue * ctrl.unit | humanSize }} ({{ ctrl.min | humanSize }} Used) </label> <label class=margin> <strong translate-context=Label translate>Storage for members:</strong> {{ ( ctrl.max - ctrl.sliderValue * ctrl.unit) | humanSize }} </label> <slider value=ctrl.sliderValue options=ctrl.sliderOptions class=margin></slider> <legends list=ctrl.legends></legends> </div> <div ng-if="ctrl.step === \'vpn\'"> <p class="alert alert-info" translate-context=Info translate>Currently all available VPN connections are allocated to the administrator account. Please select the number of connections you want to reserve for additional users.</p> <label> <strong translate-context=Label translate>Admin VPN Connections:</strong> {{ ctrl.sliderVPNValue }} </label> <label class=margin> <strong translate-context=Label translate>VPN Connections for members:</strong> {{ ctrl.maxVPN - ctrl.sliderVPNValue }} </label> <slider value=ctrl.sliderVPNValue options=ctrl.sliderVPNOptions class=margin></slider> <legends list=ctrl.legendsVPN></legends> </div> </div> </div> <div class=modal-footer> <button type=button class=pm_button ng-click=ctrl.cancel() ng-disabled=networkActivity.loading() translate translate-context=Action>Cancel</button> <button type=submit class="pm_button primary pull-right" ng-disabled=networkActivity.loading()> <span ng-hide=ctrl.isLastStep() translate translate-context=Action>Next</span> <span ng-show=ctrl.isLastStep() translate translate-context=Action>Finish</span> </button> </div> </form> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/modals/support.tpl.html":function(e,t){var a=window.angular,n="templates/modals/support.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal {{ctrl.class}}" role=dialog style=display:block> <div class=modal-dialog> <button type=button ng-click=ctrl.cancel() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <h4 class=modal-title translate translate-context=Title>Contact us</h4> </div> <div class=modal-body> <p translate translate-context=Info>For a custom solution, contact our entreprise sales team for a quote.</p> <p><strong>contact@protonmail.ch</strong></p> </div> </div> <div class="modal-footer text-right"> <button class=pm_button ng-click=ctrl.cancel() translate translate-context=Action>Close</button> </div> </div> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/modals/switchPasswordMode.tpl.html":function(e,t){var a=window.angular,n="templates/modals/switchPasswordMode.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal {{ctrl.class}}" role=dialog style=display:block> <form class=modal-dialog name=switchPasswordModeForm ng-submit=ctrl.save() novalidate> <button type=button ng-click=ctrl.cancel() title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <h3 ng-show="ctrl.currentPasswordMode === 1" class=modal-title translate-context=Title translate>Switch to Two-Password Mode</h3> <h3 ng-show="ctrl.currentPasswordMode === 2" class=modal-title translate-context=Title translate>Switch to One-Password Mode</h3> </div> <div class="modal-body pm_form" ng-show="ctrl.currentPasswordMode === 2"> <p class="alert alert-info" translate-context=Info translate>ProtonMail can also be used with a single password which replaces both the login and mailbox password. To switch to single password mode, enter the single password you would like to use and click Save.</p> <div class=pm_grid> <div class=col-1-3> <label for="" translate-context=Label translate>Password</label> </div> <div class=col-2-3> <input type=password ng-model=ctrl.password /> </div> </div> <div class=pm_grid> <div class=col-1-3> <label for="" translate-context=Label translate>Confirm password</label> </div> <div class=col-2-3> <input type=password ng-model=ctrl.confirmPassword /> </div> </div> </div> <div class="modal-body pm_form" ng-show="ctrl.currentPasswordMode === 1"> <p class="alert alert-info" translate-context=Info translate>Two-password mode uses separate passwords for login and mailbox decryption. This provides a minor security benefit in some situations, however we recommend one-password mode for most users. To switch to two password mode, enter the login and mailbox password you would like to use and click Save.</p> <div class=pm_grid> <div class=col-1-3> <label for="" translate>Login password</label> </div> <div class=col-2-3> <input type=password ng-model=ctrl.loginPassword /> </div> </div> <div class=pm_grid> <div class=col-1-3> <label for="" translate>Confirm login password</label> </div> <div class=col-2-3> <input type=password ng-model=ctrl.confirmLoginPassword /> </div> </div> <div class=pm_grid> <div class=col-1-3> <label for="" translate>Mailbox password</label> </div> <div class=col-2-3> <input type=password ng-model=ctrl.mailboxPassword /> </div> </div> <div class=pm_grid> <div class=col-1-3> <label for="" translate>Confirm mailbox password</label> </div> <div class=col-2-3> <input type=password ng-model=ctrl.confirmMailboxPassword /> </div> </div> <div class="alert alert-danger"> <ul> <li translate-context=Info translate>We recommend using different login and mailbox passwords.</li> <li translate-context=Info translate>Do NOT forget your mailbox password. If you forget it, you will not be able to decrypt your messages.</li> <li translate-context=Info translate>Save your passwords somewhere safe. Click on <i class="fa fa-eye"></i> icon to confirm you that have typed your password correctly.</li> <li translate-context=Info translate>We recommend adding a recovery email address first. Otherwise, you cannot recover your account if something goes wrong.</li> </ul> </div> </div> </div> <div class=modal-footer> <button type=button class=pm_button ng-click=ctrl.cancel() translate translate-context=Action>Cancel</button> <button type=submit class="pm_button primary pull-right" ng-disabled=networkActivity.loading() translate translate-context=Action>Submit</button> </div> </form> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/modals/twofactor/recoveryCode.tpl.html":function(e,t){var a=window.angular,n="templates/modals/twofactor/recoveryCode.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal small very-important {{ctrl.class}}" role=dialog style=display:block> <div class=modal-dialog> <button type=button ng-click=ctrl.cancel() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <h4 class=modal-title translate-context=Title translate>Two-factor authentication enabled</h4> </div> <div class="modal-body pm_form"> <p class="alert alert-info"> <strong translate-context=Info translate>Important: Please make sure you saved the recovery codes. Otherwise you can permanently lose access to your account if you lose your 2FA device.</strong> <span translate-context=Info translate>If you lose your two-factor-enabled device, these codes can be used instead of the 6-digit 2FA code to log into your account. Each code can only be used once.</span> </p> <div class="pm_grid text-center"> <div class=col-4-8> <ul> <li ng-repeat="c in ctrl.recoveryCodesFirstHalf" ng-bind=c></li> </ul> </div> <div class=col-4-8> <ul> <li ng-repeat="c in ctrl.recoveryCodesSecondHalf" ng-bind=c></li> </ul> </div> </div> </div> </div> <div class=modal-footer> <button type=button class=pm_button ng-click=ctrl.download() translate translate-context=Action>Download</button> <button type=button class="pm_button primary pull-right" ng-click=ctrl.cancel() translate translate-context=Action>Done</button> </div> </div> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/modals/twofactor/sharedSecret.tpl.html":function(e,t){var a=window.angular,n="templates/modals/twofactor/sharedSecret.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal small very-important {{ctrl.class}}" role=dialog style=display:block> <div class=modal-dialog> <button type=button ng-click=ctrl.cancel() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <h4 class=modal-title translate translate-context=Title>Set Up Two Factor Authentication</h4> </div> <div class=modal-body> <p class=text-center ng-hide=ctrl.manual translate-context="2FA setup modal" translate>Scan this QR code with your two factor authentication device to set up your account.</p> <p class=text-center ng-show=ctrl.manual translate-context="2FA setup modal" translate>Manually enter this information into your two factor authentication device to set up your account.</p> <p class=text-center> <a href=# ng-click=ctrl.displayManual() ng-hide=ctrl.manual translate-context=Action translate>Enter key manually instead</a> <a href=# translate-context=Action ng-click=ctrl.displayManual() ng-show=ctrl.manual translate>Scan QR code</a> </p> <div ng-show=ctrl.manual class=pm_table> <table class=bordered> <tbody> <tr> <th style=width:60px translate-context="2FA setup modal" translate>Key</th> <td><code>{{ ctrl.sharedSecret }}</code></td> </tr> <tr> <th translate-context="2FA setup modal" translate>Interval</th> <td translate-context="2FA setup modal" translate>30 seconds</td> </tr> <tr> <th translate-context="2FA setup modal" translate>Length</th> <td translate-context="2FA setup modal" translate>6 digits</td> </tr> </tbody> </table> </div> <p align=center id=qrcode ng-if=!ctrl.manual ng-init=ctrl.makeCode()></p> </div> </div> <div class="modal-footer text-right"> <button class="pm_button pull-left" ng-click=ctrl.cancel() translate translate-context=Action>Cancel</button> <button tabindex=1 type=button class="pm_button primary" ng-click=ctrl.next() translate translate-context=Action>Next</button> </div> </div> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/modals/twofactor/twoFAIntroModal.tpl.html":function(e,t){var a=window.angular,n="templates/modals/twofactor/twoFAIntroModal.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal small very-important {{ctrl.class}}" role=dialog style=display:block> <div class=modal-dialog> <button type=button ng-click=ctrl.cancel() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <h4 class=modal-title translate-context="Modal setup 2FA" translate>Set Up Two Factor Authentication</h4> </div> <div class="modal-body pm_form"> <div class="alert alert-info"> <p translate-context="Modal setup 2FA" translate>This wizard will enable Two Factor Authentication (2FA) on your ProtonMail account. 2FA will make your ProtonMail account more secure so we recommend enabling it. </p> <p class=bold translate-context="Modal setup 2FA" translate>If you have never used 2FA before, we strongly recommend you reading our 2FA Guide first.</p> </div> <p class=text-center> <a href=https://protonmail.com/support/knowledge-base/two-factor-authentication/ target=_blank class="pm_button large" translate-context="Modal setup 2FA" translate>2FA Guide</a> </p> </div> </div> <div class=modal-footer> <button class=pm_button ng-click=ctrl.cancel() translate translate-context=Action>Cancel</button> <button tabindex=1 type=button class="pm_button primary pull-right" ng-click=ctrl.next() translate translate-context=Action>Next</button> </div> </div> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/modals/welcome.tpl.html":function(e,t){var a=window.angular,n="templates/modals/welcome.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal {{this.class}}" role=dialog style=display:block id=welcomeModal> <form class="modal-dialog modal-sm" method=post ng-submit=ctrl.next() novalidate> <div class=modal-content> <div class=modal-header> <h3 class=modal-title translate translate-context=Title>Welcome to ProtonMail</h3> </div> <div class=modal-body> <section class=pm_form> <p class="alert alert-info"> <strong translate translate-context=Title>You now have an encrypted email account!</strong><br/> <span translate translate-context=Info>Below are optional settings you can use to customize your account. You can always find these on your Settings page.</span> </p> <br/> <div class=pm_grid> <div class=col-1-3> <label for=displayName translate>Display name</label> </div> <div class=col-2-3> <input id=displayName type=text name=displayName ng-model=ctrl.displayName placeholder-translate="Display name"/> <p class=help-block><small translate translate-context=Info>This is the \'From\' name that people will see when you email them.</small></p> </div> </div> </section> <section class=pm_form> <hr/> <div class=pm_grid> <div class=col-1-3> <label translate-context=Label translate>Follow us</label> </div> <div class=col-2-3> <ul class=welcome-socialList-container> <li class=welcome-socialList-item><a class="pm_button round big" target=_blank href=https://twitter.com/ProtonMail><i class="fa fa-twitter"></i></a> </li><li class=welcome-socialList-item><a class="pm_button round big" target=_blank href=https://www.facebook.com/protonmail/ ><i class="fa fa-facebook"></i></a> </li><li class=welcome-socialList-item><a class="pm_button round big" target=_blank href=https://www.instagram.com/protonmail/ ><i class="fa fa-instagram"></i></a> </li><li class=welcome-socialList-item><a class="pm_button round big" target=_blank href=https://plus.google.com/+protonmail><i class="fa fa-google-plus"></i></a> </li><li class=welcome-socialList-item><a class="pm_button round big" target=_blank href=https://www.reddit.com/r/ProtonMail/ ><i class="fa fa-reddit"></i></a> </li><li class=welcome-socialList-item><a class="pm_button round big" target=_blank href=https://github.com/ProtonMail><i class="fa fa-github"></i></a> </li></ul> </div> </div> <div class=pm_grid> <div class=col-1-3> <label translate-context=Label translate>Download App</label> </div> <div class=col-2-3> <ul class=welcome-socialList-container> <li class=welcome-socialList-item><a class="pm_button round big" target=_blank href="https://play.google.com/store/apps/details?id=ch.protonmail.android"><i class="fa fa-android"></i></a></li><li> </li><li class=welcome-socialList-item><a class="pm_button round big" target=_blank href=https://itunes.apple.com/app/protonmail-encrypted-email/id979659905><i class="fa fa-apple"></i></a></li><li> </li></ul> </div> </div> </section> </div> </div> <div class="modal-footer text-right"> <button type=submit class="pm_button primary" translate translate-context=Action>Finish </button></div> </form> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/notifications/base.tpl.html":function(e,t){var a=window.angular,n="templates/notifications/base.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,"<div class=\"proton-notification-template cg-notify-message\" ng-click=$close() ng-class=\"[$classes,\n$position === 'center' ? 'cg-notify-message-center' : '',\n$position === 'left' ? 'cg-notify-message-left' : '',\n$position === 'right' ? 'cg-notify-message-right' : '']\" ng-style=\"{'margin-left': $centerMargin}\"> <div ng-show=!$messageTemplate ng-class=\"{ 'animated bounceIn' : $classes==='notification-success' }\"> <span ng-bind-html=$message></span> </div> <div ng-show=$messageTemplate class=cg-notify-message-template></div> </div> ")}])}e.exports=n},"./src/templates/notifications/cross.tpl.html":function(e,t){var a=window.angular,n="templates/notifications/cross.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,"<div class=\"proton-notification-template cg-notify-message\" ng-class=\"[$classes,\n $position === 'center' ? 'cg-notify-message-center' : '',\n $position === 'left' ? 'cg-notify-message-left' : '',\n $position === 'right' ? 'cg-notify-message-right' : '']\" ng-style=\"{'margin-left': $centerMargin}\"> <div class=cg-notify-message-content ng-show=!$messageTemplate ng-bind-html=$message></div> <div ng-show=$messageTemplate class=cg-notify-message-template></div> <a class=cg-notify-text-muted ng-click=$close()><i class=\"fa fa-times\"></i></a> </div> ")}])}e.exports=n},"./src/templates/notifications/retry.tpl.html":function(e,t){var a=window.angular,n="templates/notifications/retry.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,"<div class=\"proton-notification-template cg-notify-message\" ng-class=\"[$classes,\n $position === 'center' ? 'cg-notify-message-center' : '',\n $position === 'left' ? 'cg-notify-message-left' : '',\n $position === 'right' ? 'cg-notify-message-right' : '']\" ng-style=\"{'margin-left': $centerMargin}\"> <div><span translate-context=\"Notification error trying to connect to the API\" translate>Servers are unreachable.</span> <a href=# ng-click=$click() translate-context=\"Action notification error trying to connect to the API\" translate>Retry now</a>.</div> </div> ")}])}e.exports=n},"./src/templates/notifications/welcome.tpl.html":function(e,t){var a=window.angular,n="templates/notifications/welcome.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,"<div class=\"proton-notification-template cg-notify-message\" ng-click=$close() ng-class=\"[$classes,\n $position === 'center' ? 'cg-notify-message-center' : '',\n $position === 'left' ? 'cg-notify-message-left' : '',\n $position === 'right' ? 'cg-notify-message-right' : '']\" ng-style=\"{'margin-left': $centerMargin}\"> <div class=cg-notify-message-content ng-show=!$messageTemplate>{{$message}}</div> <div ng-show=$messageTemplate class=cg-notify-message-template></div> <a class=cg-notify-text-muted ng-click=$close()><i class=\"fa fa-times\"></i></a> </div> ")}])}e.exports=n},"./src/templates/organization/organizationFormName.tpl.html":function(e,t){var a=window.angular,n="templates/organization/organizationFormName.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<form method=post name=organizationForm novalidate> <div class=col-1-2> <label for=orgName translate-context=Title translate>Organization name</label> </div> <div class=col-1-2> <div class=clearfix> <input id=orgName name=name type=text class=margin ng-model=value placeholder-translate="Organization name" placeholder-translate-context=Title ng-maxlength=100 required> <div ng-messages=organizationForm.name.$error class=text-red ng-if="organizationForm.name.$touched || organizationForm.$submitted"> <p ng-message=required translate-context=Error translate>Field required</p> <p ng-message=maxlength translate-context=Error translate>Name exceeds maximum length</p> </div> </div> <p class="text-right clearfix"> <button class="pm_button primary" ng-disabled=networkActivity.loading() type=submit translate-context=Action translate>Save</button> </p> </div> </form> ')}])}e.exports=n},"./src/templates/partials/composer.tpl.html":function(e,t){var a=window.angular,n="templates/partials/composer.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,"<form name=composeForm id=pm_composer composer-container novalidate> <composer id=\"uid{{ ::message.uid}}\" ng-repeat=\"message in messages track by message.uid\" ng-if=message.ID ng-init=\"params = {}\" ng-style=\"{'z-index': message.zIndex}\" data-index={{$index}} ng-class=\"{\n 'minimized': message.minimized,\n 'blur': message.ID !== selected.ID,\n 'maximized': message.maximized,\n 'normalized': !message.maximized && !message.minimized,\n 'expandRecipients': message.ccbcc === true,\n 'hasAttachment': (message.Attachments.length > 0),\n 'attachmentsOpen': ((message.attachmentsToggle === true) && (message.Attachments.length > 0)),\n 'moreAttachments': ((message.attachmentsToggle === true) && (message.Attachments.length > 2)),\n 'tall': (message.Attachments.length === 0),\n 'mini': mini === true,\n 'small': small === true\n }\"></composer> </form>")}])}e.exports=n},"./src/templates/partials/conversation-list-columns.tpl.html":function(e,t){var a=window.angular,n="templates/partials/conversation-list-columns.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div id=conversation-list-columns data-pt-select-multiple-elements> <request-timeout></request-timeout> <no-results ng-if="conversations.length === 0 && elementsLoaded"></no-results> <section class=conversation-wrapper> <div ng-repeat="conversation in conversations track by conversation.ID" class=conversation elements-container data-pt-draggable ng-class="{\n selected: conversation.Selected,\n active: active(conversation),\n read: isRead(conversation),\n marked: conversation.ID === markedElement.ID,\n hasLabels: hasLabels(conversation),\n hasAttachments: hasAttachments(conversation),\n expiring: (conversation.ExpirationTime > 0)\n }"> <span class=expiration><i class="fa fa-hourglass-end"></i></span> <pt-select-element data-index="{{ $index }}"></pt-select-element> <div class=conversation-meta> <div class="row top"> <h4 class=subject ng-attr-title="{{ conversation.Subject | unescape }}"> <states-conversation></states-conversation> <folders-element data-conversation=conversation></folders-element> <span class=subject-num-message ng-if="conversation.NumMessages > 1">({{ conversation.NumMessages }})</span> <span class="subject-text ellipsis">{{ conversation.Subject | unescape }}</span> </h4> <span class=meta> <i class="fa fa-paperclip conversation-icon-attachment"></i> <pt-star data-model=conversation class=singleStar></pt-star> <time-element></time-element> </span> </div> <div class="row bottom"> <span class="senders ellipsis" ng-class="{ \'full\': !hasLabels(conversation) }"> <span ng-if="!((\'secured.sent.**\' | includedByState) || (\'secured.drafts.**\' | includedByState) || (\'secured.allSent.**\' | includedByState) || (\'secured.allDrafts.**\' | includedByState))" class=senders-name ng-repeat="contact in senders(conversation)" title="{{ contact.Address }}">{{ contact | contact: \'Name\' | unescape}}</span> <span ng-if="(\'secured.sent.**\' | includedByState) || (\'secured.drafts.**\' | includedByState) || (\'secured.allSent.**\' | includedByState) || (\'secured.allDrafts.**\' | includedByState)" class=senders-name ng-repeat="contact in recipients(conversation)" title="{{ contact.Address }}">{{ contact | contact: \'Name\' | unescape}}</span> </span> <labels-element data-element=conversation></labels-element> </div> </div> </div> </section> <search-limit-reached ng-if="elementsLoaded && limitReached"></search-limit-reached> </div> ')}])}e.exports=n},"./src/templates/partials/conversation-list-mobile.tpl.html":function(e,t){var a=window.angular,n="templates/partials/conversation-list-mobile.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div data-pt-select-multiple-elements> <request-timeout></request-timeout> <no-results ng-if="conversations.length === 0 && elementsLoaded"></no-results> <section class=conversation-wrapper> <div ng-repeat="conversation in conversations track by conversation.ID" class=conversation elements-container ng-class="{\n selected: conversation.Selected,\n active: active(conversation),\n read: isRead(conversation),\n marked: conversation.ID === markedElement.ID,\n hasLabels: hasLabels(conversation),\n hasAttachments: hasAttachments(conversation),\n expiring: (conversation.ExpirationTime > 0)\n }"> <span class=expiration><i class="fa fa-hourglass-end"></i></span> <pt-select-element data-index="{{ $index }}"></pt-select-element> <div class=conversation-meta> <div class="row top"> <h4 class=subject> <states-conversation></states-conversation> <folders-element conversation=conversation></folders-element> <span class=subject-num-message ng-show="conversation.NumMessages > 1">({{ conversation.NumMessages }})</span> <span class="subject-text ellipsis"> {{ conversation.Subject | unescape }} </span> </h4> <span class=meta> <i class="fa fa-paperclip conversation-icon-attachment"></i> <pt-star data-model=conversation class=singleStar></pt-star> <time-element></time-element> </span> </div> <div class="row bottom"> <span class="senders ellipsis" ng-class="{ \'full\': !hasLabels(conversation) }"> <span ng-if="!((\'secured.sent.**\' | includedByState) || (\'secured.drafts.**\' | includedByState) || (\'secured.allSent.**\' | includedByState) || (\'secured.allDrafts.**\' | includedByState))" class=senders-name ng-repeat="contact in senders(conversation)" title="{{ contact.Address }}">{{ contact | contact: \'Name\' | unescape}}</span> <span ng-if="(\'secured.sent.**\' | includedByState) || (\'secured.drafts.**\' | includedByState) || (\'secured.allSent.**\' | includedByState) || (\'secured.allDrafts.**\' | includedByState)" class=senders-name ng-repeat="contact in recipients(conversation)" title="{{ contact.Address }}">{{ contact | contact: \'Name\' | unescape}}</span> </span> <labels-element element=conversation></labels-element> </div> </div> </div> </section> <search-limit-reached ng-if="elementsLoaded && limitReached"></search-limit-reached> </div> ')}])}e.exports=n},"./src/templates/partials/conversation-list-rows.tpl.html":function(e,t){var a=window.angular,n="templates/partials/conversation-list-rows.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div id=conversation-list-rows data-pt-select-multiple-elements> <request-timeout></request-timeout> <no-results ng-if="conversations.length === 0 && elementsLoaded"></no-results> <section class=conversation-wrapper> <div ng-repeat="conversation in conversations track by conversation.ID" data-pt-draggable elements-container class=conversation ng-class="{\n selected: conversation.Selected,\n active: active(conversation),\n marked: conversation.ID === markedElement.ID,\n hasLabels: hasLabels(conversation),\n read: isRead(conversation),\n hasAttachments: hasAttachments(conversation),\n expiring: (conversation.ExpirationTime > 0)\n }"> <span class=expiration><i class="fa fa-hourglass-end"></i></span> <pt-select-element data-index="{{ $index }}"></pt-select-element> <pt-star data-model=conversation class=singleStar></pt-star> <span class="senders ellipsis"> <span ng-if="!((\'secured.sent.**\' | includedByState) || (\'secured.drafts.**\' | includedByState) || (\'secured.allSent.**\' | includedByState) || (\'secured.allDrafts.**\' | includedByState))" class=senders-name ng-repeat="contact in senders(conversation)" title="{{ contact.Address }}">{{ contact | contact: \'Name\' | unescape}}</span> <span ng-if="(\'secured.sent.**\' | includedByState) || (\'secured.drafts.**\' | includedByState) || (\'secured.allSent.**\' | includedByState) || (\'secured.allDrafts.**\' | includedByState)" class=senders-name ng-repeat="contact in recipients(conversation)" title="{{ contact.Address }}">{{ contact | contact: \'Name\' | unescape}}</span> </span> <div class=subject> <h4 ng-attr-title="{{ conversation.Subject | unescape }}"> <states-conversation></states-conversation> <folders-element conversation=conversation></folders-element> <span class=subject-num-message ng-if="conversation.NumMessages > 1">({{ conversation.NumMessages }})</span> <span class="subject-text ellipsis">{{ conversation.Subject | unescape }}</span> </h4> <labels-element element=conversation></labels-element> </div> <span class=size>{{ size(conversation)| bytes }}</span> <i class="fa fa-paperclip conversation-icon-attachment"></i> <time-element></time-element> </div> </section> <search-limit-reached ng-if="elementsLoaded && limitReached"></search-limit-reached> </div> ')}])}e.exports=n},"./src/templates/partials/conversation-placeholder.tpl.html":function(e,t){var a=window.angular,n="templates/partials/conversation-placeholder.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<section> <div id=pm_latest class=conversationPlaceholder ng-if=showWelcome> <header translate translate-context=Title>Welcome</header> <section id=storageStatus ng-show="user.UsedSpace > 0"> <div class=wrap> <placeholder-progress></placeholder-progress> <span><strong>{{ ::user.UsedSpace | percentage:user.MaxSpace }}%</strong> Storage space used.</span> </div> </section> <section ng-if=!isFree> <a href=https://protonmail.com/blog/best-secure-email-app/ target=_blank title-translate="Learn More" title-translate-context=Link> <img src=/assets/img/welcome/mobile.jpg /> </a> </section> <section ng-if=isFree> <a ui-sref="secured.dashboard({scroll: true})" class="text-center latest-upgrade"> <img src=/assets/img/latest/privacy.jpg /> <button type=button class="pm_button primary" translate translate-context=Action>Upgrade account</button> </a> </section> <div class="pm_grid no-padding flex flex-row"> <div class=col-1-2> <section> <a href=https://shop.protonmail.com target=_blank> <img src=/assets/img/welcome/shop.jpg /> </a> </section> </div> <div class=col-1-2> <section> <a href=https://protonmail.com/support/knowledge-base/custom-domain-support/ target=_blank> <img src=/assets/img/welcome/domain.jpg /> </a> </section> </div> </div> </div> <count-elements-selected id=pm_placeholder ng-if=!showWelcome></count-elements-selected> </section> ')}])}e.exports=n},"./src/templates/partials/conversation.tpl.html":function(e,t){var a=window.angular,n="templates/partials/conversation.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<section class=conversation-container> <header id=conversationHeader> <h1> <span ng-if="conversation.NumMessages > 1">({{ conversation.NumMessages }})</span> <span>{{ conversation.Subject | unescape }}</span> <pt-star data-model=conversation data-pt-star-type=conversation class=pm_buttons></pt-star> </h1> <div ng-hide="(\'secured.search.**\' | includedByState) || (\'secured.label.**\' | includedByState)" class=containsMessage> <p ng-if="showNotifier(\'trash\')" class=alert> <span ng-show="inTrash === false" translate translate-context=Info>This conversation contains trashed messages.</span> <span ng-show="inTrash === true" translate translate-context=Info>This conversation contains non-trashed messages.</span> <a href=# ng-click="toggleOption(\'showTrashed\')" ng-show="showTrashed === false && inTrash === false" translate translate-context=Action>Show trashed messages</a> <a href=# ng-click="toggleOption(\'showNonTrashed\')" ng-show="showNonTrashed === false && inTrash === true" translate translate-context=Action>Show non-trashed messages</a> <a href=# ng-click="toggleOption(\'showTrashed\')" ng-show="showTrashed === true && inTrash === false" translate translate-context=Action>Hide trashed messages</a> <a href=# ng-click="toggleOption(\'showNonTrashed\')" ng-show="showNonTrashed === true && inTrash === true" translate translate-context=Action>Hide non-trashed messages</a> </p> </div> </header> <div id=pm_thread tabindex=0> <message id="message{{ $index }}" data-model=message data-marked=markedMessage data-last=$last data-index=$index ng-repeat="message in messages | filter: filterMessages:showTrashed:showNonTrashed track by message.ID"></message> </div> </section> ')}])}e.exports=n},"./src/templates/partials/conversations.tpl.html":function(e,t){var a=window.angular,n="templates/partials/conversations.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<toolbar-desktop ng-if=!mobileMode></toolbar-desktop> <toolbar-mobile ng-if=mobileMode></toolbar-mobile> <div id=wrapper ng-class="{hasElementsSelected: numberElementChecked}"> <list-rows ng-if="displayType(\'rows\')"></list-rows> <list-mobile ng-if="displayType(\'mobile\')"></list-mobile> <list-columns ng-if="displayType(\'columns\')"></list-columns> <div id=conversation-view ui-view=view></div> <conversation-placeholder id=pm_view class=columns ng-class="{ \'latest\': !idDefined() }" ng-if="displayType(\'placeholder\')"></conversation-placeholder> </div> ')}])}e.exports=n},"./src/templates/partials/safari.attachment.warning.tpl.html":function(e,t){var a=window.angular,n="templates/partials/safari.attachment.warning.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="modal fade" id=safariAttachmentModal tabindex=-1 role=dialog> <div class=modal-dialog> <div class=modal-content> <div class=modal-header> <button type=button class=close data-dismiss=modal> <i aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times"></i> <span class=sr-only translate translate-context=Action>Close</span> </button> <h4 class=modal-title translate translate-context=Title>Downloading</h4> </div> <div class=modal-body> <p class="alert alert-info" translate translate-context=Info>Safari does not fully support downloading encrypted attachments.</p> <p translate translate-context=Info>Your attachments are secure and encrypted, but to download them requires extra work. We recommend using a different web browser such as Chrome or Firefox for a better user experience.</p> <p><strong translate>To download attachments in Safari:</strong></p> <ol> <li translate translate-comment="safari attachment instructions" translate-context=Info>Click your attachment once to decrypt it. Once decryption finishes you will see a download arrow icon appear.</li> <li translate translate-comment="safari attachment instructions" translate-context=Info>Right-click on your attachment and choose \'Download linked file as...\'</li> <li translate translate-comment="safari attachment instructions" translate-context=Info>You will be prompted to save the attachment.</li> <li translate translate-comment="safari attachment instructions" translate-context=Info>Name your attachment from \'unknown\' to the correct name, including the file extension.</li> </ol> <p translate translate-context=Info>For more help please contact us directly: support@protonmail.com</p> </div> <div class=modal-footer> <button type=button data-dismiss=modal class="btn btn-default" translate translate-context=Action>Close</button> </div> </div> </div> </div> ')}])}e.exports=n},"./src/templates/partials/safari.warning.tpl.html":function(e,t){var a=window.angular,n="templates/partials/safari.warning.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="modal fade" id=safariModal tabindex=-1 role=dialog> <div class=modal-dialog> <div class=modal-content> <div class=modal-header> <button type=button class=close data-dismiss=modal> <i aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times"></i> <span class=sr-only translate translate-context=Action>Close</span> </button> <h4 class=modal-title translate translate-context=Title>Downloading</h4> </div> <div class=modal-body> <p class="alert alert-info" translate translate-context=Info>Safari does not fully support downloading encrypted attachments.</p> <p translate translate-context=Info>Your attachments are secure and encrypted, but to download them requires extra work. We recommend using a different web browser such as Chrome or Firefox for a better user experience.</p> <p><strong translate>To download attachments in Safari:</strong></p> <ol> <li translate translate-comment="safari attachment instructions" translate-context=Info>Click your attachment once to decrypt it. Once decryption finishes you will see a download arrow icon appear.</li> <li translate translate-comment="safari attachment instructions" translate-context=Info>Right-click on your attachment and choose \'Download linked file as...\'</li> <li translate translate-comment="safari attachment instructions" translate-context=Info>You will be prompted to save the attachment.</li> <li translate translate-comment="safari attachment instructions" translate-context=Info>Name your attachment from \'unknown\' to the correct name, including the file extension.</li> </ol> <p translate translate-context=Info>For more help please contact us directly: support@protonmail.com</p> </div> <div class=modal-footer> <button type=button data-dismiss=modal class="btn btn-default" translate translate-context=Action>Close</button> </div> </div> </div> </div> ')}])}e.exports=n},"./src/templates/partials/sidebar-responsive.tpl.html":function(e,t){var a=window.angular,n="templates/partials/sidebar-responsive.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<section class="pm_opensans sidebar sidebarApp-container"> <sidebar-mobile-header class=sidebarApp-about-app></sidebar-mobile-header> <ul class="menu sidebarApp-menu"> <navigation-item class=sidebarApp-item data-key={{::state}} ng-repeat="state in listStates track by $id(state)"></navigation-item> <li class=sidebarApp-divider></li> <li class=sidebarApp-item ng-class="{ active: (\'secured.contacts.**\' | includedByState) }"> <a title=Contacts ui-sref=secured.contacts class=sidebarApp-link> <i class="fa fa-users sidebarApp-icon"></i> <span translate-context=Title translate-comment="Folder name" translate>Contacts</span> </a> </li> <li class=sidebarApp-item ng-class="{ active: (\'secured.dashboard.**\' | includedByState) }" ng-if=isFree> <a title=Upgrade ui-sref="secured.dashboard({scroll: true})" class=sidebarApp-link> <i class="fa fa-arrow-up sidebarApp-icon"></i> <span translate-context=Title translate-comment="Folder name" translate>Upgrade</span> </a> </li> <li class=sidebarApp-item ng-class="{ active: (\'secured.account.**\' | includedByState) }"> <a title=Settings ui-sref=secured.account class=sidebarApp-link> <i class="fa fa-cogs sidebarApp-icon"></i> <span translate-context=Title translate-comment="Folder name" translate>Settings</span> </a> </li> <li class=sidebarApp-item> <a target=_blank href=https://shop.protonmail.com class=sidebarApp-link> <i class="fa fa-shopping-cart sidebarApp-icon"></i> <span translate translate-context=Action>ProtonMail Shop</span> </a> </li> <li class=sidebarApp-item> <new-bug-report ng-click=hideMobileSidebar(); class="sidebarApp-link sidebarApp-link-report"></new-bug-report> </li> <li class=sidebarApp-item> <a ui-sref=login class=sidebarApp-link> <i class="fa fa-power-off sidebarApp-icon"></i> <span translate-context=Action translate>Log out</span> </a> </li> <li class=sidebarApp-divider></li> </ul> <menu-label class="sidebarApp-menu sidebarResponsive-menu-label"></menu-label> </section> ')}])}e.exports=n},"./src/templates/partials/sidebar.tpl.html":function(e,t){var a=window.angular,n="templates/partials/sidebar.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<section class="pm_opensans sidebar sidebarApp-container" data-pt-dropzone> <button class="compose pm_button sidebar-btn-compose" action-compose action-compose-type=new translate-context=Action translate translate-comment="compose button in sidebar">Compose</button> <ul class="menu sidebarApp-menu"> <navigation-item class=sidebarApp-item data-key={{::state}} ng-repeat="state in listStates track by $id(state)"></navigation-item> </ul> <ul class="menu sidebarApp-menu" id=labelSettings> <li class=sidebarApp-item> <a ui-sref=secured.labels class=sidebarApp-link> <i class="fa fa-cog sidebarApp-icon"></i> <span id=tour-label-settings class=sidebarApp-label translate-context=Action translate>Folders / Labels</span> </a> </li> </ul> <sidebar-labels></sidebar-labels> <div class=footer> <sidebar-progress class=wrap></sidebar-progress> <app-version class=version></app-version> </div> </section> ')}])}e.exports=n},"./src/templates/partials/wizard.tpl.html":function(e,t){var a=window.angular,n="templates/partials/wizard.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div id=pm_wizard class="wizardStep-1 wizardStep-hidden" tabindex=0> <div ng-if="tourActive === true"> <button data-display-wizard-button=tourEnd class=close> <i class="fa fa-times"></i> <span translate translate-context=Action>Close</span> </button> <div class=step-1> <h1 class="badge tada">01</h1> <h2 class="title fadeIn" translate translate-context=Title>Welcome to your new encrypted email account</h2> <div class="body fadeIn"> <p translate translate-context=Info>This short tutorial will show you the main features of your new ProtonMail account. For more information, you can also check out the Welcome email we have sent you. If you ever want to view this tutorial again, you can access it by clicking your username in the upper right corner.</p> </div> </div> <div class=step-2> <h1 class="badge tada">02</h1> <h2 class="title fadeIn" translate translate-context=Title>Personalize your layout</h2> <div class="body fadeIn"> <p translate translate-context=Info>ProtonMail allows you to fully customize your inbox experience. By clicking <strong>(1)</strong> you can quickly switch between two possible layouts. You can set a default layout, set your composer style, adjust button layouts, and even switch themes under <em>Settings</em> <span class="fa fa-chevron-right"></span> <em>Appearance</em> <strong>(2)</strong></p> </div> </div> <div class=step-3> <h1 class="badge tada">03</h1> <h2 class="title fadeIn" translate translate-context=Title>Manage your email with labels</h2> <div class="body fadeIn"> <p translate translate-context=Info>Labels are a powerful tool to manage your inbox. You can add and remove labels from selected emails by clicking the Label button <strong>(1)</strong>. You can also add, delete, and edit labels by clicking on <em>Labels / Folders</em> <strong>(2)</strong>.</p> </div> </div> <div class=step-4> <h1 class="badge tada">04</h1> <h2 class="title fadeIn" translate translate-context=Title>Help and support</h2> <div class="body fadeIn"> <p translate translate-context=Info>If you have questions or need help, please visit <a href=https://protonmail.com/support target=_blank>our support page</a> to find troubleshooting guides and contact our support team. If you find a bug in ProtonMail, please let us know! You can send us a bug report by clicking <em>Report bugs</em> <strong>(1)</strong></p> </div> </div> <div class=navigation> <button class="next pm_button primary" data-display-wizard-button=tourNext ng-show="tourStep < 4" translate translate-context=Action>Next tip</button> <button class="next pm_button primary" data-display-wizard-button=tourEnd ng-show="tourStep === 4" translate translate-context=Action>Finish</button> <ul class=pagination> <li class=pagination-step-1> <a href=# data-display-wizard-button=tourGo data-display-position=1></a> </li> <li class=pagination-step-2> <a href=# data-display-wizard-button=tourGo data-display-position=2></a> </li> <li class=pagination-step-3> <a href=# data-display-wizard-button=tourGo data-display-position=3></a> </li> <li class=pagination-step-4> <a href=# data-display-wizard-button=tourGo data-display-position=4></a> </li> </ul> </div> </div> </div> ')}])}e.exports=n},"./src/templates/payment/bitcoinView.tpl.html":function(e,t){var a=window.angular,n="templates/payment/bitcoinView.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=bitcoinView-container> <figure class=bitcoinView-content ng-if=isBitcoin> <bitcoin-qrcode class=bitcoinView-qrcode></bitcoin-qrcode> <figcaption class=bitcoinView-legend> <bitcoin-details class=bitcoinView-address></bitcoin-details> </figcaption> </figure> <p class="alert alert-danger bitcoinView-error" ng-if=isBitcoinError> <span translate translate-context="bitcoin error request">Error connecting to the Bitcoin API.</span> <button type=button translate translate-context="Try to reload bitcoin qrcode" class=bitcoinView-btn-reload>Try again.</button> </p> <p class="alert alert-danger bitcoinView-error" ng-if=hasValidationsError> <span translate translate-context="Bitcoin validation error">Amount below minimum. ({{ ::validator.amountMin / 100 }} {{::currency}})</span> </p> <div class="bitcoinView-about alert alert-info"> <p class=bitcoinView-message translate translate-context="Bitcoin notice">After making your Bitcoin payment, please follow <a href=https://protonmail.com/support/knowledge-base/paying-with-bitcoin target=_blank>the instructions here</a> to upgrade</p> </div> <div class="bitcoinView-about-invoice alert alert-info"> <p class=bitcoinView-message translate-context="Bitcoin notice" translate>Bitcoin transactions can take some time to be confirmed (up to 24 hours). Once confirmed, we will add credits to your account. After transaction confirmation, you can pay your invoice with the credits.</p> </div> </div> ')}])}e.exports=n},"./src/templates/payment/cardPanel.tpl.html":function(e,t){var a=window.angular,n="templates/payment/cardPanel.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,"<div class=cardPanel> <div class=cardPanel-issuer> <img class=cardPanel-issuer-visa src=/assets/img/icons/cc_visa.svg> <img class=cardPanel-issuer-mastercard src=/assets/img/icons/cc_mastercard.svg> <img class=cardPanel-issuer-amex src=/assets/img/icons/cc_amex.svg> </div> <div class=cardPanel-number>{{ card.number }}</div> <div class=cardPanel-country> <label class=cardPanel-label translate translate-context=Label>zip - country </label> <span>{{ card.zip }} - {{ card.country }}</span> </div> <div class=cardPanel-holder> <label class=cardPanel-label translate translate-context=Label>Card holder </label> <span>{{ card.fullname }}</span> </div> <div class=cardPanel-expires> <label class=cardPanel-label translate translate-context=Label>Expires</label> <span>{{ card.month }} / {{ card.year }}</span> </div> </div> ")}])}e.exports=n},"./src/templates/payment/donation.tpl.html":function(e,t){var a=window.angular,n="templates/payment/donation.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<form name=donationForm class="pm_form donationForm-container" ng-class="{\n \'donationForm-method-card\': model.method.value === \'use.card\',\n \'donationForm-method-payal\': model.method.value === \'paypal\',\n \'donationForm-method-newcard\': model.method.value === \'card\',\n \'donationForm-method-cash\': model.method.value === \'cash\'\n }" data-form-is-invalid novalidate> <p class="alert alert-info donationForm-info" translate-context=Info translate>Donations are added as credit to your ProtonMail account and can be used to purchase account upgrades.</p> <label for=otherAmount translate translate-context=Title>Amount</label> <div class="pm_grid flex flex-mobileShrink donateModal-choose-amount"> <div class=col-1-4> <button type=button class="pm_button fullwidth donationForm-btn-amount" ng-class="{ success: model.amount === 5 }" data-amount=5>5</button> </div> <div class=col-1-4> <button type=button class="pm_button fullwidth donationForm-btn-amount" ng-class="{ success: model.amount === 10 }" data-amount=10>10</button> </div> <div class=col-1-4> <button type=button class="pm_button fullwidth donationForm-btn-amount" ng-class="{ success: model.amount === 25 }" data-amount=25>25</button> </div> <div class=col-1-4> <button type=button class="pm_button fullwidth donationForm-btn-amount" ng-class="{ success: model.amount === 50 }" data-amount=50>50</button> </div> </div> <div class="pm_grid flex flex-mobileShrink donationForm-amount-row-2 donateModal-choose-amount"> <div class=col-1-4> <button type=button class="pm_button fullwidth donationForm-btn-amount" ng-class="{ success: model.amount === 100 }" data-amount=100>100</button> </div> <div class=col-1-4> <button type=button class="pm_button fullwidth donationForm-btn-amount" ng-class="{ success: model.amount === 250 }" data-amount=250>250</button> </div> <div class="col-1-4 donateModal-choose-otheramount"> <input type=number min=2 max=999999 id=otherAmount name=otherAmount ng-model=model.otherAmount ng-focus=onFocusOtherAmount() placeholder-translate-context="Other amount to donate" placeholder-translate=Other> </div> <div class="col-1-4 donateModal-choose-currency"> <div class=pm_select> <select class=donateModal-select-currency ng-model=model.currency ng-options="currency.label for currency in currencies"></select> <i class="fa fa-angle-down"></i> </div> </div> </div> <div class=donateModal-choose-errors ng-messages=donationForm.otherAmount.$error> <p ng-message=number class=text-red translate-context=Error translate>Invalid number</p> <p ng-message=min class=text-red translate-context=Error translate>Due to credit card processing fees, we cannot accept donations smaller than 2.</p> <p ng-message=max class=text-red translate-context=Error translate>Thank you for your willingness to donate. The maximum we can accept in single donations is 999 999 at this moment. Thank you</p> </div> <div> <label for=paymentMethod class=margin translate-context=Title>Select payment method:</label> <div class=pm_select> <select id=paymentMethod ng-model=model.method ng-options="method.label for method in methods"></select> <i class="fa fa-angle-down"></i> </div> </div> <p ng-if="model.method.value === \'cash\'" class="donationForm-about-cash alert alert-info" translate-context=Info translate>To pay via Cash, please email us at <strong>contact@protonmail.ch</strong> for instructions.</p> <card-view ng-if="model.method.value === \'card\'" class=donationForm-cardView data-card=model.card data-form=donationForm></card-view> <paypal-view ng-if="model.method.value === \'paypal\' && !donationForm.otherAmount.$error.max" data-amount=getAmount() data-currency=model.currency.value data-callback=paypalCallback></paypal-view> <bitcoin-view ng-if="model.method.value === \'bitcoin\'" class=donateModal-bitcoin data-type={{::type}} data-currency=model.currency.value data-amount=getAmount()></bitcoin-view> <footer class="text-center spacing-top donationForm-footer"> <button class="pm_button primary large donationForm-btn-submit" ng-disabled=networkActivity.loading() translate translate-context=Action>complete setup</button> </footer> </form> ')}])}e.exports=n},"./src/templates/payment/featuresList.tpl.html":function(e,t){var a=window.angular,n="templates/payment/featuresList.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,"<ul class=featuresList-container> <li class=featuresList-autoresponder> <button class=featuresList-button type=button data-route=secured.autoresponder> <div class=featuresList-button-wrapper> <img class=featuresList-logo src=assets/img/autoresponder.svg /> <span class=featuresList-text translate-context=Action translate>Add auto-reply</span> </div> </button> </li> <li class=featuresList-domains> <button class=featuresList-button type=button data-route=secured.domains> <div class=featuresList-button-wrapper> <img class=featuresList-logo src=assets/img/custom-domains.svg /> <span class=featuresList-text translate-context=Action translate>Add your domain</span> </div> </button> </li> <li class=featuresList-filters> <button class=featuresList-button type=button data-route=secured.filters> <div class=featuresList-button-wrapper> <img class=featuresList-logo src=assets/img/custom-filters.svg /> <span class=featuresList-text translate-context=Action translate>Add filters</span> </div> </button> </li> <li class=featuresList-members> <button class=featuresList-button type=button data-route=secured.members> <div class=featuresList-button-wrapper> <img class=featuresList-logo src=assets/img/members.svg /> <span class=featuresList-text translate-context=Action translate>Add new users</span> </div> </button> </li> <li class=featuresList-vpn> <button class=featuresList-button type=button data-route=secured.vpn> <div class=featuresList-button-wrapper> <img class=featuresList-logo src=assets/img/vpn.svg /> <span class=featuresList-text translate-context=Action translate>Activate ProtonVPN</span> </div> </button> </li> </ul> ")}])}e.exports=n},"./src/templates/payment/giftCodeBtn.tpl.html":function(e,t){var a=window.angular,n="templates/payment/giftCodeBtn.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<button type=button class=giftCodeBtn-container> <i class="giftCodeBtn-icon fa fa-gift"></i> <span class=giftCodeBtn-text translate-context=Action translate>Use gift code</span> </button>')}])}e.exports=n},"./src/templates/payment/giftCodeInput.tpl.html":function(e,t){var a=window.angular,n="templates/payment/giftCodeInput.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=giftCodeInput-container> <i class="giftCodeInput-icon fa fa-gift"></i> <input type=text class=giftCodeInput-input name=giftCodeInput ng-model=code placeholder=AAAA-BBBB-CCCC-DDDD autocomplete=off gift-code-validator required> <div ng-messages=form.giftCodeInput.$error class=giftCodeInput-errors> <p ng-message=required class=giftCodeInput-errors translate-context=Error translate>Field required</p> <p ng-message=giftCode class=giftCodeInput-errors translate-context=Error translate>Invalid gift code</p> </div> </div> ')}])}e.exports=n},"./src/templates/payment/giftCodeModal.tpl.html":function(e,t){var a=window.angular,n="templates/payment/giftCodeModal.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal small {{ctrl.class}}" role=dialog style=display:block> <form class="modal-dialog giftCodeModal-container" name=giftCodeForm ng-submit=ctrl.submit() novalidate> <button type=button ng-click=ctrl.close() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <h4 class=modal-title translate-context=Title translate>Gift code</h4> </div> <div class="modal-body pm_form"> <label translate-context=Label translate>Gift code</label> <gift-code-input data-form=giftCodeForm data-code=ctrl.giftCode></gift-code-input> </div> </div> <div class=modal-footer> <button type=button class=pm_button ng-click=ctrl.close() translate-context=Action translate>Cancel</button> <button class="pm_button primary pull-right" ng-disabled=giftCodeForm.$invalid translate-context=Action translate>Apply</button> </div> </form> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/payment/paymentForm.tpl.html":function(e,t){var a=window.angular,n="templates/payment/paymentForm.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_form paymentForm-container" ng-class="{\n \'paymentForm-cycle-month\': ctrl.valid.Cycle === 1,\n \'paymentForm-cycle-year\': ctrl.valid.Cycle === 12,\n \'paymentForm-cycle-2-years\': ctrl.valid.Cycle === 24,\n}"> <div class=pm_grid> <div class=col-1-2> <div class=pm_table> <tosubscribe-overview class=margin></tosubscribe-overview> </div> <div class="text-center alert alert-info paymentForm-about-month"> <p> <strong translate-context="Payment form information" translate>Save 20% with the annual plan!</strong> </p> <p> <button type=button class="pm_button primary paymentForm-btn-payAnnualy" translate translate-context=Action>Pay annually</button> </p> </div> </div> <div class=col-1-2> <p class="alert alert-danger" ng-show=!ctrl.status.Paypal translate translate-context=Info>PayPal is currently not available, please try again later.</p> <p class="alert alert-danger" ng-show="!ctrl.status.Stripe && !ctrl.status.Paymentwall" translate translate-context=Info>Credit card payment is currently not available, please try again later.</p> <div ng-if=ctrl.valid.AmountDue> <div class="pm_grid margin"> <div class=col-1-2> <label for=paymentMethod translate translate-context=Title translate-comment="form label">Payment method:</label> </div> <div class=col-1-2> <div class=pm_select> <select id=paymentMethod ng-model=ctrl.method ng-options="method.label for method in ctrl.methods"></select> <i class="fa fa-angle-down"></i> </div> </div> </div> <card-view data-card=ctrl.card ng-if="ctrl.method.value === \'card\'" data-form=donateForm></card-view> <div ng-if="ctrl.method.value === \'paypal\'"> <paypal-view data-amount=ctrl.valid.AmountDue data-currency=ctrl.valid.Currency data-callback=ctrl.paypalCallback></paypal-view> </div> <bitcoin-view ng-if="ctrl.method.value === \'bitcoin\'" class=paymentModal-bitcoin data-currency=ctrl.valid.Currency data-amount=ctrl.valid.AmountDue></bitcoin-view> <p ng-if="ctrl.method.value === \'cash\'" class="alert alert-info" translate translate-context=Info>To pay via Cash, please email us at <strong>contact@protonmail.ch</strong> for instructions.</p> <hr/> </div> <p> <a href=# ng-if=!ctrl.displayCoupon ng-click="ctrl.displayCoupon = true" translate translate-context=Action translate-comment="payment modal add coupon button">Add coupon</a> <gift-code-btn ng-if=!ctrl.displayGift ng-click="ctrl.displayGift = true"></gift-code-btn> </p> <form name=couponForm ng-if=ctrl.displayCoupon ng-submit="ctrl.apply(\'coupon\')" novalidate> <label translate-context=Context translate>Coupon</label> <div class="pm_grid flex flex-row"> <div class=col-2-3> <div class=input-icon> <i class="fa fa-tag"></i> <input type=text ng-model=ctrl.coupon placeholder-translate-context="Payment form input label" placeholder-translate=Coupon required> </div> </div> <div class=col-1-3> <button class="pm_button primary" translate-context=Action translate>Apply</button> </div> </div> </form> <form name=giftForm ng-if=ctrl.displayGift ng-submit="ctrl.apply(\'gift\')" novalidate> <label translate-context=Context translate>Gift code</label> <div class="pm_grid flex flex-row"> <div class=col-2-3> <gift-code-input data-code=ctrl.gift data-form=giftForm></gift-code-input> </div> <div class=col-1-3> <button class="pm_button primary" translate-context=Action translate>Apply</button> </div> </div> </form> <p><span translate translate-context=Info>By clicking Submit, you agree to abide by</span> <a href=https://protonmail.com/terms-and-conditions target=_blank translate translate-context=Link>ProtonMail\'s Terms and Conditions</a>.</p> </div> </div> </div> ')}])}e.exports=n},"./src/templates/payment/paypalView.tpl.html":function(e,t){var a=window.angular,n="templates/payment/paypalView.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=paypal-container> <p class="alert alert-info" ng-show=!paypalNetworkError translate-context=Info translate>You will need to login to your PayPal account to complete this transaction. We will open a new tab with PayPal for you. If you use any pop-up blockers, please disable them to continue.</p> <p class="alert alert-danger" ng-show=paypalNetworkError> <span translate-context=Error translate>Error connecting to PayPal.</span> <a href=# ng-click=initPaypal() translate-context=Action translate>Click here to try again</a>. </p> <p class="alert alert-danger paypal-error-amount" ng-if=errorDetails data-type={{errorDetails.validator}}> <span class=paypal-error-max translate-context="Paypal error" translate>Amount above the maximum.</span> <span class=paypal-error-min translate-context="Paypal error" translate>Amount below minimum.</span> ({{ errorDetails.amount / 100 }} {{ currency }}) </p> <div class=text-center ng-show="!approvalURL && !paypalNetworkError && !errorDetails"> <i class="fa fa-spin fa-spinner"></i> <span translate>Loading...</span> </div> <div class=text-center ng-show=approvalURL> <a href=# ng-click=openPaypalTab()> <img src=/assets/img/settings/paypal.png alt="Paypal button"/> </a> </div> </div> ')}])}e.exports=n},"./src/templates/payment/tosubscribeOverview.tpl.html":function(e,t){var a=window.angular,n="templates/payment/tosubscribeOverview.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=tosubscribeOverview-container> <header class=tosubscribeOverview-head> <h2 class=tosubscribeOverview-title-plan translate-context=Title translate>Plan</h2> <h2 class=tosubscribeOverview-title-price translate-context=Title translate>Price</h2> </header> <ul class=tosubscribeOverview-list> <li class=tosubscribeOverview-item ng-repeat="plan in ctrl.plans | filter: { Type: 1 }" data-cycle="{{ ::plan.Cycle }}" data-plan="{{ ::plan.Name }}"> <header class=tosubscribeOverview-item-header> <h3 class=tosubscribeOverview-item-title>{{ ::plan.Title }}</h3> <span class=tosubscribeOverview-discount pt-tooltip-translate="1-year plan, 20% off" data-discount=20>-20%</span> <span class=tosubscribeOverview-discount pt-tooltip-translate="2-year plan, 33% off" data-discount=33>-33%</span> <strong class=tosubscribeOverview-price-monthly>{{ plan.Amount / 100 | currency: plan.Currency }}</strong> <strong class=tosubscribeOverview-price-yearly>{{ plan.Amount / 100 / plan.Cycle | fixed: 2 | currency: plan.Currency }}/mo</strong> </header> <ul class=tosubscribeOverview-list-about> <li class=tosubscribeOverview-about-space ng-if="plan.Name.indexOf(\'vpn\') === -1"> {{ ::ctrl.count(\'MaxSpace\') | humanSize }} <span class=tosubscribeOverview-about-type translate-context="subscription label" translate>Storage</span> <strong ng-if="ctrl.price(\'space\')" class=tosubscribeOverview-price>{{ ::ctrl.price(\'space\') / 100 / plan.Cycle | fixed: 2 | currency: plan.Currency }} <span class=tosubscribeOverview-price-scope translate-context="Price per month" translate>/mo</span> </strong> </li> <li class=tosubscribeOverview-about-domains ng-if="plan.Name.indexOf(\'vpn\') === -1"> {{ ::ctrl.count(\'MaxDomains\') }} <span class=tosubscribeOverview-about-type translate translate-n="ctrl.count(\'MaxDomains\')" translate-plural="Custom domains" translate-context="subscription label">Custom domain</span> <strong ng-if="ctrl.price(\'domain\')" class=tosubscribeOverview-price>{{ ::ctrl.price(\'domain\') / 100 / plan.Cycle | fixed: 2 | currency: plan.Currency }} <span class=tosubscribeOverview-price-scope translate-context="Price per month" translate>/mo</span> </strong> </li> <li class=tosubscribeOverview-about-members ng-if="plan.Name.indexOf(\'vpn\') === -1"> {{ ::ctrl.count(\'MaxMembers\') }} <span class=tosubscribeOverview-about-type translate translate-n="ctrl.count(\'MaxMembers\')" translate-plural=Users translate-context="subscription label">User</span> <strong ng-if="ctrl.price(\'member\')" class=tosubscribeOverview-price>{{ ::ctrl.price(\'member\') / 100 / plan.Cycle | fixed: 2 | currency: plan.Currency }} <span class=tosubscribeOverview-price-scope translate-context="Price per month" translate>/mo</span> </strong> </li> <li class=tosubscribeOverview-about-addresses ng-if="plan.Name.indexOf(\'vpn\') === -1"> {{ ::ctrl.count(\'MaxAddresses\') }} <span class=tosubscribeOverview-about-type translate translate translate-n="ctrl.count(\'MaxAddresses\')" translate-plural=Addresses translate-context="subscription label">Address</span> <strong ng-if="ctrl.price(\'address\')" class=tosubscribeOverview-price>{{ ::ctrl.price(\'address\') / 100 / plan.Cycle | fixed: 2 | currency: plan.Currency }} <span class=tosubscribeOverview-price-scope translate-context="Price per month" translate>/mo</span> </strong> </li> <li class=tosubscribeOverview-about-vpn ng-if="plan.Name.indexOf(\'vpn\') > -1"> {{ ::ctrl.count(\'MaxVPN\') }} <span class=tosubscribeOverview-about-type translate-context="subscription label" translate>VPN Connections</span> <strong ng-if="ctrl.price(\'vpn\')" class=tosubscribeOverview-price>{{ ::ctrl.price(\'vpn\') / 100 / plan.Cycle | fixed: 2 | currency: plan.Currency }} <span class=tosubscribeOverview-price-scope translate-context="Price per month" translate>/mo</span> </strong> </li> </ul> </li> <li class="tosubscribeOverview-item tosubscribeOverview-total-monthly" ng-if="ctrl.valid.Cycle !== 1"> <strong translate-context=Title translate>Cost per month</strong> <strong>{{ ctrl.valid.Amount / 100 / ctrl.valid.Cycle | fixed:2 | currency: ctrl.valid.Currency }}</strong> </li> <li class="tosubscribeOverview-item tosubscribeOverview-total-yearly"> <strong ng-show="ctrl.valid.Cycle === 1" translate-context=Title translate>Total (monthly billing)</strong> <strong ng-show="ctrl.valid.Cycle === 12" translate-context=Title translate>Total (annual billing)</strong> <strong ng-show="ctrl.valid.Cycle === 24" translate-context=Title translate>Total (2-year billing)</strong> <strong>{{ ctrl.valid.Amount / 100 | currency: ctrl.valid.Currency }}</strong> </li> <li class=tosubscribeOverview-item ng-if="ctrl.valid.CouponDiscount < 0"> <span translate translate-context=Title>Coupon</span> <span class=tosubscribeOverview-discount ng-if="ctrl.valid.Coupon && ctrl.valid.Coupon.Code === \'BUNDLE\'" pt-tooltip-translate="VPN discount, 20% off">-20%</span> <strong class=text-green>{{ ctrl.valid.CouponDiscount / 100 | currency: ctrl.valid.Currency }}</strong> </li> <li class=tosubscribeOverview-item ng-if="ctrl.valid.Proration !== 0"> <div class=desc> <span translate-context=Title translate>Proration</span> <a class=text-purple href=https://protonmail.com/support/knowledge-base/credit-proration/ target=_blank translate-context=Link translate>(What is this?)</a> </div> <strong class=text-green>{{ ctrl.valid.Proration / 100 | currency: ctrl.valid.Currency }}</strong> </li> <li class=tosubscribeOverview-item ng-if="ctrl.valid.Gift < 0"> <span class=desc translate translate-context=Title>Gift code</span> <strong>{{ ctrl.valid.Gift / 100 | currency: ctrl.valid.Currency }}</strong> </li> <li class=tosubscribeOverview-item ng-if="ctrl.valid.Credit < 0"> <span class=desc translate translate-context=Title>Credit</span> <strong class=text-green>{{ ctrl.valid.Credit / 100 | currency: ctrl.valid.Currency }}</strong> </li> <li class=tosubscribeOverview-item> <strong translate translate-context=Title>Amount due</strong> <strong>{{ ctrl.valid.AmountDue / 100 | currency: ctrl.valid.Currency }}</strong> </li> </ul> </div> ')}])}e.exports=n},"./src/templates/pmMe/pmMeView.tpl.html":function(e,t){var a=window.angular,n="templates/pmMe/pmMeView.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div id=pm_settings> <div class=settings> <div class=row> <div class="setting pm_form full"> <header-block class=settingsLabels-header-pmMe> <h2 class=settingsLabels-title-pmMe>PM.ME</h2> </header-block> <div ng-if=!hasPmMe> <p class=alert translate-context=Info translate>ProtonMail now supports @pm.me email addresses (short for ProtonMail me or Private Message me).</p> <pm-me-btn class="pm_button primary"></pm-me-btn> <a class="pm_button link" href=https://protonmail.com/support/knowledge-base/pm-me-addresses/ target=_blank translate-context=Link translate>More info</a> <p class="alert alert-info" translate-context=Info translate>Paid users can add other @pm.me addresses from Settings --\x3e Addresses/Users.</p> </div> <div ng-if=hasPmMe> <p ng-show=hasPaidMail class=alert translate-context=Info translate>You can now also receive and send messages from your @pm.me address (short for ProtonMail me or Private Message me).</p> <p ng-hide=hasPaidMail class=alert> <span translate-context=Info translate>You can now also receive messages at your @pm.me address (short for ProtonMail me or Private Message me).</span> <b translate-context=Info translate>Upgrade to a paid accout to also send emails from your @pm.me address.</b> </p> <p class="alert alert-success"> <b>{{ ::email }}</b> <span translate-context=Info translate>is activated on your account.</span> </p> <a ng-show=hasPaidMail class=pm_button ui-sref=secured.members translate-context=Link translate>Add another address</a> <a class="pm_button link" href=https://protonmail.com/support/knowledge-base/pm-me-addresses/ target=_blank translate-context=Link translate>More info</a> </div> </div> </div> </div> </div> ')}])}e.exports=n},"./src/templates/search/btnAdvancedSearch.tpl.html":function(e,t){var a=window.angular,n="templates/search/btnAdvancedSearch.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<button type=button class=btnAdvancedSearch-container> <i class="fa fa-angle-down btnAdvancedSearch-icon-desktop"></i> <i class="fa fa-search btnAdvancedSearch-icon-mobile"></i> </button> ')}])}e.exports=n},"./src/templates/search/searchContact.tpl.html":function(e,t){var a=window.angular,n="templates/search/searchContact.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<form class=searchForm-container name=searchForm novalidate> <div class=search-form-fieldset> <button class=searchForm-action-button-default> <i class="fa fa-search"></i> </button> <input ng-model=query class="search-form-fieldset-input searchInput placeholder-white" type=search autocomplete=off> <button type=reset class=searchForm-action-button-clear> <i class="fa fa-times"></i> </button> </div> </form> ')}])}e.exports=n},"./src/templates/search/searchForm.tpl.html":function(e,t){var a=window.angular,n="templates/search/searchForm.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<form method=post class=searchForm-container> <div class=search-form-fieldset> <button class=searchForm-action-button-default> <i class="fa fa-search"></i> </button> <input type=search placeholder-translate="Search messages" autocomplete=off ng-model=query class="search-form-fieldset-input placeholder-white"> <btn-advanced-search pt-tooltip-translate-context=Action pt-tooltip-translate="Advanced search" pt-placement=bottom class=searchForm-action-button-toggle></btn-advanced-search> <btn-advanced-search data-action=close class=searchForm-action-button-advanced></btn-advanced-search> </div> <div class="searchForm-advanced-container pm_form pm_grid" ng-if=advancedSearch> <section class=searchForm-advanced-main> <div class="searchForm-advanced-keywords-container row"> <input id=search_keywords class=searchForm-advanced-keywords-input type=text placeholder-translate=Keywords ng-model=model.keyword> </div> <div class=row> <label class=searchForm-advanced-wildcard-container> <custom-checkbox data-custom-ng-model=model.wildcard></custom-checkbox> <span translate>Do not require exact match</span> <a href=https://protonmail.com/support/knowledge-base/search/ target=_blank class=text-purple> <i class="fa fa-info-circle"></i> </a> </label> </div> </section> <div class=searchForm-advanced-wrapper> <div class=row> <label for=search_folder translate translate-context=Title>Location</label> <span class=pm_select> <select id=search_folder ng-model=model.folder ng-options="folder.label group by folder.group for folder in folders"></select> <i class="fa fa-angle-down"></i> </span> <div class="row margin"> <div class=col-1-2> <label for=search_sender translate translate-context=Title>Sender</label> <autocomplete-email class=searchForm-autocomplete data-email=model.from data-custom-id=search_sender data-custom-placeholder="{{\'From\' | translate}}"></autocomplete-email> </div> <div class=col-1-2> <label for=search_recipient translate translate-context=Title>Recipient</label> <autocomplete-email class=searchForm-autocomplete data-email=model.to data-custom-id=search_recipient data-custom-placeholder="{{\'To\' | translate}}"></autocomplete-email> </div> </div> <div class="row margin"> <div class=col-1-2> <label for=search_start translate translate-context=Title>Start date</label> <span class=input-icon> <em class="fa fa-calendar searchForm-icon"></em> <input class=search-date type=text data-pikaday autocomplete=off ng-model=model.begin data-default-date={{::model.beginRaw}} data-max-date=model.end id=search_start> </span> </div> <div class=col-1-2> <label for=search_end translate translate-context=Title>End date</label> <span class=input-icon> <em class="fa fa-calendar searchForm-icon"></em> <input class=search-date type=text data-pikaday autocomplete=off ng-model=model.end data-default-date={{::model.endRaw}} data-min-date=model.begin id=search_end> </span> </div> </div> <div class=row> <div class=col-1-2> <label for=search_address translate translate-context=Title>Address</label> <span class=pm_select> <select id=search_address ng-model=model.address ng-options="address.Email for address in addresses | orderBy: \'Order\' track by address.ID"></select> <i class="fa fa-angle-down"></i> </span> </div> <div class=col-1-2> <label translate translate-context=Title translate-comment="Search form option heading">Attachments</label> <div class="radio searchFrom-advanced-radio"> <label> <custom-radio data-custom-id=attachments_all data-custom-ng-model=model.attachments data-custom-value=2></custom-radio> <span translate translate-comment="form option">All</span> </label> <label> <custom-radio data-custom-id=attachments_yes data-custom-ng-model=model.attachments data-custom-value=1></custom-radio> <span translate translate-comment="form option">Yes</span> </label> <label> <custom-radio data-custom-id=attachments_no data-custom-ng-model=model.attachments data-custom-value=0></custom-radio> <span translate translate-comment="form option">No</span> </label> </div> </div> </div> <div class="row margin-top"> <button type=submit class="searchForm-advanced-submit pm_button primary"> <i class="fa fa-search"></i> <span translate translate-context=Action>Search</span> </button> </div> </div> </div> </div></form> ')}])}e.exports=n},"./src/templates/settings/chooseComposerMode.tpl.html":function(e,t){var a=window.angular,n="templates/settings/chooseComposerMode.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="chooseComposerMode-container pm_select inline"> <select ng-model=model> <option value=text/html translate-context="Composer Mode" translate>Normal</option> <option value=text/plain translate-context="Composer Mode" translate>Plain Text</option> </select> <i class="fa fa-angle-down"></i> </div> ')}])}e.exports=n},"./src/templates/settings/chooseRightToLeft.tpl.html":function(e,t){var a=window.angular,n="templates/settings/chooseRightToLeft.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="chooseTextDirection-container pm_select inline"> <select class=chooseTextDirection-select ng-model=model> <option value=0 translate-context=Option translate>Left to Right</option> <option value=1 translate-context=Option translate>Right to Left</option> </select> <i class="fa fa-angle-down"></i> </div> ')}])}e.exports=n},"./src/templates/sidebar/sidebarContact.tpl.html":function(e,t){var a=window.angular,n="templates/sidebar/sidebarContact.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<section class="pm_opensans sidebar sidebarApp-container sidebarContact-container"> <sidebar-mobile-header class=sidebarContact-about-app></sidebar-mobile-header> <section class=sidebarApp-wrapper> <button class="sidebar-btn-back sidebarApp-link" type=button data-action=back> <i class="sidebarApp-icon fa fa-arrow-left"></i> <span translate-context="Back button in the contact sidebar" translate>Back to mail</span> </button> <ul class="menu sidebarApp-menu"> <li class=sidebarApp-item> <button class=sidebarApp-link type=button data-action=importContacts> <i class="sidebarApp-icon fa fa-upload"></i> <span translate-context="Import contacts button in the sidebar" translate>Import</span> </button> </li> <li class=sidebarApp-item> <button class=sidebarApp-link type=button data-action=exportContacts> <i class="sidebarApp-icon fa fa-download"></i> <span translate-context="Export contacts button in the sidebar" translate>Export</span> </button> </li> <li class=sidebarApp-item> <button class=sidebarApp-link type=button data-action=mergeContacts> <i class="sidebarApp-icon fa fa-code-fork"></i> <span class=sidebarContact-merge-text></span> </button> </li> <li class=sidebarApp-item> <button class=sidebarApp-link type=button data-action=deleteContacts> <i class="sidebarApp-icon fa fa-remove"></i> <span translate-context="Delete all contacts button in the sidebar" translate>Delete All</span> </button> </li> </ul> </section> <div class=footer> <app-version class=version></app-version> </div> </section> ')}])}e.exports=n},"./src/templates/sidebar/sidebarLabels.tpl.html":function(e,t){var a=window.angular,n="templates/sidebar/sidebarLabels.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,"<div id=sidebarLabels ng-scrollbars ng-scrollbars-config=::scrollbarConfig ng-scrollbars-update=updateScrollbar> <div class=labels> <menu-label class=sidebarApp-menu></menu-label> </div> </div> ")}])}e.exports=n},"./src/templates/sidebar/sidebarMobileHeader.tpl.html":function(e,t){var a=window.angular,n="templates/sidebar/sidebarMobileHeader.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<header class=sidebarMobileHeader-container> <btn-display-mobile-sidebar class="pull-right round sidebarMobileHeader-btn-sidebar" data-type=hide></btn-display-mobile-sidebar> <a class="sidebarMobileHeader-logo logo" ui-sref=secured.inbox title="ProtonMail ~ back to inbox"> <img src=assets/img/logo.png height=20 alt=ProtonMail> </a> <div class=sidebarMobileHeader-userDisplay> <span class=sidebarMobileHeader-userDisplay-name>{{ displayName }}</span> <strong class=sidebarMobileHeader-userDisplay-email>{{ email }}</strong> </div> </header> ')}])}e.exports=n},"./src/templates/squire/addFilePopover.tpl.html":function(e,t){var a=window.angular,n="templates/squire/addFilePopover.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<form novalidate data-squire-popover data-action=insertImage name=addFilePopover ng-class="{\'addFilePopover-allow-uri\':allowDataUri, \'addFilePopover-allow-embedded\':allowEmbedded}" class="insertImage addFilePopover-container addFilePopover-hidden pm_form"> <fieldset class=addFilePopover-panel> <legend class=addFilePopover-legend translate-context="Composer, add file popover" translate>Insert an image</legend> <div class="addFilePopover-field row"> <label for=url class=addFilePopover-label translate-context="Composer, add file popover" translate>URL image</label> <input type=url name=url autocomplete=off class=addFilePopover-input-url placeholder-translate="URL to image" placeholder-translate-context="Composer, add file popover" ng-model=data.image> <input class=addFilePopover-input-file type=file accept=image/*> </div> </fieldset> <footer class=addFilePopover-footer> <button type=button name=addembedded class="btn primary addFilePopover-btn-embedded" data-action-compose=::message data-action-compose-type=addEmbedded ng-class="{disabled: !canAddImage()}" translate-context=Action translate>Insert File</button> <button class="btn primary addFilePopover-btn-uri" name=adduri translate-context=Action translate>Insert File</button> <button class="btn primary addFilePopover-btn-url" name=addurl translate-context=Action translate>Insert URL</button> </footer> </form> ')}])}e.exports=n},"./src/templates/squire/addLinkPopover.tpl.html":function(e,t){var a=window.angular,n="templates/squire/addLinkPopover.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<form novalidate data-squire-popover data-action=makeLink autocomplete=off name=addLinkPopover class="makeLink addLinkPopover-container addLinkPopover-hidden pm_form"> <fieldset class=addLinkPopover-panel> <legend class=addLinkPopover-legend translate-context="Composer, add Link popover" translate>Edit the link</legend> <div class="addLinkPopover-field row"> <label for=labelLink class=addLinkPopover-label translate-context="Composer, add Link popover" translate>Text to display</label> <input name=labelLink id=labelLink class=addLinkPopover-input> </div> <div class="addLinkPopover-field row"> <label for=labelLink class=addLinkPopover-label translate-context="Composer, add Link popover" translate>URL link</label> <input name=urlLink id=urlLink placeholder-translate="Link URL" placeholder-translate-context="Composer, add Link popover" class=addLinkPopover-input> </div> </fieldset> <footer class=addLinkPopover-footer> <button class=addLinkPopover-btn-remove name=remove type=reset translate-context=Action translate>Remove link</button> <button class=addLinkPopover-btn-edit name=update translate-context=Action translate>Update link</button> <button class=addLinkPopover-btn-new class="btn primary" name=add translate>Insert link</button> </footer> </form> ')}])}e.exports=n},"./src/templates/squire/colorPopover.tpl.html":function(e,t){var a=window.angular,n="templates/squire/colorPopover.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="colorPopover-container pm_form" data-squire-popover> <header class=colorPopover-header> <h3 class=colorPopover-title translate-context=Title translate>Text color</h3> <h3 class=colorPopover-title-highlight translate-context=Title translate>Background color</h3> </header> <div class=colorPopover-panel> <div class=colorPopover-select> <color-list class=colorPopover-choice data-hash={{::message.ID}}></color-list> </div> </div> </div> ')}])}e.exports=n},"./src/templates/squire/moreToggle.tpl.html":function(e,t){var a=window.angular,n="templates/squire/moreToggle.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=moreToggle-container> <div class="squireToolbar-select-view squireToolbar-action-mode" data-squire-actions=moreToggle data-squire-actions-type=click pt-tooltip-translate-context=Action pt-tooltip-translate=More> <button type=button class="squireDropdown-item-label squireToolbar-action-modeEditor"></button> <i class="fa fa-caret-down"></i> </div> <ul class="squireToolbar-select-list squireToolbar-editor-mode"> <li class=squireToolbar-select-item data-squire-actions=setTextDirectionLTR> <i class="fa fa-check"></i> <span translate-context=Option translate>Left to Right</span> </li> <li class=squireToolbar-select-item data-squire-actions=setTextDirectionRTL> <i class="fa fa-check"></i> <span translate-context=Option translate>Right to Left</span> </li> <li class=squireToolbar-dropdown-divider></li> <li class=squireToolbar-select-item data-squire-actions=setEditorMode data-value=text/html> <i class="fa fa-check"></i> <span translate-context="Composer Mode" translate>Normal</span> </li> <li class=squireToolbar-select-item data-squire-actions=setEditorMode data-value=text/plain> <i class="fa fa-check"></i> <span translate-context="Composer Mode" translate>Plain Text</span> </li> </ul> </div> ')}])}e.exports=n},"./src/templates/squire/plainTextArea.tpl.html":function(e,t){var a=window.angular,n="templates/squire/plainTextArea.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,"<textarea class=plaintext-editor ng-model=message.DecryptedBody ng-trim=false dir=auto></textarea> ")}])}e.exports=n},"./src/templates/squire/squireSelectColor.tpl.html":function(e,t){var a=window.angular,n="templates/squire/squireSelectColor.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=squireSelectColor-container> <button type=button class=squireToolbar-action-color pt-tooltip-translate-context=Action pt-tooltip-translate="Change color" data-squire-details=popover.form data-squire-actions=changeColor> <i class="fa fa-font" aria-hidden=true></i> <mark></mark> <i class="fa fa-angle-down"></i> </button> <form novalidate data-squire-popover data-action=changeColor name=changeColor class="squire-popover squire-popover-second squireSelectColor-popover changeColor-hidden"> <color-popover></color-popover> <color-popover data-mode=highlight></color-popover> </form> </div> ')}])}e.exports=n},"./src/templates/squire/squireSelectFontFamily.tpl.html":function(e,t){var a=window.angular,n="templates/squire/squireSelectFontFamily.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=squireSelectFontFamily-container data-squire-dropdown> <div class=squireToolbar-select-view> <button type=button class="squireDropdown-item-label squireToolbar-action-fontFamily" data-squire-actions=changeFontFamily pt-tooltip-translate-context=Action pt-tooltip-translate="Change font" translate-context=Font translate> <span class=value>Arial</span> <i class="fa fa-angle-down"></i> </button> </div> <ul class="squireToolbar-select-list squireToolbar-font-family" data-squire-actions=setFontFace data-squire-ignore=true> <li class=squireToolbar-select-item data-value=georgia>Georgia</li> <li class=squireToolbar-select-item data-value=arial>Arial</li> <li class=squireToolbar-select-item data-value=helvetica>Helvetica</li> <li class=squireToolbar-select-item data-value="menlo, consolas, courier new, monospace">Monospace</li> <li class=squireToolbar-select-item data-value="tahoma, sans-serif">Tahoma</li> <li class=squireToolbar-select-item data-value=verdana>Verdana</li> <li class=squireToolbar-select-item data-value="times new roman">Times New Roman</li> <li class=squireToolbar-select-item data-value="trebuchet ms">Trebuchet MS</li> </ul> </div> ')}])}e.exports=n},"./src/templates/squire/squireSelectFontSize.tpl.html":function(e,t){var a=window.angular,n="templates/squire/squireSelectFontSize.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=squireSelectFontSize-container data-squire-dropdown> <div class=squireToolbar-select-view> <button type=button class="squireDropdown-item-label squireToolbar-action-fontSize" data-squire-actions=changeFontSize pt-tooltip-translate-context=Action pt-tooltip-translate="Change font size" translate-context="Font size" translate> <span class=value>14</span> <i class="fa fa-angle-down"></i> </button> </div> <ul class="squireToolbar-select-list squireToolbar-font-size" data-squire-actions=setFontSize data-squire-ignore=true> <li class=squireToolbar-select-item data-value=10>10</li> <li class=squireToolbar-select-item data-value=12>12</li> <li class=squireToolbar-select-item data-value=14>14</li> <li class=squireToolbar-select-item data-value=16>16</li> <li class=squireToolbar-select-item data-value=18>18</li> <li class=squireToolbar-select-item data-value=20>20</li> <li class=squireToolbar-select-item data-value=22>22</li> <li class=squireToolbar-select-item data-value=24>24</li> <li class=squireToolbar-select-item data-value=26>26</li> </ul> </div> ')}])}e.exports=n},"./src/templates/squire/squireToolbar.tpl.html":function(e,t){var a=window.angular,n="templates/squire/squireToolbar.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<nav class="squireToolbar-container menu" data-squire-state> <div class=squireToolbar-row-1> <button type=button class="squireToolbar-action-bold bold" pt-tooltip-translate-context=Action pt-tooltip-translate=Bold data-squire-actions=bold> <i class="fa fa-bold"></i> </button> <button type=button class="squireToolbar-action-italic italic" pt-tooltip-translate-context=Action pt-tooltip-translate=Italic data-squire-actions=italic> <i class="fa fa-italic"></i> </button> <button type=button class="squireToolbar-action-underline underline" pt-tooltip-translate-context=Action pt-tooltip-translate=Underline data-squire-actions=underline> <i class="fa fa-underline"></i> </button> <div class=squireToolbar-separator></div> <button type=button class="squireToolbar-action-ulist ulist" pt-tooltip-translate-context=Action pt-tooltip-translate="Unordered list" data-squire-actions=makeUnorderedList> <i class="fa fa-list-ul"></i> </button> <button type=button class="squireToolbar-action-olist olist" pt-tooltip-translate-context=Action pt-tooltip-translate="Ordered list" data-squire-actions=makeOrderedList> <i class="fa fa-list-ol"></i> </button> <div class="squireToolbar-separator desktopOnly"></div> <button type=button class=squireToolbar-action-options pt-tooltip-translate-context=Action pt-tooltip-translate="Text options"> <i class="fa fa-font" aria-hidden=true></i> <i class="fa fa-angle-down"></i> <i class=squireToolbar-triangle-with-shadow></i> </button> <div class=squireToolbar-separator></div> <button type=button class="squireToolbar-action-link link" pt-tooltip-translate-context=Action pt-tooltip-translate="Insert link" data-squire-details=popover.form data-squire-actions=makeLink> <i class="fa fa-link"></i> </button> <button type=button class="squireToolbar-action-image image" data-squire-details=popover.form pt-tooltip-translate-context=Action pt-tooltip-translate="Insert image" data-squire-actions=insertImage> <i class="fa fa-image"></i> </button> <button type=button class="squireToolbar-action-removeAllFormatting removeAllFormatting" pt-tooltip-translate-context=Action pt-tooltip-translate="Clear all formatting" data-squire-actions=removeAllFormatting> <i class="fa fa-eraser"></i> </button> <more-toggle class="squireToolbar-select squireToolbar-text-mode"></more-toggle> </div> <div class=squireToolbar-row-2> <squire-select-font-size class="squireToolbar-select squireToolbar-fontSize"></squire-select-font-size> <squire-select-font-family class="squireToolbar-select squireToolbar-fontFamily"></squire-select-font-family> <squire-select-color class=squireToolbar-color></squire-select-color> <div class=squireToolbar-separator></div> <button type=button class="squireToolbar-action-aleft aleft" pt-tooltip-translate-context=Action pt-tooltip-translate="Align left" data-squire-actions=alignLeft> <i class="fa fa-align-left"></i> </button> <button type=button class="squireToolbar-action-acenter acenter" pt-tooltip-translate-context=Action pt-tooltip-translate="Align center" data-squire-actions=alignCenter> <i class="fa fa-align-center"></i> </button> <button type=button class="squireToolbar-action-aright aright" pt-tooltip-translate-context=Action pt-tooltip-translate="Align right" data-squire-actions=alignRight> <i class="fa fa-align-right"></i> </button> </div> </nav> ')}])}e.exports=n},"./src/templates/ui/atomLoader.tpl.html":function(e,t){var a=window.angular,n="templates/ui/atomLoader.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,"<div class=atomLoader> <div class=atomLoader-container> <div class=atomLoader-item></div> <div class=atomLoader-item2></div> <div class=atomLoader-item3></div> <div class=atomLoader-proton></div> </div> <p class=atomLoader-text></p> </div> ")}])}e.exports=n},"./src/templates/ui/autoCompleteEmailsItem.tpl.html":function(e,t){var a=window.angular,n="templates/ui/autoCompleteEmailsItem.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=autocompleteEmailsItem-container> <span class=autocompleteEmails-label>{{ ::email | labelAutocomplete }}</span> <button class="autocompleteEmails-btn-remove fa fa-times" type=button aria-label=Remove data-address="{{ ::email.Address }}"> </button> </div> ')}])}e.exports=n},"./src/templates/ui/autocompleteEmail.tpl.html":function(e,t){var a=window.angular,n="templates/ui/autocompleteEmail.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="autocompleteEmail-container autocomplete-container"> <input id=autocomplete name=autocomplete type=text autofocus ng-model=email autocomplete=off spellcheck=false autocapitalize=off class=autocompleteEmail-input> </div> ')}])}e.exports=n},"./src/templates/ui/autocompleteEmails.tpl.html":function(e,t){var a=window.angular,n="templates/ui/autocompleteEmails.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<form class=autocompleteEmails-container novalidate> <div class=autocompleteEmails-admin> <autocomplete-emails-item class=autocompleteEmails-item ng-class="{\'autocompleteEmails-item-invalid\': email.invalid}" ng-repeat="email in emails track by email.$id"></autocomplete-emails-item> <div class="autocompleteEmails-field autocomplete-container"> <input id=autocomplete name=autocomplete autofocus autocomplete=off spellcheck=false autocapitalize=off class=autocompleteEmails-input> </div> </div> <ul class=autocompleteEmails-autocomplete></ul> </form> ')}])}e.exports=n},"./src/templates/ui/chooseLayoutBtns.tpl.html":function(e,t){var a=window.angular,n="templates/ui/chooseLayoutBtns.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_buttons layout chooseLayoutBtns-container"> <a href=# class=chooseLayoutBtns-btn-column pt-tooltip-translate="Change layout" pt-tooltip-translate-context=Action data-action=columns> <img src=/assets/img/columnview.svg /> </a> <a href=# class=chooseLayoutBtns-btn-rows pt-tooltip-translate="Change layout" pt-tooltip-translate-context=Action data-action=rows> <img src=/assets/img/rowview.svg /> </a> </div> ')}])}e.exports=n},"./src/templates/ui/customCheckbox.tpl.html":function(e,t){var a=window.angular,n="templates/ui/customCheckbox.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="customCheckbox-container customMaskInput-container"> <input type=checkbox class="customCheckbox-input customMaskInput-input-checkbox mousetrap"> <div class="customCheckbox-mask customMaskInput-mask"></div> </div> ')}])}e.exports=n},"./src/templates/ui/customRadio.tpl.html":function(e,t){var a=window.angular,n="templates/ui/customRadio.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="customRadio-container customMaskInput-container"> <input type=radio class="customRadio-input customMaskInput-input-radio"> <div class="customRadio-mask customMaskInput-mask"></div> </div> ')}])}e.exports=n},"./src/templates/ui/dateTimePicker.tpl.html":function(e,t){var a=window.angular,n="templates/ui/dateTimePicker.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_grid no-padding no-margin datetimepicker"> <div class=col-4-8> <div class=input-icon> <em class="fa fa-calendar searchForm-icon"></em> <input class="datepicker always-show-ng-invalid" type=text data-pikaday=model.pikaday data-min-date=minDate ng-model=model.date name={{::datePickerKey}} required ng-disabled=disableInput> </div> </div> <div class="col-4-8 timepicker-container"> <time-picker class=timepicker ng-model=model.time data-event-key="{{ ::timePickerKey }}"></time-picker> </div> <div class="col-1-1 text-red" ng-messages=combineErrors()> <p ng-message=time_required translate-context="Error input" translate> Please enter a valid time. </p> <p ng-message=date_required translate-context="Error input" translate> Please enter a valid date. </p> <p ng-message=both_required translate-context="Error input" translate> Please enter a valid date and time. </p> </div> </div> ')}])}e.exports=n},"./src/templates/ui/header/headerNoAuth.tpl.html":function(e,t){var a=window.angular,n="templates/ui/header/headerNoAuth.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<header class="pm_opensans headerNoAuth-container" ng-class="{ \'isLoggedIn\': isLoggedIn }"> <ul class=headerNoAuth-list> <li class=headerNoAuth-item-back> <a class=headerNoAuth-item-back-button__noAuth href=https://protonmail.com target=_self> <span translate translate-context=Action>Back to protonmail.com</span> </a> <a class=headerNoAuth-item-back-btn__Auth href=/inbox title=Inbox> <span translate translate-context=Action>Back to inbox</span> </a> </li> <li class=headerNoAuth-item-report> <new-bug-report class=headerNoAuth-item-report-button></new-bug-report> </li> <li class=headerNoAuth-item-signup__noAuth> <signup-link data-key=forFree class="headerNoAuth-item-signup-button pm_button primary" class=loginForm-link-signup></signup-link> </li> <li class=headerNoAuth-item-logout__Auth> <a class="headerNoAuth-item-logout-button pm_button primary" ui-sref=login translate translate-context=Action>Log out</a> </li> </ul> </header> ')}])}e.exports=n},"./src/templates/ui/header/headerSecured.tpl.html":function(e,t){var a=window.angular,n="templates/ui/header/headerSecured.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<header class="headerSecured-container headerDesktop-container"> <header-secured-desktop ng-if=!mobileMode></header-secured-desktop> <header-secured-mobile ng-if=mobileMode></header-secured-mobile> </header> ')}])}e.exports=n},"./src/templates/ui/header/headerSecuredDesktop.tpl.html":function(e,t){var a=window.angular,n="templates/ui/header/headerSecuredDesktop.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=headerSecuredDesktop-container> <protonmail-logo class="headerSecuredDesktop-logo headerDesktop-logo"></protonmail-logo> <search-form ng-if="!(\'secured.contacts\' | includedByState)"></search-form> <search-contact ng-if="\'secured.contacts\' | includedByState"></search-contact> <navigation></navigation> </div> ')}])}e.exports=n},"./src/templates/ui/header/headerSecuredMobile.tpl.html":function(e,t){var a=window.angular,n="templates/ui/header/headerSecuredMobile.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=headerSecuredMobile-container> <btn-display-mobile-sidebar class=headerSecuredMobile-toggleSidebar></btn-display-mobile-sidebar> <search-form></search-form> <btn-advanced-search class=headerSecuredMobile-searchBtn></btn-advanced-search> <button class=headerSecuredMobile-compose action-compose action-compose-type=new> <div> <i class="fa fa-pencil"></i> </div> </button> </div> ')}])}e.exports=n},"./src/templates/ui/legends.tpl.html":function(e,t){var a=window.angular,n="templates/ui/legends.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<ul class=legends> <li ng-repeat="legend in list"> <span class="legends-square margin-right {{ ::legend.classes }}"></span> <span ng-bind=::legend.label>already used</span> </li> </ul> ')}])}e.exports=n},"./src/templates/ui/monthdayTimePicker.tpl.html":function(e,t){var a=window.angular,n="templates/ui/monthdayTimePicker.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_grid no-padding no-margin datetimepicker"> <div class=col-4-8> <div class=pm_select> <select class="day-selector always-show-ng-invalid" ng-model=model.day ng-options="day.label for day in availableDays track by day.value" ng-disabled=disableInput name={{::datePickerKey}} required> <option value="" disabled=disabled translate>Day of the month</option> </select> <i class="fa fa-angle-down"></i> </div> </div> <div class="col-4-8 timepicker-container"> <time-picker class=timepicker ng-model=model.time data-event-key="{{ ::timePickerKey }}"></time-picker> </div> <div class="col-1-1 text-red" ng-messages=combineErrors()> <p ng-message=time_required translate-context="Error input" translate> Please enter a valid time. </p> <p ng-message=date_required translate-context="Error input" translate> Please enter a valid day in the month. </p> <p ng-message=both_required translate-context="Error input" translate> Please enter a valid day in the month and time. </p> </div> </div> ')}])}e.exports=n},"./src/templates/ui/multiselect.tpl.html":function(e,t){var a=window.angular,n="templates/ui/multiselect.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=multiselectContainer> <span class=pm_multiselect> <label class=multiselectLabel ng-repeat="option in options"> <custom-checkbox data-custom-class=multiselectCheckbox type=checkbox data-custom-ng-model=selected[option.value] data-custom-ng-value=option.value data-custom-ng-disabled=disabled></custom-checkbox>{{option.label}}</label> </span> </div> ')}])}e.exports=n},"./src/templates/ui/navigation/navigation.tpl.html":function(e,t){var a=window.angular,n="templates/ui/navigation/navigation.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<ul class=navigation> <navigation-black-friday></navigation-black-friday> <li class=navigation-upgrade-item ng-if=isFree> <a class=navigation-link ui-sref="secured.dashboard({scroll: true})"> <i class="navigation-icon fa fa-cubes"></i> <span class=navigation-title translate translate-context=Action>Upgrade</span> </a> </li> <li ng-class="{\'active\': activeSettings()}"> <a id=tour-settings class=navigation-link ui-sref=secured.account> <i class="navigation-icon fa fa-cogs"></i> <span class=navigation-title translate translate-context=Action>Settings</span> </a> </li> <li ui-sref-active=active> <a class=navigation-link ui-sref=secured.contacts> <i class="navigation-icon fa fa-address-book-o"></i> <span class=navigation-title translate translate-context=Action>Contacts</span> </a> </li> <navigation-report></navigation-report> <navigation-user></navigation-user> </ul> ')}])}e.exports=n},"./src/templates/ui/navigation/navigationBlackFriday.tpl.html":function(e,t){var a=window.angular,n="templates/ui/navigation/navigationBlackFriday.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<li class=navigationBlackFriday> <button class="navigationBlackFriday-button navigation-link"> <i class="navigation-icon navigationBlackFriday-icon"></i> <span class=navigation-title>Black Friday</span> </button> </li>')}])}e.exports=n},"./src/templates/ui/navigation/navigationReport.tpl.html":function(e,t){var a=window.angular,n="templates/ui/navigation/navigationReport.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<li class=navigationReport> <a class="navigation-link pm_trigger" dropdown href=# id=tour-support> <span class=navigation-icons> <i class="fa fa-life-ring"></i> <i class="fa fa-angle-down"></i> </span> <span class=navigation-title translate translate-context=Action>Report bug</span> </a> <span class="pm_dropdown navigationReport-dropdown wide right"> <a href=https://protonmail.com/support target=_blank class=navigationReport-help> <i class="fa fa-question-circle"></i> <span translate translate-context=Action>I have a question</span> </a> <new-bug-report class=navigationReport-help id=reportBugBtn></new-bug-report> </span> </li> ')}])}e.exports=n},"./src/templates/ui/navigation/navigationUser.tpl.html":function(e,t){var a=window.angular,n="templates/ui/navigation/navigationUser.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<li class=navigationUser> <a class="navigation-link navigationUser-link pm_trigger" dropdown href=#> <span class=navigation-icons> <i class="fa fa-user"></i> <i class="fa fa-angle-down"></i> </span> <span class=navigation-title>{{ displayName || email }}</span> </a> <span class="pm_dropdown navigationUser-dropdown wide right"> <span class=navigationUser-head> <strong class=navigationUser-head-display-name title="{{ displayName }}">{{ displayName }}</strong> <span class=navigationUser-head-email title="{{ email }}">{{ email }}</span> <span class=navigationUser-head-organization title="{{ organization.DisplayName }}">{{ organization.DisplayName }}</span> </span> <button class=navigationUser-help ng-if=wizardEnabled data-display-wizard-button> <i class="fa fa-magic"></i> <span translate translate-context=Action>Tutorial</span> </button> <a class=navigationUser-help target=_blank href=https://protonmail.com/support> <i class="fa fa-life-ring"></i> <span translate translate-context=Action>Help & answers</span> </a> <a class=navigationUser-help target=_blank href=https://shop.protonmail.com> <i class="fa fa-shopping-cart"></i> <span translate translate-context=Action>ProtonMail Shop</span> </a> <a ui-sref=login class="pm_button primary text-center navigationUser-logout" translate translate-context=Action>Logout</a> <app-version class="navigationUser-version text-center" data-prefix="ProtonMail "></app-version> </span> </li> ')}])}e.exports=n},"./src/templates/ui/slider.tpl.html":function(e,t){var a=window.angular,n="templates/ui/slider.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_grid flex flex-mobileShrink absorbing no-margin slider"> <div class="col- absorbe"> <div class=slider> <div ng-if=options.minPadding class=slider-min-padding></div> <div ng-if=options.maxPadding class=slider-max-padding></div> </div> </div> <div class=col-> <div class="pm_buttons sliderButtons"> <button type=button ng-click=minus()> <i class="fa fa-chevron-left"></i> </button> <button type=button ng-click=plus()> <i class="fa fa-chevron-right"></i> </button> </div> </div> </div> ')}])}e.exports=n},"./src/templates/ui/timePicker.tpl.html":function(e,t){var a=window.angular,n="templates/ui/timePicker.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="input-icon timepickerContainer"> <em class="fa fa-clock-o searchForm-icon"></em> <input type=text class="timepicker always-show-ng-invalid" required name={{::eventKey}} ng-model=model.currentTime placeholder-translate=HH:MM> </div> ')}])}e.exports=n},"./src/templates/ui/toolbarDesktop.tpl.html":function(e,t){var a=window.angular,n="templates/ui/toolbarDesktop.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<nav class="toolbarDesktop-container pm_toolbar pm_toolbar_withSelector"> <span class="pm_buttons back" ng-if="idDefined() && viewLayout === 1"> <a href=# ng-click=back() pt-tooltip-translate="Back to list" pt-tooltip-translate-context=Action> <i class="fa fa-long-arrow-left"></i> </a> </span> <elements-selector ng-if=displayPaginator() class=toolBar-select-all></elements-selector> <read-unread></read-unread> <move-element></move-element> <span class=pm_buttons> <div class=pm_buttons ng-class="{disabled: isDisabled()}"> <a class="pm_trigger open-folder" dropdown ng-class="{disabled: isDisabled()}" pt-tooltip-translate="Move to"> <i class="fa fa-folder"></i> <i class="fa fa-angle-down"></i> </a> <div class="pm_dropdown wide"> <dropdown-folders data-elements=getElements></dropdown-folders> </div> </div> <div id=tour-label-dropdown class=pm_buttons ng-class="{disabled: isDisabled()}"> <a class="pm_trigger open-label" dropdown ng-class="{disabled: isDisabled()}" pt-tooltip-translate="Label as"> <i class="fa fa-tag"></i> <i class="fa fa-angle-down"></i> </a> <div class="pm_dropdown wide"> <dropdown-labels messages=getElements save=saveLabels></dropdown-labels> </div> </div> </span> <advanced-filter-element></advanced-filter-element> <div class="pull-right action toolbarDesktop-actions-right"> <choose-layout-btns id=tour-layout></choose-layout-btns> <nav-elements></nav-elements> <paginator ng-if=displayPaginator()></paginator> </div> </nav> ')}])}e.exports=n},"./src/templates/ui/toolbarMobile.tpl.html":function(e,t){var a=window.angular,n="templates/ui/toolbarMobile.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<nav class="toolbarMobile-container pm_toolbar"> <span class="pm_buttons back" ng-if="idDefined() && (viewLayout === 1 || mobileMode)"> <a ng-click=back()> <i class="fa fa-long-arrow-left"></i> </a> </span> <span class=pm_buttons ng-class="{ disabled: isDisabled()}"> <a class=pm_trigger dropdown ng-disabled=isDisabled()> <em><i class="fa fa-eye-slash"></i> <i class="fa fa-angle-down"></i></em> </a> <span class="pm_dropdown wide"> <a ng-click=unread()> <i class="fa fa-eye-slash"></i> <span translate translate-context=Action>Mark as unread</span> </a> <a ng-click=read()> <i class="fa fa-eye"></i> <span translate translate-context=Action>Mark as read</span> </a> </span> </span> <span class=pm_buttons ng-class="{ disabled: isDisabled() }"> <a class=pm_trigger dropdown ng-disabled=isDisabled()> <em><i class="fa fa-trash-o"></i> <i class="fa fa-angle-down"></i></em> </a> <span class="pm_dropdown wide"> <a ng-click="move(\'trash\')" ng-hide="{{ \'secured.trash.**\' | includedByState }}" ng-class="{ disabled: numberElementSelected === 0 }"> <i class="fa fa-trash-o"></i> <span translate translate-context=Action>Move to trash</span> </a> <a ng-click="move(\'inbox\')" ng-hide="{{ (\'secured.inbox.**\' | includedByState) || (\'secured.spam.**\' | includedByState) }}" ng-class="{ disabled: numberElementSelected === 0 }"> <i class="fa fa-inbox"></i> <span translate translate-context=Action>Move to inbox</span> </a> <a ng-click="move(\'archive\')" ng-hide="{{ \'secured.archive.**\' | includedByState }}" ng-class="{ disabled: isDisabled() }"> <i class="fa fa-archive"></i> <span translate translate-context=Action>Move to archive</span> </a> <a ng-click="move(\'spam\')" ng-hide="{{ \'secured.spam.**\' | includedByState }}" ng-class="{ disabled: isDisabled() }"> <i class="fa fa-ban"></i> <span translate translate-context=Action>Move to spam</span> </a> <a ng-click=delete() ng-show="(\'secured.trash.**\' | includedByState) || (\'secured.drafts.**\' | includedByState) || (\'secured.allmail.**\' | includedByState)" ng-class="{ disabled: isDisabled() }"> <i class="fa fa-times-circle-o"></i> <span translate translate-context=Action>Delete</span> </a> <a ng-click="move(\'inbox\')" ng-show="{{ \'secured.spam.**\' | includedByState }}" ng-class="{ disabled: isDisabled() }"> <i class="fa fa-check"></i> <span translate translate-context=Action>Not spam</span> </a> </span> </span> <span class=pm_buttons> <span class=pm_buttons ng-class="{ disabled: isDisabled() }"> <a href=# class="pm_trigger open-folder" dropdown ng-class="{ disabled: isDisabled() }"> <i class="fa fa-folder"></i> <i class="fa fa-angle-down"></i> </a> <span class="pm_dropdown wide right"> <dropdown-folders data-elements=getElements></dropdown-folders> </span> </span> <span class=pm_buttons ng-class="{ disabled: isDisabled() }"> <a href=# class="pm_trigger open-label" dropdown ng-class="{ disabled: isDisabled() }"> <i class="fa fa-tag"></i> <i class="fa fa-angle-down"></i> </a> <span class="pm_dropdown wide right"> <dropdown-labels messages=getElements save=saveLabels></dropdown-labels> </span> </span> </span> <div class=pull-right> <nav-elements></nav-elements> <paginator ng-if=!idDefined()></paginator> </div> </nav> ')}])}e.exports=n},"./src/templates/ui/weekdayTimePicker.tpl.html":function(e,t){var a=window.angular,n="templates/ui/weekdayTimePicker.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_grid no-padding no-margin datetimepicker"> <div class=col-4-8> <div class=pm_select> <select class="week-day-selector always-show-ng-invalid" ng-model=model.weekday ng-options="day.longLabel for day in days track by day.value" ng-disabled=disableInput name={{::datePickerKey}} required> <option value="" disabled=disabled translate-context="Label select weekday" translate>Select weekday</option> </select> <i class="fa fa-angle-down"></i> </div> </div> <div class="col-4-8 timepicker-container"> <time-picker class=timepicker ng-model=model.time data-event-key="{{ ::timePickerKey }}"></time-picker> </div> <div class="col-1-1 text-red" ng-messages=combineErrors()> <p ng-message=time_required translate-context="Error input" translate> Please enter a valid time. </p> <p ng-message=date_required translate-context="Error input" translate> Please enter a valid day in the week. </p> <p ng-message=both_required translate-context="Error input" translate> Please enter a valid day in the week and time. </p> </div> </div> ')}])}e.exports=n},"./src/templates/user/addressesSection.tpl.html":function(e,t){var a=window.angular,n="templates/user/addressesSection.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=addressesSection-container> <p class="alert alert-info" ng-show=isFree translate>Add additional email addresses to your account such as username2@protonmail.com. To enable this feature, <a ui-sref="secured.dashboard({scroll: true})">upgrade to ProtonMail Plus</a>.</p> <label class=settingsSignatures-label-active ng-hide=isFree> <div class=settingsSignatures-label-aside> <section class=settingsSignatures-header-aside ng-show=isAdmin> <span translate translate-context="info link to Addresses/Users in Signatures page">New Addresses can be added on</span> <a ui-sref="secured.members({ action: \'scroll\' })" class=text-purple>Addresses/Users</a> </section> <section class=help-dnd ng-if="activeAddresses.length > 1" translate-context=Help translate>You can drag and drop active addresses to order them. The top address is the default address.</section> </div> </label> <div class=activeAddresses-container> <ul class=pm_sort-container data-as-sortable=aliasDragControlListeners data-is-disabled="activeAddresses.length === 1" ng-class="{ \'as-sortable-disabled\': activeAddresses.length === 1 }" data-ng-model=activeAddresses> <li class=pm_sort-item ng-repeat="address in activeAddresses track by address.ID" data-as-sortable-item ng-class="{\'unsortable\': true}"> <div class=pm_sort-item-content as-sortable-item-handle=""> <div class=activeAddresses-email> <span class=ellipsis>{{ address.Email }}</span> </div> <div class=activeAddresses-badge> <span class="pm_badge primary" ng-show=$first translate>Default</span> </div> </div> </li> </ul> </div> </div> ')}])}e.exports=n},"./src/templates/user/addressesSelector.tpl.html":function(e,t){var a=window.angular,n="templates/user/addressesSelector.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<span class="pm_select addressesSelector-container"> <select class=addressesSelector-select></select> <i class="addressesSelector-icon fa fa-angle-down"></i> </span> ')}])}e.exports=n},"./src/templates/user/defaultSignature.tpl.html":function(e,t){var a=window.angular,n="templates/user/defaultSignature.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<section class=defaultSignature-container> <div class=clearfix> <div class=col-3-8> <label for=displayName> <span translate-context=Title translate translate-comment="display name heading on account page" translate>Display name</span> <a href=https://protonmail.com/support/knowledge-base/display-name/ target=_blank class=text-purple><i class="fa fa-info-circle"></i></a> </label> </div> <div class=col-5-8> <input id=displayName type=text name=displayName ng-model=displayName> </div> </div> <div class=clearfix> <div class=col-3-8> <label for=signature translate-context=Title translate translate-comment="Signature heading on account page" translate>Signature</label> </div> <div class=col-5-8> <squire id=signature name=signature class="form-control no-resize" data-type-content=signature allow-data-uri=true data-value=signature></squire> </div> </div> <div class=clearfix> <div class=col-3-8> <label translate translate-context=Title>ProtonMail Signature</label> </div> <div class=col-5-8> <toggle ng-if=!protonSignature.isMandatory class="defaultSignature-toggle small pull-right" data-status=protonSignature.isActive data-on=ON data-off=OFF data-name=changePMSignature></toggle> <p ng-bind-html=protonSignature.content></p> <p class="alert alert-info" ng-if=protonSignature.isMandatory translate translate-context=Info> A <a ui-sref="secured.dashboard({scroll: true})">paid plan</a> is required to turn off the ProtonMail signature. Paid plan revenue allows us to continue supporting free accounts. </p> </div> </div> <div class=clearfix> <div class=col-3-8> </div> <div class=col-5-8> <button class="pm_button primary" ng-click=saveIdentity() translate-context=Action translate translate-comment="Save button for updating default identity on account page">Save</button> <a ui-sref=secured.account class="defaultSignature-link-signatures pm_button" translate-context=Action translate translate-comment="link to addresses page">Edit other signatures</a> </div> </div> </section> ')}])}e.exports=n},"./src/templates/user/displayNameSignature.tpl.html":function(e,t){var a=window.angular,n="templates/user/displayNameSignature.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=displayNameSignature-container> <div class=pm_grid> <div class=col-3-8> <label class=displayNameSignature-label for=displayName> <span translate-context=Label translate>Display name</span> <a href=https://protonmail.com/support/knowledge-base/display-name-and-signature/ target=_blank class=text-purple> <i class="fa fa-info-circle"></i> </a> </label> </div> <div class=col-5-8> <input type=text id=displayName class=displayNameSignature-input ng-model=model.DisplayName> </div> </div> <div class=pm_grid> <div class=col-3-8> <label class=displayNameSignature-label for=signature translate-context=Label translate>Signature</label> </div> <div class=col-5-8> <squire id=signature class=displayNameSignature-squire name=signature data-type-content=signature allow-data-uri=true data-value=model.Signature></squire> </div> </div> </div> ')}])}e.exports=n},"./src/templates/user/humanVerification.tpl.html":function(e,t){var a=window.angular,n="templates/user/humanVerification.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_panel pm_form wide humanVerification-container"> <div class="wrapper humanVerification-wrapper" id=verification-panel ng-class="{\n \'humanVerification-type-email\': verificator === \'email\',\n \'humanVerification-type-captcha\': verificator === \'captcha\',\n \'humanVerification-type-sms\': verificator === \'sms\',\n \'humanVerification-type-donation\': verificator === \'donation\',\n \'humanVerification-show-email\': showEmail,\n \'humanVerification-show-captcha\': showCaptcha,\n \'humanVerification-show-sms\': showSms,\n \'humanVerification-show-donation\': showPayment,\n }"> <label class=titleLabel for=password data-step=5> <span translate translate-context=Title translate-comment="Antispam section of account creation">Are you human?</span> </label> <p class=help translate-context=Info translate>To fight spam, please verify you are human.</p> <p class="help humanVerification-help-privacy" translate-context=Info translate>Your email or phone number will not be linked to the account created. It is only used during the signup process. A hash will be saved to prevent abuse of the ProtonMail systems.</p> <div class=humanVerification-block-captcha> <label class="signup-radio-label humanVerification-label-captcha"> <custom-radio data-custom-ng-model=verificator data-custom-value=captcha></custom-radio> <strong class=signup-radio-label-text>CAPTCHA</strong> </label> </div> <div class=humanVerification-block-email> <label class=signup-radio-label> <custom-radio data-custom-ng-model=verificator data-custom-value=email></custom-radio> <strong class=signup-radio-label-text translate translate-context=Title>Email</strong> </label> </div> <div class=humanVerification-block-sms> <span class="pull-right humanVerification-sms-details">(<a href=# ng-click="whySMS = !whySMS" translate-context=Link translate>Why is this required?</a>)</span> <label class=signup-radio-label> <custom-radio data-custom-ng-model=verificator data-custom-value=sms></custom-radio> <strong class=signup-radio-label-text translate translate-context=Title>SMS</strong> </label> </div> <div class=humanVerification-block-donation> <label class=signup-radio-label> <custom-radio data-custom-ng-model=verificator data-custom-value=donation></custom-radio> <strong class=signup-radio-label-text translate translate-context=Title>Donate</strong> </label> </div> <div ng-show=whySMS class="spacing-top spacing-bottom"> <div class="alert alert-info" translate-context="About human verification" translate> <p>Too many ProtonMail accounts have been created from your connection.</p> <p>Thus, we are requesting additional verification to ensure you are human and not a spam bot.</p> <p>Because Tor or free VPNs are frequently abused by spammers, this check may be triggered because of the Tor or VPN exit node you are using.</p> </div> </div> <div class="pm_form spacing-top spacing-bottom humanVerification-form-email"> <form class="pm_grid humanVerification-formEmail-container" ng-show="model.verificationSent !== true"> <div class=col-2-3> <input type=email ng-model=model.emailVerification placeholder-translate="Email verification"> </div> <div class=col-1-3> <button class="pm_button primary" translate translate-context=Action>Send</button> </div> </form> <div class=pm_grid ng-show="model.verificationSent === true"> <p class="alert alert-success"><strong translate-context=Info translate>Verification code sent</strong><br/><span translate-context=Info translate>Please check your email and enter the code below:</span></p> <div class=margin ng-show="model.verificationSent === true"> <input class=bigger type=text ng-model=model.codeVerification placeholder-translate-context="Input for the code sent by SMS" placeholder-translate="Verification code"> </div> <div class=col-1-2> <button type=button class="pm_button link" ng-click="model.verificationSent = false" translate translate-context=Action>Send new code</button> </div> </div> </div> <div id=smsVerification class="pm_form spacing-top spacing-bottom humanVerification-form-sms"> <form class="pm_grid humanVerification-formSms-container" ng-show="model.smsVerificationSent !== true"> <div class=col-2-3> <input type=tel data-ng-intl-tel-input class=phoneCountryCode ng-model=model.smsVerification> </div> <div class=col-1-3> <button type=submit class="pm_button primary" translate-context=Action translate>Send</button> </div> </form> <div class=pm_grid ng-show="model.smsVerificationSent === true"> <p class="alert alert-success" translate-context="Human verification via SMS" translate> <strong>Verification code sent</strong><br/> Please check <strong>{{ model.smsVerification }}</strong> and enter the code below: </p> <div class=col-1-2 ng-show="model.smsVerificationSent === true"> <input type=text ng-model=model.smsCodeVerification placeholder-translate="Code verification"> </div> <div class=col-1-2> <button type=button ng-click="model.smsVerificationSent = false" class="pm_button link" translate-context=Action translate>Send new code</button> </div> </div> </div> <captcha ng-if="verificator === \'captcha\'" class=humanVerification-form-captcha></captcha> <donation data-action=humanVerification data-method=currentMethod class="spacing-top humanVerification-form-donation"></donation> <p class="text-center humanVerification-completeSetup"> <button type=submit class="pm_button primary large humanVerification-completeSetup-create" ng-disabled="model.codeVerification === \'\' && model.captcha_token === false && model.smsCodeVerification === \'\'" translate translate-context=Action>Complete setup</button> </p> </div> </div> ')}])}e.exports=n},"./src/templates/user/identitySection.tpl.html":function(e,t){var a=window.angular,n="templates/user/identitySection.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=identitySection-container> <div class=pm_grid> <div class=col-3-8> <label class=identitySection-multiple-label translate-context=Label translate>Select an address</label> <label class=identitySection-single-label translate-context=Label translate>Address</label> </div> <div class=col-5-8> <addresses-selector></addresses-selector> </div> </div> <form class=identitySection-form name=identityForm novalidate> <display-name-signature data-model=address></display-name-signature> <div class=pm_grid> <div class=col-3-8> </div> <div class=col-5-8> <button class="pm_button primary" translate-context=Action translate translate-comment="Save button for updating default identity on account page">Save</button> <a href=#addressesPrioritySection class="pm_button identitySection-priority-link" translate-context=Action translate>Change address priority</a> </div> </div> </form> <div class=pm_grid> <div class=col-3-8> <label translate-context=Label translate>ProtonMail Signature</label> </div> <div class=col-5-8> <pm-signature-toggle></pm-signature-toggle> </div> </div> </div> ')}])}e.exports=n},"./src/templates/user/pmSignatureToggle.tpl.html":function(e,t){var a=window.angular,n="templates/user/pmSignatureToggle.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=pmSignatureToggle-container> <toggle ng-if=!protonSignature.isMandatory class="defaultSignature-toggle small pull-right" data-status=protonSignature.isActive data-on=ON data-off=OFF data-name=changePMSignature></toggle> <p ng-bind-html=protonSignature.content></p> <p class="alert alert-info" ng-if=protonSignature.isMandatory translate translate-context=Info> A <a ui-sref="secured.dashboard({scroll: true})">paid plan</a> is required to turn off the ProtonMail signature. Paid plan revenue allows us to continue supporting free accounts. </p> </div> ')}])}e.exports=n},"./src/templates/user/signupCreationProcess.tpl.html":function(e,t){var a=window.angular,n="templates/user/signupCreationProcess.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=signupCreationProcess-container ng-class="{\n \'signupCreationProcess-error\': signupError\n }"> <header class="text-center header"> <div class=creating-loader-container> <atom-loader data-loader-theme=primary></atom-loader> </div> <h2 class="text-center signupCreationProcess-title" translate-context=Title translate>Creating account</h2> <h2 class="text-center signupCreationProcess-error-title" translate-context=Error translate>Sign up failed</h2> </header> <p class="alert alert-danger signupCreationProcess-error-msg"><span translate-context=Error translate>An error occured while trying to create your account. To see common problems and solutions</span> <a target=_blank href=https://protonmail.com/support/knowledge-base/common-sign-up-problems-and-solutions/ translate-context=Action translate>click here</a>.</p> <div class="wrapper text-left"> <ol id=creationList> <li class=done> <i class="show fa fa-check"></i> <span translate-context="Signup step label" translate>Generating keys</span> </li> <li ng-class="{ \'done\': flow.creation }"> <i ng-class="{ \'show\': flow.creation }" class="show fa fa-check"></i> <span translate-context="Signup step label" translate>Creating new account</span> </li> <li ng-class="{ \'done\': flow.loggedin }"> <i ng-class="{ \'show\': flow.loggedin }" class="fa fa-check"></i> <span translate-context="Signup step label" translate>Logging in to new account</span> </li> <li ng-class="{ \'done\': flow.setupaccount }"> <i ng-class="{ \'show\': flow.setupaccount }" class="fa fa-check"></i> <span translate-context="Signup step label" translate>Setting up new account</span> </li> <li ng-class="{ \'done\': flow.userready }"> <i ng-class="{ \'show\': flow.userready }" class="fa fa-check"></i> <span translate-context="Signup step label" translate>Done</span> </li> <li ng-class="{ \'done\': flow.done }"> <i ng-class="{ \'show\': flow.done }" class="fa fa-check"></i> <span translate-context="Signup step label" translate>Redirecting</span> </li> </ol> </div> </div> ')}])}e.exports=n},"./src/templates/user/signupHumanForm.html":function(e,t){e.exports="<form name=humanVerificationStepForm novalidate class=pm_form> <human-verification data-model=account></human-verification> </form> "},"./src/templates/user/signupHumanForm.tpl.html":function(e,t){var a=window.angular,n="templates/user/signupHumanForm.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,"<form name=humanVerificationStepForm novalidate class=pm_form> <human-verification data-model=account></human-verification> </form> ")}])}e.exports=n},"./src/templates/user/signupPayForm.tpl.html":function(e,t){var a=window.angular,n="templates/user/signupPayForm.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=signupPayForm-container ng-class="{\n \'signupPayForm-cycle-month\': plan.Cycle === 1,\n \'signupPayForm-cycle-year\': plan.Cycle === 12,\n \'signupPayForm-plan-plus\': plan.Name === \'plus\',\n \'signupPayForm-plan-visionary\': plan.Name === \'visionary\',\n \'signupPayForm-method-paypal\': method.value === \'paypal\',\n \'signupPayForm-error\': errorPay,\n }"> <header class="text-center header signupPayForm-header"> <img class=signupPayForm-header-logo src=/assets/img/logo/logo-purple.svg height=34 /> <h2 class=signupPayForm-header-title> <i class="fa fa-money"></i> <span translate translate-context=Title>Billing Information</span> </h2> <p class=uppercase translate translate-context=Title>Thank you for your support!</p> </header> <hr/> <div class=pm_grid> <div class="col-1-4 bold" translate translate-context=Title>Overview</div> <div class="col-3-4 pm_table"> <table class=print> <tbody> <tr> <th translate translate-context=Title>Plan</th> <td> <strong class="signupPayForm-feature-plus plus">ProtonMail PLUS</strong> <strong class="signupPayForm-feature-visionary visionary">ProtonMail VISIONARY</strong> </td> </tr> <tr> <th translate translate-context=Title>Billing</th> <td> <strong class=signupPayForm-selection-monthly translate translate-context=Info>Monthly</strong> <strong class=signupPayForm-selection-annually translate translate-context=Info>Annually</strong> </td> </tr> <tr ng-if=giftModel.Gift> <th translate-context=Title translate>Gift code</th> <td> <strong class=text-green>{{ giftModel.Gift / 100 | currency: plan.Currency }}</strong> </td> </tr> <tr> <th translate translate-context=Title>Price</th> <td> <strong>{{ (giftModel.AmountDue || plan.Amount) / 100 | currency: plan.Currency }}</strong> <i ng-hide="plan.Cycle === 1">({{ (giftModel.AmountDue || plan.Amount) / 100 / plan.Cycle | currency: plan.Currency }} / month)</i> </td> </tr> </tbody> </table> <button type=button class=signupPayForm-btn-features> <span translate-context=Action translate>Show features</span> <i class="fa fa-angle-down"></i> <i class="fa fa-angle-up"></i> </button> <ul class=signupPayForm-view-features> <li class=signupPayForm-feature-plus translate-context="Signup features" translate>5GB storage</li> <li class=signupPayForm-feature-visionary translate-context="Signup features" translate>20GB storage</li> <li class=signupPayForm-feature-plus translate-context="Signup features" translate>Send up to 1000 messages per day</li> <li class=signupPayForm-feature-visionary translate-context="Signup features" translate>No sending limits</li> <li translate-context="Signup features" translate>Labels and Custom Filters</li> <li translate-context="Signup features" translate>Send encrypted messages to external recipients</li> <li translate-context="Signup features" translate>Use your own domain (ex: thomas@anderson.com)</li> <li class=signupPayForm-feature-plus translate-context="Signup features" translate>Up to 5 email aliases</li> <li class=signupPayForm-feature-visionary translate-context="Signup features" translate>Up to 50 email aliases</li> <li class=signupPayForm-feature-visionary translate-context="Signup features" translate>Support for up to 5 domains</li> <li translate-context="Signup features" translate>Priority Customer Support</li> <li class=signupPayForm-feature-visionary translate-context="Signup features" translate>Early access to new features</li> <li class=signupPayForm-feature-visionary translate-context="Signup features" translate>Help pick new features through Visionary only polls</li> </ul> </div> </div> <form name=payForm novalidate class=pm_form> <div class="pm_grid margin"> <div class=col-1-2> <label for=paymentMethod translate translate-context=Title translate-comment="form label">Payment method:</label> </div> <div class=col-1-2> <div class=pm_select> <select id=paymentMethod ng-model=method ng-options="method.label for method in methods"></select> <i class="fa fa-angle-down"></i> </div> </div> </div> <div class=pm_grid ng-if="method.value === \'card\'"> <div class="col-1-4 bold" translate translate-context=Title>Credit Card</div> <div class=col-3-4> <card-view data-card=account.card data-form=payForm></card-view> </div> </div> <div class=pm_grid ng-if="method.value === \'paypal\'"> <div class="col-1-4 bold" translate translate-context=Title>PayPal</div> <div class=col-3-4> <paypal-view data-callback=onPaypalSuccess data-currency=plan.Currency data-amount="giftModel.AmountDue || plan.Amount"></paypal-view> </div> </div> <div class="pm_grid signupPayForm-gift-row"> <div class="col-1-4 bold" translate-context=Title translate>Gift code</div> <div class="col-3-4 signupPayForm-gift-col"> <gift-code-btn data-action=displayGiftSignup></gift-code-btn> <gift-code-input data-code=giftCode data-form=payForm></gift-code-input> <button class="signupPayForm-btn-apply pm_button" type=button translate-context=Action translate>Apply</button> </div> </div> <footer class="text-center signupPayForm-footer"> <p class="alert alert-info signupPayForm-msg-error"><span translate translate-context="Signup error">Would you like to create a free ProtonMail account instead?</span> <signup-step-link data-value=3></signup-step-link></p> <button class="pm_button primary large signupPayForm-btn-submit" type=submit ng-disabled=networkActivity.loading() translate translate-context=Action><i class="fa fa-lock"></i> Submit</button> <button class="pm_button primary large signupPayForm-btn-retry" type=submit ng-disabled=networkActivity.loading() translate translate-context=Action>Retry</button> <button class="pm_button link signupPayForm-btn-cancel" type=reset ng-disabled=networkActivity.loading() translate translate-context=Action>Cancel</button> </footer> </form> </div> ')}])}e.exports=n},"./src/templates/user/signupUserForm.tpl.html":function(e,t){var a=window.angular,n="templates/user/signupUserForm.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=signupUserForm-container> <div class="text-center header"> <div> <img class=signupUserForm-header-logo src=/assets/img/logo/logo-purple.svg height=34 /> </div> <h2 class=signupUserForm-header-title> <i class="fa fa-user"></i> <span translate translate-context=Title>Create your account</span> </h2> </div> <form method=post name=accountForm novalidate class=pm_form> <div class="wrapper margin"> <p class="alert alert-info" translate-context=Info translate>Take back your privacy! Creating your secure email account takes less than 2 minutes.</p> <username-domain data-step=1 data-domains=domains data-form=accountForm data-model=account></username-domain> <username-password data-step=2 data-form=accountForm data-model=account.login></username-password> <section class=notificationEmail-container data-step=3> <label class=titleLabel for=notificationEmail> <span translate translate-context=Title>Recovery email (optional)</span> </label> <p class=help translate-context=Info translate>This is used to recover your account if you get locked out or forget your password.</p> <input type=email id=notificationEmail name=notificationEmail ng-model=account.notificationEmail class=form-control placeholder-translate="Recovery email" data-valid-recovery data-valid-recovery-username=account.username data-valid-recovery-domain=account.domain.value> <div ng-messages=accountForm.notificationEmail.$error class=signUpProcess-errors-recoveryEmail> <p ng-message=email class=text-red translate-context=Error translate>Email invalid</p> <p ng-message=validUsername class=text-red translate-context=Error translate>Recovery email invalid</p> </div> </section> </div> <footer class=signupUserForm-footer> <p> <span translate translate-context=Info>By clicking Create Account, you agree to abide by</span><br/> <a href=https://protonmail.com/terms-and-conditions target=_blank translate-context=Title translate>ProtonMail\'s Terms and Conditions</a>. </p> <button type=submit class="pm_button primary large signUpProcess-btn-create" ng-disabled=networkActivity.loading() translate-context=Action translate>Create Account</button> <a ui-sref=login class=link translate-context=Action translate translate-comment="link to login">Already have an account?</a> </footer> </form> </div> ')}])}e.exports=n},"./src/templates/user/usernameDomain.tpl.html":function(e,t){var a=window.angular,n="templates/user/usernameDomain.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=usernameDomain-container> <label class=titleLabel for=username translate-context=Title translate>Username and domain </label> <p class=help translate-context=Info translate>This will be your new ProtonMail email address.</p> <div class=usernameWrap> <input type=text ng-model=model.username name=username autofocus placeholder-translate="Choose username" data-unique-username data-valid-username required id=username class="dead usernameInput" ng-model-options="{\n updateOn: \'default blur\',\n debounce: { \'default\': 500, \'blur\': 0 }\n }" ng-class="{\'success\':goodUsername,\'error\':badUsername}"/> <em class=usernameDomain>@</em> <div class="pm_select inline bigger"> <select class=selectDomain ng-model=model.domain ng-options="domain.label for domain in domains track by domain.value"></select> <i class="fa fa-angle-down"></i> </div> </div> <p ng-show=form.username.$valid class="alert alert-success signUpProcess-about-success" translate translate-context=Info>Username available</p> <p ng-show=form.$pending.unique class="alert alert-info signUpProcess-about-pending" translate translate-context=Info>Checking username</p> <div ng-messages=form.username.$error ng-if=form.username.$dirty class=signUpProcess-about-error> <p ng-message=required class="alert alert-danger" translate translate-context=Error>Username required</p> <p ng-message=tooMuch class="alert alert-danger" translate translate-context=Error>You are doing this too much, please try again later</p> <p ng-message=alreadyTaken class="alert alert-danger" translate translate-context=Error>Username already taken</p> <p ng-message=uniqueError class="alert alert-danger" translate translate-context=Error>The request failed</p> <p ng-message=valid class="alert alert-danger" translate translate-context=Error>Username invalid</p> </div> </div> ')}])}e.exports=n},"./src/templates/user/usernamePassword.tpl.html":function(e,t){var a=window.angular,n="templates/user/usernamePassword.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class=usernamePassword-container> <label class="titleLabel usernamePassword-title-password" for=password translate-context=Title translate>Password</label> <div class="margin usernamePassword-field-password"> <password data-id=password data-name=password data-value=model.password data-form=form placeholder-translate="Choose a password"></password> </div> <div class="margin usernamePassword-field-password-confirm"> <password data-id=passwordc data-name=passwordc data-value=model.confirmation data-form=form data-compare=model.password placeholder-translate="Confirm password"></password> </div> <p class="alert alert-info usernamePassword-msg-password" translate-context=Info translate>If you lose your password, you will not be able to read your emails.</p> </div> ')}])}e.exports=n},"./src/templates/views/account.tpl.html":function(e,t){var a=window.angular,n="templates/views/account.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div id=pm_settings> <div class=settings> <div class="row pm_grid"> <section class="pm_form col-1-2"> <header-block class=settingsAccount-header-identity> <h2 class=settingsAccount-title-identity translate translate-comment="Account page heading" translate-context=Title>Identity</h2> </header-block> <identity-section></identity-section> </section> <section class="pm_form col-1-2"> <header-block class=settingsAccount-header-notifications> <h2 class=settingsAccount-title-notifications translate translate-comment="notifications heading on account page" translate-context=Title>Notifications</h2> </header-block> <form method=post ng-submit="noticeForm.$valid && saveNotification(noticeForm)" name=noticeForm novalidate> <div class=clearfix> <div class=col-3-8> <label for=notificationEmail translate-context=Title translate translate-comment="form label for setting reset email">Reset/notification email</label> </div> <div class=col-5-8> <input class=margin type=email autocomplete=off id=notificationEmail name=notificationEmail placeholder-translate="Notification email" ng-model=notificationEmail /> <div ng-messages=noticeForm.notificationEmail.$error> <p class=text-red ng-message=email translate-context=Error translate>The email address is invalid</p> </div> <p class=help-block translate-context=Info translate>Also used to reset a forgotten password.</p> </div> </div> <div class=clearfix> <div class=col-3-8> </div> <div class=col-5-8> <button class="pm_button primary" ng-disabled=networkActivity.loading() type=submit translate-context=Action translate>Save</button> </div> </div> </form> <div class=clearfix> <div class=col-3-8> <label translate-context=Title translate translate-comment="form label for enabling/disabling reset email">Allow password reset</label> </div> <div class=col-5-8> <div class=col-1-2> <label> <custom-radio data-custom-ng-model=passwordReset data-custom-ng-value=1 data-custom-ng-change=savePasswordReset()></custom-radio> <span translate-context=Action translate>Enabled</span> </label> </div> <div class=col-1-2> <label> <custom-radio data-custom-ng-model=passwordReset data-custom-ng-value=0 data-custom-ng-change=savePasswordReset()></custom-radio> <span translate-context=Action translate>Disabled</span> </label> </div> </div> </div> <div class=clearfix> </div> <div class=clearfix> <div class=col-3-8> <label> <span translate-context=Title translate translate-comment="form heading for changing notification settings">Daily email notifications</span> <i class="fa fa-info-circle text-purple" pt-tooltip-translate="When notifications are enabled, we\'ll send an alert to your recovery/notification address if you have new messages in your ProtonMail account." pt-tooltip-translate-context="Tooltip to explain daily email notifications"></i> </label> </div> <div class=col-5-8> <div class=col-1-2> <label> <custom-radio data-custom-ng-model=dailyNotifications data-custom-name=dailyNotifications data-custom-ng-value=1 data-custom-ng-change=saveDailyNotifications()></custom-radio> <span translate-context=Action translate translate-comment="notification settings option">Enabled</span> </label> </div> <div class=col-1-2> <label> <custom-radio data-custom-ng-model=dailyNotifications data-custom-name=dailyNotifications data-custom-ng-value=0 data-custom-ng-change=saveDailyNotifications()></custom-radio> <span translate-context=Action translate translate-comment="notification settings option">Disabled</span> </label> </div> <p> <a href=https://protonmail.com/blog/notification-emails/ target=_blank class="pm_button link" translate-context=Link translate>Learn more</a> </p> </div> </div> <div class=clearfix> </div> <div class=clearfix> <div class=col-3-8> <label translate-context=Title translate translate-comment="form heading for changing desktop notifications">Desktop notifications</label> </div> <div class=col-5-8> <p class="alert alert-info" ng-show="desktopNotificationsStatus === \'granted\'"><span translate>Desktop notifications are currently <strong>enabled</strong>.</span><br/><a href=# ng-click=testDesktopNotification() translate>Test notification</a></p> <p class="alert alert-info" ng-show="desktopNotificationsStatus === \'denied\'" translate>Desktop notifications are currently <strong>disabled</strong>. To enable them, you need to go to your browser settings.</p> <p class="alert alert-info" ng-show="desktopNotificationsStatus === \'default\'"><span translate-context="To enable desktop notifications, click here" translate>To enable desktop notifications,</span> <a href=# ng-click=enableDesktopNotifications() translate>click here</a>.</p> <p> <a href=https://protonmail.com/support/knowledge-base/desktop-notifications/ target=_blank class="pm_button link" translation-comment="link to learn more about desktop notifications" translate-context=Action translate>What is this?</a> </p> </div> </div> </section> </div> <div class="row pm_grid"> <section class="pm_form col-1-2" ng-show="passwordMode === 2"> <header-block class=settingsAccount-header-login> <h2 class=settingsAccount-title-login translate translate-comment="change login password heading" translate-context=Title>Login password</h2> </header-block> <p> <button type=button class=pm_button ng-click="changePassword(\'login\', 0)" translate-context=Action translate>Change login password</button> </p> <p> <button type=button ng-click="changePassword(\'password\', 0)" class=pm_button translate-context=Action translate>Switch to one-password mode</button> <a href=https://protonmail.com/support/knowledge-base/single-password/ target=_blank class="pm_button link" translate-context=Link translate>Learn more</a> </p> </section> <section class="pm_form col-1-2" ng-show="passwordMode === 2"> <header-block class=settingsAccount-header-mailbox> <h2 class=settingsAccount-title-mailbox translate translate-comment="form heading for changing mailbox password" translate-context=Title>Mailbox password</h2> </header-block> <p> <button type=button class=pm_button ng-click="changePassword(\'mailbox\', 0)" translate-context=Action translate>Change mailbox password</button> </p> </section> <section class="pm_form col-1-2" ng-show="passwordMode === 1"> <header-block class=settingsAccount-header-password> <h2 class=settingsAccount-title-password translate translate-comment="form heading for changing single password" translate-context=Title>Password</h2> </header-block> <p> <button type=button class=pm_button ng-click="changePassword(\'password\', 0)" translate-context=Action translate>Change password</button> </p> <p> <button type=button ng-click="changePassword(\'login\', 1)" class=pm_button translate-context=Action translate-comment="switch to two-password mode" translate>Switch to two-password mode</button> <a href=https://protonmail.com/support/knowledge-base/single-password/ target=_blank class="pm_button link" translate-context=Link translate>Learn more</a> </p> </section> </div> <div class="row pm_grid"> <section class="pm_form col-1-2"> <header-block class=settingsAccount-header-language> <h2 class=settingsAccount-title-language translate translate-context=Title>Language</h2> </header-block> <label for=selectDefaultLanguage translate translate-comment="form option">Choose your default language.</label> <span class="pm_select inline"> <select id=selectDefaultLanguage ng-model=locale ng-options="locale.label for locale in locales" ng-change=saveDefaultLanguage()></select> <i class="fa fa-angle-down"></i> </span> </section> <section class="pm_form col-1-2"> <header-block class=settingsAccount-header-contacts> <h2 class=settingsAccount-title-contacts translate translate-comment="Section heading" translate-context=Title>Automatically save contacts</h2> </header-block> <div class=clearfix> <div class=col-3-8> <label translate-context=Title translate-comment="Settings/Account page form heading for enabling or disabling autosave contacts" translate>Automatically save contacts</label> </div> <div class=col-5-8> <div class=col-1-2> <label> <custom-radio data-custom-ng-model=autosaveContacts data-custom-ng-value=1 data-custom-ng-change=saveAutosaveContacts()></custom-radio> <span translate translate-comment="form option">Enabled</span> </label> </div> <div class=col-1-2> <label> <custom-radio data-custom-ng-model=autosaveContacts data-custom-ng-value=0 data-custom-ng-change=saveAutosaveContacts()></custom-radio> <span translate translate-comment="form option">Disabled</span> </label> </div> <p> <a href=https://protonmail.com/support/knowledge-base/autosave-contact-list target=_blank class="pm_button link" translate-context=Link translate>Learn more</a> </p> </div> </div> </section> </div> <div class="row pm_grid"> <section class="pm_form col-1-2"> <header-block class=settingsAccount-header-email> <h2 class=settingsAccount-title-email translate translate-context=Title>Email Content</h2> </header-block> <div class=clearfix> <div class=col-3-8> <label class=control-label translate-context=Title translate>Load remote content</label> </div> <div class=col-5-8> <div class=col-1-2> <label> <custom-radio data-custom-ng-change=saveImages() data-custom-ng-model=images data-custom-ng-value=1></custom-radio> <span translate-comment="form option" translate-context=Action translate>Auto</span> </label> </div> <div class=col-1-2> <label> <custom-radio data-custom-ng-change=saveImages() data-custom-ng-model=images data-custom-ng-value=0></custom-radio> <span translate-comment="form option" translate-context=Action translate>Manual</span> </label> </div> <p> <a target=_blank href=https://protonmail.com/support/knowledge-base/images-by-default/ class="pm_button link" translate-context=Link translate>Learn more</a> </p> </div> </div> <div class=clearfix> <div class=col-3-8> <label class=control-label translate-context=Title translate>Load embedded images</label> </div> <div class=col-5-8> <div class=col-1-2> <label> <custom-radio data-custom-ng-change=saveEmbedded() data-custom-ng-model=embedded data-custom-ng-value=2></custom-radio> <span translate-comment="form option" translate-context=Action translate>Auto</span> </label> </div> <div class=col-1-2> <label> <custom-radio data-custom-ng-change=saveEmbedded() data-custom-ng-model=embedded data-custom-ng-value=0></custom-radio> <span translate-comment="form option" translate-context=Action translate>Manual</span> </label> </div> </div> </div> </section> <section class="pm_form col-1-2"> <header-block class=settingsAccount-header-keyboard> <h2 class=settingsAccount-title-keyboard translate translate-context=Title>Keyboard Shortcuts</h2> </header-block> <div class=pm_grid> <div class=col-3-8> <label translate-context=Title translate>Keyboard Shortcuts</label> </div> <div class=col-5-8> <div class=col-1-2> <label> <custom-radio data-custom-ng-change=saveHotkeys() data-custom-ng-model=hotkeys data-custom-ng-value=1></custom-radio> <span translate-context=Action translate>Enabled</span> </label> </div> <div class=col-1-2> <label> <custom-radio data-custom-ng-change=saveHotkeys() data-custom-ng-model=hotkeys data-custom-ng-value=0></custom-radio> <span translate-context=Action translate>Disabled</span> </label> </div> </div> </div> <div class=pm_grid> <div class=col-3-8> </div> <div class=col-5-8> <button class=pm_button ng-click=openHotkeyModal() translate translate-context=Action>View Keyboard Shortcuts</button> </div> </div> </section> </div> <div class="row pm_grid"> <section class="pm_form col-1-2" id=addressesPrioritySection> <header-block class=settingsAccount-header-addresses-priority> <h2 class=settingsAccount-title-addresses-priority translate translate-context=Title>Address Priority</h2> </header-block> <addresses-section></addresses-section> </section> <section class="pm_form col-1-2" ng-if=!isMember> <header-block class=settingsAccount-header-subscriptions> <h2 class=settingsAccount-title-subscriptions translate translate-context=Title>Email Subscriptions</h2> </header-block> <label> <custom-checkbox data-custom-ng-model=emailing.announcements data-custom-ng-change=changeEmailing()></custom-checkbox> <span translate-context=Label translate>Major Announcements (2-3 per year)</span> </label> <label> <custom-checkbox data-custom-ng-model=emailing.features data-custom-ng-change=changeEmailing()></custom-checkbox> <span translate-context=Label translate>Major New Features (3-4 per year)</span> </label> <label> <custom-checkbox data-custom-ng-model=emailing.newsletter data-custom-ng-change=changeEmailing()></custom-checkbox> <span translate-context=Label translate>Proton Newsletter (5-6 per year)</span> </label> <label> <custom-checkbox data-custom-ng-model=emailing.beta data-custom-ng-change=changeEmailing()></custom-checkbox> <span translate-context=Label translate>Proton Beta (~ 10-12 per year)</span> </label> </section> </div> <div class="row pm_grid"> <section class="pm_form col-1-2"> <header-block class=settingsAccount-header-search> <h2 class=settingsAccount-title-search translate translate-comment="Section heading" translate-context=Title>Search</h2> </header-block> <wildcard-checkbox></wildcard-checkbox> </section> <section class="pm_form col-1-2" ng-if=!isMember> <header-block class=settingsAccount-header-delete> <h2 class=settingsAccount-title-delete translate translate-context=Title>Delete Account</h2> </header-block> <button class="pm_button error" ng-click=deleteAccount() translate-context=Action translate>Delete your account</button> </section> </div> </div> </div> ')}])}e.exports=n},"./src/templates/views/appearance.tpl.html":function(e,t){var a=window.angular,n="templates/views/appearance.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div id=pm_settings> <div class=settings> <div class="row pm_grid" id=settingsAppearance> <section class="setting pm_form col-1-2"> <header-block class=settingsAppearance-header-composer> <h2 class=settingsAppearance-title-composer translate translate-context=Title>Composer</h2> </header-block> <p class="alert alert-info"><span translate-context=Info translate>This sets the default composer size. Two sizes are available, a smaller popup composer, and a bigger full screen composer.</span> <a href=https://protonmail.com/support/knowledge-base/composer/ target=_blank translate-context=Action translate-comment="learn more link" translate>Learn more</a></p> <div class="radio col-1-2 multi-line-label"> <label class=visual-label> <custom-radio data-custom-ng-model=appearance.ComposerMode data-custom-ng-value=0 data-custom-ng-change=saveComposerMode(composerMode)></custom-radio> <span translate tranlate-comment="form option">Popup</span> <span class=visual-label-lineBreak></span> <img src=assets/img/settings/pop.gif alt=Popup /> </label> </div> <div class="radio col-1-2 multi-line-label"> <label class=visual-label> <custom-radio data-custom-ng-model=appearance.ComposerMode data-custom-ng-value=1 data-custom-ng-change=saveComposerMode(composerMode)></custom-radio> <span translate translate-comment="form option">Maximized</span> <span class=visual-label-lineBreak></span> <img src=assets/img/settings/max.gif alt=Maximized /> </label> </div> </section> <section class="setting pm_form col-1-2"> <header-block class=settingsAppearance-header-layout> <h2 class=settingsAppearance-title-layout translate translate-context=Title>Layout</h2> </header-block> <p class="alert alert-info"><span translate-context=Info translate>ProtonMail supports both column and row layouts for the inbox. Using this setting, it is possible to change between the two layouts.</span> <a href=https://protonmail.com/support/knowledge-base/change-inbox-layout target=_blank translate translate-context=Action>Learn more</a></p> <div class="radio col-1-2 multi-line-label"> <label class=visual-label> <custom-radio data-custom-ng-model=appearance.ViewLayout data-custom-ng-value=0 data-custom-ng-change=saveLayoutMode(composerMode)></custom-radio> <span translate translate-comment="form option">Column</span> <span class=visual-label-lineBreak></span> <img src=/assets/img/settings/col.gif alt=Column /> </label> </div> <div class="radio col-1-2 multi-line-label"> <label class=visual-label> <custom-radio data-custom-ng-model=appearance.ViewLayout data-custom-ng-value=1 data-custom-ng-change=saveLayoutMode(composerMode)></custom-radio> <span translate translate-comment="form option">Row</span> <span class=visual-label-lineBreak></span> <img src=/assets/img/settings/row.gif alt=Row /> </label> </div> </section> </div> <div class="row pm_grid"> <section class="setting pm_form col-1-2"> <header-block class=settingsAppearance-header-toolbar> <h2 class=settingsAppearance-title-toolbar translate translate-context=Title>Toolbar</h2> </header-block> <p class="alert alert-info" translate-context=Info translate>Choose your prefered button order for marking messages as read / unread.</p> <div class=toolbar-button-options> <label> <custom-radio data-custom-ng-change=saveButtonsPosition() data-custom-ng-model=appearance.MessageButtons data-custom-ng-value=0></custom-radio> <span class="pm_buttons pull-left" pt-tooltip-translate="Mark as read / Mark as unread" pt-tooltip-translate-context=Action> <a href=# class=dead><i class="fa fa fa-eye"></i></a> <a href=# class=dead><i class="fa fa fa-eye-slash"></i></a> </span> </label> <label> <custom-radio data-custom-ng-change=saveButtonsPosition() data-custom-ng-model=appearance.MessageButtons data-custom-ng-value=1></custom-radio> <span class="pm_buttons pull-left" pt-tooltip-translate="Mark as unread / Mark as read" pt-tooltip-translate-context=Action> <a href=# class=dead><i class="fa fa fa-eye-slash"></i></a> <a href=# class=dead><i class="fa fa fa-eye"></i></a> </span> </label> </div> </section> <section class="setting pm_form col-1-2"> <header-block class=settingsAppearance-header-conversation> <h2 class=settingsAppearance-title-conversation translate translate-context=Title>Conversation Grouping</h2> </header-block> <p class="alert alert-info" translate-context=Info translate>Conversation Grouping automatically groups messages in the same conversation together.</p> <div> <div class=col-1-2> <label translate-context=Label translate>Enable Conversation Grouping</label> </div> <div class=col-1-2> <toggle status=appearance.viewMode on=ON off=OFF name=changeViewMode></toggle> </div> </div> </section> </div> <div class="row pm_grid"> <section class="setting pm_form col-1-2"> <form method=post novalidate ng-submit="themeForm.$valid && saveTheme(themeForm)" name=themeForm class=bottomRow> <header-block class=settingsAppearance-header-theme> <h2 class=settingsAppearance-title-theme translate translate-context=Title>Custom theme</h2> </header-block> <div class=margin ng-class="{\'has-error\': (themeForm.cssTheme.$touched || themeForm.$submitted) && themeForm.cssTheme.$error.required}"> <p class="alert alert-info" translate-context=Info translate>Custom themes from third-parties can potentially betray your privacy. Only use themes from trusted sources.</p> <textarea class=code placeholder-translate="Paste your CSS code here (limited to 200,000 characters)" placeholder-translate-context="Dashboard, custom theme input" id=cssTheme name=cssTheme ng-model=appearance.cssTheme maxlength=200000></textarea> </div> <div class=text-right> <button type=button class=pm_button ng-click=clearTheme() translate-context=Action translate>Reset theme</button> <button type=submit class="pm_button primary" translate-context=Action translate>Save</button> </div> </form> </section> <section class="setting pm_form col-1-2"> <header-block class=settingsAppearance-header-addtheme> <h2 class=settingsAppearance-title-addtheme translate translate-comment="legend / form heading for adding custom CSS theme code" translate-context=Title>Additional themes</h2> </header-block> <p class="alert alert-warning"> <i class="fa fa-exclamation-triangle"></i> <span translate-context=Info translate>Loading themes will override your current theme!</span> </p> <p> <button class=pm_button ng-click=loadThemeClassic() translate-context=Action translate>Load classic theme</button> <button ng-if=false class=pm_button ng-click=enableThemeEdison() translate-context=Action translate>Load edison theme</button> </p> </section> </div> <div class="row pm_grid"> <section class="pm_form col-1-2"> <header-block class=settingsAppearance-header-moved> <h2 class=settingsAppearance-title-moved translate translate-comment="Section heading" translate-context=Title>Sent / Drafts folders appearance</h2> </header-block> <p class="alert alert-info" translate-context="Bubbule info in appearance sent and drafts folders" translate>Setting to \'Include Moved\' means that sent / drafts messages that have been moved to other folders will continue to appear in the Sent/Drafts folder.</p> <moved-select></moved-select> <a href=https://protonmail.com/support/knowledge-base/include-moved-messages target=_blank class="pm_button link" translate-context=Link translate>Learn more</a> </section> <section class="setting pm_form col-1-2"> <header-block class=settingsAppearance-header-addtheme> <h2 class=settingsAppearance-title-addtheme translate translate-comment="Choose the default composer mode" translate-context=Title>Composer mode</h2> </header-block> <p> <choose-composer-mode></choose-composer-mode> </p> </section> </div> <div class="row pm_grid"> <section class="pm_form col-1-2"> <header-block class=settingsAppearance-header-textDirection> <h2 class=settingsAppearance-title-textDirection translate translate-comment="Section heading" translate-context=Title>Composer Text Direction</h2> </header-block> <choose-right-to-left></choose-right-to-left> </section> </div> </div> </div> ')}])}e.exports=n},"./src/templates/views/contacts.tpl.html":function(e,t){var a=window.angular,n="templates/views/contacts.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,"<div class=contacts-container> <contact-toolbar></contact-toolbar> <div class=contacts-panels> <contact-list></contact-list> <contact-placeholder ng-if=\"'secured.contacts' | isState\"></contact-placeholder> <div class=contactsDetails-container ui-view=details></div> </div> </div> ")}])}e.exports=n},"./src/templates/views/dashboard.tpl.html":function(e,t){var a=window.angular,n="templates/views/dashboard.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div id=pm_settings> <div class="settings settingsDashboard-container"> <div class=row> <section class=pm_form> <div class="pm_grid flex flex-row"> <div class="col-1-2 pm-flex-content"> <header-block class=settingsDashboard-header-overview> <h2 class=settingsDashboard-title-overview translate translate-context=Title>Overview</h2> </header-block> <section class=settingsDashboard-overview-section-table-container> <overview-section></overview-section> </section> </div> <div class="settingsDashboard-subscription-section col-1-2" ng-if=isPaidUser> <header-block class=settingsDashboard-header-subscription> <h2 class=settingsDashboard-title-subscription translate translate-context=Title>My subscription</h2> </header-block> <section class=settingsDashboard-subscription-section-table-container> <subscription-section methods=methods></subscription-section> </section> </div> <div class="col-1-2 donate pm-flex-content" ng-if=!isPaidUser> <header-block class=settingsDashboard-header-donate> <h2 class=settingsDashboard-title-donate translate translate-context=Title>Donate</h2> </header-block> <div class="well pm-flex-content-fillHeight text-center"> <p translate-context="dashboard, donation informations" translate>Upgrading to a paid account is the best way to support ProtonMail, but you can also donate any amount.</p> <p><strong translate-context="dashboard, donation informations" translate>Your donation helps us support more users and continue to develop ProtonMail as free and open source software.</strong></p> <p> <donate-btn class="pm_button primary settingsDashboard-btn-donation"></donate-btn> </p> </div> </div> </div> </section> </div> <div class=row> <section class="setting pm_form full" id=plans> <header-block class=settingsDashboard-header-plans> <h2 class=settingsDashboard-title-plans translate translate-context=Title>Plans and prices</h2> </header-block> <section class=settingsDashboard-plans-subheader> <vpn-discount-panel></vpn-discount-panel> <div class=settingsDashboard-plans-devise-discount> <div class=settingsDashboard-plans-devise> <div class=settingsDashboard-plans-devise-label> <label translate-context=label translate>Currency</label> <a class="settingsDashboard-plans-devise-label-link text-purple" href=https://protonmail.com/support/knowledge-base/changing-the-currency/ target=_blank> <i class="fa fa-info-circle"></i> </a> </div> <currency-selector></currency-selector> </div> </div> </section> <div class=settingsDashboard-arrowToScroll arrows-to-scroll> <div class=settingsDashboard-plans active-plan> <free-column></free-column> <plus-column></plus-column> <professional-column></professional-column> <visionary-column><visionary-column> </visionary-column></visionary-column></div> </div> </section> </div> </div> </div> ')}])}e.exports=n},"./src/templates/views/domains.tpl.html":function(e,t){var a=window.angular,n="templates/views/domains.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div id=pm_settings> <div class=settings> <p class="alert alert-info" ng-if=mobileMode translate translate-context=Info translate-comment="responsiveness info">This page is only available on larger resolution devices. If you are on a phone, try landscape mode, or visit on a computer instead.</p> <restore-administrator-panel ng-if="keyStatus === 2"></restore-administrator-panel> <div class=row ng-show="isFree === true"> <section class="setting pm_form full"> <header-block class=settingsDomains-header-free> <h2 class=settingsDomains-title-free translate translate-context=Title>Domains</h2> </header-block> <p class="alert alert-info" translate-context=Domains translate>Use your own domain with ProtonMail and use your own email address, e.g. yourname@yourdomain.com. To enable this feature, <a ui-sref="secured.dashboard({scroll: true})">upgrade to ProtonMail Plus</a>.</p> </section> </div> <div class=row id=settingsDomains ng-show="isAdmin === true"> <section class="setting pm_form full"> <header-block class=settingsDomains-header-domain> <h2 class=settingsDomains-title-domain translate translate-context=Title>Domains</h2> <small class=settingsDomains-details-domain ng-if=isAdmin> {{ organization.UsedDomains }} / {{ organization.MaxDomains }} <span translate-context="how many domains are in use" translate>domains used.</span> <a class=settingsDomains-link-domain ui-sref="secured.dashboard({scroll: true})" data-hide-upgrade=domain translate-context=Action translate-comment="link to dashboard page" translate>Upgrade your plan</a> </small> </header-block> <p class="alert alert-info" ng-show="organization.UsedDomains === organization.MaxDomains" translate-context="Domains information" translate>You have reached your custom domain limit. <a ui-sref=secured.dashboard>Click here</a> to upgrade your plan to add more.</p> <div class=margin> <button ng-hide="organization.UsedDomains === organization.MaxDomains" type=button class="pm_button primary" ng-click=addDomain() translate-context=Action translate-comment="button to add custom domains" translate>Add custom domain</button> <button type=button class=pm_button ng-click=refreshStatus() translate-context=Action translate>Refresh domain status</button> </div> <div class=pm_table> <table class="bordered domains" ng-show="domains.length > 0" id=domainsTable> <thead> <tr> <th style=width:10rem class=domain translate-context=Title translate>Domain</th> <th style=width:30rem class=status translate-context=Title translate>Current status</th> <th style=width:6rem class="text-right actions" translate-context=Title translate>Actions</th> </tr> </thead> <tbody ng-repeat="domain in domains"> <tr ng-class="{ \'error\': domain.State === 0 || domain.State === 2 }"> <td class=domain> <strong> <i class=fa ng-class="{\n \'fa-check text-green\': domain.State === 1 && domain.Addresses.length > 0 && domain.MxState === 3,\n \'fa-exclamation-triangle text-red\': domain.State === 0 || domain.State === 2 || domain.Addresses.length === 0 || domain.MxState === 1 || domain.MxState === 2\n }"></i> {{ domain.DomainName }} </strong> </td> <td class=status> <button type=button class="progress pm_button" ng-click=verification(domain) ng-class="{\n \'success\': domain.VerifyState === 2,\n \'error\': domain.VerifyState === 1\n }"> <i class="fa fa-warning" ng-show="(domain.VerifyState === 1)"></i> <span translate-context="domain status" translate>Verification</span> </button> <button type=button class="progress pm_button" ng-click=addAddresses(domain) ng-disabled="domain.State === 0" ng-class="{\'success\': domain.State === 1 && domain.Addresses.length > 0}"> <span ng-show="domain.Addresses.length > 0">{{ domain.Addresses.length }}</span> <span translate translate-context=Action>Addresses</span> </button> <button type=button class="progress pm_button" ng-click=mx(domain) ng-disabled="domain.State === 0" ng-class="{\n \'success\': domain.MxState === 3,\n \'error\': domain.MxState === 2 || domain.MxState === 1\n }"> <i class=fa ng-hide="(domain.MxState === 0)" ng-class="{\n \'fa-check\': (domain.MxState === 3),\n \'fa-warning\': (domain.MxState === 1 || domain.MxState === 2)\n }"></i> MX </button> <button type=button class="progress pm_button" ng-disabled="domain.State === 0" ng-click=spf(domain) ng-class="{\n \'success\': domain.SpfState === 3,\n \'error\': domain.SpfState === 2 || domain.SpfState === 1\n }"> <i class=fa ng-hide="(domain.SpfState === 0)" ng-class="{\n \'fa-check\': (domain.SpfState === 3),\n \'fa-warning\': (domain.SpfState === 1 || domain.SpfState === 2)\n }"></i> SPF </button> <button type=button class="progress pm_button" ng-disabled="domain.State === 0" ng-click=dkim(domain) ng-class="{\n \'success\': domain.DkimState === 4 || domain.DkimState === 5,\n \'error\': domain.DkimState === 3 || domain.DkimState === 2 || domain.DkimState === 1\n }"> <i class=fa ng-hide="(domain.DkimState === 0)" ng-class="{\n \'fa-check\': (domain.DkimState === 4),\n \'fa-warning\': (domain.DkimState === 1 || domain.DkimState === 2 || domain.DkimState === 3),\n \'fa-minus-circle\': (domain.DkimState === 5)\n }"></i> DKIM </button> <button type=button class="progress pm_button" ng-click=dmarc(domain) ng-disabled="domain.State === 0" ng-class="{\n \'success\': domain.DmarcState === 3,\n \'error\': domain.DmarcState === 2 || domain.DmarcState === 1\n }"> <i class=fa ng-hide="(domain.DmarcState === 0)" ng-class="{\n \'fa-check\': (domain.DmarcState === 3),\n \'fa-warning\': (domain.DmarcState === 1 || domain.DmarcState === 2)\n }"></i> DMARC </button> </td> <td class=text-right> <button type=button class="pm_button round" ng-hide=goodSetup(domain) ng-click=wizard(domain) pt-tooltip-translate-context="button to configure the domain" pt-tooltip-translate=Wizard> <i class="fa fa-magic"></i> </button> <button type=button class="remove pm_button round" ng-click=deleteDomain(domain) pt-tooltip-translate=Delete pt-tooltip-translate-context=Action> <i class="fa fa-trash-o"></i> </button> </td> </tr> <tr ng-if="domain.State === 2"> <td colspan=2> <p class="alert alert-warning" translate-context="Domain status" translate>Check your DNS settings.</p> </td> <td></td> </tr> <tr ng-if="domain.State === 0"> <td colspan=2> <p class="alert alert-warning">Setup Error: Please run the <a class="pm_button link" href=# ng-click=wizard(domain)><i class="fa fa-magic"></i> Setup Wizard</a> to correct configuration errors.</p> </td> <td></td> </tr> </tbody> </table> </div> <div class="alert alert-info" ng-show="domains.length === 0"> <p> <strong translate-context="domains list" translate>No custom domain found</strong> </p> <p translate-context="domains list" translate>Click on \'ADD CUSTOM DOMAIN\' button to add a domain.</p> </div> </section> <p> </p> <section class="setting pm_form full"> <header-block class=settingsDomains-header-custom> <h2 class=settingsDomains-title-custom translate translate-context=Title>Custom domain</h2> <small class=settingsDomains-details-custom ng-if=isAdmin> {{ organization.UsedAddresses }} / {{ organization.MaxAddresses }} <span translate-comment="how many addresses are in use" translate>addresses used.</span> <a class=settingsDomains-link-custom ui-sref="secured.dashboard({scroll: true})" data-hide-upgrade=domain translate-context=Action translate-comment="link to dashboard page" translate>Upgrade your plan</a> </small> </header-block> <div class=margin-bottom ng-repeat="domain in domains"> <p> <i class=fa ng-class="{\'fa-check-circle-o text-green\': domain.State === 1, \'fa-exclamation-triangle text-red\': domain.State === 0 || domain.State === 2}"></i> <strong>{{ domain.DomainName }}</strong> </p> <p> <address-btn-actions data-model=domain data-action=add class="pm_button primary"></address-btn-actions> </p> <p class="alert alert-info" ng-show="domain.Addresses.length > 0" translate-context="Domains information" translate>Addresses must be disabled before they can be deleted. Addresses can only be deleted if all messages associated with that address are deleted.</p> <div class=pm_table> <table class="pm_form bordered" ng-show="domain.Addresses.length > 0"> <thead> <tr> <th translate-context=Title translate-comment="table heading for the domains page table listing of addresses" translate>Name</th> <th translate-context=Title translate-comment="table heading for the domains page table listing of addresses" translate>Address</th> <th translate-context=Title translate-comment="table heading for the domains page table listing of addresses" translate>Status</th> <th> <span translate-context=Title translate-comment="table heading for the domains page table listing of addresses" translate>Catch-All</span> <a href=https://protonmail.com/support/knowledge-base/catch-all/ target=_blank> <i class="fa fa-info-circle" pt-tooltip-translate="Set a catch-all address for your domain." pt-tooltip-translate-context=Info></i> </a> </th> <th class="text-right actions" translate-context=Title translate>Actions</th> </tr> </thead> <tbody> <tr ng-repeat="address in domain.Addresses | orderBy: \'Order\'" ng-class="{\'disabled\': address.Status === 0}"> <td> <a ui-sref="secured.members({action: \'edit\', id: address.MemberID})" ng-bind=member(address.MemberID).Name class=text-purple></a> </td> <td ng-bind=address.Email></td> <td> <span class="pm_badge success" ng-show="address.Status === 1 && address.Receive === 1" translate translate-comment="address state badge">Enabled</span> <span class="pm_badge error" ng-show="address.Status === 0" translate translate-comment="address state badge">Disabled</span> <span class="pm_badge warning" ng-show="address.HasKeys === 0" translate translate-comment="address state badge">Missing keys</span> </td> <td class=domains-catchAll-container> <custom-checkbox class=domains-catchAll-input data-custom-ng-model=address.catchall data-custom-ng-change="changeCatchall(address, domain)" data-custom-ng-init="address.catchall = !!address.CatchAll"></custom-checkbox> </td> <td class=text-right> <address-btn-actions data-model=address data-action=enable ng-if="address.Status === 0 && address.Type !== 1 && address.Type !== 4" class="pm_button link"></address-btn-actions> <address-btn-actions data-model=address data-action=disable ng-if="address.Status === 1 && address.Type !== 1 && address.Type !== 4" class="pm_button link"></address-btn-actions> <address-btn-actions data-model=address data-action=remove ng-if="address.Status === 0 && address.Type === 3" class="pm_button link"></address-btn-actions> </td> </tr> </tbody> </table> </div> </div> <div class="alert alert-info" ng-show="domains.length === 0"> <p> <strong translate-context="List domains" translate>No custom domain found</strong> </p> <p translate-context="List domains" translate>Please add a custom domain before configuring addresses.</p> </div> </section> </div> </div> </div> ')}])}e.exports=n},"./src/templates/views/invoices.tpl.html":function(e,t){var a=window.angular,n="templates/views/invoices.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,' <div id=pm_settings> <div class="settings pm_form"> <div class=row> <div class=margin> <span class="pm_select inline"> <select ng-model=range ng-options="option.label for option in years" ng-change=loadInvoices(range.value)></select> <i class="fa fa-angle-down"></i> </span> </div> <legend translate-context=Title translate>Organization history</legend> <div class=pm_table> <table> <thead> <tr> <th style=width:10rem class=date translate-context=Title translate>Date</th> <th style=width:10rem class=event translate-context=Title translate>Event</th> <th style=width:10rem class=price translate-context=Title translate>Price</th> <th style=width:10rem class=actions translate-context=Title translate>Actions</th> </tr> </thead> <tbody> <tr ng-repeat="invoice in organizationInvoices"> <td class=date> {{ invoice.PeriodStart * 1000 | date : \'medium\' }} </td> <td> {{ invoice.Cart.Next.Plan | capitalize }} <span translate>Plan subscription</span> (<small ng-show="invoice.BillingCycle === 1" translate>Monthly</small><small ng-show="invoice.BillingCycle === 12" translate>Annually</small>) </td> <td class=price> {{ invoice.Amount / 100 | currency: invoice.Currency }} </td> <td class=actions> <button type=button class="pm_button link" ng-click=display(invoice) translate-context=Action translate-comment="displays invoice details as a PDF in new tab" translate>Display invoice</button> </td> </tr> </tbody> </table> </div> <p> </p> <legend translate-context=Title translate>User history</legend> <div class=pm_table> <table> <thead> <tr> <th style=width:10rem class=date translate-context=Title translate-comment="Table heading" translate>Date</th> <th style=width:10rem class=event translate-context=Title translate-comment="Table heading" translate>Event</th> <th style=width:10rem class=price translate-context=Title translate-comment="Table heading" translate>Price</th> <th style=width:10rem class=actions translate-context=Title translate-comment="Table heading" translate>Actions</th> </tr> </thead> <tbody> <tr ng-repeat="invoice in userInvoices"> <td class=date> {{ invoice.PeriodStart * 1000 | date : \'medium\' }} </td> <td> {{ invoice.Cart.Next.Plan | capitalize }} <span translate>Plan subscription</span> (<small ng-show="invoice.BillingCycle === 1" translate>Monthly</small><small ng-show="invoice.BillingCycle === 12" translate>Annually</small>) </td> <td class=price> {{ invoice.Amount / 100 | currency: invoice.Currency }} </td> <td class=actions> <button type=button class="pm_button link" ng-click=display(invoice) translate-context=Action translate-comment="displays invoice details as a PDF in new tab" translate>Display invoice</button> </td> </tr> </tbody> </table> </div> </div> </div> </div> ')}])}e.exports=n},"./src/templates/views/keysView.tpl.html":function(e,t){var a=window.angular,n="templates/views/keysView.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div id=pm_settings class=keysView-container> <div class="settings pm_form"> <div class=row> <header-block class=settingsKeys-header-key> <h2 class=settingsKeys-title-key translate translate-context=Title>Email encryption keys</h2> </header-block> <p class="alert alert-info" translate-comment="Inline OpenPGP means NOT pgp/mime, so the body and attachments are encrypted separately" translate-context=Info translate>Download your PGP Keys for use with other PGP compatible services. Only incoming messages in inline OpenPGP format are currently supported.</p> <p> <reactivate-keys-btn data-mode=address></reactivate-keys-btn> </p> <address-keys-view data-display-mode=address data-is-sub-user=isSubUser data-addresses=addressKeys></address-keys-view> </div> <div class=row> <header-block class=settingsKeys-header-key> <h2 class=settingsKeys-title-key translate translate-context=Title>Contact encryption keys</h2> </header-block> <p> <reactivate-keys-btn data-mode=contact></reactivate-keys-btn> </p> <address-keys-view data-display-mode=user data-is-sub-user=isSubUser data-addresses=userKeys></address-keys-view> </div> </div> </div> ')}])}e.exports=n},"./src/templates/views/labels.tpl.html":function(e,t){var a=window.angular,n="templates/views/labels.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div id=pm_settings> <div class="settings settingsLabels-container" id=labelContainer> <div class=row> <div class="setting pm_form full"> <header-block class=settingsLabels-header-label> <h2 class=settingsLabels-title-label translate translate-context=Title>Folders / Labels</h2> </header-block> <p> <button type=button class="pm_button primary" ng-click=createFolder() translate-context=Action translate>Add folder</button> <button type=button class="pm_button primary labelsState-btn-add" ng-click=createLabel() translate-context=Action translate>Add label</button> <button type=button class="pm_button labelsState-btn-sort" ng-click=sortLabels() pt-tooltip-translate-context=Action pt-tooltip-translate="Sort alphabetically" pt-placement=top translate-context=Action translate>Sort</button> </p> <p class="alert alert-info" translate-context="Label information" translate>Multiple Labels can be applied to a single message, but a message can only be in a single Folder.</p> <p class=help-dnd ng-if=labels.length translate-context="Label information" translate>You can drag and drop to rearrange the order of Labels/Folders.</p> <p class="alert alert-info labelsState-msg-info" ng-show=!labels.length translate-context=Info translate>You have no labels.</p> <ul ng-if=labels.length class="labelsState-list pm_sort-container" data-as-sortable=labelsDragControlListeners is-disabled="labels.length === 1" ng-class="{ \'as-sortable-disabled\': labels.length === 1 }" data-ng-model=labels> <li class="labelsState-item pm_sort-item" ng-repeat="label in labels track by label.ID" data-color={{label.Color}} data-as-sortable-item> <div class=pm_sort-item-content as-sortable-item-handle> <div> <i class="labelsState-item-icon fa" ng-class="{ \'fa-folder\': label.Exclusive, \'fa-tag\': !label.Exclusive }" ng-style="{ color: label.Color }"></i> <span class="label label-pm labelsState-item-name ellipsis">{{ label.Name }}</span> </div> <div ng-if=label.Exclusive pt-tooltip-translate-context=Label pt-tooltip-translate="Enable/disable desktop and mobile notifications"> <label class=labelsState-toggle-label translate-context=Label translate>Notification</label> <toggle data-status=label.notify data-on=ON data-off=OFF data-name=changeNotifyLabel data-id="{{ label.ID }}"></toggle> </div> <div> <button class="pm_button link labelsState-btn-edit" ng-click=editLabel(label) translate-context=Action translate>Edit</button> <button class="pm_button link text-red labelsState-btn-delete" ng-click=deleteLabel(label) translate-context=Action translate>Delete</button> </div> </div> </li> </ul> </div> </div> </div> </div> ')}])}e.exports=n},"./src/templates/views/login.tpl.html":function(e,t){var a=window.angular,n="templates/views/login.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<login-form ng-show="twoFactor === 0"></login-form> <login-two-factor-form ng-show="twoFactor === 1"></login-two-factor-form> <div class=text-center ng-show=::showOld> <a class="pm_button link login-btn-oldversion" style=color:#fff;text-transform:none href=https://old.protonmail.com/login target=_self translate-context=Action translate-comment="link for old" translate>Having trouble? Try an older version</a> </div> ')}])}e.exports=n},"./src/templates/views/members.tpl.html":function(e,t){var a=window.angular,n="templates/views/members.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div id=pm_settings> <div class=settings> <p class="alert alert-info" ng-if=mobileMode translate-context=Info translate-comment="responsiveness info" translate>This page is only available on larger resolution devices. If you are on a phone, try landscape mode, or visit on a computer instead.</p> <restore-administrator-panel ng-if="keyStatus === 2"></restore-administrator-panel> <div class=row ng-show="organization.HasKeys === 0"> <section class="setting pm_form full"> <header-block class=settingsUsers-header-signatures> <h2 class=settingsUsers-title-signatures translate translate-context=Title>Multi-User Support</h2> </header-block> <p class="alert alert-info" translate-context=Info translate>Create and manage sub-accounts and assign them email addresses on your custom domain.</p> <p> <member-edit-btn data-action=enableSupport class="pm_button primary" data-model=member></member-edit-btn> <a href=https://protonmail.com/support/knowledge-base/business/ target=_blank class="pm_button link" translate-context=Link translate>Learn more</a> </p> </section> </div> <div class=row id=settingsOrganization ng-show="organization.HasKeys === 1"> <section class="setting pm_form full"> <header-block class=settingsUsers-header-organization> <h2 class=settingsUsers-title-organization translate translate-context=Title>Organization</h2> </header-block> <div class="pm_grid no-margin"> <div class=col-1-2> <div class=clearfix> <organization-form-name></organization-form-name> </div> </div> <div class=col-1-2> <div class=clearfix> <div class=pm_table> <table class="plain absorbing" id=usersTable> <tbody> <tr> <td translate-context=Title translate> <span class=margin-right translate>Number of users</span> </td> <td class=absorbing-column> <span class=margin-left>{{ organization.UsedMembers }} <span translate-context=Info translate>of</span> {{ organization.MaxMembers }} <span translate-context=Info translate>used</span></span> </td> <td class=text-right> <span hide-upgrade=member> <a ui-sref="secured.dashboard({ scroll: true })" class="pm_button link" translate-context=Action translate-comment="link to dashboard" translate>Upgrade</a> </span> </td> </tr> <tr> <td translate-context=Title translate> <span class=margin-right translate>Organization storage</span> </td> <td> <span class=margin-left>{{ organization.MaxSpace | humanSize }}</span> </td> <td class=text-right> <span hide-upgrade=space> <a ui-sref="secured.dashboard({ scroll: true })" class="pm_button link" translate-context=Action translate-comment="link to dashboard" translate>Upgrade</a> </span> </td> </tr> <tr> <td translate-context=Title translate> <span class=margin-right translate>Available VPN connections</span> </td> <td class=absorbing-column> <span class=margin-left translate-context=Info translate>{{ organization.MaxVPN - organization.UsedVPN }} </span> </td> <td class=text-right> <span hide-upgrade=member> <a ui-sref="secured.dashboard({ scroll: true })" class="pm_button link" translate-context=Action translate-comment="link to dashboard" translate>Upgrade</a> </span> </td> </tr> <tr> <td translate-context=Title> <span class=margin-right translate>Available domains</span> </td> <td> <div class=margin-left> <span ng-repeat="domain in domains"> {{ domain.DomainName }}{{ $last ? \'\' : \', \' }} </span> </div> </td> <td class=text-right> <span> <a ui-sref=secured.domains class="pm_button link" translate-context=Action translate-comment="link to domains" translate>Manage</a> </span> </td> </tr> </tbody> </table> </div> </div> </div> </div> </section> </div> <div class=row id=settingsMembers> <section class="setting pm_form full"> <header-block class=settingsUsers-header-signatures> <h2 class=settingsUsers-title-signatures translate translate-context=Title>Users/Addresses</h2> <small class=settingsUsers-details-signatures ng-if=isAdmin> {{ organization.UsedAddresses }} / {{ organization.MaxAddresses }} <span translate-comment="how many addresses are in use" translate>addresses used.</span> <a class=settingsUsers-link-signatures ui-sref="secured.dashboard({scroll: true})" data-hide-upgrade=address translate-context=Action translate-comment="link to dashboard page" translate>Upgrade your plan</a> </small> </header-block> <p> <member-edit-btn data-action=add class="pm_button primary"></member-edit-btn> </p> <div class="pm_table visibleOverflow"> <table class="members-table bordered absorbing withDropDown"> <thead> <tr> <th translate-context=Title translate-comment="table heading" translate>Name</th> <th class=absorbing-column translate-context=Title translate-comment="table heading" translate>Addresses</th> <th ng-if="organization.HasKeys === 1"> <span translate-context=Title translate-comment="table heading" translate>Role</span> <a href=https://protonmail.com/support/knowledge-base/member-roles/ target=_blank> <i class="fa fa-info-circle"></i> </a> </th> <th ng-if="organization.HasKeys === 1"> <span translate-context=Title translate-comment="table heading" translate>Private</span> <a href=https://protonmail.com/support/knowledge-base/private-members/ target=_blank> <i class="fa fa-info-circle"></i> </a> </th> <th></th> <th translate-context=Title translate-comment="table heading" translate>Actions</th> </tr> </thead> <tbody class=members-table-tbody> <tr ng-repeat-start="member in members track by member.ID"> <td> <span ng-bind=member.Name></span> </td> <td> <span>{{ member.Addresses[0].Email }}</span> <toggle-expand ng-if="member.Addresses.length > 1" class=autoHeight data-model=member data-text="+ {{ member.Addresses.length - 1 }}"></toggle-expand> <toggle-expand ng-if="member.Addresses.length === 1" class=autoHeight data-model=member></toggle-expand> </td> <td ng-if="organization.HasKeys === 1"> <span ng-show=member.Subscriber translate>Primary Admin</span> <span ng-hide=member.Subscriber ng-bind=roles[member.Role]></span> </td> <td ng-if="organization.HasKeys === 1"> <span ng-show="member.Private === 1" translate>Yes</span> <span ng-hide="member.Private === 1" translate>No</span> </td> <td> <div class=members-table-usage> <i class="fa fa-hdd-o"></i> {{ member.UsedSpace | humanSize:true:\'GB\' }} / {{ member.MaxSpace | humanSize:false:\'GB\' }} <span translate-context="space used out of total space allowed for a member" translate>Used</span> </div> <div class=members-table-usage> <i class="fa fa-shield"></i> {{ member.MaxVPN }} <span translate-comment="vpn connection used" translate-context="How many connections" translate>VPN Connections</span> </div> </td> <td> <div class=pm_buttons> <address-btn-actions data-model2=member data-action=add class="pm_buttons pm_button primary"></address-btn-actions> <a type=button class="pm_buttons pm_button primary pm_trigger fa fa-angle-down" ng-if="organization.HasKeys === 1" dropdown></a> <div class="pm_dropdown right"> <member-edit-btn ng-if="!member.Self && member.Type === 1" data-action=destroy class="pm_button link text-red" data-model=member></member-edit-btn> <member-edit-btn ng-if="!member.Self && member.Type === 0" data-action=remove class="pm_button link" data-model=member></member-edit-btn> <member-edit-btn ng-if="organization.HasKeys === 1" class="pm_button link" data-model=member></member-edit-btn> <member-edit-btn ng-if="member.Role === 1" data-action=makeAdmin class="pm_button link" data-model=member></member-edit-btn> <member-edit-btn ng-if="!member.Self && member.Role === 2" data-action=revokeAdmin class="pm_button link" data-model=member></member-edit-btn> <member-edit-btn ng-if="!member.Self && member.Private === 0 && member.Keys.length && member.Addresses.length" data-action=login class="pm_button link" data-model=member></member-edit-btn> <member-edit-btn ng-if="member.Private === 0" data-action=makePrivate class="pm_button link" data-model=member></member-edit-btn> </div> </div> </td> </tr> <tr class="hasTable member-table-addresses-wrapper" ng-repeat-end ng-if="member.toggle === true && member.Addresses.length > 0"> <td colspan=6> <div class="pm_table member-table-addresses-pmTable"> <table class="member-table-addresses absorbing"> <tbody> <tr ng-repeat="address in member.Addresses | orderBy: [\'!Status\',\'Order\'] track by address.ID"> <td ng-bind=address.Email></td> <td class=absorbing-column> <span class="pm_badge success" ng-show="address.Status === 1 && address.Receive === 1" translate translate-comment="address state badge">Enabled</span> <span class="pm_badge error" ng-show="address.Status === 0" translate translate-comment="address state badge">Disabled</span> <span class="pm_badge warning" ng-show="address.HasKeys === 0" translate translate-comment="address state badge">Missing keys</span> <span class="pm_badge warning" ng-show="address.DomainID === null" translate translate-comment="address state badge">Orphan</span> <span class="pm_badge primary" ng-show=$first translate translate translate-comment="address state badge">Default</span> </td> <td class=text-right> <address-btn-actions data-model=address data-model2=member data-action=generate ng-if="((isAdmin && member.Private !== 1) || (member.Private === 1 && member.Self === 1)) && address.HasKeys === 0" class="pm_button link"></address-btn-actions> <address-btn-actions data-model=address data-action=enable ng-if="isAdmin && address.Status === 0 && address.Type !== 1 && address.Type !== 4" class="pm_button link"></address-btn-actions> <address-btn-actions data-model=address data-action=disable ng-if="isAdmin && address.Status === 1 && address.Type !== 1 && address.Type !== 4" class="pm_button link"></address-btn-actions> <address-btn-actions data-model=address data-action=remove ng-if="address.Type === 3" class="pm_button link"></address-btn-actions> </td> </tr> </tbody> </table> </div> </td> </tr> </tbody> </table> </div> <p class=help translate-context=Help translate>To edit the signature(s) and manage your address(es), <a ui-sref=secured.account>go to account</a></p> </section> </div> <div class=row id=securityOrganization ng-if="organization.HasKeys === 1"> <section class="setting pm_form full"> <header-block class=settingsUsers-header-security> <h2 class=settingsUsers-title-security translate translate-context=Title>Security</h2> </header-block> <div class=pm_grid> <div class=col-2-3> <p ng-if="keyStatus === 0"> <organization-btn-actions data-action=changePassword ng-disabled=networkActivity.loading() class="pm_button primary"></organization-btn-actions> <organization-btn-actions data-action=changeKeys ng-disabled=networkActivity.loading() class="pm_button primary"></organization-btn-actions> <a class="pm_button link" href=https://protonmail.com/support/knowledge-base/organization-key/ target=_blank translate translate-context=Link>Learn more</a> </p> <div ng-if="keyStatus === 1"> <p class="alert alert-warning" translate translate-context=Info>You must activate your organization keys. Without activation you will not be able to create new users, add addresses to existing users, or access non-private user accounts.</p> <p> <organization-btn-actions data-action=activateKeys ng-disabled=networkActivity.loading() class="pm_button primary"></organization-btn-actions> </p> </div> <div ng-if="keyStatus === 2"> <p class="alert alert-danger" translate translate-context=Info>You have lost access to your organization keys. Without restoration you will not be able to create new users, add addresses to existing users, or access non-private user accounts.</p> <p> <organization-btn-actions data-action=resetKeys ng-disabled=networkActivity.loading() class=pm_button></organization-btn-actions> <organization-btn-actions data-action=restoreKeys ng-disabled=networkActivity.loading() class="pm_button primary"></organization-btn-actions> </p> </div> <div class=pm_table ng-if="keyStatus === 0"> <table class="bordered absorbing"> <thead> <tr> <th> <span translate-context=Title translate-comment="table heading" translate>Organization Key Fingerprint</span> <a href=https://protonmail.com/support/knowledge-base/organization-key/ target=_blank> <i class="fa fa-info-circle"></i> </a> </th> <th translate-context=Title translate-comment="table heading" translate>Key size</th> </tr> </thead> <tbody> <tr> <td> <code>{{ organizationKeyInfo.fingerprint }}</code> </td> <td> {{ organizationKeyInfo.bitSize }} Bit </td> </tr> </tbody> </table> </div> </div> </div> </section></div> </div> </div> ')}])}e.exports=n},"./src/templates/views/message.print.tpl.html":function(e,t){var a=window.angular,n="templates/views/message.print.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<loader-tag ng-if=loading></loader-tag> <div class=print ng-if=!loading> <p> <span> <h1 style="padding:1rem 0">{{ message.Subject }}</h1> </span> </p> <hr> <p> <span style=width:14rem width=14rem> <span ng-show="message.Type === 0 || message.Type === 3" translate-comment="printed message info" translate>Received:</span> <span ng-hide="message.Type === 0 || message.Type === 3" translate-comment="printed message info" translate>Sent:</span> </span> <span> <i class="fa fa-reply" ng-show="message.IsReplied === 1"></i> <i class="fa fa-reply-all" ng-show="message.IsRepliedAll === 1"></i> <i class="fa fa-mail-forward" ng-show="message.IsForwarded === 1"></i> <i class="fa fa-paperclip" ng-show="message.NumAttachments > 0"></i> <i class="fa fa-lock"></i> <b>{{ message.Time | localReadableTime }}</b> </span> </p> <p> <span translate-comment="printed message info" translate translate-context=Title>From</span>: <b>{{ message.Sender.Name }} {{ message.Sender.Address }}</b> </p> <p ng-if="message.ToList.length > 0"> <span translate-comment="printed message info" translate translate-context=Title>To</span>: <b ng-repeat="email in ::message.ToList">{{ email.Name }} {{ email.Address }}<i ng-hide=$last>, </i></b> </p> <p ng-if="message.CCList.length > 0"> <span translate-comment="printed message info" translate translate-context=Title>CC</span>: <b ng-repeat="email in ::message.CCList">{{ email.Name }} {{ email.Address }}<i ng-hide=$last>, </i></b> </p> <p ng-if="message.BCCList.length > 0"> <span translate-comment="printed message info" translate translate-context=Title>BCC</span>: <b ng-repeat="email in ::message.BCCList">{{ email.Name }} {{ email.Address }}<i ng-hide=$last>, </i></b> </p> <hr> <div style=padding:1rem class=bodyDecrypted ng-bind-html=content ng-if="message.MIMEType === \'text/html\'"></div> <div style=padding:1rem class="bodyDecrypted plain" ng-bind=message.DecryptedBody ng-if="message.MIMEType === \'text/plain\'"></div> <list-attachments class=list-attachments-print ng-if="message.NumAttachments > 0" data-model=message></list-attachments> </div> ')}])}e.exports=n},"./src/templates/views/outside.message.tpl.html":function(e,t){var a=window.angular,n="templates/views/outside.message.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div id=outsideMessageWrap> <div ng-if=message.ExpirationTime id=expirationMessage> <span translate>Expiring in</span> <time time-refreshed="{{ ::message.ExpirationTime }}" class=expirationMessage-expiration time-filter=delay time-interval=1000> <i class="fa fa-spin fa-circle-o-notch"></i> </time>. </div> <div class=message-head> <a ng-click=reply() class="pm_button pull-right"> <i class="fa fa-reply"></i> <span class="visible-md-inline-block visible-lg-inline-block" translate-context=Action translate>Reply securely</span> </a> <h1 class=no-margin-bottom> <span class=attachment ng-show="message.Attachments.length > 0"> <i class="fa fa-paperclip"></i> </span> <span ng-bind-html=message.Subject></span> </h1> </div> <div class=message-metadata> <ul class=infos> <li> <strong translate-comment="message metadata" translate translate-context=Title>From</strong> <b>{{ message.Sender.Name }}</b> <{{ message.Sender.Address }}> <span class="fa fa-check-circle verified" pt-tooltip-translate="ProtonMail Verified"></span> </li> <li ng-if="message.ToList.length > 0"> <strong translate-comment="message metadata" translate translate-context=Title>To</strong> <span ng-repeat="email in message.ToList"> <b>{{ email.Name }}</b> <{{ email.Address }}> </span> </li> <li ng-if="message.CCList.length > 0"> <strong translate-comment="message metadata" translate translate-context=Title>CC</strong> <span ng-repeat="email in message.CCList"> <b>{{ email.Name }}</b> <{{ email.Address }}> </span> </li> </ul> </div> <message-extra></message-extra> <div id=outsideMessage> <div id=message-body data-embedded-img-loader data-inject-message-media> <div class="bodyDecrypted email" ng-class="{\'plain\': message.isPlainText() }" render-message-body ng-if=body toggle-blockquote scroll=false></div> </div> </div> <list-attachments data-model=message ng-if=message></list-attachments> <div id=eo_footer></div> </div> ')}])}e.exports=n},"./src/templates/views/outside.reply.tpl.html":function(e,t){var a=window.angular,n="templates/views/outside.reply.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div id=outsideMessageWrap ng-if=message> <div class=message-head ng-class="{ unread:!message.IsRead, starred: message.Starred === 1 }"> <h1> <span class=attachment ng-show="message.Attachments.length > 0"> <i class="fa fa-paperclip"></i> </span> {{ message.Subject }} </h1> <div class=pull-right> <span ng-bind-html=ago></span> </div> <ul class=infos> <li> <strong translate>From</strong>: <b>{{ message.Recipient }}</b> </li> <li> <strong translate>To</strong>: <b>{{message.Sender.Name}}</b> <em><{{ message.Sender.Address }}></em> </li> </ul> </div> <composer-outside></composer-outside> <p class="alert alert-danger clearfix" role=alert ng-if=message.failedDecryption> <strong translate-context=Error translate>Decryption error</strong><br/> <span translate-context=Error translate>Decryption of this message\'s encryption content failed.</span> </p> <list-attachments data-model=message></list-attachments> <footer class=text-right> <button class="pm_button pull-left" ng-disabled=networkActivity.loading() ng-click=cancel() translate-context=Action translate>Cancel</button> <button class=pm_button ng-disabled=networkActivity.loading() data-action-compose=::message data-action-compose-type=addFile pt-tooltip-translate=Attachments><i class="fa fa-paperclip"></i> </button> <button class="pm_button primary" ng-disabled=networkActivity.loading() ng-click=send() translate-context=Action translate>Send</button> </footer> </div> ')}])}e.exports=n},"./src/templates/views/outside.unlock.tpl.html":function(e,t){var a=window.angular,n="templates/views/outside.unlock.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<form method=post id=pm_login name=unlockForm class="pm_panel alt pm_form" novalidate ng-keypress=keypress($event) role=form autocomplete=on ng-submit=unlock() ng-if="tokenError !== true"> <img src=assets/img/logo.png height=20 alt=ProtonMail class=logo /> <h4 class=text-center> <span class="fa fa-envelope title-icon"></span> <span translate-context=Title translate>Decrypt message</span> </h4> <p></p> <div class="alert alert-danger" id=error521 ng-if=error>{{ error.message }}</div> <password class="margin unlock-input-password" data-id=MessagePassword data-name=MessagePassword data-autofocus=true data-form=unlockForm data-value=params.MessagePassword placeholder-translate="Message password"></password> <p></p> <div class=loginForm-actions> <div class=loginForm-actions-column> <button type=submit class="loginForm-actions-main pm_button primary pull-right" ng-disabled=networkActivity.loading() translate>Decrypt</button> <a href=https://protonmail.com/support target=_blank class="login-support pm_button link pull-left" translate-context=Action translate-comment="link to support portal" translate>Need help?</a> </div> </div> </form> <form method=post id=pm_login class="pm_panel alt pm_form error" ng-if="tokenError === true"> <h1 class=text-center translate-context=Title translate>Error</h1> <p translate-context=Error translate>Sorry, this message does not exist or has already expired</p> </form> ')}])}e.exports=n},"./src/templates/views/payments.tpl.html":function(e,t){var a=window.angular,n="templates/views/payments.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div id=pm_settings> <div class=settings> <div class=row> <section class="setting full pm_form"> <header-block class=settingsPayment-header-method> <h2 class=settingsPayment-title-method translate translate-context=Title>Payment methods</h2> </header-block> <div class=margin> <button type=button class="pm_button primary" ng-click=add() translate-context=Action translate>Add Payment Method</button> </div> <p class="alert alert-info" ng-show="methods.length === 0" translate-context=Info translate>You have no saved payment methods.</p> <div class=pm_table> <table ng-show="methods.length > 0" id=paymentMethodsTable> <thead> <tr> <th style=width:8rem class=number translate-context=Title translate>Number</th> <th style=width:7rem class=expiration translate-context=Title translate>Expiration</th> <th style=width:8rem class=type translate-context=Title translate>Type</th> <th style=width:8rem class=actions translate-context=Title translate>Actions</th> </tr> </thead> <tbody> <tr ng-repeat="method in methods"> <td>•••• •••• •••• {{ method.Details.Last4 }}</td> <td>{{ method.Details.ExpMonth }}/{{ method.Details.ExpYear }}</td> <td> <span class=pm_badge>{{ method.Type }}</span> <span ng-show=$first class=pm_badge translate>Default</span> </td> <td class=text-right> <button type=button class="pm_button link" ng-hide="$first === true" ng-click=default(method) translate-context=Action translate>Make default</button> <button type=button class="pm_button link" ng-click=edit(method) translate-context=Action translate>Update</button> <button type=button class="pm_button link" ng-click=delete(method) translate-context=Action translate>Delete</button> </td> </tr> </tbody> </table> </div> </section> <section class="setting full pm_form"> <header-block class=settingsPayment-header-invoices> <h2 class=settingsPayment-title-invoices translate translate-context=Title>Invoices</h2> </header-block> <div class=margin> <button type=button class=pm_button ng-click=customize() translate-context=Action translate>Customize</button> <span class="pm_buttons pull-right" ng-show="user.Role === 2"> <a href=# ng-class="{ \'active\': invoiceOwner === 0 }" ng-click=changeInvoices(0)> User </a> <a href=# ng-class="{ \'active\': invoiceOwner === 1 }" ng-click=changeInvoices(1)> Organization </a> </span> </div> <p class="alert alert-danger" ng-show="delinquent === true && user.Role === 0" translate-context=Info translate>Your account currently has an overdue invoice. Please pay all unpaid invoices.</p> <p class="alert alert-danger" ng-show="delinquent === true && user.Role > 0" translate-context=Info translate>Your account or organization currently has an overdue invoice. Please pay all unpaid invoices.</p> <p class="alert alert-info" ng-show="invoices.length === 0" translate-context=Info translate>No invoices found.</p> <div class=pm_table> <table ng-show="invoices.length > 0" id=invoicesTable> <thead> <tr> <th class=invoice>ID</th> <th class=price translate-context=Title translate>Amount</th> <th class=actions translate-context=Title translate>Actions</th> <th class=type translate-context=Title translate>Type</th> <th class=status translate-context=Title translate>Status</th> <th class=time translate-context=Title translate>Date</th> </tr> </thead> <tbody> <tr ng-repeat="invoice in invoices"> <td> <span class=bold>#{{ invoice.ID }}</span> </td> <td> <span ng-show="invoice.State === 0">{{ invoice.AmountDue / 100 | currency: invoice.Currency }}</span> <span ng-show="invoice.State === 1">{{ invoice.AmountCharged / 100 | currency: invoice.Currency }}</span> </td> <td> <button class="pm_button link" ng-click=download(invoice) translate-context=Action translate>Download</button> <pay-invoice-btn data-model=invoice ng-show="invoice.State === 0"></pay-invoice-btn> </td> <td> <span class=pm_badge ng-show="invoice.Type === 0" translate-context="Invoice type display as badge" translate>Other</span> <span class=pm_badge ng-show="invoice.Type === 1" translate-context="Invoice type display as badge" translate>Subscription</span> <span class=pm_badge ng-show="invoice.Type === 2" translate-context="Invoice type display as badge" translate>Cancellation</span> <span class=pm_badge ng-show="invoice.Type === 3" translate-context="Invoice type display as badge" translate>Credit</span> <span class=pm_badge ng-show="invoice.Type === 4" translate-context="Invoice type display as badge" translate>Donation</span> </td> <td> <span class="pm_badge error" ng-show="invoice.State === 0" translate-context="Invoice status display as badge" translate>Unpaid</span> <span class="pm_badge success" ng-show="invoice.State === 1" translate-context="Invoice status display as badge" translate>Paid</span> <span class=pm_badge ng-show="invoice.State === 2" translate-context="Invoice status display as badge" translate>Void</span> <span class=pm_badge ng-show="invoice.State === 3" translate-context="Invoice status display as badge" translate>Billed</span> </td> <td>{{ invoice.CreateTime | readableTime }}</td> </tr> </tbody> </table> </div> </section> </div> </div> </div> ')}])}e.exports=n},"./src/templates/views/pgp.tpl.html":function(e,t){var a=window.angular,n="templates/views/pgp.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div id=pm-pgp class=pm-flex-content> <div class="pm-pgp-main-loader pm-flex-content-vertical-center" ng-if=!content> <loader-tag></loader-tag> <h1 class=text-center translate translate-context=Title>Loading message headers...</h1> </div> <section class=pm-pgp-headers ng-if=content> <header class=pm-flex-content-row> <h1 class=pm-flex-content-fillWidth translate translate-context=Title>Message headers</h1> <button type=button ng-click=download() class=pm_button translate translate-context=Action>Download</button> <button type=button ng-click=print() class=pm_button translate translate-context=Action>Print</button> </header> <pre ng-bind=content></pre> </section> </div> ')}])}e.exports=n},"./src/templates/views/reset-login-password.tpl.html":function(e,t){var a=window.angular,n="templates/views/reset-login-password.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<section class=resetLoginPassword-container> <div ng-show="resetState === states.RECOVERY"> <p class="alert alert-info wrap" translate-context=Info translate>We will send a reset code to your <a class=bold href=https://protonmail.com/support/knowledge-base/set-forgot-password-options/ target=_blank title="This is the optional email you used when first creating an account. This is the same as your notification email that is used for sending alerts about new messages.">recovery email</a> to reset your password.</p> <form method=post name=resetForm role=form novalidate ng-submit="resetForm.$valid && confirmResetLostPassword(resetForm)" class="pm_form pm_panel"> <h3 class="text-center margin" translate-context=Info translate>Reset Password</h3> <div class=margin> <input tabindex=1 id=username autofocus="" name=username type=text class=form-control placeholder-translate-context=Action placeholder-translate="ProtonMail username to reset" ng-model=params.username required> </div> <div ng-messages=resetForm.username.$error ng-show="resetForm.$submitted || resetForm.username.$touched"> <p ng-message=required class="alert alert-danger" translate-context=Error translate>Username required</p> </div> <div class=margin> <input tabindex=2 id=recoveryEmail name=recoveryEmail type=email class=form-control placeholder-translate-context="Reset password" placeholder-translate="Recovery email" ng-model=params.recoveryEmail required> </div> <div ng-messages=resetForm.recoveryEmail.$error ng-show="resetForm.$submitted || resetForm.recoveryEmail.$touched"> <p ng-message=email class="alert alert-danger" translate-context=Error translate>Invalid recovery email</p> </div> <div class=loginForm-actions> <div class=loginForm-actions-column> <button tabindex=3 class="loginForm-actions-main pm_button primary" type=submit ng-disabled=networkActivity.loading() translate-comment="button to reset login password" translate-context=Action translate>Reset Password</button> <a href=https://protonmail.com/username class=text-purple translate translate-context=action>Forgot username?</a> </div> </div> </form> </div> <div ng-show="resetState === states.CODE"> <p class="alert alert-info wrap" translate-context=Info translate>We\'ve sent a reset code to your <strong>recovery email</strong>. Enter it below to continue.</p> <form method=post ng-submit="tokenForm.$valid && validateToken(tokenForm)" name=tokenForm class="pm_form pm_panel" novalidate> <h3 class="text-center margin" translate-context=Title translate>Reset Password</h3> <p class="alert alert-danger" translate-context=Error translate>IMPORTANT: Do not close or navigate away from this page. You will need to enter the reset code into the field below once you receive it.</p> <div class=margin> <label for=resetToken translate-context=Title translate>Reset code:</label> <input type=text ng-model=params.resetToken id=resetToken class=form-control placeholder-translate-context=Action placeholder-translate="Reset code" required> </div> <div ng-show="tokenForm.$submitted || tokenForm.resetToken.$touched"> <p ng-show=tokenForm.resetToken.$error.required class="alert alert-danger" translate-context=Error translate>Reset code is required</p> </div> <div class=loginForm-actions> <div class=loginForm-actions-column> <button type=submit class="loginForm-actions-main pm_button primary" ng-disabled=networkActivity.loading() translate-comment="button to reset password" translate-context=Action translate>Reset Password</button> </div> </div> </form> </div> <div ng-show="resetState === states.CHECKING"> <div class="pm_form pm_panel text-center"> <img src=/assets/img/logo/logo-purple.svg height=34 /><br><br> <div class=creating-loader-container> <atom-loader data-loader-theme=primary></atom-loader> </div> <p><span translate-context=Action translate>Verifying reset code</span>...</p> </div> </div> <div ng-show="resetState === states.DANGER"> <form method=post ng-submit=confirmReset() name=dangerForm class="pm_form pm_panel"> <h1 class=text-center translate-context=Title translate>Warning</h1> <p translate-context=Info translate-comment="reset warning 1/3" translate>Resetting your password will also reset your encryption keys, so you will be unable to read your existing messages. <a href=https://protonmail.com/support/knowledge-base/updating-your-login-password/ target=_blank>Learn More</a>.</p> <p class="alert alert-danger" translate-comment="reset warning 2/3" translate-context=Info translate>ALL YOUR DATA WILL BE LOST!</p> <p> <span translate-context="To continue, type DANGER below:" translate-comment="reset warning 3/3" translate>To continue, type</span> <kbd>{{dangerWord}}</kbd> <span translate-context="To continue, type DANGER below:" translate-comment="reset warning 3/3" translate>below:</span> </p> <p> <input type=text class=form-control ng-model=params.danger data-danger-word=dangerWord data-danger/> </p> <div class="alert alert-warning" ng-if="passwordMode === 1"> <ul> <li translate-context="reset password" translate>If you remember your old password later, you can recover your existing messages. <a href=https://protonmail.com/support/knowledge-base/restoring-encrypted-mailbox/ target=_blank>Learn More</a>.</li> </ul> </div> <div class="alert alert-warning" ng-if="passwordMode === 2"> <ul> <li translate-context="reset password" translate>Resetting either Login or Mailbox password will switch you to <a href=https://protonmail.com/support/knowledge-base/single-password/ target=_blank>Single Password Mode</a>.</li> <li translate-context="reset password" translate>Resetting either Login or Mailbox password will make old messages unreadable.</li> <li translate-context="reset password" translate>If you are resetting the Login password only, old messages can be recovered later if you know your existing Mailbox Password. <a href=https://protonmail.com/support/knowledge-base/restoring-encrypted-mailbox/ target=_blank>Learn More</a>.</li> </ul> </div> <div class=loginForm-actions> <div class=loginForm-actions-row> <a ui-sref=login class=pm_button translate-context=Action translate-comment="cancel reset process" translate>Cancel</a> <button type=submit ng-disabled=dangerForm.$invalid class="pm_button error" title="Reset My Password" translate-context=Action translate>Reset</button> </div> </div> </form> </div> <div ng-show="resetState === states.PASSWORD"> <p> </p> <form method=post ng-submit="passwordForm.$valid && resetPassword(passwordForm)" name=passwordForm class="pm_form pm_panel" novalidate> <h3 class="text-center margin" translate-context=Title translate>Reset Password</h3> <p class="text-center alert alert-danger" translate-context=Info translate>Keep this password safe--it cannot be recovered.</p> <div class="form-group margin"> <label for=resetToken translate-context=Title translate>New password:</label> <password data-id=password data-name=password data-form=passwordForm data-value=params.password data-tabindex=1 placeholder-translate-context="Reset your password" placeholder-translate="Choose a new password"></password> </div> <div class="form-group margin"> <password data-id=passwordc data-name=passwordc data-form=passwordForm data-value=params.passwordConfirm data-tabindex=2 placeholder-translate-context="Reset your login" placeholder-translate="Confirm new password" compare=params.password></password> </div> <div class="alert alert-warning"> <ul> <li translate-context="Reset your login" translate>Do NOT forget this password. If you forget it, you will not be able to login or decrypt your messages.</li> <li translate-context="Reset your login" translate>Save your password somewhere safe. Click on <i class="fa fa-eye"></i> icon to confirm you that have typed your password correctly.</li> </ul> </div> <div class=loginForm-actions> <div class=loginForm-actions-row> <button type=submit class="loginForm-actions-main pm_button error" ng-disabled=networkActivity.loading() translate-comment="button to reset password" translate-context=Action translate>Reset password</button> </div> </div> </form> </div> <div class="pm_panel wide" ng-show="resetState === states.GENERATE"> <div class="text-center header"> <div class=creating-loader-container> <atom-loader data-loader-theme=primary></atom-loader> </div> <h2 class=text-center ng-show=!signupError translate translate-context=Title>Generating keys...</h2> </div> <p class=alert translate-context=Info translate>This can take a few seconds or a few minutes depending on your device.</p> </div> <div class="pm_panel wide" ng-show="resetState === states.INSTALL" id=setUpProcess> <div class="text-center header"> <div class=creating-loader-container> <atom-loader data-loader-theme=primary></atom-loader> </div> <h2 class=text-center translate-context=Title translate>Resetting your password</h2> </div> <div class="wrapper text-left"> <ol id=creationList> <li class=done> <i class="show fa fa-check"></i> <span translate-context=Title translate>Generating keys</span> </li> <li ng-class="{ \'done\': resetAccount }"> <i ng-class="{ \'show\': resetAccount }" class="fa fa-check"></i> <span translate-context=Title translate>Resetting your password</span> </li> <li ng-class="{ \'done\': logUserIn }"> <i ng-class="{ \'show\': logUserIn }" class="fa fa-check"></i> <span translate-context=Title translate>Logging in to your account</span> </li> <li ng-class="{ \'done\': redirectLogin }"> <i ng-class="{ \'show\': redirectLogin }" class="fa fa-check"></i> <span translate-context=Title translate>Redirecting</span> </li> </ol> </div> </div> </section> ')}])}e.exports=n},"./src/templates/views/security.tpl.html":function(e,t){var a=window.angular,n="templates/views/security.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div id=pm_settings> <div ng-class="{\n \'noLog\': doLogging === 0,\n \'activeLog\': doLogging === 1,\n \'activeLogAdvanced\': doLogging === 2}" class="settings securityContainer"> <div class="row pm_grid"> <section class="pm_form col-1-2"> <header-block class=settingsSecurity-header-2fa> <h2 class=settingsSecurity-title-2fa translate translate-comment="two factor page heading" translate-context=Title>Two-Factor Authentication</h2> </header-block> <button class=pm_button ng-show="twoFactor === 1" ng-click=disableTwoFactor() translate-context=Action translate>Disable Two-Factor Authentication</button> <button class=pm_button ng-show="twoFactor === 0" ng-click=enableTwoFactor() translate-context=Action translate>Enable Two-Factor Authentication</button> <a href=https://protonmail.com/support/knowledge-base/two-factor-authentication/ target=_blank class="pm_button link" translate translate-context=Link>Learn more</a> </section> <section class="pm_form col-1-2"> <header-block class=settingsSecurity-header-session> <h2 class=settingsSecurity-title-session translate translate-comment="other sessions page heading" translate-context=Title>Session Management</h2> </header-block> <button class=pm_button ng-click=revokeOthers() translate-context=Action translate>Log out all other sessions</button> <a href=https://protonmail.com/support/knowledge-base/log-out-all-other-sessions/ target=_blank class="pm_button link" translate translate-context=Link>Learn more</a> </section> </div> <div class=row> <section class="setting pm_form full"> <form method=post> <header-block class=settingsSecurity-header-logs> <h2 class=settingsSecurity-title-logs translate translate-comment="logs page heading" translate-context=Title>Authentication Logs</h2> </header-block> <div class="pull-right securtiyLogActions onlyActive"> <button class="pm_button pull-left" ng-click=clearLogs() translate-context=Action translate>Wipe</button> <button class="pm_button pull-left" ng-click=downloadLogs() translate-context=Action translate>Download</button> <span ng-show="(logCount > logItemsPerPage)"> <paginator-scope data-type=logs page=currentLogPage total-items=logCount items-per-page=logItemsPerPage change=loadLogs /> </span> </div> <div class="pm_buttons pull-left margin-bottom"> <a class=noLogBtn ng-click=setLogging(0)>{{ disabledText }}</a> <a class=activeLogBtn ng-click=setLogging(1) translate-context=Action translate>Basic</a> <a class=activeLogAdvancedBtn ng-click=setLogging(2) translate-context=Action translate>Advanced</a> </div> <a class="securityLogRefresh pm_button onlyActive" ng-click=initLogs()> <i class="fa fa-rotate-right"></i> </a> <div class=clear> <p class="noLog alert alert-info" translate translate-context=Info>You can enable authentication logging to see when your account is accessed, and from which IP. We will record the IP address that accesses the account and the time, as well as failed attempts.</p> <p class="onlyActive alert alert-info" translate translate-context=Info>Logs include authentication attempts for all Proton services that use your ProtonMail credentials.</p> </div> <div class="clear onlyActive"> <p class="alert alert-info onlyActive" ng-show="logs.length < 1" translate-context=Info translate>No logs yet</p> <p class="alert alert-info onlyActive" ng-show=!haveLogs><i class="fa fa-spin fa-spinner"></i>Fetching logs...</p> <div class=pm_table> <table id=accessLog class=bordered ng-init=initLogs() ng-show="logs.length>0"> <thead> <tr> <th style=width:10rem translate-context=Title translate>Event</th> <th style=width:10rem ng-show="doLogging == 2" class=text-right>IP</th> <th style=width:14rem class=text-right translate-context=Title translate>Time</th> </tr> </thead> <tbody> <tr ng-repeat="log in logs | limitTo: logItemsPerPage: (currentLogPage - 1) * logItemsPerPage" ng-class="{ \'danger\': (log.Event == 0) }"> <td scope=row> <span ng-show="{{ log.Event === 0 }}"><i class="fa fa-times-circle text-red"></i> <span translate-context=Info translate-comment="authentication log record" translate translate-context="auth log entry">Login failure (password)</span> </span> <span ng-show="{{ log.Event === 1 }}"><i class="fa fa-check"></i> <span translate translate-context="auth log entry">Login success</span> </span> <span ng-show="{{ log.Event === 2 }}"><i class="fa fa-check"></i> <span translate translate-context="auth log entry">Logout</span> </span> <span ng-show="{{ log.Event === 3 }}"><i class="fa fa-times-circle text-red"></i> <span translate translate-context="auth log entry">Login failure (two-factor)</span> </span> </td> <td ng-show="doLogging == 2" class=text-right> <kbd ng-show="log.IP!==\'\'">{{ ::log.IP }}</kbd> <kbd ng-show="log.IP===\'\'">--</kbd> </td> <td class=text-right>{{ log.Time * 1000 | date : \'medium\' }}</td> </tr> </tbody> </table> </div> </div> </form> </section> </div> </div> </div> ')}])}e.exports=n},"./src/templates/views/setup.tpl.html":function(e,t){var a=window.angular,n="templates/views/setup.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<p> </p> <div class="pm_panel wide" ng-show=filling> <div class="text-center header"> <div> <img src=/assets/img/logo-dark.png height=20 /> </div> <h2> <i class="fa fa-user"></i> <span translate translate-context=Title>Set up your account</span> </h2> </div> <form method=post ng-submit="setup.$valid && submit(setup)" name=setup role=form novalidate class=pm_form> <div class="wrapper margin"> <p class="alert alert-info" translate-context=Info translate>Take back your privacy! Setting up your secure email account takes less than 2 minutes.</p> <div ng-if=chooseDomain> <label class=titleLabel for=Username> <em class=num>1</em> <span translate translate-context=Title>Email Address</span> </label> <div class=usernameWrap> <p class=help translate-context=Info translate>This will be your new ProtonMail email address.</p> <strong ng-bind=username></strong> <em class=usernameDomain>@</em> <span class="pm_select inline bigger"> <select class=selectDomain ng-model=domain ng-options="domain.label for domain in domains"></select> <i class="fa fa-angle-down"></i> </span> </div> </div> <div> <label class=titleLabel for=password> <em class=num ng-if=chooseDomain>2</em> <span translate translate-context=Title>Password</span> </label> <p class=help translate-context=Info translate>This is used to encrypt and decrypt your messages. Do not lose this password--we cannot recover it.</p> <password class=loginSetup-field-password data-id=password data-name=password data-value=password placeholder-translate="Choose a mailbox password" data-form=setup></password> <password class=loginSetup-field-password data-id=passwordc data-name=passwordc data-value=passwordConfirm data-compare=password placeholder-translate="Confirm mailbox password" data-form=setup></password> <p class="alert alert-info" translate-context=Info translate>If you lose your password, you will not be able to read your emails.</p> </div> <p> </p> </div> <div class=text-center> <p><span translate translate-context=Info>By clicking Setup Account, you agree to abide by</span><br/> <a href=https://protonmail.com/terms-and-conditions target=_blank translate-context=Title translate>ProtonMail\'s Terms and Conditions</a>.</p> <p><button type=submit class="pm_button primary large" ng-disabled=networkActivity.loading() translate-context=Action translate>Setup Account</button></p> </div> </form> </div> <div class="pm_panel wide" ng-show=genKeys> <div class="text-center header"> <div class=creating-loader-container> <atom-loader data-loader-theme=primary></atom-loader> </div> <h2 class=text-center ng-show=!signupError translate translate-text=Title>Generating keys...</h2> </div> <p class=alert translate-context=Info translate>This can take a few seconds or a few minutes depending on your device.</p> </div> <div class="pm_panel wide" ng-show=creating id=setUpProcess> <div class="text-center header"> <div class=creating-loader-container> <atom-loader data-loader-theme=primary></atom-loader> </div> <h2 class=text-center ng-show=!setupError translate>Setting up account</h2> <h2 class=text-center ng-show=setupError translate-context=Error translate>Setup failed</h2> </div> <p class="alert alert-danger" ng-show=setupError>An error occured while setting up your account. To see common problems and solutions <a target=_blank href=https://protonmail.com/support/knowledge-base/common-sign-up-problems-and-solutions/ >click here</a>.</p> <div class="wrapper text-left"> <ol id=creationList> <li class=done> <i class="show fa fa-check"></i> <span translate>Generating keys</span> </li> <li ng-class="{ \'done\': setupAccount }"> <i ng-class="{ \'show\': setupAccount }" class="fa fa-check"></i> <span translate>Setting up account</span> </li> <li ng-class="{ \'done\': getUserInfo }"> <i ng-class="{ \'show\': getUserInfo }" class="fa fa-check"></i> <span translate>Done</span> </li> <li ng-class="{ \'done\': finishCreation }"> <i ng-class="{ \'show\': finishCreation }" class="fa fa-check"></i> <span translate>Redirecting</span> </li> </ol> </div> </div> ')}])}e.exports=n},"./src/templates/views/signup.tpl.html":function(e,t){var a=window.angular,n="templates/views/signup.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<signup-user-form class="pm_panel wide signUpProcess-step-1" ng-if="step === 1" data-plans=plans data-account=account data-domains=domains></signup-user-form> <div class="pm_panel wide signUpProcess-step-2" ng-show="step === 2"> <div class=text-center> <div class=genNewKeys-loader-container> <atom-loader data-loader-theme=primary></atom-loader> </div> <h2 class=text-center ng-show=!signupError translate translate-text=Title>Generating keys...</h2> </div> <p class=alert translate-context=Info translate>This can take a few seconds or a few minutes depending on your device.</p> </div> <signup-human-form data-account=account class=signUpProcess-step-3 ng-if="!isFromInvitation && step === 3"></signup-human-form> <signup-pay-form data-plan=plan data-account=account class="pm_panel wide signUpProcess-step-4" ng-if="step === 4"></signup-pay-form> <signup-creation-process class="pm_panel wide signUpProcess-step-5" ng-show="step === 5"></signup-creation-process> <footer id=pm_footer class=static> <app-copyright></app-copyright> </footer> ')}])}e.exports=n},"./src/templates/views/support-message.tpl.html":function(e,t){var a=window.angular,n="templates/views/support-message.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_panel pm_form wrap"> <h1 class="text-center no-margin-bottom" translate-context=Info translate>Problem loading your account</h1> <p class="alert alert-danger" translate-context=Info translate>ProtonMail encountered a problem loading your account. Please refresh the page and try again later.</p> <p class=text-center> <a class=pm_button ui-sref=login translate-context=Link translate>Login</a> </p> </div> ')}])}e.exports=n},"./src/templates/views/unlock.tpl.html":function(e,t){var a=window.angular,n="templates/views/unlock.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<form method=post id=pm_login name=unlockForm class="pm_panel pm_form alt" ng-class="{ loadingUnlock: domoArigato }" novalidate role=form autocomplete=on ng-submit=unlock($event)> <div class=unlock-panel> <img src=/assets/img/logo.png height=20 alt=ProtonMail class=logo /> <h4 class=text-center> <span class="fa fa-inbox title-icon"></span> <span translate translate-context=Title>Decrypt Mailbox</span> </h4> <p class=text-center>{{ creds.Username }}</p> <div class="alert alert-danger" id=error521 ng-if=error>{{ error.message }}</div> <password class="margin focus unlock-input-password" data-id=password data-name=mailbox-password data-value=mailboxPassword data-form=unlockForm data-autofocus=true placeholder-translate="Mailbox password"></password> <div class=loginForm-actions> <div class=loginForm-actions-column> <button id=unlock_btn class="loginForm-actions-main pm_button primary pull-right" type=submit ng-disabled=networkActivity.loading() translate-context=Action translate>Unlock</button> <button type=button ng-click=reset() class="login-support pm_button link pull-left unlock-btn-forgot" translate-context=Action translate translate-comment="link to reset mailbox">Forgot password?</button> </div> </div> </div> <div class=loadingUnlock-loader-container> <atom-loader data-translation-key=decrypting></atom-loader> </div> </form> ')}])}e.exports=n},"./src/templates/vpn/changeVPNNameModal.tpl.html":function(e,t){var a=window.angular,n="templates/vpn/changeVPNNameModal.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal small {{ctrl.class}}" role=dialog style=display:block> <div class=modal-dialog> <form method=post ng-submit="VPNNameForm.$valid && ctrl.submit()" novalidate="" name=VPNNameForm autocomplete=off> <button type=button ng-click=ctrl.cancel() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <h4 class=modal-title translate translate-context=Title>Change OpenVPN Login</h4> </div> <div class="modal-body pm_form"> <label for=VPNName translate-context=Label translate>Enter new OpenVPN login</label> <div class="alert alert-info margin-top margin-bottom"> <p translate-context=Info translate>Valid characters are A-Z, a-z, 0-9, . (full stop), _ (underscore) and - (hyphen). The login must start and end with an alphanumeric character.</p> </div> <input type=text id=VPNName ng-model=ctrl.VPNName required/> </div> </div> <div class=modal-footer> <button type=button class=pm_button ng-click=ctrl.cancel() translate translate-context=Action>Cancel</button> <button type=submit class="pm_button primary pull-right" ng-disabled=networkActivity.loading() translate-context=Action translate>Submit</button> </div> </form> </div> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/vpn/changeVPNPasswordModal.tpl.html":function(e,t){var a=window.angular,n="templates/vpn/changeVPNPasswordModal.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div class="pm_modal small {{ctrl.class}}" role=dialog style=display:block> <div class=modal-dialog> <form method=post ng-submit="VPNPasswordForm.$valid && ctrl.submit()" novalidate="" name=VPNPasswordForm autocomplete=off> <button type=button ng-click=ctrl.cancel() aria-hidden=true title-translate=Close title-translate-context=Action class="fa fa-times close"></button> <div class=modal-content> <div class=modal-header> <h4 class=modal-title translate translate-context=Title ng-if=!ctrl.passwordDefined>Set OpenVPN Password</h4> <h4 class=modal-title translate translate-context=Title ng-if=ctrl.passwordDefined>Change OpenVPN Password</h4> </div> <div class="modal-body pm_form"> <label for=VPNPassword translate-context=Label translate>Enter new OpenVPN password</label> <password data-id=VPNPassword data-name=VPNPassword data-value=ctrl.VPNPassword form=VPNPasswordForm></password> </div> </div> <div class=modal-footer> <button type=button class=pm_button ng-click=ctrl.cancel() translate translate-context=Action>Cancel</button> <button type=submit class="pm_button primary pull-right" ng-disabled=networkActivity.loading() translate-context=Action translate>Submit</button> </div> </form> </div> <div class=modal-overlay></div> </div> ')}])}e.exports=n},"./src/templates/vpn/openVpnSection.tpl.html":function(e,t){var a=window.angular,n="templates/vpn/openVpnSection.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<section class="pm_form col-1-2"> <header-block class=openVpnSection-header-about> <h2 class=openVpnSection-title-about translate translate-context=Title>OpenVPN/IKEv2</h2> </header-block> <p class="alert alert-info"> <span translate-context=Info translate>Use the following credentials when connecting to ProtonVPN with third party clients, for example: Tunnelblick on MacOS or OpenVPN on GNU/Linux.</span> <br/><br/> <a href=https://protonvpn.com/support/vpn-login/ target=_blank translate-context=Link translate>What is the difference between ProtonVPN and OpenVPN logins?</a> </p> <div class=clearfix> <div class=col-4-8> <label> <span translate-context=Label translate>Login</span> </label> </div> <div class=col-4-8> <label class=bold>{{ VPNName }}</label> <button ng-click=changeName() type=button class=pm_button translate-context=Action translate>Change OpenVPN Login</button> </div> </div> <div class=clearfix> <div class=col-4-8> <label> <span translate-context=Label translate>Password</span> </label> </div> <div class=col-4-8> <label class=bold>{{ VPNPassword }}</label> <button ng-click=changePassword() type=button class=pm_button> <span ng-if=!VPNPassword translate-context=Action translate>Set OpenVPN Password</span> <span ng-if=VPNPassword translate-context=Action translate>Change OpenVPN Password</span> </button> </div> </div> </section> ')}])}e.exports=n},"./src/templates/vpn/vpnRessources.tpl.html":function(e,t){var a=window.angular,n="templates/vpn/vpnRessources.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<ul class=vpn-ressourcesSection-clients-list> <li class=vpn-ressourcesSection-clients-item> <a class="vpn-ressourcesSection-clients-item-container plateform-windows" href=https://protonvpn.com/download/ target=_blank> <i class="vpn-ressourcesSection-clients-item-icon fa fa-windows"></i> <div class=vpn-ressourcesSection-clients-item-text><strong>Windows</strong></div> <div class=vpn-ressourcesSection-clients-item-download translate>Download</div> </a> </li> <li class=vpn-ressourcesSection-clients-item> <a class="vpn-ressourcesSection-clients-item-container plateform-apple" href=https://protonvpn.com/support/mac-vpn-setup/ target=_blank> <i class="vpn-ressourcesSection-clients-item-icon fa fa-apple"></i> <div class=vpn-ressourcesSection-clients-item-text><strong>Mac</strong></div> <div class=vpn-ressourcesSection-clients-item-download translate>Download</div> </a> </li> <li class=vpn-ressourcesSection-clients-item> <a class="vpn-ressourcesSection-clients-item-container plateform-linux" href=https://protonvpn.com/support/linux-vpn-setup/ target=_blank> <i class="vpn-ressourcesSection-clients-item-icon fa fa-linux"></i> <div class=vpn-ressourcesSection-clients-item-text><strong>Linux</strong></div> <div class=vpn-ressourcesSection-clients-item-download translate>Download</div> </a> </li> <li class=vpn-ressourcesSection-clients-item> <a class="vpn-ressourcesSection-clients-item-container plateform-ios" href=https://protonvpn.com/support/ios-vpn-setup/ target=_blank> <i class="vpn-ressourcesSection-clients-item-icon fa fa-apple"></i> <div class=vpn-ressourcesSection-clients-item-text><strong>iOS</strong></div> <div class=vpn-ressourcesSection-clients-item-download translate>Download</div> </a> </li> <li class=vpn-ressourcesSection-clients-item> <a class="vpn-ressourcesSection-clients-item-container plateform-android" href="https://play.google.com/store/apps/details?id=com.protonvpn.android" target=_blank> <i class="vpn-ressourcesSection-clients-item-icon fa fa-android"></i> <div class=vpn-ressourcesSection-clients-item-text><strong>Android</strong></div> <div class=vpn-ressourcesSection-clients-item-download translate>Download</div> </a> </li> </ul> ')}])}e.exports=n},"./src/templates/vpn/vpnView.tpl.html":function(e,t){var a=window.angular,n="templates/vpn/vpnView.tpl.html";try{a.module("templates-app")}catch(e){a.module("templates-app",[])}finally{a.module("templates-app").run(["$templateCache",function(e){e.put(n,'<div id=pm_settings class=vpn-container> <div class=settings> <div ng-if="vpnStatus !== 1" class=row> <section class=pm_form> <header-block class=settingsVpn-header-about> <h2 class=settingsVpn-title-about translate translate-context=Title>ProtonVPN</h2> </header-block> <p ng-if="vpnStatus === 0" class="alert alert-info" translate-context=Info translate>Your account is currently not eligible for ProtonVPN access. If you are part of an Organization, please contact your account administrator.</p> <p ng-if="vpnStatus === 2" class="alert alert-info" translate-context=Info translate>Your VPN account has not yet been activated, go to <a href=https://account.protonvpn.com/signup target=_blank>https://account.protonvpn.com/signup</a> to sign up and activate your account.</p> <p ng-if="vpnStatus === 3" class="alert alert-info" translate-context=Info translate>Your ProtonVPN account request has been received. You\'re already on the waitlist, we\'ll contact you once capacity becomes available.</p> </section> </div> <div ng-if="vpnStatus === 1"> <section class=vpn-ressourcesSection-container> <header-block> <h2 class=vpn-ressourcesSection-title translate-context=Title translate>Getting started with ProtonVPN</h2> </header-block> <p class="alert alert-info" translate-context="Select your type of OS" translate>Select your client below to get started with ProtonVPN</p> <vpn-ressources></vpn-ressources> </section> <div class="row pm_grid"> <section class="pm_form col-1-2"> <header-block class=settingsVpn-header-login> <h2 class=settingsVpn-title-login translate translate-context=Title>ProtonVPN</h2> </header-block> <p class="alert alert-info" translate-context=Info translate>Use the following credentials to log into the <a href=https://protonvpn.com/download target=_blank>ProtonVPN native clients</a>.</p> <div class=clearfix> <div class=col-4-8> <label translate-context=Label translate>Proton Username</label> </div> <div class=col-4-8> <label class=bold>{{ VPNLogin }}</label> </div> </div> <div class=clearfix> <div class=col-4-8> <label translate-context=Label translate>Password</label> </div> <div class=col-4-8> <label class=bold translate-context=Info translate>Same as ProtonMail login password</label> </div> </div> </section> <open-vpn-section></open-vpn-section> </div> <div class="row pm_grid"> <section class="pm_form col-1-2"> <header-block class=settingsVpn-header-resources> <h2 class=settingsVpn-title-resources translate translate-context=Title>ProtonVPN Resources</h2> </header-block> <div class=clearfix> <div class=col-4-8> <label translate-context=Label translate>Download ProtonVPN</label> </div> <div class=col-4-8> <a href=https://protonvpn.com/download target=_blank class="pm_button link" translate-context=Link translate>Download Page</a> </div> </div> <div class=clearfix> <div class=col-4-8> <label translate-context=Label translate>ProtonVPN Homepage</label> </div> <div class=col-4-8> <a href=https://protonvpn.com target=_blank class="pm_button link" translate-context=Link translate>Homepage</a> </div> </div> <div class=clearfix> <div class=col-4-8> <label translate-context=Label translate>Get Support for ProtonVPN</label> </div> <div class=col-4-8> <a href=https://protonvpn.com/support target=_blank class="pm_button link" translate-context=Link translate>Support Page</a> </div> </div> </section> <section class=col-1-2></section> </div> </div> </div> </div> ')}])}e.exports=n},0:function(e,t,a){e.exports=a("./src/app/app.js")}});
- //# sourceMappingURL=app.5ce94bf77cc4bc0ed885794afd802c30ff80867a.js.map
|