diff --git a/assets/js/app.f0ac22cf.js b/assets/js/app.62d8fd83.js similarity index 89% rename from assets/js/app.f0ac22cf.js rename to assets/js/app.62d8fd83.js index 09dc5df2..b4515c30 100644 --- a/assets/js/app.f0ac22cf.js +++ b/assets/js/app.62d8fd83.js @@ -10,4 +10,4 @@ * vue-router v3.1.3 * (c) 2019 Evan You * @license MIT - */function Go(t){return Object.prototype.toString.call(t).indexOf("Error")>-1}function Bo(t,e){return e instanceof t||e&&(e.name===t.name||e._name===t._name)}function Vo(t,e){for(var n in e)t[n]=e[n];return t}var Ho={name:"RouterView",functional:!0,props:{name:{type:String,default:"default"}},render:function(t,e){var n=e.props,r=e.children,o=e.parent,i=e.data;i.routerView=!0;for(var a=o.$createElement,s=n.name,u=o.$route,c=o._routerViewCache||(o._routerViewCache={}),l=0,f=!1;o&&o._routerRoot!==o;){var p=o.$vnode&&o.$vnode.data;p&&(p.routerView&&l++,p.keepAlive&&o._inactive&&(f=!0)),o=o.$parent}if(i.routerViewDepth=l,f)return a(c[s],i,r);var h=u.matched[l];if(!h)return c[s]=null,a();var d=c[s]=h.components[s];i.registerRouteInstance=function(t,e){var n=h.instances[s];(e&&n!==t||!e&&n===t)&&(h.instances[s]=e)},(i.hook||(i.hook={})).prepatch=function(t,e){h.instances[s]=e.componentInstance},i.hook.init=function(t){t.data.keepAlive&&t.componentInstance&&t.componentInstance!==h.instances[s]&&(h.instances[s]=t.componentInstance)};var v=i.props=function(t,e){switch(typeof e){case"undefined":return;case"object":return e;case"function":return e(t);case"boolean":return e?t.params:void 0;default:0}}(u,h.props&&h.props[s]);if(v){v=i.props=Vo({},v);var y=i.attrs=i.attrs||{};for(var m in v)d.props&&m in d.props||(y[m]=v[m],delete v[m])}return a(d,i,r)}};var qo=/[!'()*]/g,Wo=function(t){return"%"+t.charCodeAt(0).toString(16)},Ko=/%2C/g,Xo=function(t){return encodeURIComponent(t).replace(qo,Wo).replace(Ko,",")},Yo=decodeURIComponent;function Jo(t){var e={};return(t=t.trim().replace(/^(\?|#|&)/,""))?(t.split("&").forEach(function(t){var n=t.replace(/\+/g," ").split("="),r=Yo(n.shift()),o=n.length>0?Yo(n.join("=")):null;void 0===e[r]?e[r]=o:Array.isArray(e[r])?e[r].push(o):e[r]=[e[r],o]}),e):e}function Qo(t){var e=t?Object.keys(t).map(function(e){var n=t[e];if(void 0===n)return"";if(null===n)return Xo(e);if(Array.isArray(n)){var r=[];return n.forEach(function(t){void 0!==t&&(null===t?r.push(Xo(e)):r.push(Xo(e)+"="+Xo(t)))}),r.join("&")}return Xo(e)+"="+Xo(n)}).filter(function(t){return t.length>0}).join("&"):null;return e?"?"+e:""}var Zo=/\/?$/;function ti(t,e,n,r){var o=r&&r.options.stringifyQuery,i=e.query||{};try{i=ei(i)}catch(t){}var a={name:e.name||t&&t.name,meta:t&&t.meta||{},path:e.path||"/",hash:e.hash||"",query:i,params:e.params||{},fullPath:oi(e,o),matched:t?ri(t):[]};return n&&(a.redirectedFrom=oi(n,o)),Object.freeze(a)}function ei(t){if(Array.isArray(t))return t.map(ei);if(t&&"object"==typeof t){var e={};for(var n in t)e[n]=ei(t[n]);return e}return t}var ni=ti(null,{path:"/"});function ri(t){for(var e=[];t;)e.unshift(t),t=t.parent;return e}function oi(t,e){var n=t.path,r=t.query;void 0===r&&(r={});var o=t.hash;return void 0===o&&(o=""),(n||"/")+(e||Qo)(r)+o}function ii(t,e){return e===ni?t===e:!!e&&(t.path&&e.path?t.path.replace(Zo,"")===e.path.replace(Zo,"")&&t.hash===e.hash&&ai(t.query,e.query):!(!t.name||!e.name)&&(t.name===e.name&&t.hash===e.hash&&ai(t.query,e.query)&&ai(t.params,e.params)))}function ai(t,e){if(void 0===t&&(t={}),void 0===e&&(e={}),!t||!e)return t===e;var n=Object.keys(t),r=Object.keys(e);return n.length===r.length&&n.every(function(n){var r=t[n],o=e[n];return"object"==typeof r&&"object"==typeof o?ai(r,o):String(r)===String(o)})}function si(t,e,n){var r=t.charAt(0);if("/"===r)return t;if("?"===r||"#"===r)return e+t;var o=e.split("/");n&&o[o.length-1]||o.pop();for(var i=t.replace(/^\//,"").split("/"),a=0;a=0&&(e=t.slice(r),t=t.slice(0,r));var o=t.indexOf("?");return o>=0&&(n=t.slice(o+1),t=t.slice(0,o)),{path:t,query:n,hash:e}}(o.path||""),u=e&&e.path||"/",c=s.path?si(s.path,u,n||o.append):u,l=function(t,e,n){void 0===e&&(e={});var r,o=n||Jo;try{r=o(t||"")}catch(t){r={}}for(var i in e)r[i]=e[i];return r}(s.query,o.query,r&&r.options.parseQuery),f=o.hash||s.hash;return f&&"#"!==f.charAt(0)&&(f="#"+f),{_normalized:!0,path:c,query:l,hash:f}}var Ci,$i=[String,Object],Pi=[String,Array],Ti=function(){},ji={name:"RouterLink",props:{to:{type:$i,required:!0},tag:{type:String,default:"a"},exact:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,event:{type:Pi,default:"click"}},render:function(t){var e=this,n=this.$router,r=this.$route,o=n.resolve(this.to,r,this.append),i=o.location,a=o.route,s=o.href,u={},c=n.options.linkActiveClass,l=n.options.linkExactActiveClass,f=null==c?"router-link-active":c,p=null==l?"router-link-exact-active":l,h=null==this.activeClass?f:this.activeClass,d=null==this.exactActiveClass?p:this.exactActiveClass,v=a.redirectedFrom?ti(null,Ei(a.redirectedFrom),null,n):a;u[d]=ii(r,v),u[h]=this.exact?u[d]:function(t,e){return 0===t.path.replace(Zo,"/").indexOf(e.path.replace(Zo,"/"))&&(!e.hash||t.hash===e.hash)&&function(t,e){for(var n in e)if(!(n in t))return!1;return!0}(t.query,e.query)}(r,v);var y=function(t){Ri(t)&&(e.replace?n.replace(i,Ti):n.push(i,Ti))},m={click:Ri};Array.isArray(this.event)?this.event.forEach(function(t){m[t]=y}):m[this.event]=y;var g={class:u},b=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:s,route:a,navigate:y,isActive:u[h],isExactActive:u[d]});if(b){if(1===b.length)return b[0];if(b.length>1||!b.length)return 0===b.length?t():t("span",{},b)}if("a"===this.tag)g.on=m,g.attrs={href:s};else{var w=function t(e){if(e)for(var n,r=0;r-1&&(s.params[p]=n.params[p]);return s.path=Oi(l.path,s.params),u(l,s,a)}if(s.path){s.params={};for(var h=0;h=t.length?n():t[o]?e(t[o],function(){r(o+1)}):r(o+1)};r(0)}function oa(t){return function(e,n,r){var o=!1,i=0,a=null;ia(t,function(t,e,n,s){if("function"==typeof t&&void 0===t.cid){o=!0,i++;var u,c=ua(function(e){var o;((o=e).__esModule||sa&&"Module"===o[Symbol.toStringTag])&&(e=e.default),t.resolved="function"==typeof e?e:Ci.extend(e),n.components[s]=e,--i<=0&&r()}),l=ua(function(t){var e="Failed to resolve async component "+s+": "+t;a||(a=Go(t)?t:new Error(e),r(a))});try{u=t(c,l)}catch(t){l(t)}if(u)if("function"==typeof u.then)u.then(c,l);else{var f=u.component;f&&"function"==typeof f.then&&f.then(c,l)}}}),o||r()}}function ia(t,e){return aa(t.map(function(t){return Object.keys(t.components).map(function(n){return e(t.components[n],t.instances[n],t,n)})}))}function aa(t){return Array.prototype.concat.apply([],t)}var sa="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function ua(t){var e=!1;return function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];if(!e)return e=!0,t.apply(this,n)}}var ca=function(t){function e(e){t.call(this),this.name=this._name="NavigationDuplicated",this.message='Navigating to current location ("'+e.fullPath+'") is not allowed',Object.defineProperty(this,"stack",{value:(new t).stack,writable:!0,configurable:!0})}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(Error);ca._name="NavigationDuplicated";var la=function(t,e){this.router=t,this.base=function(t){if(!t)if(Li){var e=document.querySelector("base");t=(t=e&&e.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else t="/";"/"!==t.charAt(0)&&(t="/"+t);return t.replace(/\/$/,"")}(e),this.current=ni,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[]};function fa(t,e,n,r){var o=ia(t,function(t,r,o,i){var a=function(t,e){"function"!=typeof t&&(t=Ci.extend(t));return t.options[e]}(t,e);if(a)return Array.isArray(a)?a.map(function(t){return n(t,r,o,i)}):n(a,r,o,i)});return aa(r?o.reverse():o)}function pa(t,e){if(e)return function(){return t.apply(e,arguments)}}la.prototype.listen=function(t){this.cb=t},la.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},la.prototype.onError=function(t){this.errorCbs.push(t)},la.prototype.transitionTo=function(t,e,n){var r=this,o=this.router.match(t,this.current);this.confirmTransition(o,function(){r.updateRoute(o),e&&e(o),r.ensureURL(),r.ready||(r.ready=!0,r.readyCbs.forEach(function(t){t(o)}))},function(t){n&&n(t),t&&!r.ready&&(r.ready=!0,r.readyErrorCbs.forEach(function(e){e(t)}))})},la.prototype.confirmTransition=function(t,e,n){var r=this,o=this.current,i=function(t){!Bo(ca,t)&&Go(t)&&(r.errorCbs.length?r.errorCbs.forEach(function(e){e(t)}):console.error(t)),n&&n(t)};if(ii(t,o)&&t.matched.length===o.matched.length)return this.ensureURL(),i(new ca(t));var a=function(t,e){var n,r=Math.max(t.length,e.length);for(n=0;n-1?decodeURI(t.slice(0,r))+t.slice(r):decodeURI(t)}else n>-1&&(t=decodeURI(t.slice(0,n))+t.slice(n));return t}function ga(t){var e=window.location.href,n=e.indexOf("#");return(n>=0?e.slice(0,n):e)+"#"+t}function ba(t){ta?ea(ga(t)):window.location.hash=t}function wa(t){ta?na(ga(t)):window.location.replace(ga(t))}var _a=function(t){function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,n){var r=this;this.transitionTo(t,function(t){r.stack=r.stack.slice(0,r.index+1).concat(t),r.index++,e&&e(t)},n)},e.prototype.replace=function(t,e,n){var r=this;this.transitionTo(t,function(t){r.stack=r.stack.slice(0,r.index).concat(t),e&&e(t)},n)},e.prototype.go=function(t){var e=this,n=this.index+t;if(!(n<0||n>=this.stack.length)){var r=this.stack[n];this.confirmTransition(r,function(){e.index=n,e.updateRoute(r)},function(t){Bo(ca,t)&&(e.index=n)})}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(la),xa=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=Ui(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!ta&&!1!==t.fallback,this.fallback&&(e="hash"),Li||(e="abstract"),this.mode=e,e){case"history":this.history=new ha(this,t.base);break;case"hash":this.history=new va(this,t.base,this.fallback);break;case"abstract":this.history=new _a(this,t.base);break;default:0}},ka={currentRoute:{configurable:!0}};function Sa(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}xa.prototype.match=function(t,e,n){return this.matcher.match(t,e,n)},ka.currentRoute.get=function(){return this.history&&this.history.current},xa.prototype.init=function(t){var e=this;if(this.apps.push(t),t.$once("hook:destroyed",function(){var n=e.apps.indexOf(t);n>-1&&e.apps.splice(n,1),e.app===t&&(e.app=e.apps[0]||null)}),!this.app){this.app=t;var n=this.history;if(n instanceof ha)n.transitionTo(n.getCurrentLocation());else if(n instanceof va){var r=function(){n.setupListeners()};n.transitionTo(n.getCurrentLocation(),r,r)}n.listen(function(t){e.apps.forEach(function(e){e._route=t})})}},xa.prototype.beforeEach=function(t){return Sa(this.beforeHooks,t)},xa.prototype.beforeResolve=function(t){return Sa(this.resolveHooks,t)},xa.prototype.afterEach=function(t){return Sa(this.afterHooks,t)},xa.prototype.onReady=function(t,e){this.history.onReady(t,e)},xa.prototype.onError=function(t){this.history.onError(t)},xa.prototype.push=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise(function(e,n){r.history.push(t,e,n)});this.history.push(t,e,n)},xa.prototype.replace=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise(function(e,n){r.history.replace(t,e,n)});this.history.replace(t,e,n)},xa.prototype.go=function(t){this.history.go(t)},xa.prototype.back=function(){this.go(-1)},xa.prototype.forward=function(){this.go(1)},xa.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map(function(t){return Object.keys(t.components).map(function(e){return t.components[e]})})):[]},xa.prototype.resolve=function(t,e,n){var r=Ei(t,e=e||this.history.current,n,this),o=this.match(r,e),i=o.redirectedFrom||o.fullPath;return{location:r,route:o,href:function(t,e,n){var r="hash"===n?"#"+e:e;return t?ui(t+"/"+r):r}(this.history.base,i,this.mode),normalizedTo:r,resolved:o}},xa.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==ni&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(xa.prototype,ka),xa.install=function t(e){if(!t.installed||Ci!==e){t.installed=!0,Ci=e;var n=function(t){return void 0!==t},r=function(t,e){var r=t.$options._parentVnode;n(r)&&n(r=r.data)&&n(r=r.registerRouteInstance)&&r(t,e)};e.mixin({beforeCreate:function(){n(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),e.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,r(this,this)},destroyed:function(){r(this)}}),Object.defineProperty(e.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(e.prototype,"$route",{get:function(){return this._routerRoot._route}}),e.component("RouterView",Ho),e.component("RouterLink",ji);var o=e.config.optionMergeStrategies;o.beforeRouteEnter=o.beforeRouteLeave=o.beforeRouteUpdate=o.created}},xa.version="3.1.3",Li&&window.Vue&&window.Vue.use(xa);var Aa=xa;n(66),n(120),n(122),n(123),n(124),n(61),n(125),n(69);n(106),n(126),n(29),n(108),n(41);function Oa(t){return(Oa="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var Ea=n(38),Ca={NotFound:function(){return n.e(4).then(n.bind(null,248))},Layout:function(){return Promise.all([n.e(0),n.e(2)]).then(n.bind(null,247))}},$a={"v-f88195a6":function(){return n.e(5).then(n.bind(null,249))},"v-0f125dbb":function(){return n.e(6).then(n.bind(null,250))},"v-5127c24a":function(){return n.e(7).then(n.bind(null,251))},"v-79c557ae":function(){return n.e(8).then(n.bind(null,252))},"v-bc26f6ca":function(){return n.e(9).then(n.bind(null,253))},"v-15ae477b":function(){return n.e(10).then(n.bind(null,254))},"v-e2943322":function(){return n.e(11).then(n.bind(null,255))},"v-9b504b3e":function(){return n.e(12).then(n.bind(null,256))},"v-3896b323":function(){return n.e(13).then(n.bind(null,257))},"v-ae731ab6":function(){return n.e(14).then(n.bind(null,258))},"v-545731d5":function(){return n.e(15).then(n.bind(null,259))},"v-5cda54a1":function(){return n.e(16).then(n.bind(null,260))},"v-24570241":function(){return n.e(17).then(n.bind(null,261))},"v-7499233e":function(){return n.e(18).then(n.bind(null,262))},"v-26737916":function(){return n.e(19).then(n.bind(null,263))},"v-86daa2ba":function(){return n.e(21).then(n.bind(null,264))},"v-700fa4e1":function(){return n.e(22).then(n.bind(null,265))},"v-fe729232":function(){return n.e(23).then(n.bind(null,266))},"v-2f539db2":function(){return n.e(24).then(n.bind(null,267))},"v-1edba7fe":function(){return n.e(25).then(n.bind(null,268))},"v-1e493801":function(){return n.e(20).then(n.bind(null,269))}};function Pa(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}var Ta=/-(\w)/g,ja=Pa(function(t){return t.replace(Ta,function(t,e){return e?e.toUpperCase():""})}),Ra=/\B([A-Z])/g,La=Pa(function(t){return t.replace(Ra,"-$1").toLowerCase()}),Ia=Pa(function(t){return t.charAt(0).toUpperCase()+t.slice(1)});function Ma(t,e){if(e)return t(e)?t(e):e.includes("-")?t(Ia(ja(e))):t(Ia(e))||t(La(e))}var Ua=Object.assign({},Ca,$a),Na=function(t){return Ua[t]},Da=function(t){return $a[t]},Fa=function(t){return Ca[t]},za=function(t){return zo.component(t)};function Ga(t){return Ma(Da,t)}function Ba(t){return Ma(Fa,t)}function Va(t){return Ma(Na,t)}function Ha(t){return Ma(za,t)}function qa(){for(var t=arguments.length,e=new Array(t),n=0;n=s.parentElement.offsetTop+10&&(!u||r0}var ws={props:{pageKey:String,slotKey:{type:String,default:"default"}},render:function(t){var e=this.pageKey||this.$parent.$page.key;return Wa("pageKey",e),zo.component(e)||zo.component(e,Ga(e)),zo.component(e)?t(e):t("")}},_s={functional:!0,props:{slotKey:String,required:!0},render:function(t,e){var n=e.props,r=e.slots;return t("div",{class:["content__".concat(n.slotKey)]},r()[n.slotKey])}},xs=(n(139),Object(ns.a)({},function(t,e){var n=e._c;return n("svg",{staticClass:"icon outbound",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"}},[n("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),e._v(" "),n("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})])},[],!0,null,null,null).exports);function ks(){return(ks=o(regeneratorRuntime.mark(function t(e){var n,r,o,i;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return n="undefined"!=typeof window&&window.__VUEPRESS_ROUTER_BASE__?window.__VUEPRESS_ROUTER_BASE__:is.routerBase||is.base,gs(r=new Aa({base:n,mode:"history",fallback:!1,routes:os,scrollBehavior:function(t,e,n){return n||(t.hash?!zo.$vuepress.$get("disableScrollBehavior")&&{selector:t.hash}:{x:0,y:0})}})),o={},t.prev=4,t.next=7,Promise.all(as.filter(function(t){return"function"==typeof t}).map(function(t){return t({Vue:zo,options:o,router:r,siteData:is,isServer:e})}));case 7:t.next=12;break;case 9:t.prev=9,t.t0=t.catch(4),console.error(t.t0);case 12:return i=new zo(Object.assign(o,{router:r,render:function(t){return t("div",{attrs:{id:"app"}},[t("RouterView",{ref:"layout"}),t("div",{class:"global-ui"},ss.map(function(e){return t(e)}))])}})),t.abrupt("return",{app:i,router:r});case 14:case"end":return t.stop()}},t,null,[[4,9]])}))).apply(this,arguments)}zo.config.productionTip=!1,zo.use(Aa),zo.use(ms),zo.mixin(function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:zo;!function(t){t.locales&&Object.keys(t.locales).forEach(function(e){t.locales[e].path=e});Object.freeze(t)}(e),n.$vuepress.$set("siteData",e);var r=new(t(n.$vuepress.$get("siteData"))),o=Object.getOwnPropertyDescriptors(Object.getPrototypeOf(r)),i={};return Object.keys(o).reduce(function(t,e){return e.startsWith("$")&&(t[e]=o[e].get),t},i),{computed:i}}(function(t){return function(){function e(){us(this,e)}return ls(e,[{key:"setPage",value:function(t){this.__page=t}},{key:"$site",get:function(){return t}},{key:"$themeConfig",get:function(){return this.$site.themeConfig}},{key:"$frontmatter",get:function(){return this.$page.frontmatter}},{key:"$localeConfig",get:function(){var t,e,n=this.$site.locales,r=void 0===n?{}:n;for(var o in r)"/"===o?e=r[o]:0===this.$page.path.indexOf(o)&&(t=r[o]);return t||e||{}}},{key:"$siteTitle",get:function(){return this.$localeConfig.title||this.$site.title||""}},{key:"$title",get:function(){var t=this.$page,e=this.$page.frontmatter.metaTitle;if("string"==typeof e)return e;var n=this.$siteTitle,r=t.frontmatter.home?null:t.frontmatter.title||t.title;return n?r?r+" | "+n:n:r||"VuePress"}},{key:"$description",get:function(){var t=function(t){if(t){var e=t.filter(function(t){return"description"===t.name})[0];if(e)return e.content}}(this.$page.frontmatter.meta);return t||(this.$page.frontmatter.description||this.$localeConfig.description||this.$site.description||"")}},{key:"$lang",get:function(){return this.$page.frontmatter.lang||this.$localeConfig.lang||"en-US"}},{key:"$localePath",get:function(){return this.$localeConfig.path||"/"}},{key:"$themeLocaleConfig",get:function(){return(this.$site.themeConfig.locales||{})[this.$localePath]||{}}},{key:"$page",get:function(){return this.__page?this.__page:function(t,e){for(var n=0;n-1}function Bo(t,e){return e instanceof t||e&&(e.name===t.name||e._name===t._name)}function Vo(t,e){for(var n in e)t[n]=e[n];return t}var Ho={name:"RouterView",functional:!0,props:{name:{type:String,default:"default"}},render:function(t,e){var n=e.props,r=e.children,o=e.parent,i=e.data;i.routerView=!0;for(var a=o.$createElement,s=n.name,u=o.$route,c=o._routerViewCache||(o._routerViewCache={}),l=0,f=!1;o&&o._routerRoot!==o;){var p=o.$vnode&&o.$vnode.data;p&&(p.routerView&&l++,p.keepAlive&&o._inactive&&(f=!0)),o=o.$parent}if(i.routerViewDepth=l,f)return a(c[s],i,r);var h=u.matched[l];if(!h)return c[s]=null,a();var d=c[s]=h.components[s];i.registerRouteInstance=function(t,e){var n=h.instances[s];(e&&n!==t||!e&&n===t)&&(h.instances[s]=e)},(i.hook||(i.hook={})).prepatch=function(t,e){h.instances[s]=e.componentInstance},i.hook.init=function(t){t.data.keepAlive&&t.componentInstance&&t.componentInstance!==h.instances[s]&&(h.instances[s]=t.componentInstance)};var v=i.props=function(t,e){switch(typeof e){case"undefined":return;case"object":return e;case"function":return e(t);case"boolean":return e?t.params:void 0;default:0}}(u,h.props&&h.props[s]);if(v){v=i.props=Vo({},v);var y=i.attrs=i.attrs||{};for(var m in v)d.props&&m in d.props||(y[m]=v[m],delete v[m])}return a(d,i,r)}};var qo=/[!'()*]/g,Wo=function(t){return"%"+t.charCodeAt(0).toString(16)},Ko=/%2C/g,Xo=function(t){return encodeURIComponent(t).replace(qo,Wo).replace(Ko,",")},Yo=decodeURIComponent;function Jo(t){var e={};return(t=t.trim().replace(/^(\?|#|&)/,""))?(t.split("&").forEach(function(t){var n=t.replace(/\+/g," ").split("="),r=Yo(n.shift()),o=n.length>0?Yo(n.join("=")):null;void 0===e[r]?e[r]=o:Array.isArray(e[r])?e[r].push(o):e[r]=[e[r],o]}),e):e}function Qo(t){var e=t?Object.keys(t).map(function(e){var n=t[e];if(void 0===n)return"";if(null===n)return Xo(e);if(Array.isArray(n)){var r=[];return n.forEach(function(t){void 0!==t&&(null===t?r.push(Xo(e)):r.push(Xo(e)+"="+Xo(t)))}),r.join("&")}return Xo(e)+"="+Xo(n)}).filter(function(t){return t.length>0}).join("&"):null;return e?"?"+e:""}var Zo=/\/?$/;function ti(t,e,n,r){var o=r&&r.options.stringifyQuery,i=e.query||{};try{i=ei(i)}catch(t){}var a={name:e.name||t&&t.name,meta:t&&t.meta||{},path:e.path||"/",hash:e.hash||"",query:i,params:e.params||{},fullPath:oi(e,o),matched:t?ri(t):[]};return n&&(a.redirectedFrom=oi(n,o)),Object.freeze(a)}function ei(t){if(Array.isArray(t))return t.map(ei);if(t&&"object"==typeof t){var e={};for(var n in t)e[n]=ei(t[n]);return e}return t}var ni=ti(null,{path:"/"});function ri(t){for(var e=[];t;)e.unshift(t),t=t.parent;return e}function oi(t,e){var n=t.path,r=t.query;void 0===r&&(r={});var o=t.hash;return void 0===o&&(o=""),(n||"/")+(e||Qo)(r)+o}function ii(t,e){return e===ni?t===e:!!e&&(t.path&&e.path?t.path.replace(Zo,"")===e.path.replace(Zo,"")&&t.hash===e.hash&&ai(t.query,e.query):!(!t.name||!e.name)&&(t.name===e.name&&t.hash===e.hash&&ai(t.query,e.query)&&ai(t.params,e.params)))}function ai(t,e){if(void 0===t&&(t={}),void 0===e&&(e={}),!t||!e)return t===e;var n=Object.keys(t),r=Object.keys(e);return n.length===r.length&&n.every(function(n){var r=t[n],o=e[n];return"object"==typeof r&&"object"==typeof o?ai(r,o):String(r)===String(o)})}function si(t,e,n){var r=t.charAt(0);if("/"===r)return t;if("?"===r||"#"===r)return e+t;var o=e.split("/");n&&o[o.length-1]||o.pop();for(var i=t.replace(/^\//,"").split("/"),a=0;a=0&&(e=t.slice(r),t=t.slice(0,r));var o=t.indexOf("?");return o>=0&&(n=t.slice(o+1),t=t.slice(0,o)),{path:t,query:n,hash:e}}(o.path||""),u=e&&e.path||"/",c=s.path?si(s.path,u,n||o.append):u,l=function(t,e,n){void 0===e&&(e={});var r,o=n||Jo;try{r=o(t||"")}catch(t){r={}}for(var i in e)r[i]=e[i];return r}(s.query,o.query,r&&r.options.parseQuery),f=o.hash||s.hash;return f&&"#"!==f.charAt(0)&&(f="#"+f),{_normalized:!0,path:c,query:l,hash:f}}var Ci,$i=[String,Object],Pi=[String,Array],Ti=function(){},ji={name:"RouterLink",props:{to:{type:$i,required:!0},tag:{type:String,default:"a"},exact:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,event:{type:Pi,default:"click"}},render:function(t){var e=this,n=this.$router,r=this.$route,o=n.resolve(this.to,r,this.append),i=o.location,a=o.route,s=o.href,u={},c=n.options.linkActiveClass,l=n.options.linkExactActiveClass,f=null==c?"router-link-active":c,p=null==l?"router-link-exact-active":l,h=null==this.activeClass?f:this.activeClass,d=null==this.exactActiveClass?p:this.exactActiveClass,v=a.redirectedFrom?ti(null,Ei(a.redirectedFrom),null,n):a;u[d]=ii(r,v),u[h]=this.exact?u[d]:function(t,e){return 0===t.path.replace(Zo,"/").indexOf(e.path.replace(Zo,"/"))&&(!e.hash||t.hash===e.hash)&&function(t,e){for(var n in e)if(!(n in t))return!1;return!0}(t.query,e.query)}(r,v);var y=function(t){Ri(t)&&(e.replace?n.replace(i,Ti):n.push(i,Ti))},m={click:Ri};Array.isArray(this.event)?this.event.forEach(function(t){m[t]=y}):m[this.event]=y;var g={class:u},b=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:s,route:a,navigate:y,isActive:u[h],isExactActive:u[d]});if(b){if(1===b.length)return b[0];if(b.length>1||!b.length)return 0===b.length?t():t("span",{},b)}if("a"===this.tag)g.on=m,g.attrs={href:s};else{var w=function t(e){if(e)for(var n,r=0;r-1&&(s.params[p]=n.params[p]);return s.path=Oi(l.path,s.params),u(l,s,a)}if(s.path){s.params={};for(var h=0;h=t.length?n():t[o]?e(t[o],function(){r(o+1)}):r(o+1)};r(0)}function oa(t){return function(e,n,r){var o=!1,i=0,a=null;ia(t,function(t,e,n,s){if("function"==typeof t&&void 0===t.cid){o=!0,i++;var u,c=ua(function(e){var o;((o=e).__esModule||sa&&"Module"===o[Symbol.toStringTag])&&(e=e.default),t.resolved="function"==typeof e?e:Ci.extend(e),n.components[s]=e,--i<=0&&r()}),l=ua(function(t){var e="Failed to resolve async component "+s+": "+t;a||(a=Go(t)?t:new Error(e),r(a))});try{u=t(c,l)}catch(t){l(t)}if(u)if("function"==typeof u.then)u.then(c,l);else{var f=u.component;f&&"function"==typeof f.then&&f.then(c,l)}}}),o||r()}}function ia(t,e){return aa(t.map(function(t){return Object.keys(t.components).map(function(n){return e(t.components[n],t.instances[n],t,n)})}))}function aa(t){return Array.prototype.concat.apply([],t)}var sa="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function ua(t){var e=!1;return function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];if(!e)return e=!0,t.apply(this,n)}}var ca=function(t){function e(e){t.call(this),this.name=this._name="NavigationDuplicated",this.message='Navigating to current location ("'+e.fullPath+'") is not allowed',Object.defineProperty(this,"stack",{value:(new t).stack,writable:!0,configurable:!0})}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(Error);ca._name="NavigationDuplicated";var la=function(t,e){this.router=t,this.base=function(t){if(!t)if(Li){var e=document.querySelector("base");t=(t=e&&e.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else t="/";"/"!==t.charAt(0)&&(t="/"+t);return t.replace(/\/$/,"")}(e),this.current=ni,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[]};function fa(t,e,n,r){var o=ia(t,function(t,r,o,i){var a=function(t,e){"function"!=typeof t&&(t=Ci.extend(t));return t.options[e]}(t,e);if(a)return Array.isArray(a)?a.map(function(t){return n(t,r,o,i)}):n(a,r,o,i)});return aa(r?o.reverse():o)}function pa(t,e){if(e)return function(){return t.apply(e,arguments)}}la.prototype.listen=function(t){this.cb=t},la.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},la.prototype.onError=function(t){this.errorCbs.push(t)},la.prototype.transitionTo=function(t,e,n){var r=this,o=this.router.match(t,this.current);this.confirmTransition(o,function(){r.updateRoute(o),e&&e(o),r.ensureURL(),r.ready||(r.ready=!0,r.readyCbs.forEach(function(t){t(o)}))},function(t){n&&n(t),t&&!r.ready&&(r.ready=!0,r.readyErrorCbs.forEach(function(e){e(t)}))})},la.prototype.confirmTransition=function(t,e,n){var r=this,o=this.current,i=function(t){!Bo(ca,t)&&Go(t)&&(r.errorCbs.length?r.errorCbs.forEach(function(e){e(t)}):console.error(t)),n&&n(t)};if(ii(t,o)&&t.matched.length===o.matched.length)return this.ensureURL(),i(new ca(t));var a=function(t,e){var n,r=Math.max(t.length,e.length);for(n=0;n-1?decodeURI(t.slice(0,r))+t.slice(r):decodeURI(t)}else n>-1&&(t=decodeURI(t.slice(0,n))+t.slice(n));return t}function ga(t){var e=window.location.href,n=e.indexOf("#");return(n>=0?e.slice(0,n):e)+"#"+t}function ba(t){ta?ea(ga(t)):window.location.hash=t}function wa(t){ta?na(ga(t)):window.location.replace(ga(t))}var _a=function(t){function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,n){var r=this;this.transitionTo(t,function(t){r.stack=r.stack.slice(0,r.index+1).concat(t),r.index++,e&&e(t)},n)},e.prototype.replace=function(t,e,n){var r=this;this.transitionTo(t,function(t){r.stack=r.stack.slice(0,r.index).concat(t),e&&e(t)},n)},e.prototype.go=function(t){var e=this,n=this.index+t;if(!(n<0||n>=this.stack.length)){var r=this.stack[n];this.confirmTransition(r,function(){e.index=n,e.updateRoute(r)},function(t){Bo(ca,t)&&(e.index=n)})}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(la),xa=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=Ui(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!ta&&!1!==t.fallback,this.fallback&&(e="hash"),Li||(e="abstract"),this.mode=e,e){case"history":this.history=new ha(this,t.base);break;case"hash":this.history=new va(this,t.base,this.fallback);break;case"abstract":this.history=new _a(this,t.base);break;default:0}},ka={currentRoute:{configurable:!0}};function Sa(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}xa.prototype.match=function(t,e,n){return this.matcher.match(t,e,n)},ka.currentRoute.get=function(){return this.history&&this.history.current},xa.prototype.init=function(t){var e=this;if(this.apps.push(t),t.$once("hook:destroyed",function(){var n=e.apps.indexOf(t);n>-1&&e.apps.splice(n,1),e.app===t&&(e.app=e.apps[0]||null)}),!this.app){this.app=t;var n=this.history;if(n instanceof ha)n.transitionTo(n.getCurrentLocation());else if(n instanceof va){var r=function(){n.setupListeners()};n.transitionTo(n.getCurrentLocation(),r,r)}n.listen(function(t){e.apps.forEach(function(e){e._route=t})})}},xa.prototype.beforeEach=function(t){return Sa(this.beforeHooks,t)},xa.prototype.beforeResolve=function(t){return Sa(this.resolveHooks,t)},xa.prototype.afterEach=function(t){return Sa(this.afterHooks,t)},xa.prototype.onReady=function(t,e){this.history.onReady(t,e)},xa.prototype.onError=function(t){this.history.onError(t)},xa.prototype.push=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise(function(e,n){r.history.push(t,e,n)});this.history.push(t,e,n)},xa.prototype.replace=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise(function(e,n){r.history.replace(t,e,n)});this.history.replace(t,e,n)},xa.prototype.go=function(t){this.history.go(t)},xa.prototype.back=function(){this.go(-1)},xa.prototype.forward=function(){this.go(1)},xa.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map(function(t){return Object.keys(t.components).map(function(e){return t.components[e]})})):[]},xa.prototype.resolve=function(t,e,n){var r=Ei(t,e=e||this.history.current,n,this),o=this.match(r,e),i=o.redirectedFrom||o.fullPath;return{location:r,route:o,href:function(t,e,n){var r="hash"===n?"#"+e:e;return t?ui(t+"/"+r):r}(this.history.base,i,this.mode),normalizedTo:r,resolved:o}},xa.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==ni&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(xa.prototype,ka),xa.install=function t(e){if(!t.installed||Ci!==e){t.installed=!0,Ci=e;var n=function(t){return void 0!==t},r=function(t,e){var r=t.$options._parentVnode;n(r)&&n(r=r.data)&&n(r=r.registerRouteInstance)&&r(t,e)};e.mixin({beforeCreate:function(){n(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),e.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,r(this,this)},destroyed:function(){r(this)}}),Object.defineProperty(e.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(e.prototype,"$route",{get:function(){return this._routerRoot._route}}),e.component("RouterView",Ho),e.component("RouterLink",ji);var o=e.config.optionMergeStrategies;o.beforeRouteEnter=o.beforeRouteLeave=o.beforeRouteUpdate=o.created}},xa.version="3.1.3",Li&&window.Vue&&window.Vue.use(xa);var Aa=xa;n(66),n(120),n(122),n(123),n(124),n(61),n(125),n(69);n(106),n(126),n(29),n(108),n(41);function Oa(t){return(Oa="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var Ea=n(38),Ca={NotFound:function(){return n.e(4).then(n.bind(null,248))},Layout:function(){return Promise.all([n.e(0),n.e(2)]).then(n.bind(null,247))}},$a={"v-f88195a6":function(){return n.e(5).then(n.bind(null,249))},"v-0f125dbb":function(){return n.e(6).then(n.bind(null,250))},"v-5127c24a":function(){return n.e(7).then(n.bind(null,251))},"v-79c557ae":function(){return n.e(8).then(n.bind(null,252))},"v-bc26f6ca":function(){return n.e(9).then(n.bind(null,253))},"v-15ae477b":function(){return n.e(10).then(n.bind(null,254))},"v-e2943322":function(){return n.e(11).then(n.bind(null,255))},"v-9b504b3e":function(){return n.e(12).then(n.bind(null,256))},"v-3896b323":function(){return n.e(13).then(n.bind(null,257))},"v-ae731ab6":function(){return n.e(14).then(n.bind(null,258))},"v-545731d5":function(){return n.e(15).then(n.bind(null,259))},"v-5cda54a1":function(){return n.e(16).then(n.bind(null,260))},"v-24570241":function(){return n.e(17).then(n.bind(null,261))},"v-7499233e":function(){return n.e(18).then(n.bind(null,262))},"v-26737916":function(){return n.e(19).then(n.bind(null,263))},"v-86daa2ba":function(){return n.e(21).then(n.bind(null,264))},"v-700fa4e1":function(){return n.e(22).then(n.bind(null,265))},"v-fe729232":function(){return n.e(23).then(n.bind(null,266))},"v-2f539db2":function(){return n.e(24).then(n.bind(null,267))},"v-1edba7fe":function(){return n.e(25).then(n.bind(null,268))},"v-1e493801":function(){return n.e(20).then(n.bind(null,269))}};function Pa(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}var Ta=/-(\w)/g,ja=Pa(function(t){return t.replace(Ta,function(t,e){return e?e.toUpperCase():""})}),Ra=/\B([A-Z])/g,La=Pa(function(t){return t.replace(Ra,"-$1").toLowerCase()}),Ia=Pa(function(t){return t.charAt(0).toUpperCase()+t.slice(1)});function Ma(t,e){if(e)return t(e)?t(e):e.includes("-")?t(Ia(ja(e))):t(Ia(e))||t(La(e))}var Ua=Object.assign({},Ca,$a),Na=function(t){return Ua[t]},Da=function(t){return $a[t]},Fa=function(t){return Ca[t]},za=function(t){return zo.component(t)};function Ga(t){return Ma(Da,t)}function Ba(t){return Ma(Fa,t)}function Va(t){return Ma(Na,t)}function Ha(t){return Ma(za,t)}function qa(){for(var t=arguments.length,e=new Array(t),n=0;n=s.parentElement.offsetTop+10&&(!u||r0}var ws={props:{pageKey:String,slotKey:{type:String,default:"default"}},render:function(t){var e=this.pageKey||this.$parent.$page.key;return Wa("pageKey",e),zo.component(e)||zo.component(e,Ga(e)),zo.component(e)?t(e):t("")}},_s={functional:!0,props:{slotKey:String,required:!0},render:function(t,e){var n=e.props,r=e.slots;return t("div",{class:["content__".concat(n.slotKey)]},r()[n.slotKey])}},xs=(n(139),Object(ns.a)({},function(t,e){var n=e._c;return n("svg",{staticClass:"icon outbound",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"}},[n("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),e._v(" "),n("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})])},[],!0,null,null,null).exports);function ks(){return(ks=o(regeneratorRuntime.mark(function t(e){var n,r,o,i;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return n="undefined"!=typeof window&&window.__VUEPRESS_ROUTER_BASE__?window.__VUEPRESS_ROUTER_BASE__:is.routerBase||is.base,gs(r=new Aa({base:n,mode:"history",fallback:!1,routes:os,scrollBehavior:function(t,e,n){return n||(t.hash?!zo.$vuepress.$get("disableScrollBehavior")&&{selector:t.hash}:{x:0,y:0})}})),o={},t.prev=4,t.next=7,Promise.all(as.filter(function(t){return"function"==typeof t}).map(function(t){return t({Vue:zo,options:o,router:r,siteData:is,isServer:e})}));case 7:t.next=12;break;case 9:t.prev=9,t.t0=t.catch(4),console.error(t.t0);case 12:return i=new zo(Object.assign(o,{router:r,render:function(t){return t("div",{attrs:{id:"app"}},[t("RouterView",{ref:"layout"}),t("div",{class:"global-ui"},ss.map(function(e){return t(e)}))])}})),t.abrupt("return",{app:i,router:r});case 14:case"end":return t.stop()}},t,null,[[4,9]])}))).apply(this,arguments)}zo.config.productionTip=!1,zo.use(Aa),zo.use(ms),zo.mixin(function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:zo;!function(t){t.locales&&Object.keys(t.locales).forEach(function(e){t.locales[e].path=e});Object.freeze(t)}(e),n.$vuepress.$set("siteData",e);var r=new(t(n.$vuepress.$get("siteData"))),o=Object.getOwnPropertyDescriptors(Object.getPrototypeOf(r)),i={};return Object.keys(o).reduce(function(t,e){return e.startsWith("$")&&(t[e]=o[e].get),t},i),{computed:i}}(function(t){return function(){function e(){us(this,e)}return ls(e,[{key:"setPage",value:function(t){this.__page=t}},{key:"$site",get:function(){return t}},{key:"$themeConfig",get:function(){return this.$site.themeConfig}},{key:"$frontmatter",get:function(){return this.$page.frontmatter}},{key:"$localeConfig",get:function(){var t,e,n=this.$site.locales,r=void 0===n?{}:n;for(var o in r)"/"===o?e=r[o]:0===this.$page.path.indexOf(o)&&(t=r[o]);return t||e||{}}},{key:"$siteTitle",get:function(){return this.$localeConfig.title||this.$site.title||""}},{key:"$title",get:function(){var t=this.$page,e=this.$page.frontmatter.metaTitle;if("string"==typeof e)return e;var n=this.$siteTitle,r=t.frontmatter.home?null:t.frontmatter.title||t.title;return n?r?r+" | "+n:n:r||"VuePress"}},{key:"$description",get:function(){var t=function(t){if(t){var e=t.filter(function(t){return"description"===t.name})[0];if(e)return e.content}}(this.$page.frontmatter.meta);return t||(this.$page.frontmatter.description||this.$localeConfig.description||this.$site.description||"")}},{key:"$lang",get:function(){return this.$page.frontmatter.lang||this.$localeConfig.lang||"en-US"}},{key:"$localePath",get:function(){return this.$localeConfig.path||"/"}},{key:"$themeLocaleConfig",get:function(){return(this.$site.themeConfig.locales||{})[this.$localePath]||{}}},{key:"$page",get:function(){return this.__page?this.__page:function(t,e){for(var n=0;n - + @@ -136,7 +136,7 @@ In this procedure, no HTTP Server is needed in the background and a single HTTP api.AccessToken = newToken.AccessToken api.TokenType = newToken.TokenType } -
- +
+ diff --git a/auth/client_credentials.html b/auth/client_credentials.html index 04df16ff..5e9bfbfa 100644 --- a/auth/client_credentials.html +++ b/auth/client_credentials.html @@ -8,7 +8,7 @@ - + @@ -109,7 +109,7 @@ If you want to use it securely, you would need to do it all server-side. TokenType = token.TokenType, AccessToken = token.AccessToken }; -
- +
+ diff --git a/auth/getting_started.html b/auth/getting_started.html index 2a751c88..d5f6b5e7 100644 --- a/auth/getting_started.html +++ b/auth/getting_started.html @@ -8,7 +8,7 @@ - + @@ -102,7 +102,7 @@ 🚀 GitHub

Getting Started

Auth-Methods

Before you can use the Web API's full functionality, you need the user to authenticate your Application. If you want to know more, you can read to the whole auth-process here.

Before you start, install SpotifyAPI.Web.Auth and create an application at Spotify: Your Applications

After you have created your Application, you will have following important values:

Name Description
Client_Id This is your client_id, you don't have to hide it
Client_Secret Never use this in one of your client-side apps! Keep it secret!
Redirect URIs Some of auth flows require that you set the correct redirect URI

Now you can start with the user-authentication. Spotify provides 3 ways (4 if you consider different implementations):

Overview: -Overview

- +Overview

+ diff --git a/auth/implicit_grant.html b/auth/implicit_grant.html index bc901ba8..81d1e8ec 100644 --- a/auth/implicit_grant.html +++ b/auth/implicit_grant.html @@ -8,7 +8,7 @@ - + @@ -122,7 +122,7 @@ You won't be able to refresh the token. If you want to use the internal Http ser auth.Start(); // Starts an internal HTTP Server auth.OpenBrowser(); } -
- +
+ diff --git a/auth/token_swap.html b/auth/token_swap.html index 8fd0ddb8..285436a9 100644 --- a/auth/token_swap.html +++ b/auth/token_swap.html @@ -8,7 +8,7 @@ - + @@ -152,7 +152,7 @@ auth.AuthReceived .OnAccessTokenExpired += async (sender, e) => spotify.AccessToken = (await auth.RefreshAuthAsync(lastToken.RefreshToken)).AccessToken; auth.Start(); auth.OpenBrowser(); -

Token Swap Endpoint

To keep your client secret completely secure and your client ID and redirect URI as secure as possible, use of a web server (such as a php website) is required.

To use this method, an external HTTP Server (that you may need to create) needs to be able to supply the following HTTP Endpoints to your application:

/swap - Swaps out an authorization_code with an access_token and refresh_token - The following parameters are required in the JSON POST Body:

  • grant_type (set to "authorization_code")
  • code (the authorization_code)
  • redirect_uri
    • Important The page that the redirect URI links to must return the authorization code json to your serverUri (default is 'http://localhost:4002') but to the folder 'auth', like this: 'http://localhost:4002/auth'.

/refresh - Refreshes an access_token - The following parameters are required in the JSON POST Body:

  • grant_type (set to "refresh_token")
  • refresh_token

The following open-source token swap endpoint code can be used for your website:

Remarks

It should be noted that GitHub Pages does not support hosting php scripts. Hosting php scripts through it will cause the php to render as plain HTML, potentially compromising your client secret while doing absolutely nothing.

Be sure you have whitelisted your redirect uri in the Spotify Developer Dashboard otherwise the authorization will always fail.

If you did not use the WebAPIFactory or you provided a serverUri different from its default, you must make sure your redirect uri's script at your endpoint will properly redirect to your serverUri (such as changing the areas which refer to localhost:4002 if you had changed serverUri from its default), otherwise it will never reach your new serverUri.

- +

Token Swap Endpoint

To keep your client secret completely secure and your client ID and redirect URI as secure as possible, use of a web server (such as a php website) is required.

To use this method, an external HTTP Server (that you may need to create) needs to be able to supply the following HTTP Endpoints to your application:

/swap - Swaps out an authorization_code with an access_token and refresh_token - The following parameters are required in the JSON POST Body:

  • grant_type (set to "authorization_code")
  • code (the authorization_code)
  • redirect_uri
    • Important The page that the redirect URI links to must return the authorization code json to your serverUri (default is 'http://localhost:4002') but to the folder 'auth', like this: 'http://localhost:4002/auth'.

/refresh - Refreshes an access_token - The following parameters are required in the JSON POST Body:

  • grant_type (set to "refresh_token")
  • refresh_token

The following open-source token swap endpoint code can be used for your website:

Remarks

It should be noted that GitHub Pages does not support hosting php scripts. Hosting php scripts through it will cause the php to render as plain HTML, potentially compromising your client secret while doing absolutely nothing.

Be sure you have whitelisted your redirect uri in the Spotify Developer Dashboard otherwise the authorization will always fail.

If you did not use the WebAPIFactory or you provided a serverUri different from its default, you must make sure your redirect uri's script at your endpoint will properly redirect to your serverUri (such as changing the areas which refer to localhost:4002 if you had changed serverUri from its default), otherwise it will never reach your new serverUri.

+ diff --git a/index.html b/index.html index 693862f2..128a9473 100644 --- a/index.html +++ b/index.html @@ -8,7 +8,7 @@ - + @@ -103,7 +103,7 @@

SpotifyAPI-NET Docs

About

This project, written in C#/.NET, provides 2 libraries for an easier usage of the Spotify Web API

Spotify's Web API (link)

Based on simple REST principles, our Web API endpoints return metadata in JSON format about artists, albums, and tracks directly from the Spotify catalogue. The API also provides access to user-related data such as playlists and music saved in a “Your Music” library, subject to user’s authorization.

SpotifyAPI.Web

A wrapper around Spotify's Web API, providing sync and async methods to query all possible endpoints. Results are returned as typed class instances, allowing property-based access.

SpotifyAPI.Web.Auth

A library providing C# implementations of the 3 supported Authentication modes, including ImplicitGrantAuth, AuthorizationCodeAuth and CredentialsAuth


Installing

  • Via NuGet Package:
Install-Package SpotifyAPI.Web
 Install-Package SpotifyAPI.Web.Auth
-
  • Download the latest binaries on the GitHub Release Page and add it to your Project
  • Clone the Repo and build the project yourself.

Getting Started

Projects

lidarr by @lidarr

Looks and smells like Sonarr but made for music.

botframework-solutions by @microsoft

home for a set of templates and solutions to help build advanced conversational experiences using Azure Bot Service and Bot Framework

Spytify by @jwallet

Records Spotify to mp3 without ads while it plays and includes media tags to the recorded files

audio-band by @dsafa

Display and control songs from the Windows taskbar

rocksmith-custom-song-toolkit by @catara

MASS Manipulation of Rocksmith DLC Library

Spofy by @eltoncezar

A Spotify mini player and notifier for Windows

Toastify by @aleab

Toastify adds global hotkeys and toast notifications to Spotify

Forked from nachmore/toastify

Spotify Oculus by @CaptainMorgs

Unity project for interacting with Spotify in virtual reality for the Oculus Rift.

Songify by @Inzaniity

A simple tool that gets the current track from Spotify, YouTube and Nightbot.

Elite G19s Companion app by @MagicMau

Main features include: system and station overview, play radio and podcast with audio visualizations, simulated Space Traffic Control, GPS functionality (including planetary races), an orrery view, a screenshot converter, and a news ticker.

ARDUINO-Spotify-Remote-Control by @NADER11NDEU

Well, with this project we will be able to control active spotify devices with Arduino. How we gonna do that ? We will use serial communication.

- +
  • Download the latest binaries on the GitHub Release Page and add it to your Project
  • Clone the Repo and build the project yourself.

Getting Started

Projects

lidarr by @lidarr

Looks and smells like Sonarr but made for music.

botframework-solutions by @microsoft

home for a set of templates and solutions to help build advanced conversational experiences using Azure Bot Service and Bot Framework

Spytify by @jwallet

Records Spotify to mp3 without ads while it plays and includes media tags to the recorded files

audio-band by @dsafa

Display and control songs from the Windows taskbar

rocksmith-custom-song-toolkit by @catara

MASS Manipulation of Rocksmith DLC Library

Spofy by @eltoncezar

A Spotify mini player and notifier for Windows

Toastify by @aleab

Toastify adds global hotkeys and toast notifications to Spotify

Forked from nachmore/toastify

Spotify Oculus by @CaptainMorgs

Unity project for interacting with Spotify in virtual reality for the Oculus Rift.

Songify by @Inzaniity

A simple tool that gets the current track from Spotify, YouTube and Nightbot.

Elite G19s Companion app by @MagicMau

Main features include: system and station overview, play radio and podcast with audio visualizations, simulated Space Traffic Control, GPS functionality (including planetary races), an orrery view, a screenshot converter, and a news ticker.

ARDUINO-Spotify-Remote-Control by @NADER11NDEU

Well, with this project we will be able to control active spotify devices with Arduino. How we gonna do that ? We will use serial communication.

+ diff --git a/web/albums.html b/web/albums.html index 424f7699..1ddfcbb4 100644 --- a/web/albums.html +++ b/web/albums.html @@ -8,7 +8,7 @@ - + @@ -107,7 +107,7 @@ Console.Writ Console.WriteLine(album.Name + "| Popularity: " + album.Popularity); //Display name and Popularity

GetSeveralAlbums

Get Spotify catalog information for multiple albums identified by their Spotify IDs.

Parameters

Name Description Example
ids A list of the Spotify IDs for the albums. Maximum: 20 IDs. new List<String>() { "5O7V8l4SeXTymVp3IesT9C" }
[market] An ISO 3166-1 alpha-2 country code. Provide this parameter if you want to apply Track Relinking. "DE"

Returns a SeveralAlbums which Property "Albums" contains a list of FullAlbum

Usage

SeveralAlbums albums = _spotify.GetSeveralAlbums(new List<String>() { "5O7V8l4SeXTymVp3IesT9C" });
 Console.WriteLine(albums.Albums[0].Name);
-

- +
+ diff --git a/web/artists.html b/web/artists.html index 300d416f..669814e2 100644 --- a/web/artists.html +++ b/web/artists.html @@ -8,7 +8,7 @@ - + @@ -110,7 +110,7 @@ Console.Writ albums.Items.ForEach(album => Console.WriteLine(album.Name));

GetSeveralArtists

Get Spotify catalog information for several artists based on their Spotify IDs.

Parameters

Name Description Example
ids A list of the Spotify IDs for the artists. Maximum: 50 IDs. new List<String>() { "1KpCi9BOfviCVhmpI4G2sY" }

Returns a SeveralArtists object which contains the property List<FullArtist> Artists (FullArtist)

Usage

SeveralArtists artists = _spotify.GetSeveralArtists(new List<String>() {"1KpCi9BOfviCVhmpI4G2sY"});
 artists.Artists.ForEach(artist => Console.WriteLine(artist.Name));
-

- +
+ diff --git a/web/browse.html b/web/browse.html index f25f8d07..699c5226 100644 --- a/web/browse.html +++ b/web/browse.html @@ -8,7 +8,7 @@ - + @@ -111,7 +111,7 @@ categoryList.Categories.WriteLine(cat.Name);

GetCategoryPlaylists

Get a list of Spotify playlists tagged with a particular category.

Parameters

Name Description Example
categoryId The Spotify category ID for the category. "party"
[country] A country: an ISO 3166-1 alpha-2 country code. "DE"
[limit] The maximum number of items to return. Default: 20. Minimum: 1. Maximum: 50. 20
[offset] The index of the first item to return. Default: 0 0

Returns a CategoryPlaylist object, which has the property Paging<SimplePlaylist> Playlists

Usage

CategoryPlaylist playlists = _spotify.GetCategoryPlaylists("party");
 playlists.Playlists.Items.ForEach(playlist => Console.WriteLine(playlist.Name));
-

- +
+ diff --git a/web/examples.html b/web/examples.html index 408cadd3..11ec3050 100644 --- a/web/examples.html +++ b/web/examples.html @@ -8,7 +8,7 @@ - + @@ -100,7 +100,7 @@ - ClientCredentialsAuth 🚀 GitHub -

Examples

This page is currently empty. Do you have useful examples? Please open a PR

- +

Examples

This page is currently empty. Do you have useful examples? Please open a PR

+ diff --git a/web/follow.html b/web/follow.html index 298f2507..c9b9be1f 100644 --- a/web/follow.html +++ b/web/follow.html @@ -8,7 +8,7 @@ - + @@ -118,7 +118,7 @@ Console.Writ

IsFollowingPlaylist

Check to see if one or more Spotify users are following a specified playlist.

Parameters

Name Description Example
ownerId The Spotify user ID of the person who owns the playlist. "maxloermans"
playlistId The Spotify ID of the playlist. "3SIp2VAsKI03mReF0dFBmI"
ids or id A list of the artist or the user Spotify IDs or just a Spotify ID new List<String> { "1KpCi9BOfviCVhmpI4G2sY" } or "1KpCi9BOfviCVhmpI4G2sY"

Returns a ListResponse<Boolean> which contains the property List<Boolean> List

Usage

//Am I following the playlist?
 ListResponse<Boolean> response = _spotify.IsFollowing("maxloermans", "3SIp2VAsKI03mReF0dFBmI", "1122095781");
 Console.WriteLine(response.List[0] ? "Yis!" : "No :(");
-

- +
+ diff --git a/web/getting_started.html b/web/getting_started.html index b5543adc..521d3334 100644 --- a/web/getting_started.html +++ b/web/getting_started.html @@ -8,7 +8,7 @@ - + @@ -135,7 +135,7 @@ _spotify = newvar asyncProfile = await _spotify.GetPrivateProfileAsync(); var syncProfile = _spotify.GetPrivateProfile(); } -

Note that the synchronous call will block the current Thread!


API-Reference

Albums

Artists

Browse

Follow

Library

Personalization

Player

Playlists

Profiles

Tracks

Util

- +

Note that the synchronous call will block the current Thread!


API-Reference

Albums

Artists

Browse

Follow

Library

Personalization

Player

Playlists

Profiles

Tracks

Util

+ diff --git a/web/library.html b/web/library.html index 911e9798..91d83038 100644 --- a/web/library.html +++ b/web/library.html @@ -8,7 +8,7 @@ - + @@ -128,7 +128,7 @@ savedAlbums.Items CheckSavedAlbums

Check if one or more albums is already saved in the current Spotify user’s “Your Music” library.

Parameters

Name Description Example
ids A list of the Spotify IDs. new List<String> { "1cq06d0kTUnFmJHixz1RaF" }

Returns a ListResponse<bool> which contains a property, List<bool> List

Usage

ListResponse<bool> albumsSaved = _spotify.CheckSavedAlbums(new List<String> { "1cq06d0kTUnFmJHixz1RaF" });
 if(albumsSaved.List[0])
     Console.WriteLine("The album is in your library!");
-

- +
+ diff --git a/web/personalization.html b/web/personalization.html index 78a87795..7a190ddb 100644 --- a/web/personalization.html +++ b/web/personalization.html @@ -8,7 +8,7 @@ - + @@ -107,7 +107,7 @@ Console.WriteLine(tracks.Total.ToString()) //Display total album track count artists.Items.ForEach(item => Console.WriteLine(item.Name)); //Display all fetched Artist-Names (max 20)

GetUsersRecentlyPlayedTracks

Get tracks from the current user’s recent play history.

Parameters

Name Description Example
[limit] The maximum number of items to return. Default: 20. Minimum: 1. Maximum: 50. 20
[after] Returns all items after (but not including) this cursor position. DateTime.Now.AddDays(-1)
[before] Returns all items before (but not including) this cursor position. DateTime.Now.AddDays(-1)

Returns a PlayHistory wrapped inside a CursorPaging-object

Usage

CursorPaging<PlayHistory> histories = _spotify.GetUsersRecentlyPlayedTracks();
 histories.Items.ForEach(item => Console.WriteLine(item.Track.Name));
-

- +
+ diff --git a/web/player.html b/web/player.html index 440ac06d..c7d42434 100644 --- a/web/player.html +++ b/web/player.html @@ -8,7 +8,7 @@ - + @@ -120,7 +120,7 @@ Returning to the start of the current track should be performed using the https:

SetVolume

Set the volume for the user’s current playback device.

Parameters

Name Description Example
volumePercent Integer. The volume to set. Must be a value from 0 to 100 inclusive. 50
[deviceId] The id of the device this command is targeting. If not supplied, the user's currently active device is the target. "XXXX-XXXX-XXXX-XXXX"

Usage

ErrorResponse error = _spotify.SetVolume(50);
 

SetShuffle

Toggle shuffle on or off for user’s playback.

Parameters

Name Description Example
shuffle True or False false
[deviceId] The id of the device this command is targeting. If not supplied, the user's currently active device is the target. "XXXX-XXXX-XXXX-XXXX"

Usage

ErrorResponse error = _spotify.SetShuffle(false);
 

AddToQueue

Add an Item to the User's Playback Queue. BETA.

Parameters

Name Description Example
uri The uri of the item to add to the queue. Must be a track or an episode uri. spotify:track:7zrCVKp6x0AtolOsn2iMif
[deviceId] The id of the device this command is targeting. If not supplied, the user's currently active device is the target. "XXXX-XXXX-XXXX-XXXX"

Usage

ErrorResponse error = _spotify.AddToQueue("spotify:track:7zrCVKp6x0AtolOsn2iMif");
-
- +
+ diff --git a/web/playlists.html b/web/playlists.html index 7b914a14..a56d9471 100644 --- a/web/playlists.html +++ b/web/playlists.html @@ -8,7 +8,7 @@ - + @@ -140,7 +140,7 @@ playlist.Items ReorderPlaylist

Reorder a track or a group of tracks in a playlist. More Info: Reorder-Playlist

Parameters

Name Description Example
userId The user's Spotify user ID. "1122095781"
playlistId The Spotify ID for the playlist. "1TtEejT1y4D1WmcOnLfha2"
rangeStart The position of the first track to be reordered. 2
insertBefore The position where the tracks should be inserted. 0
[rangeLength] The amount of tracks to be reordered. Defaults to 1 if not set. 2
[snapshotId] The playlist's snapshot ID against which you want to make the changes. ``

Returns a Snapshot-Object which contains the property String SnapshotId

Usage

Snapshot snapshot = _spotify.ReorderPlaylist("1122095781", "1TtEejT1y4D1WmcOnLfha2", 2, 0, 2);
 Console.WriteLine("New SnapshotId: " + snapshot.SnapshotId);
-

- +
+ diff --git a/web/profiles.html b/web/profiles.html index 8ca8a22a..3b55b102 100644 --- a/web/profiles.html +++ b/web/profiles.html @@ -8,7 +8,7 @@ - + @@ -102,7 +102,7 @@ 🚀 GitHub

Profiles

GetPrivateProfile

Get detailed profile information about the current user (including the current user’s username).

Parameters

Name Description Example

Returns a PrivateProfile

Usage

PrivateUser user = _spotify.GetPrivateProfile();
 Console.WriteLine(user.DisplayName);
-

GetPublicProfile

Get public profile information about a Spotify user.

Parameters

Name Description Example
userId The user's Spotify user ID. EXAMPLE

Returns a PublicProfile

Usage


- +

GetPublicProfile

Get public profile information about a Spotify user.

Parameters

Name Description Example
userId The user's Spotify user ID. EXAMPLE

Returns a PublicProfile

Usage


+ diff --git a/web/proxy.html b/web/proxy.html index 8330f6a1..69504cff 100644 --- a/web/proxy.html +++ b/web/proxy.html @@ -8,7 +8,7 @@ - + @@ -108,7 +108,7 @@ }; SpotifyWebAPI api = new SpotifyWebAPI(proxyConfig); -
- +
+ diff --git a/web/search.html b/web/search.html index 8e961a51..7cd07c52 100644 --- a/web/search.html +++ b/web/search.html @@ -8,7 +8,7 @@ - + @@ -102,7 +102,7 @@ 🚀 GitHub

Search

SearchItems

Get Spotify catalog information about artists, albums, tracks or playlists that match a keyword string.

WARNING

You may want to use SearchItemsEscaped if you're processing user-input without validation

Parameters

Name Description Example
q The search query's keywords (and optional field filters and operators), for example q=roadhouse+blues. "roadhouse+blues"
type A list of item types to search across. SearchType.Album
[limit] The maximum number of items to return. Default: 20. Minimum: 1. Maximum: 50. 20
[offset] The index of the first result to return. Default: 0 0
[market] An ISO 3166-1 alpha-2 country code or the string from_token. "de"

Returns a SearchItem which contains the properties Paging<FullArtist> Artists,Paging<FullTrack> Tracks, Paging<SimpleAlbum> Albums, Paging<SimplePlaylist> Playlists. They are filled based on your search-type.

Usage

SearchItem item = _spotify.SearchItems("roadhouse+blues", SearchType.Album | SearchType.Playlist);
 Console.WriteLine(item.Albums.Total); //How many results are there in total? NOTE: item.Tracks = item.Artists = null
-

SearchItemsEscaped

Get Spotify catalog information about artists, albums, tracks or playlists that match a keyword string.

Works like SearchItems, but URL escapes all characters

- +

SearchItemsEscaped

Get Spotify catalog information about artists, albums, tracks or playlists that match a keyword string.

Works like SearchItems, but URL escapes all characters

+ diff --git a/web/tracks.html b/web/tracks.html index 5004765a..5b5cced5 100644 --- a/web/tracks.html +++ b/web/tracks.html @@ -8,7 +8,7 @@ - + @@ -106,7 +106,7 @@ severalTracks.Tracks.WriteLine(track.Name);

GetAudioAnalysis

Get a detailed audio analysis for a single track identified by its unique Spotify ID.

Parameters

Name Description Example
id The Spotify ID for the track. "6Y1CLPwYe7zvI8PJiWVz6T"

Returns a AudioAnalysis. This object is currently lacking Spotify documentation but archived EchoNest documentation is relevant.

Usage

AudioAnalysis analysis = _spotify.GetAudioAnalysis("6Y1CLPwYe7zvI8PJiWVz6T");
 Console.WriteLine(analysis.Meta.DetailedStatus);
-
- +
+ diff --git a/web/utils.html b/web/utils.html index 5698a274..0c0b6ea0 100644 --- a/web/utils.html +++ b/web/utils.html @@ -8,7 +8,7 @@ - + @@ -109,7 +109,7 @@ Both are an easy way to receive the next/previous page of a Paging-Object.

< break; playlistTracks = _spotify.GetNextPage(playlistTracks); } -
- +
+