From c6c983820e7164f1543fb68a45022700429290d1 Mon Sep 17 00:00:00 2001 From: Martin/Geno Date: Fri, 22 Mar 2019 16:35:16 +0100 Subject: [PATCH] init meetandeat --- .ci/check-gofmt | 8 + .ci/check-testfiles | 25 + .gitlab-ci.yml | 53 + README.md | 47 + cmd/root.go | 38 + cmd/root_test.go | 1 + cmd/serve.go | 87 + config_example.conf | 22 + controller/api/date.go | 81 + controller/api/docs_test.go | 3 + controller/api/job.go | 33 + controller/api/main.go | 19 + controller/api/person.go | 33 + controller/docs_test.go | 3 + controller/examples/docs_test.go | 3 + controller/examples/incr.go | 23 + controller/examples/main.go | 11 + controller/examples/ping.go | 11 + controller/main.go | 21 + controller/status.go | 18 + main.go | 7 + models/date.go | 18 + models/datemeets.go | 20 + models/doc_test.go | 1 + models/job.go | 15 + models/person.go | 15 + runtime/docs_test.go | 3 + runtime/hash.go | 61 + runtime/hash_test.go | 23 + runtime/limit.go | 17 + webroot/assets/get_assets.sh | 4 + webroot/assets/vanilla-framework.css | 3 + webroot/assets/vue-route.js | 2626 ++++++++++++++++++++++++++ webroot/assets/vue.js | 6 + webroot/assets/vuex.js | 6 + webroot/css/main.css | 4 + webroot/index.html | 52 + webroot/js/main.js | 4 + webroot/js/utils.js | 28 + webroot/js/view.js | 10 + webroot/js/view/date.js | 71 + webroot/js/view/dates.js | 88 + webroot/js/view/jobs.js | 79 + webroot/js/view/persons.js | 79 + 44 files changed, 3780 insertions(+) create mode 100755 .ci/check-gofmt create mode 100755 .ci/check-testfiles create mode 100644 .gitlab-ci.yml create mode 100644 README.md create mode 100644 cmd/root.go create mode 100644 cmd/root_test.go create mode 100644 cmd/serve.go create mode 100644 config_example.conf create mode 100644 controller/api/date.go create mode 100644 controller/api/docs_test.go create mode 100644 controller/api/job.go create mode 100644 controller/api/main.go create mode 100644 controller/api/person.go create mode 100644 controller/docs_test.go create mode 100644 controller/examples/docs_test.go create mode 100644 controller/examples/incr.go create mode 100644 controller/examples/main.go create mode 100644 controller/examples/ping.go create mode 100644 controller/main.go create mode 100644 controller/status.go create mode 100644 main.go create mode 100644 models/date.go create mode 100644 models/datemeets.go create mode 100644 models/doc_test.go create mode 100644 models/job.go create mode 100644 models/person.go create mode 100644 runtime/docs_test.go create mode 100644 runtime/hash.go create mode 100644 runtime/hash_test.go create mode 100644 runtime/limit.go create mode 100755 webroot/assets/get_assets.sh create mode 100644 webroot/assets/vanilla-framework.css create mode 100644 webroot/assets/vue-route.js create mode 100644 webroot/assets/vue.js create mode 100644 webroot/assets/vuex.js create mode 100644 webroot/css/main.css create mode 100644 webroot/index.html create mode 100644 webroot/js/main.js create mode 100644 webroot/js/utils.js create mode 100644 webroot/js/view.js create mode 100644 webroot/js/view/date.js create mode 100644 webroot/js/view/dates.js create mode 100644 webroot/js/view/jobs.js create mode 100644 webroot/js/view/persons.js diff --git a/.ci/check-gofmt b/.ci/check-gofmt new file mode 100755 index 0000000..4a1c0b2 --- /dev/null +++ b/.ci/check-gofmt @@ -0,0 +1,8 @@ +#!/bin/bash + +result="$(gofmt -s -l . | grep -v '^vendor/' )" +if [ -n "$result" ]; then + echo "Go code is not formatted, run 'gofmt -s -w .'" >&2 + echo "$result" + exit 1 +fi diff --git a/.ci/check-testfiles b/.ci/check-testfiles new file mode 100755 index 0000000..132ff73 --- /dev/null +++ b/.ci/check-testfiles @@ -0,0 +1,25 @@ +#!/usr/bin/env python +# checks if every desired package has test files + +import os +import re +import sys + +source_re = re.compile(".*\.go") +test_re = re.compile(".*_test\.go") +missing = False + +for root, dirs, files in os.walk("."): + # ignore some paths + if root == "." or root.startswith("./vendor") or root.startswith("./."): + continue + + # source files but not test files? + if len(filter(source_re.match, files)) > 0 and len(filter(test_re.match, files)) == 0: + print("no test files for {}".format(root)) + missing = True + +if missing: + sys.exit(1) +else: + print("every package has test files") diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..f329c09 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,53 @@ +image: golang:latest +stages: + - build + - test + - deploy + +before_script: + - mkdir -p "/go/src/dev.sum7.eu/$CI_PROJECT_NAMESPACE/" + - cp -R "/builds/$CI_PROJECT_PATH" "/go/src/dev.sum7.eu/$CI_PROJECT_NAMESPACE/" + - cd "/go/src/dev.sum7.eu/$CI_PROJECT_PATH" + - go get -d -t ./... + +build-my-project: + stage: build + script: + - go install "dev.sum7.eu/$CI_PROJECT_PATH" + - mv "/go/bin/$CI_PROJECT_NAME" "/builds/$CI_PROJECT_PATH" + artifacts: + paths: + - config_example.conf + - "$CI_PROJECT_NAME" + +test-my-project: + stage: test + script: + - go get github.com/client9/misspell/cmd/misspell + - find . -type f | grep -v webroot/assets | xargs misspell -error + - ./.ci/check-gofmt + - ./.ci/check-testfiles + - go test $(go list ./... | grep -v /vendor/) -v -coverprofile .testCoverage.txt + artifacts: + paths: + - .testCoverage.txt + +test-race-my-project: + stage: test + script: + - go test -race ./... + +deploy: + stage: deploy + only: + - master + script: + - go install "dev.sum7.eu/$CI_PROJECT_PATH" + - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )' + - 'which rsync || ( apt-get update -y && apt-get install rsync -y )' + - eval $(ssh-agent -s) + - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null + - rsync -e "ssh -6 -o StrictHostKeyChecking=no -p $SSH_PORT" -a --delete "/builds/$CI_PROJECT_PATH/webroot/" "$CI_PROJECT_NAME@$SSH_HOST":/opt/$CI_PROJECT_NAME/webroot/ + - ssh -6 -o StrictHostKeyChecking=no -p $SSH_PORT "$CI_PROJECT_NAME@$SSH_HOST" sudo /usr/bin/systemctl stop $CI_PROJECT_NAME + - scp -6 -o StrictHostKeyChecking=no -P $SSH_PORT "/go/bin/$CI_PROJECT_NAME" "$CI_PROJECT_NAME@$SSH_HOST":/opt/$CI_PROJECT_NAME/bin + - ssh -6 -o StrictHostKeyChecking=no -p $SSH_PORT "$CI_PROJECT_NAME@$SSH_HOST" sudo /usr/bin/systemctl start $CI_PROJECT_NAME diff --git a/README.md b/README.md new file mode 100644 index 0000000..27b22cc --- /dev/null +++ b/README.md @@ -0,0 +1,47 @@ +# meetandeat +[![Build Status](https://dev.sum7.eu/genofire/meetandeat/badges/master/build.svg)](https://dev.sum7.eu/genofire/meetandeat/pipelines) +[![Go Report Card](https://goreportcard.com/badge/dev.sum7.eu/genofire/meetandeat)](https://goreportcard.com/report/dev.sum7.eu/genofire/meetandeat) +[![GoDoc](https://godoc.org/dev.sum7.eu/genofire/meetandeat?status.svg)](https://godoc.org/dev.sum7.eu/genofire/meetandeat) + + +## Get meetandeat + +#### Download + +Latest Build binary from ci here: + +[Download All](https://dev.sum7.eu/genofire/meetandeat/-/jobs/artifacts/master/download/?job=build-my-project) (with config example) + +[Download Binary](https://dev.sum7.eu/genofire/meetandeat/-/jobs/artifacts/master/raw/meetandeat?inline=false&job=build-my-project) + +#### Build + +```bash +go get -u dev.sum7.eu/genofire/meetandeat +``` + +## Configure + +see `config_example.conf` + +## Start / Boot + +_/lib/systemd/system/meetandeat.service_ : +``` +[Unit] +Description=meetandeat +After=network.target + +[Service] +Type=simple +# User=notRoot +ExecStart=/opt/go/bin/meetandeat serve --config /etc/meetandeat.conf +Restart=always +RestartSec=5sec + +[Install] +WantedBy=multi-user.target +``` + +Start: `systemctl start meetandeat` +Autostart: `systemctl enable meetandeat` diff --git a/cmd/root.go b/cmd/root.go new file mode 100644 index 0000000..338193f --- /dev/null +++ b/cmd/root.go @@ -0,0 +1,38 @@ +package cmd + +import ( + "github.com/bdlm/log" + + "github.com/spf13/cobra" +) + +var ( + debug bool + timestamps bool +) + +// RootCMD represents the base command when called without any subcommands +var RootCMD = &cobra.Command{ + Use: "meetandeat", +} + +// Execute adds all child commands to the root command and sets flags appropriately. +// This is called by main.main(). It only needs to happen once to the RootCMD. +func Execute() { + if err := RootCMD.Execute(); err != nil { + log.Error(err) + } +} +func init() { + cobra.OnInitialize(func() { + if debug { + log.SetLevel(log.DebugLevel) + } + log.SetFormatter(&log.TextFormatter{ + DisableTimestamp: timestamps, + }) + log.Debug("show debug") + }) + RootCMD.PersistentFlags().BoolVar(&debug, "v", false, "show debug log") + RootCMD.PersistentFlags().BoolVar(×tamps, "timestamps", false, "Enables timestamps for log output") +} diff --git a/cmd/root_test.go b/cmd/root_test.go new file mode 100644 index 0000000..1d619dd --- /dev/null +++ b/cmd/root_test.go @@ -0,0 +1 @@ +package cmd diff --git a/cmd/serve.go b/cmd/serve.go new file mode 100644 index 0000000..fd8f16e --- /dev/null +++ b/cmd/serve.go @@ -0,0 +1,87 @@ +package cmd + +import ( + "dev.sum7.eu/genofire/golang-lib/database" + "dev.sum7.eu/genofire/golang-lib/file" + "github.com/bdlm/log" + "github.com/gin-contrib/sessions" + "github.com/gin-contrib/sessions/cookie" + "github.com/gin-contrib/static" + "github.com/gin-gonic/autotls" + "github.com/gin-gonic/gin" + "github.com/spf13/cobra" + "golang.org/x/crypto/acme/autocert" + + "dev.sum7.eu/genofire/meetandeat/controller" + "dev.sum7.eu/genofire/meetandeat/runtime" +) + +var configPath = "/etc/meetandeat.conf" + +type ServeConfig struct { + RequestLog bool `toml:"request_log"` + RequestLimit int `toml:"request_limit"` + SessionSecret string `toml:"session_secret"` + Listen string `toml:"listen"` + Webroot string `toml:"webroot"` + Database database.Config `toml:"database"` + ACME struct { + Enable bool `toml:"enable"` + Domains []string `toml:"domains"` + Cache string `toml:"cache"` + } `toml:"acme"` +} + +// serveCMD represents the query command +var serveCMD = &cobra.Command{ + Use: "serve ", + Short: "run webserver", + Example: `meetandeat serve "/etc/meetandeat.conf"`, + Run: func(cmd *cobra.Command, args []string) { + config := &ServeConfig{} + if err := file.ReadTOML(configPath, config); err != nil { + log.Panicf("open config file: %s", err) + } + + if err := database.Open(config.Database); err != nil { + log.Panicf("no database connection: %s", err) + } + + gin.SetMode(gin.ReleaseMode) + + r := gin.New() + + if config.RequestLog { + r.Use(gin.Logger()) + log.Debug("request logging enabled") + } + r.Use(runtime.MaxAllowed(config.RequestLimit)) + r.Use(gin.Recovery()) + + r.Use(sessions.Sessions("sid", cookie.NewStore([]byte(config.SessionSecret)))) + + controller.Bind(&r.RouterGroup) + + r.Use(static.Serve("/", static.LocalFile(config.Webroot, false))) + + if config.ACME.Enable { + if config.Listen != "" { + log.Panic("For ACME / Let's Encrypt it is not possible to set `listen`") + } + m := autocert.Manager{ + Prompt: autocert.AcceptTOS, + HostPolicy: autocert.HostWhitelist(config.ACME.Domains...), + Cache: autocert.DirCache(config.ACME.Cache), + } + log.Fatal(autotls.RunWithManager(r, &m)) + } else { + r.Run(config.Listen) + } + + }, +} + +func init() { + serveCMD.PersistentFlags().StringVar(&configPath, "config", configPath, "path to config file") + RootCMD.AddCommand(serveCMD) +} diff --git a/config_example.conf b/config_example.conf new file mode 100644 index 0000000..c3abfa5 --- /dev/null +++ b/config_example.conf @@ -0,0 +1,22 @@ +log_level = 50 + +request_log = true +request_limit = 10 + +session_secret = "secret" + +webroot = "webroot" +listen = ":8080" +# if ACME / Let's Encrypt used, uncomment listen +[acme] +enable = false +domains = ["example1.com", "example2.com"] +cache = "/var/www/.cache" + + +[database] +type = "sqlite3" +logging = true +connection = "file::memory:?mode=memory&cache=shared" +# For Master-Slave cluster +# read_connection = "" diff --git a/controller/api/date.go b/controller/api/date.go new file mode 100644 index 0000000..02a31e0 --- /dev/null +++ b/controller/api/date.go @@ -0,0 +1,81 @@ +package api + +import ( + "net/http" + "strconv" + "time" + + "github.com/gin-gonic/gin" + + "dev.sum7.eu/genofire/golang-lib/database" + + "dev.sum7.eu/genofire/meetandeat/models" +) + +func getDateAll(c *gin.Context) { + list := []*models.Date{} + database.Read.Find(&list) + + c.JSON(http.StatusOK, list) +} + +func getDate(c *gin.Context) { + id, err := strconv.Atoi(c.Params.ByName("id")) + if err != nil { + c.JSON(http.StatusBadRequest, err.Error()) + return + } + d := models.Date{ + ID: id, + } + + res := database.Read.Preload("Meets").First(&d) + if res.RecordNotFound() { + c.JSON(http.StatusNotFound, res.Error.Error()) + return + } + if res.Error != nil { + c.JSON(http.StatusBadRequest, res.Error.Error()) + return + } + + c.JSON(http.StatusOK, d) +} + +func addDate(c *gin.Context) { + var v time.Time + if err := c.BindJSON(&v); err != nil { + c.JSON(http.StatusBadRequest, err.Error()) + return + } + if v.Before(time.Now()) { + c.JSON(http.StatusBadRequest, "date has to be in the future") + return + } + + d := &models.Date{ + Date: v, + } + + database.Write.Save(d) + + c.JSON(http.StatusOK, d) +} + +func addDateMeet(c *gin.Context) { + var v models.DateMeet + if err := c.BindJSON(&v); err != nil { + c.JSON(http.StatusBadRequest, err.Error()) + return + } + id, err := strconv.Atoi(c.Params.ByName("id")) + if err != nil { + c.JSON(http.StatusBadRequest, err.Error()) + return + } + v.DateID = id + + database.Write.Save(&v) + + c.JSON(http.StatusOK, v) +} diff --git a/controller/api/docs_test.go b/controller/api/docs_test.go new file mode 100644 index 0000000..3c8ec12 --- /dev/null +++ b/controller/api/docs_test.go @@ -0,0 +1,3 @@ +package api + +// Nothing to test diff --git a/controller/api/job.go b/controller/api/job.go new file mode 100644 index 0000000..70cce93 --- /dev/null +++ b/controller/api/job.go @@ -0,0 +1,33 @@ +package api + +import ( + "net/http" + + "github.com/gin-gonic/gin" + + "dev.sum7.eu/genofire/golang-lib/database" + + "dev.sum7.eu/genofire/meetandeat/models" +) + +func getJobAll(c *gin.Context) { + list := []*models.Job{} + database.Read.Find(&list) + + c.JSON(http.StatusOK, list) +} + +func addJob(c *gin.Context) { + var name string + if err := c.BindJSON(&name); err != nil { + c.JSON(http.StatusBadRequest, err.Error()) + return + } + d := &models.Job{ + Name: name, + } + + database.Write.Save(d) + + c.JSON(http.StatusOK, d) +} diff --git a/controller/api/main.go b/controller/api/main.go new file mode 100644 index 0000000..19e03e8 --- /dev/null +++ b/controller/api/main.go @@ -0,0 +1,19 @@ +package api + +import ( + "github.com/gin-gonic/gin" +) + +func Bind(r *gin.RouterGroup) { + + r.GET("/date", getDateAll) + r.POST("/date", addDate) + r.GET("/date/:id", getDate) + r.POST("/date/:id/meet", addDateMeet) + + r.GET("/job", getJobAll) + r.POST("/job", addJob) + + r.GET("/person", getPersonAll) + r.POST("/person", addPerson) +} diff --git a/controller/api/person.go b/controller/api/person.go new file mode 100644 index 0000000..71d3380 --- /dev/null +++ b/controller/api/person.go @@ -0,0 +1,33 @@ +package api + +import ( + "net/http" + + "github.com/gin-gonic/gin" + + "dev.sum7.eu/genofire/golang-lib/database" + + "dev.sum7.eu/genofire/meetandeat/models" +) + +func getPersonAll(c *gin.Context) { + list := []*models.Person{} + database.Read.Find(&list) + + c.JSON(http.StatusOK, list) +} + +func addPerson(c *gin.Context) { + var name string + if err := c.BindJSON(&name); err != nil { + c.JSON(http.StatusBadRequest, err.Error()) + return + } + d := &models.Person{ + Name: name, + } + + database.Write.Save(d) + + c.JSON(http.StatusOK, d) +} diff --git a/controller/docs_test.go b/controller/docs_test.go new file mode 100644 index 0000000..88ca716 --- /dev/null +++ b/controller/docs_test.go @@ -0,0 +1,3 @@ +package controller + +// Nothing to test diff --git a/controller/examples/docs_test.go b/controller/examples/docs_test.go new file mode 100644 index 0000000..461ae63 --- /dev/null +++ b/controller/examples/docs_test.go @@ -0,0 +1,3 @@ +package examples + +// Nothing to test diff --git a/controller/examples/incr.go b/controller/examples/incr.go new file mode 100644 index 0000000..5741e1e --- /dev/null +++ b/controller/examples/incr.go @@ -0,0 +1,23 @@ +package examples + +import ( + "net/http" + + "github.com/gin-contrib/sessions" + "github.com/gin-gonic/gin" +) + +func incr(c *gin.Context) { + session := sessions.Default(c) + var count int + v := session.Get("count") + if v == nil { + count = 0 + } else { + count = v.(int) + count++ + } + session.Set("count", count) + session.Save() + c.JSON(http.StatusOK, gin.H{"count": count}) +} diff --git a/controller/examples/main.go b/controller/examples/main.go new file mode 100644 index 0000000..92e13e5 --- /dev/null +++ b/controller/examples/main.go @@ -0,0 +1,11 @@ +package examples + +import ( + "github.com/gin-gonic/gin" +) + +func Bind(r *gin.RouterGroup) { + + r.GET("/ping", ping) + r.GET("/incr", incr) +} diff --git a/controller/examples/ping.go b/controller/examples/ping.go new file mode 100644 index 0000000..277b989 --- /dev/null +++ b/controller/examples/ping.go @@ -0,0 +1,11 @@ +package examples + +import ( + "net/http" + + "github.com/gin-gonic/gin" +) + +func ping(c *gin.Context) { + c.JSON(http.StatusOK, gin.H{"message": "pong"}) +} diff --git a/controller/main.go b/controller/main.go new file mode 100644 index 0000000..3886131 --- /dev/null +++ b/controller/main.go @@ -0,0 +1,21 @@ +package controller + +import ( + "github.com/gin-gonic/gin" + + "dev.sum7.eu/genofire/meetandeat/controller/api" + "dev.sum7.eu/genofire/meetandeat/controller/examples" +) + +func Bind(r *gin.RouterGroup) { + group := r.Group("/examples") + { + examples.Bind(group) + } + group = r.Group("/api") + { + api.Bind(group) + } + + r.GET("/status", status) +} diff --git a/controller/status.go b/controller/status.go new file mode 100644 index 0000000..b1637ed --- /dev/null +++ b/controller/status.go @@ -0,0 +1,18 @@ +package controller + +import ( + "github.com/gin-gonic/gin" + "net/http" + + "dev.sum7.eu/genofire/golang-lib/database" +) + +func status(c *gin.Context) { + c.JSON(http.StatusOK, gin.H{ + "status": "running", + "database": map[string]interface{}{ + "read": database.Read.DB().Ping() == nil, + "write": database.Write.DB().Ping() == nil, + }, + }) +} diff --git a/main.go b/main.go new file mode 100644 index 0000000..cb65dfe --- /dev/null +++ b/main.go @@ -0,0 +1,7 @@ +package main + +import "dev.sum7.eu/genofire/meetandeat/cmd" + +func main() { + cmd.Execute() +} diff --git a/models/date.go b/models/date.go new file mode 100644 index 0000000..cd15829 --- /dev/null +++ b/models/date.go @@ -0,0 +1,18 @@ +package models + +import ( + "time" + + "dev.sum7.eu/genofire/golang-lib/database" +) + +type Date struct { + ID int `json:"id" gorm:"PRIMARY_KEY"` + Date time.Time `json:"date"` + Meets []DateMeet `gorm:"foreignkey:ID" json:"meets"` +} + +// Function to initialize the database +func init() { + database.AddModel(&Date{}) +} diff --git a/models/datemeets.go b/models/datemeets.go new file mode 100644 index 0000000..6905c32 --- /dev/null +++ b/models/datemeets.go @@ -0,0 +1,20 @@ +package models + +import ( + "dev.sum7.eu/genofire/golang-lib/database" +) + +type DateMeet struct { + ID int `gorm:"PRIMARY_KEY" json:"id"` + DateID int `sql:"type:bigint NOT NULL REFERENCES date(id);column:date_id" json:"dateID,omitempty"` + Date *Date `gorm:"association_autoupdate:false;foreignkey:DateID;" json:"date,omitempty"` + PersonID int `sql:"type:bigint NOT NULL REFERENCES person(id);column:person_id" json:"personID,omitempty"` + Person *Person `gorm:"association_autoupdate:false;foreignkey:PersonID;" json:"person,omitempty"` + JobID int `sql:"type:bigint NOT NULL REFERENCES job(id);column:job_id" json:"jobID,omitempty"` + Job *Job `gorm:"association_autoupdate:false;foreignkey:JobID;" json:"job,omitempty"` +} + +// Function to initialize the database +func init() { + database.AddModel(&DateMeet{}) +} diff --git a/models/doc_test.go b/models/doc_test.go new file mode 100644 index 0000000..2640e7f --- /dev/null +++ b/models/doc_test.go @@ -0,0 +1 @@ +package models diff --git a/models/job.go b/models/job.go new file mode 100644 index 0000000..e78e9af --- /dev/null +++ b/models/job.go @@ -0,0 +1,15 @@ +package models + +import ( + "dev.sum7.eu/genofire/golang-lib/database" +) + +type Job struct { + ID int `json:"id" gorm:"PRIMARY_KEY"` + Name string `json:"name"` +} + +// Function to initialize the database +func init() { + database.AddModel(&Job{}) +} diff --git a/models/person.go b/models/person.go new file mode 100644 index 0000000..90e36e9 --- /dev/null +++ b/models/person.go @@ -0,0 +1,15 @@ +package models + +import ( + "dev.sum7.eu/genofire/golang-lib/database" +) + +type Person struct { + ID int `json:"id" gorm:"PRIMARY_KEY"` + Name string `json:"name"` +} + +// Function to initialize the database +func init() { + database.AddModel(&Person{}) +} diff --git a/runtime/docs_test.go b/runtime/docs_test.go new file mode 100644 index 0000000..7141303 --- /dev/null +++ b/runtime/docs_test.go @@ -0,0 +1,3 @@ +package runtime + +// Nothing to test diff --git a/runtime/hash.go b/runtime/hash.go new file mode 100644 index 0000000..cd6fc8f --- /dev/null +++ b/runtime/hash.go @@ -0,0 +1,61 @@ +package runtime + +import "golang.org/x/crypto/pbkdf2" +import "hash" +import "strconv" +import "encoding/base64" +import "crypto/sha1" +import "crypto/sha256" +import "crypto/sha512" +import "crypto/rand" +import "fmt" +import "strings" + +const ( + saltLength = 8 + hashLength = 20 + interations = 10000 + hashfunc string = "sha256" +) + +var hashlib = map[string]func() hash.Hash{ + "sha1": sha1.New, + "sha256": sha256.New, + "sha512": sha512.New, +} + +// HashValidate a password and a hash +func HashValidate(hash, password string) (output, replace bool) { + parts := strings.Split(hash, "$") + if len(parts) != 4 { + return false, false + } + curIter, err := strconv.Atoi(parts[1]) + if err != nil { + return false, false + } + hashfuncC := strings.Split(parts[0], "_")[1] + replace = (hashfuncC != hashfunc) + + dk := pbkdf2.Key([]byte(password), []byte(parts[2]), curIter, len(parts[3])-8, hashlib[hashfuncC]) + x := fmt.Sprintf("pbkdf2_%s$%s$%s$%s", hashfuncC, parts[1], parts[2], base64.StdEncoding.EncodeToString(dk)) + output = (x == hash) + return +} + +// GenerateRandomString by length for key +func GenerateRandomString(n int) (string, error) { + b := make([]byte, n) + _, err := rand.Read(b) + if err != nil { + return "", err + } + return base64.URLEncoding.EncodeToString(b), nil +} + +// NewHash of given password +func NewHash(password string) string { + salt, _ := GenerateRandomString(saltLength) + dk := pbkdf2.Key([]byte(password), []byte(salt), interations, hashLength, hashlib[hashfunc]) + return fmt.Sprintf("pbkdf2_%s$%d$%s$%s", hashfunc, interations, salt, base64.StdEncoding.EncodeToString(dk)) +} diff --git a/runtime/hash_test.go b/runtime/hash_test.go new file mode 100644 index 0000000..2c29b64 --- /dev/null +++ b/runtime/hash_test.go @@ -0,0 +1,23 @@ +package runtime + +import ( + "github.com/stretchr/testify/assert" + "testing" +) + +func TestHash(t *testing.T) { + assert := assert.New(t) + password := "root" + + x, err := HashValidate("pbkdf2_sha1$10000$a5viM+Paz3o=$orD4shu1Ss+1wPAhAt8hkZ/fH7Y=", password) + assert.True(x, "password is valid") + assert.True(err, "password hesh is outdated") + + x, err = HashValidate("pbkdf2_sha256$10000$TnTxDT6fLiE=$v3EGDGIgmgSWXaLYvQYlSf8Lob0=", password) + assert.True(x, "password is valid") + assert.False(err, "password hash is outdated") + + hashed := NewHash(password) + expectedBegin := "pbkdf2_sha256$10000$" + assert.Equal(expectedBegin, hashed[:len(expectedBegin)]) +} diff --git a/runtime/limit.go b/runtime/limit.go new file mode 100644 index 0000000..bbcea7d --- /dev/null +++ b/runtime/limit.go @@ -0,0 +1,17 @@ +package runtime + +import ( + "github.com/gin-gonic/gin" +) + +func MaxAllowed(n int) gin.HandlerFunc { + sem := make(chan struct{}, n) + acquire := func() { sem <- struct{}{} } + release := func() { <-sem } + return func(c *gin.Context) { + acquire() // before request + defer release() // after request + c.Next() + + } +} diff --git a/webroot/assets/get_assets.sh b/webroot/assets/get_assets.sh new file mode 100755 index 0000000..8b99132 --- /dev/null +++ b/webroot/assets/get_assets.sh @@ -0,0 +1,4 @@ +wget -O vanilla-framework.css https://assets.ubuntu.com/v1/vanilla-framework-version-1.8.1.min.css +wget -O vue.js https://vuejs.org/js/vue.min.js +wget -O vue-route.js https://unpkg.com/vue-router/dist/vue-router.js +wget -O vuex.js https://unpkg.com/vuex@2.0.0/dist/vuex.min.js diff --git a/webroot/assets/vanilla-framework.css b/webroot/assets/vanilla-framework.css new file mode 100644 index 0000000..0b494a7 --- /dev/null +++ b/webroot/assets/vanilla-framework.css @@ -0,0 +1,3 @@ +.p-icon--chevron,.p-icon--close,.p-icon--code,.p-icon--collapse,.p-icon--contextual-menu,.p-icon--copy,.p-icon--delete,.p-icon--error,.p-icon--expand,.p-icon--external-link,.p-icon--help,.p-icon--information,.p-icon--menu,.p-icon--minus,.p-icon--plus,.p-icon--question,.p-icon--search,.p-icon--share,.p-icon--spinner,.p-icon--success,.p-icon--user,.p-icon--warning{height:1rem;width:1rem;background-position:50%;background-repeat:no-repeat;background-size:contain;display:inline-block;margin:0;padding:0;position:relative;top:-2px;vertical-align:sub}.p-icon--canonical,.p-icon--facebook,.p-icon--google,.p-icon--instagram,.p-icon--linkedin,.p-icon--twitter,.p-icon--ubuntu,.p-icon--youtube{height:2.5rem;width:2.5rem;display:inline-block}.p-media-object,.p-media-object--large{display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;margin-bottom:1.5rem}.p-media-object__meta-list-item,.p-media-object__meta-list-item--date,.p-media-object__meta-list-item--location,.p-media-object__meta-list-item--venue{color:#111;padding-left:2rem}.p-media-object__meta-list-item--date,.p-media-object__meta-list-item--location,.p-media-object__meta-list-item--venue{background-position:0 75%;background-repeat:no-repeat;background-size:1rem} + +/*! normalize.css v8.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}[type=checkbox],[type=radio]{box-sizing:border-box}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}blockquote{border-left:2px solid #666}blockquote>cite{display:block}html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}button{background-color:#fff;border-color:#cdcdcd}button,button:visited{color:#111}button:active,button:hover{background-color:#f7f7f7;border-color:#cdcdcd}button.is--disabled:active,button.is--disabled:hover,button:disabled:active,button:disabled:hover{background-color:transparent;border-color:#cdcdcd}button .p-link--external{color:currentColor}.p-button,.p-button--base,.p-button--brand,.p-button--negative,.p-button--neutral,.p-button--positive,[type=submit],button{transition-duration:.165s;transition-property:background-color,border-color;transition-timing-function:cubic-bezier(.55,.055,.675,.19);border-radius:.125rem;border-style:solid;border-width:1px;cursor:pointer;display:inline-block;font-size:1rem;font-weight:300;line-height:1.5rem;margin-bottom:1.7rem;padding:.3375rem 1rem;text-align:center;text-decoration:none}.p-button--base:focus,.p-button--brand:focus,.p-button--negative:focus,.p-button--neutral:focus,.p-button--positive:focus,.p-button:focus,:focus[type=submit],button:focus{outline:1px solid #19b6ee;outline-offset:2px}.p-button--base:active,.p-button--base:focus,.p-button--base:hover,.p-button--brand:active,.p-button--brand:focus,.p-button--brand:hover,.p-button--negative:active,.p-button--negative:focus,.p-button--negative:hover,.p-button--neutral:active,.p-button--neutral:focus,.p-button--neutral:hover,.p-button--positive:active,.p-button--positive:focus,.p-button--positive:hover,.p-button:active,.p-button:focus,.p-button:hover,:active[type=submit],:focus[type=submit],:hover[type=submit],button:active,button:focus,button:hover{text-decoration:none}.is--disabled.p-button,.is--disabled.p-button--base,.is--disabled.p-button--brand,.is--disabled.p-button--negative,.is--disabled.p-button--neutral,.is--disabled.p-button--positive,.is--disabled[type=submit],.p-button--base:disabled,.p-button--brand:disabled,.p-button--negative:disabled,.p-button--neutral:disabled,.p-button--positive:disabled,.p-button:disabled,:disabled[type=submit],button.is--disabled,button:disabled{cursor:not-allowed;opacity:.5}@media only screen and (max-width:460px){.p-button,.p-button--base,.p-button--brand,.p-button--negative,.p-button--neutral,.p-button--positive,[type=submit],button{width:100%}}@media only screen and (min-width:461px){.p-button,.p-button--base,.p-button--brand,.p-button--negative,.p-button--neutral,.p-button--positive,[type=submit],button{width:auto}.p-button--base:not(:last-of-type):not(:only-of-type),.p-button--brand:not(:last-of-type):not(:only-of-type),.p-button--negative:not(:last-of-type):not(:only-of-type),.p-button--neutral:not(:last-of-type):not(:only-of-type),.p-button--positive:not(:last-of-type):not(:only-of-type),.p-button:not(:last-of-type):not(:only-of-type),:not(:last-of-type):not(:only-of-type)[type=submit],button:not(:last-of-type):not(:only-of-type){margin-right:1rem}}table .p-button,table .p-button--base,table .p-button--brand,table .p-button--negative,table .p-button--neutral,table .p-button--positive,table [type=submit],table button{margin-bottom:.1rem;padding-bottom:.0875rem;padding-top:.0875rem}p .p-button,p .p-button--base,p .p-button--brand,p .p-button--negative,p .p-button--neutral,p .p-button--positive,p [type=submit],p button{margin-bottom:.6rem;margin-top:-.4rem}p+p>.p-button,p+p>.p-button--base,p+p>.p-button--brand,p+p>.p-button--negative,p+p>.p-button--neutral,p+p>.p-button--positive,p+p>[type=submit],p+p>button{margin-top:.6rem}@media only screen and (max-width:460px){p .p-button+.p-button,p .p-button+.p-button--base,p .p-button+.p-button--brand,p .p-button+.p-button--negative,p .p-button+.p-button--neutral,p .p-button+.p-button--positive,p .p-button+[type=submit],p .p-button+button,p .p-button--base+.p-button,p .p-button--base+.p-button--base,p .p-button--base+.p-button--brand,p .p-button--base+.p-button--negative,p .p-button--base+.p-button--neutral,p .p-button--base+.p-button--positive,p .p-button--base+[type=submit],p .p-button--base+button,p .p-button--brand+.p-button,p .p-button--brand+.p-button--base,p .p-button--brand+.p-button--brand,p .p-button--brand+.p-button--negative,p .p-button--brand+.p-button--neutral,p .p-button--brand+.p-button--positive,p .p-button--brand+[type=submit],p .p-button--brand+button,p .p-button--negative+.p-button,p .p-button--negative+.p-button--base,p .p-button--negative+.p-button--brand,p .p-button--negative+.p-button--negative,p .p-button--negative+.p-button--neutral,p .p-button--negative+.p-button--positive,p .p-button--negative+[type=submit],p .p-button--negative+button,p .p-button--neutral+.p-button,p .p-button--neutral+.p-button--base,p .p-button--neutral+.p-button--brand,p .p-button--neutral+.p-button--negative,p .p-button--neutral+.p-button--neutral,p .p-button--neutral+.p-button--positive,p .p-button--neutral+[type=submit],p .p-button--neutral+button,p .p-button--positive+.p-button,p .p-button--positive+.p-button--base,p .p-button--positive+.p-button--brand,p .p-button--positive+.p-button--negative,p .p-button--positive+.p-button--neutral,p .p-button--positive+.p-button--positive,p .p-button--positive+[type=submit],p .p-button--positive+button,p [type=submit]+.p-button,p [type=submit]+.p-button--base,p [type=submit]+.p-button--brand,p [type=submit]+.p-button--negative,p [type=submit]+.p-button--neutral,p [type=submit]+.p-button--positive,p [type=submit]+[type=submit],p [type=submit]+button,p button+.p-button,p button+.p-button--base,p button+.p-button--brand,p button+.p-button--negative,p button+.p-button--neutral,p button+.p-button--positive,p button+[type=submit],p button+button{margin-top:1.1rem}}code,kbd,samp{font-family:Ubuntu Mono,Consolas,Monaco,Courier,monospace;font-weight:300;text-align:left}code,pre{direction:ltr;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none;-moz-tab-size:4;-o-tab-size:4;tab-size:4;white-space:pre-wrap;word-spacing:normal;word-wrap:break-word}code{display:inline}pre{background-color:#f7f7f7;border:1px solid #cdcdcd;border-radius:.125rem;color:#111;display:block;margin-bottom:1.5rem;margin-top:0;overflow:auto;padding:.5rem 1rem;text-align:left;text-shadow:none}.p-code-snippet,[type=color],[type=datatime-local],[type=date],[type=datetime],[type=email],[type=file],[type=month],[type=number],[type=password],[type=search],[type=tel],[type=text],[type=time],[type=url],[type=week],select,textarea{margin-bottom:.7rem;padding-bottom:.3375rem;padding-top:.3375rem}[type=color],[type=datatime-local],[type=date],[type=datetime],[type=email],[type=month],[type=number],[type=password],[type=search],[type=tel],[type=text],[type=time],[type=url],[type=week],select,textarea{-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield;background-color:#fff;border:1px solid #cdcdcd;border-radius:.125rem;box-shadow:inset 0 1px 1px rgba(0,0,0,.12);color:#111;font-family:Ubuntu,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;font-size:1rem;font-weight:300;line-height:1.5rem;min-width:10em;padding-left:.5rem;padding-right:.5rem;vertical-align:baseline;width:100%}:focus[type=color],:focus[type=datatime-local],:focus[type=date],:focus[type=datetime],:focus[type=email],:focus[type=month],:focus[type=number],:focus[type=password],:focus[type=search],:focus[type=tel],:focus[type=text],:focus[type=time],:focus[type=url],:focus[type=week],select:focus,textarea:focus{outline:1px solid #19b6ee;outline-offset:2px}table [type=color],table [type=datatime-local],table [type=date],table [type=datetime],table [type=email],table [type=month],table [type=number],table [type=password],table [type=search],table [type=tel],table [type=text],table [type=time],table [type=url],table [type=week],table select,table textarea{margin:0 0 .1rem;padding-bottom:.0875rem;padding-top:.0875rem}:active[type=color],:active[type=datatime-local],:active[type=date],:active[type=datetime],:active[type=email],:active[type=month],:active[type=number],:active[type=password],:active[type=search],:active[type=tel],:active[type=text],:active[type=time],:active[type=url],:active[type=week],select:active,textarea:active{border-color:#666;color:#111;outline:none}[type=color]::-webkit-input-placeholder,[type=datatime-local]::-webkit-input-placeholder,[type=date]::-webkit-input-placeholder,[type=datetime]::-webkit-input-placeholder,[type=email]::-webkit-input-placeholder,[type=month]::-webkit-input-placeholder,[type=number]::-webkit-input-placeholder,[type=password]::-webkit-input-placeholder,[type=search]::-webkit-input-placeholder,[type=tel]::-webkit-input-placeholder,[type=text]::-webkit-input-placeholder,[type=time]::-webkit-input-placeholder,[type=url]::-webkit-input-placeholder,[type=week]::-webkit-input-placeholder,select::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#666;opacity:1}[type=color]::-ms-input-placeholder,[type=datatime-local]::-ms-input-placeholder,[type=date]::-ms-input-placeholder,[type=datetime]::-ms-input-placeholder,[type=email]::-ms-input-placeholder,[type=month]::-ms-input-placeholder,[type=number]::-ms-input-placeholder,[type=password]::-ms-input-placeholder,[type=search]::-ms-input-placeholder,[type=tel]::-ms-input-placeholder,[type=text]::-ms-input-placeholder,[type=time]::-ms-input-placeholder,[type=url]::-ms-input-placeholder,[type=week]::-ms-input-placeholder,select::-ms-input-placeholder,textarea::-ms-input-placeholder{color:#666;opacity:1}[type=color]::placeholder,[type=datatime-local]::placeholder,[type=date]::placeholder,[type=datetime]::placeholder,[type=email]::placeholder,[type=month]::placeholder,[type=number]::placeholder,[type=password]::placeholder,[type=search]::placeholder,[type=tel]::placeholder,[type=text]::placeholder,[type=time]::placeholder,[type=url]::placeholder,[type=week]::placeholder,select::placeholder,textarea::placeholder{color:#666;opacity:1}.has-error[type=color],.has-error[type=datatime-local],.has-error[type=date],.has-error[type=datetime],.has-error[type=email],.has-error[type=month],.has-error[type=number],.has-error[type=password],.has-error[type=search],.has-error[type=tel],.has-error[type=text],.has-error[type=time],.has-error[type=url],.has-error[type=week],select.has-error,textarea.has-error{border:1px solid #c7162b}.has-caution[type=color],.has-caution[type=datatime-local],.has-caution[type=date],.has-caution[type=datetime],.has-caution[type=email],.has-caution[type=month],.has-caution[type=number],.has-caution[type=password],.has-caution[type=search],.has-caution[type=tel],.has-caution[type=text],.has-caution[type=time],.has-caution[type=url],.has-caution[type=week],.has-warning[type=color],.has-warning[type=datatime-local],.has-warning[type=date],.has-warning[type=datetime],.has-warning[type=email],.has-warning[type=month],.has-warning[type=number],.has-warning[type=password],.has-warning[type=search],.has-warning[type=tel],.has-warning[type=text],.has-warning[type=time],.has-warning[type=url],.has-warning[type=week],select.has-caution,select.has-warning,textarea.has-caution,textarea.has-warning{border:1px solid #f99b11}.has-success[type=color],.has-success[type=datatime-local],.has-success[type=date],.has-success[type=datetime],.has-success[type=email],.has-success[type=month],.has-success[type=number],.has-success[type=password],.has-success[type=search],.has-success[type=tel],.has-success[type=text],.has-success[type=time],.has-success[type=url],.has-success[type=week],select.has-success,textarea.has-success{border:1px solid #0e8420}.has-information[type=color],.has-information[type=datatime-local],.has-information[type=date],.has-information[type=datetime],.has-information[type=email],.has-information[type=month],.has-information[type=number],.has-information[type=password],.has-information[type=search],.has-information[type=tel],.has-information[type=text],.has-information[type=time],.has-information[type=url],.has-information[type=week],select.has-information,textarea.has-information{border:1px solid #335280}[type=checkbox],[type=radio]{float:left;height:1.5rem;margin-bottom:0;margin-right:1.5rem;margin-top:0;padding:0;vertical-align:middle;width:auto}:focus[type=checkbox],:focus[type=radio]{outline:1px solid #19b6ee;outline-offset:0}.p-switch:disabled+.p-switch__slider,[disabled=disabled][type=checkbox]+label,[disabled=disabled][type=color],[disabled=disabled][type=datatime-local],[disabled=disabled][type=date],[disabled=disabled][type=datetime],[disabled=disabled][type=email],[disabled=disabled][type=month],[disabled=disabled][type=number],[disabled=disabled][type=password],[disabled=disabled][type=radio]+label,[disabled=disabled][type=search],[disabled=disabled][type=tel],[disabled=disabled][type=text],[disabled=disabled][type=time],[disabled=disabled][type=url],[disabled=disabled][type=week],[disabled][type=checkbox]+label,[disabled][type=color],[disabled][type=datatime-local],[disabled][type=date],[disabled][type=datetime],[disabled][type=email],[disabled][type=month],[disabled][type=number],[disabled][type=password],[disabled][type=radio]+label,[disabled][type=search],[disabled][type=tel],[disabled][type=text],[disabled][type=time],[disabled][type=url],[disabled][type=week],select[disabled=disabled],select[disabled],textarea[disabled=disabled],textarea[disabled]{cursor:not-allowed;opacity:.5}[readonly=readonly][type=color],[readonly=readonly][type=datatime-local],[readonly=readonly][type=date],[readonly=readonly][type=datetime],[readonly=readonly][type=email],[readonly=readonly][type=month],[readonly=readonly][type=number],[readonly=readonly][type=password],[readonly=readonly][type=search],[readonly=readonly][type=tel],[readonly=readonly][type=text],[readonly=readonly][type=time],[readonly=readonly][type=url],[readonly=readonly][type=week],[readonly][type=color],[readonly][type=datatime-local],[readonly][type=date],[readonly][type=datetime],[readonly][type=email],[readonly][type=month],[readonly][type=number],[readonly][type=password],[readonly][type=search],[readonly][type=tel],[readonly][type=text],[readonly][type=time],[readonly][type=url],[readonly][type=week],select[readonly=readonly],select[readonly],textarea[readonly=readonly],textarea[readonly]{color:#cdcdcd;cursor:default}:active[readonly=readonly][type=color],:active[readonly=readonly][type=datatime-local],:active[readonly=readonly][type=date],:active[readonly=readonly][type=datetime],:active[readonly=readonly][type=email],:active[readonly=readonly][type=month],:active[readonly=readonly][type=number],:active[readonly=readonly][type=password],:active[readonly=readonly][type=search],:active[readonly=readonly][type=tel],:active[readonly=readonly][type=text],:active[readonly=readonly][type=time],:active[readonly=readonly][type=url],:active[readonly=readonly][type=week],:active[readonly][type=color],:active[readonly][type=datatime-local],:active[readonly][type=date],:active[readonly][type=datetime],:active[readonly][type=email],:active[readonly][type=month],:active[readonly][type=number],:active[readonly][type=password],:active[readonly][type=search],:active[readonly][type=tel],:active[readonly][type=text],:active[readonly][type=time],:active[readonly][type=url],:active[readonly][type=week],:hover[readonly=readonly][type=color],:hover[readonly=readonly][type=datatime-local],:hover[readonly=readonly][type=date],:hover[readonly=readonly][type=datetime],:hover[readonly=readonly][type=email],:hover[readonly=readonly][type=month],:hover[readonly=readonly][type=number],:hover[readonly=readonly][type=password],:hover[readonly=readonly][type=search],:hover[readonly=readonly][type=tel],:hover[readonly=readonly][type=text],:hover[readonly=readonly][type=time],:hover[readonly=readonly][type=url],:hover[readonly=readonly][type=week],:hover[readonly][type=color],:hover[readonly][type=datatime-local],:hover[readonly][type=date],:hover[readonly][type=datetime],:hover[readonly][type=email],:hover[readonly][type=month],:hover[readonly][type=number],:hover[readonly][type=password],:hover[readonly][type=search],:hover[readonly][type=tel],:hover[readonly][type=text],:hover[readonly][type=time],:hover[readonly][type=url],:hover[readonly][type=week],select:active[readonly=readonly],select:active[readonly],select:hover[readonly=readonly],select:hover[readonly],textarea:active[readonly=readonly],textarea:active[readonly],textarea:hover[readonly=readonly],textarea:hover[readonly]{border-color:#666;outline:none}label{cursor:pointer;display:block;margin-bottom:.6rem}label.has-error{color:#c7162b}label.has-caution,label.has-warning{color:#f99b11}label.has-success{color:#0e8420}label.has-information{color:#335280}[type=file]{width:100%}[type=file]:focus{outline:1px solid #19b6ee;outline-offset:2px}[type=reset]{display:none}[type=search]{-moz-appearance:none;-webkit-appearance:none;appearance:none;border-radius:0}[type=search]::-webkit-search-results-decoration{display:none}[type=search]::-webkit-search-cancel-button{-webkit-appearance:searchfield-cancel-button;cursor:pointer}[type=checkbox]+label,[type=radio]+label{vertical-align:middle;width:100%}[type=radio]{margin-top:.4rem}[type=submit]{background-color:#0e8420;border-color:#0e8420;color:#fff}[type=submit]:visited{color:#fff}[type=submit]:active,[type=submit]:hover{background-color:#095615;border-color:#095615}[type=submit].is--disabled:active,[type=submit].is--disabled:hover,[type=submit]:disabled:active,[type=submit]:disabled:hover{background-color:#0e8420;border-color:#0e8420}[type=submit] .p-link--external{color:currentColor}select{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:#fff url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB4bWxuczpza2V0Y2g9Imh0dHA6Ly93d3cuYm9oZW1pYW5jb2RpbmcuY29tL3NrZXRjaC9ucyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjRweCIgd2lkdGg9IjEwcHgiIHZlcnNpb249IjEuMSIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHZpZXdCb3g9IjAgMCAxMCA0Ij4gPHRpdGxlPmFjY29yZGlvbi1vcGVuPC90aXRsZT4gPGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+IDxnIGlkPSJmaWx0ZXItcGFuZWwiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc2tldGNoOnR5cGU9Ik1TUGFnZSIgZmlsbD0ibm9uZSI+ICA8ZyBpZD0iYWNjb3JkaW9uLW9wZW4iIGZpbGw9IiM4ODgiIHNrZXRjaDp0eXBlPSJNU0FydGJvYXJkR3JvdXAiPiAgIDxwYXRoIGlkPSJjaGV2cm9uIiBza2V0Y2g6dHlwZT0iTVNTaGFwZUdyb3VwIiBkPSJtNi4zNjEgMC44NjIzYzAuNTE4IDAuMzY1IDEuMDUyIDAuNzc4MSAxLjYwMSAxLjIzOCAwLjU0OSAwLjQ1ODUgMS4wODkgMC45NTE4IDEuNjIxIDEuNDc3MiAwLjE0MiAwLjE0MDQgMC4yODEgMC4yODIxIDAuNDE1IDAuNDIyNWgtMS41NDFjLTAuMzA0LTAuMjg4OC0wLjYyLTAuNTcwOS0wLjk0Ny0wLjg0NjMtMC4xMzc5LTAuMTE2MS0wLjI3NjgtMC4yMjk3LTAuNDE2OC0wLjM0MDgtMC4xNjM2LTAuMTI5Ny0wLjMyODYtMC4yNTU4LTAuNDk1NC0wLjM3ODMtMC4wODUyLTAuMDYyNS0wLjE3MDgtMC4xMjQxLTAuMjU2OC0wLjE4NDYtMC4zOTctMC4yODIxLTAuOTM1LTAuNjI1Ny0xLjMxNS0wLjg0NzZoLTAuMDU0Yy0wLjM4IDAuMjIxOS0wLjkxOCAwLjU2NTUtMS4zMTUgMC44NDc2LTAuMzk4IDAuMjgwNy0wLjc4OCAwLjU4MjktMS4xNjkgMC45MDM3LTAuMzI3IDAuMjc1NC0wLjY0MyAwLjU1NzUtMC45NDcgMC44NDYzaC0xLjU0MWMwLjEzNS0wLjE0MDQgMC4yNzMtMC4yODIxIDAuNDE1LTAuNDIyNSAwLjUzMi0wLjUyNTQgMS4wNzItMS4wMTg3IDEuNjIxLTEuNDc3MiAwLjU1LTAuNDU5OSAxLjA4My0wLjg3MyAxLjYwMS0xLjIzOCAwLjUxOS0wLjM2NDk3IDAuOTczLTAuNjUyNDEgMS4zNjItMC44NjIzIDAuMzkgMC4yMDk4OSAwLjg0NCAwLjQ5NzMzIDEuMzYyIDAuODYyM3oiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQuOTk5IDIpIHJvdGF0ZSgxODApIHRyYW5zbGF0ZSgtNC45OTkgLTIpIi8+ICA8L2c+IDwvZz48L3N2Zz4=") no-repeat;background-position:right .5rem center;background-size:.75rem;color:#111;min-height:24px;padding-right:1.5rem;text-indent:.01px;text-overflow:""}select:hover{cursor:pointer}select[multiple],select[size]{background-image:none;height:auto}select[multiple] option,select[size] option{font-weight:300;line-height:.875rem;padding:.5rem}textarea{margin-bottom:.7rem;overflow:auto;vertical-align:top}fieldset{background-color:#f7f7f7;border:0;border-radius:.125rem;color:#111}label{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}input[type=checkbox]{opacity:0;position:absolute}input[type=checkbox]+label{margin-bottom:1rem;margin-top:-.4rem;padding-left:2rem;position:relative}input[type=checkbox]+label:focus{outline:1px solid #19b6ee;outline-offset:2px}input[type=checkbox]+label:before{border:1px solid #cdcdcd;border-radius:.125rem;content:"";display:inline-block;height:1rem;left:0;top:.65rem;width:1rem}input[type=checkbox]+label:after{border-bottom:2px solid;border-left:2px solid;content:none;display:inline-block;height:7px;left:2px;top:12px;transform:rotate(-45deg);width:11px}input[type=checkbox]+label:after,input[type=checkbox]+label:before{display:inline-block;position:absolute}input[type=checkbox]:checked+label:after{content:""}hr{background-color:#cdcdcd;border:0;height:1px;margin-bottom:.9375rem;margin-top:0;position:relative;width:100%}hr+p{margin-top:-.5rem}.row.is-bordered{position:relative}.row.is-bordered:before{background:#cdcdcd;content:"";height:1px;margin-bottom:.9375rem;width:100%}a{color:#007aa6;text-decoration:none}a:focus{outline:thin dotted #cdcdcd}a:hover{cursor:pointer;text-decoration:underline}a:visited{color:#005573}li>ol,li>ul{margin-bottom:0;padding-top:0}li>ol>li:last-of-type,li>ul>li:last-of-type{padding-bottom:0}ol,ul{margin-bottom:1.5rem;margin-left:1rem;margin-top:0;padding-left:1rem}nav ol,nav ul{list-style:none;list-style-image:none}dl,li{margin:0;padding:0}dd{margin-left:1rem}dt{border-top:1px dotted #666}dt:first-of-type{border-top:0}img{border:0;border-radius:.125rem}svg:not(:root){overflow:hidden}figure{margin-bottom:1.5rem;margin-left:0;width:100%}figure caption,figure figcaption{display:block;font-style:italic;margin-top:.25rem;width:100%}audio,canvas,embed,iframe,object,video{display:block;margin:0 auto 20px;max-width:100%}audio:not([controls]){display:none;height:0}[hidden]{display:none}.p-card,.p-card--highlighted,.p-card--muted,.p-contextual-menu__dropdown,.p-modal__dialog,.p-notification,.p-notification--caution,.p-notification--information,.p-notification--negative,.p-notification--positive,.p-switch__slider,.p-switch__slider:before{border-radius:.125rem}.p-card--highlighted,.p-card--muted,.p-contextual-menu__dropdown,.p-modal__dialog,.p-notification,.p-notification--caution,.p-notification--information,.p-notification--negative,.p-notification--positive,.p-switch__slider:before{box-shadow:0 1px 5px 1px hsla(0,0%,7%,.2)}.p-card{border:.0625rem solid #cdcdcd}.p-card--muted{background-color:#f7f7f7;color:#111}.p-card,.p-card--highlighted,.p-contextual-menu__dropdown,.p-modal__dialog,.p-notification,.p-notification--caution,.p-notification--information,.p-notification--negative,.p-notification--positive{background-color:#fff;color:#111;margin-bottom:1.5rem;overflow:auto;padding:1rem}.p-tabs__list:after{background-color:#cdcdcd;content:"";height:.0625rem;left:0;position:absolute;right:0;bottom:0}.p-icon--canonical,.p-icon--chevron,.p-icon--close,.p-icon--code,.p-icon--collapse,.p-icon--contextual-menu,.p-icon--copy,.p-icon--delete,.p-icon--error,.p-icon--expand,.p-icon--external-link,.p-icon--facebook,.p-icon--google,.p-icon--help,.p-icon--information,.p-icon--instagram,.p-icon--linkedin,.p-icon--menu,.p-icon--minus,.p-icon--plus,.p-icon--question,.p-icon--search,.p-icon--share,.p-icon--spinner,.p-icon--success,.p-icon--twitter,.p-icon--ubuntu,.p-icon--user,.p-icon--warning,.p-icon--youtube,.p-switch__slider span,.u-hide-text,button.p-switch span{overflow:hidden;text-indent:calc(100% + 10rem);white-space:nowrap}.p-inline-images:after,.p-list-step:after,.p-list:after,.p-stepped-list--detailed:after,.u-clearfix:after{clear:both;content:"";display:block}table{border:0;border-collapse:collapse;margin-bottom:1.5rem;overflow-x:auto;table-layout:fixed;width:100%}td,th{font-weight:300;padding-left:0;text-align:left;text-overflow:ellipsis}@media screen and (min-width:768px){td:not(:last-child),th:not(:last-child){padding-right:1rem}}thead tr{border-bottom:1px solid #111;vertical-align:top}tbody tr:not(:first-child){border-top:1px solid #cdcdcd}.p-accordion__tab,.p-navigation--sidebar .sidebar__link,td,th{padding-bottom:.4375rem;padding-top:.5rem}@font-face{font-family:Ubuntu;font-style:normal;font-weight:300;src:url(https://assets.ubuntu.com/v1/e8c07df6-Ubuntu-L_W.woff2) format("woff2"),url(https://assets.ubuntu.com/v1/8619add2-Ubuntu-L_W.woff) format("woff")}@font-face{font-family:Ubuntu;font-style:normal;font-weight:400;src:url(https://assets.ubuntu.com/v1/fff37993-Ubuntu-R_W.woff2) format("woff2"),url(https://assets.ubuntu.com/v1/7af50859-Ubuntu-R_W.woff) format("woff")}@font-face{font-family:Ubuntu;font-style:italic;font-weight:300;src:url(https://assets.ubuntu.com/v1/f8097dea-Ubuntu-LI_W.woff2) format("woff2"),url(https://assets.ubuntu.com/v1/8be89d02-Ubuntu-LI_W.woff) format("woff")}@font-face{font-family:Ubuntu;font-style:italic;font-weight:400;src:url(https://assets.ubuntu.com/v1/fca66073-ubuntu-ri-webfont.woff2) format("woff2"),url(https://assets.ubuntu.com/v1/f0898c72-ubuntu-ri-webfont.woff) format("woff")}@font-face{font-family:Ubuntu;font-style:normal;font-weight:100;src:url(https://assets.ubuntu.com/v1/7f100985-Ubuntu-Th_W.woff2) format("woff2"),url(https://assets.ubuntu.com/v1/502cc3a1-Ubuntu-Th_W.woff) format("woff")}@font-face{font-family:Ubuntu Mono;font-style:normal;font-weight:300;src:url(https://assets.ubuntu.com/v1/fdd692b9-UbuntuMono-R_W.woff2) format("woff2"),url(https://assets.ubuntu.com/v1/85edb898-UbuntuMono-R_W.woff) format("woff")}@font-face{font-family:Ubuntu Mono;font-style:normal;font-weight:400;src:url(https://assets.ubuntu.com/v1/fdd692b9-UbuntuMono-R_W.woff2) format("woff2"),url(https://assets.ubuntu.com/v1/85edb898-UbuntuMono-R_W.woff) format("woff")}html{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#111;font-size:16px;font-smoothing:subpixel-antialiased;font-weight:300;line-height:1.5rem}[class^=p-heading--],h1,h2,h3,h4,h5,h6,html{font-family:Ubuntu,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}p:empty{line-height:0;margin:0;padding:0}button,input,select,textarea{font-family:Ubuntu,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}blockquote{margin-bottom:0;margin-left:0;margin-top:0;overflow:auto;padding-left:1.5rem}blockquote>p{font-style:italic}blockquote>cite{font-style:normal}small.dense{margin-bottom:1.2rem}sub,sup{line-height:0;position:relative;vertical-align:baseline}abbr[title]{border-bottom:.1em dotted;cursor:pointer;text-decoration:none}@media (max-width:768px){.p-heading--four+p,.p-heading--three+p,h3+p,h4+p{margin-top:-.5rem}}.p-heading--five+.p-heading--five,.p-heading--five+.p-heading--six,.p-heading--five+h5,.p-heading--five+h6,.p-heading--five+p,.p-heading--six+.p-heading--five,.p-heading--six+.p-heading--six,.p-heading--six+h5,.p-heading--six+h6,.p-heading--six+p,h5+.p-heading--five,h5+.p-heading--six,h5+h5,h5+h6,h5+p,h6+.p-heading--five,h6+.p-heading--six,h6+h5,h6+h6,h6+p{margin-top:0}.p-muted-heading+.p-heading--five,.p-muted-heading+.p-heading--six,.p-muted-heading+h5,.p-muted-heading+h6,.p-muted-heading+p{margin-top:-.5rem}.p-heading--five+p:not(.p-muted-heading),.p-heading--six+p:not(.p-muted-heading),h5+p:not(.p-muted-heading),h6+p:not(.p-muted-heading),p+p:not(.p-muted-heading){margin-top:-1rem}.p-heading-6+.p-heading--one,.p-heading-6+.p-heading--two,.p-heading-6+h1,.p-heading-6+h2,.p-heading--five+.p-heading--one,.p-heading--five+.p-heading--two,.p-heading--five+h1,.p-heading--five+h2,h5+.p-heading--one,h5+.p-heading--two,h5+h1,h5+h2,h6+.p-heading--one,h6+.p-heading--two,h6+h1,h6+h2,p+.p-heading--one,p+.p-heading--two,p+h1,p+h2,ul+.p-heading--one,ul+.p-heading--two,ul+h1,ul+h2{padding-top:2.2rem}@media (max-width:768px){.p-heading-6+.p-heading--one,.p-heading-6+.p-heading--two,.p-heading-6+h1,.p-heading-6+h2,.p-heading--five+.p-heading--one,.p-heading--five+.p-heading--two,.p-heading--five+h1,.p-heading--five+h2,h5+.p-heading--one,h5+.p-heading--two,h5+h1,h5+h2,h6+.p-heading--one,h6+.p-heading--two,h6+h1,h6+h2,p+.p-heading--one,p+.p-heading--two,p+h1,p+h2,ul+.p-heading--one,ul+.p-heading--two,ul+h1,ul+h2{padding-top:1.7rem}}p+.p-heading--two,p+h2{padding-top:2.2rem}@media (max-width:768px){p+.p-heading--two,p+h2{padding-top:1.6rem}}p+.p-heading--three,p+h3{padding-top:2.1rem}@media (max-width:768px){p+.p-heading--three,p+h3{padding-top:1.5rem}}p+.p-heading--four,p+h4{padding-top:1.55rem}p+.p-heading--five,p+.p-heading--six,p+h5,p+h6{padding-top:1.4rem}p+.p-muted-heading{padding-top:1rem}.p-heading--one,.p-media-object--large .p-media-object__title,h1{max-width:20em;font-size:2.91029rem;font-style:normal;font-weight:100;line-height:3.5rem;margin-bottom:2.3rem;margin-top:0;padding-top:.2rem}@media (max-width:768px){.p-heading--one,.p-media-object--large .p-media-object__title,h1{font-size:2.22819rem;line-height:3rem;margin-bottom:1.8rem;padding-top:.2rem}}.p-heading--two,h2{max-width:20em;font-size:2.22819rem;font-style:normal;font-weight:300;line-height:3rem;margin-bottom:1.8rem;margin-top:0;padding-top:.2rem}@media (max-width:768px){.p-heading--two,h2{font-size:1.83274rem;line-height:2.5rem;margin-bottom:1.4rem;padding-top:.1rem}}.p-heading--three,.p-list-step>li:before,.p-navigation--sidebar .p-navigation__logo,.p-stepped-list--detailed>li:before,h3{max-width:25em;font-size:1.70596rem;font-style:normal;font-weight:300;line-height:2.5rem;margin-bottom:1.4rem;margin-top:0;padding-top:.1rem}@media (max-width:768px){.p-heading--three,.p-list-step>li:before,.p-navigation--sidebar .p-navigation__logo,.p-stepped-list--detailed>li:before,h3{font-size:1.49271rem;line-height:2rem;margin-bottom:1rem;padding-top:0}}.p-heading--four,.p-matrix__title,.p-media-object__title,.p-modal__title,.p-pull-quote>p,.p-pull-quote__citation,h4{max-width:25em;font-size:1.30612rem;font-style:normal;font-weight:300;line-height:2rem;margin-bottom:.95rem;margin-top:0;padding-top:.05rem}@media (max-width:768px){.p-heading--four,.p-matrix__title,.p-media-object__title,.p-modal__title,.p-pull-quote>p,.p-pull-quote__citation,h4{font-size:1.22176rem;line-height:1.5rem;margin-bottom:.7rem;padding-top:.3rem}}.p-heading--five,h5{font-size:1rem;font-style:normal;font-weight:500}.p-heading--six,h6{font-size:1rem;font-style:italic;font-weight:300}.p-breadcrumbs__item,.p-footer__link,.p-heading--five,.p-heading--six,.p-navigation--sidebar .p-navigation__tagline,.p-notification__response,cite,dd,dt,h5,h6,label,p{line-height:1.5rem;margin-bottom:.1rem;margin-top:0;padding-top:.4rem}.p-footer__link,.p-heading--five,.p-heading--six,dd,h5,h6,p{margin-bottom:1.1rem}.p-form-help-text,.p-form-validation__message,.p-media-object__meta-list-item,.p-media-object__meta-list-item--date,.p-media-object__meta-list-item--location,.p-media-object__meta-list-item--venue,.p-muted-heading,.p-table--mobile-card tbody th:before,.p-table--mobile-card td:before,.p-tooltip__message,small,thead th{font-size:.875rem;line-height:1.25rem;margin-bottom:.7rem;padding-top:.05rem}.p-muted-heading,.p-table--mobile-card tbody th:before,.p-table--mobile-card td:before,thead th{color:#666;margin-bottom:.5rem;margin-top:0;text-transform:uppercase}.measure--p,.p-heading--five,.p-heading--six,h5,h6,p{max-width:38em}.p-notification__status,dt,strong{font-weight:400}.p-navigation{background-color:#fff;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;position:relative}@media (max-width:768px){.p-navigation{-ms-flex-direction:column;flex-direction:column}}.p-navigation a,.p-navigation a:focus,.p-navigation a:hover,.p-navigation a:visited{color:#111;text-decoration:none}.p-navigation:after{background:#cdcdcd;bottom:0;content:"";height:.0625rem;left:0;position:absolute;right:0}.p-navigation__banner{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-pack:justify;justify-content:space-between}.p-navigation__image{-ms-flex-item-align:center;align-self:center;max-height:2rem;min-height:1.5rem}.p-navigation__link>a{display:block;margin-bottom:0;position:relative}@media (max-width:768px){.p-navigation__link>a{padding:.75rem 1.5rem}.p-navigation__link>a:before{background:#cdcdcd;content:"";height:.0625rem;left:0;position:absolute;right:0;top:0}}@media (min-width:769px){.p-navigation__link>a{border-left:1px solid #cdcdcd;padding:.75rem 1rem}.p-navigation__link>a:before{background:#cdcdcd;bottom:0;content:"";height:.0625rem;left:0;position:absolute;right:0}}.p-navigation__link>a:hover{background-color:#f7f7f7}@media (min-width:769px){.p-navigation__link.is-selected>a{position:relative}.p-navigation__link.is-selected>a:before{bottom:0;background-color:#666;content:"";position:absolute;height:.1875rem;width:auto;left:-1px;right:-1px;z-index:1}}.p-navigation__links{list-style:none;margin:0;padding:0}@media (max-width:768px){.p-navigation__links{margin-top:-1px}}@media (min-width:769px){.p-navigation__links{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}}.p-navigation__logo{-ms-flex:0 0 auto;flex:0 0 auto;height:3rem;margin:0 1rem 0 1.5rem}.p-navigation__logo,.p-navigation__logo .p-navigation__link{display:-ms-flexbox;display:flex}.p-navigation__nav{display:none}@media (max-width:768px){.p-navigation__nav{-ms-flex-direction:column;flex-direction:column}}@media (min-width:769px){.p-navigation__nav{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;width:100%}}.p-navigation .p-search-box{min-width:10em}@media (max-width:768px){.p-navigation .p-search-box{-ms-flex:1 0 auto;flex:1 0 auto;margin:-1px 1.5rem .5rem;-ms-flex-order:-1;order:-1}}@media (min-width:769px){.p-navigation .p-search-box{display:-ms-flexbox;display:flex;-ms-flex:1 1 auto;flex:1 1 auto;margin:.35rem 1rem auto auto;max-width:20rem;-ms-flex-order:1;order:1}}.p-navigation .row,.p-navigation__row{display:-ms-flexbox;display:flex;padding-left:0;padding-right:0;width:100%}@media (max-width:768px){.p-navigation .row,.p-navigation__row{-ms-flex-direction:column;flex-direction:column}}.p-navigation:target .p-navigation__nav{display:-ms-flexbox;display:flex}.p-navigation:target .p-navigation__toggle--open{display:none}@media (max-width:768px){.p-navigation:target .p-navigation__toggle--close{display:block}}.p-navigation__toggle--close,.p-navigation__toggle--open{display:none;margin:0 1.5rem auto 1rem;padding:.75rem 0}@media (max-width:768px){.p-navigation__toggle--open{display:block}}.p-navigation .u-image-position .u-image-position--right{-ms-flex-order:2;order:2;position:relative;right:unset}.p-navigation--sidebar{background-color:#fff;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;position:relative;-ms-flex-direction:column;flex-direction:column;height:auto}@media (max-width:768px){.p-navigation--sidebar{-ms-flex-direction:column;flex-direction:column}}.p-navigation--sidebar a,.p-navigation--sidebar a:focus,.p-navigation--sidebar a:hover,.p-navigation--sidebar a:visited{color:#111;text-decoration:none}.p-navigation--sidebar:after{background:#cdcdcd;bottom:0;content:"";height:.0625rem;left:0;position:absolute;right:0}.p-navigation--sidebar__banner{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-pack:justify;justify-content:space-between}.p-navigation--sidebar__image{-ms-flex-item-align:center;align-self:center;max-height:2rem;min-height:1.5rem}.p-navigation--sidebar__link>a{display:block;margin-bottom:0;position:relative}@media (max-width:768px){.p-navigation--sidebar__link>a{padding:.75rem 1.5rem}.p-navigation--sidebar__link>a:before{background:#cdcdcd;content:"";height:.0625rem;left:0;position:absolute;right:0;top:0}}@media (min-width:769px){.p-navigation--sidebar__link>a{border-left:1px solid #cdcdcd;padding:.75rem 1rem}.p-navigation--sidebar__link>a:before{background:#cdcdcd;bottom:0;content:"";height:.0625rem;left:0;position:absolute;right:0}}.p-navigation--sidebar__link>a:hover{background-color:#f7f7f7}@media (min-width:769px){.p-navigation--sidebar__link.is-selected>a{position:relative}.p-navigation--sidebar__link.is-selected>a:before{bottom:0;background-color:#666;content:"";position:absolute;height:.1875rem;width:auto;left:-1px;right:-1px;z-index:1}}.p-navigation--sidebar__links{list-style:none;margin:0;padding:0}@media (max-width:768px){.p-navigation--sidebar__links{margin-top:-1px}}@media (min-width:769px){.p-navigation--sidebar__links{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}}.p-navigation--sidebar__logo{-ms-flex:0 0 auto;flex:0 0 auto;height:3rem;margin:0 1rem 0 1.5rem}.p-navigation--sidebar__logo,.p-navigation--sidebar__logo .p-navigation__link{display:-ms-flexbox;display:flex}.p-navigation--sidebar__nav{display:none}@media (max-width:768px){.p-navigation--sidebar__nav{-ms-flex-direction:column;flex-direction:column}}@media (min-width:769px){.p-navigation--sidebar__nav{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;width:100%}}.p-navigation--sidebar .p-search-box{min-width:10em}@media (max-width:768px){.p-navigation--sidebar .p-search-box{-ms-flex:1 0 auto;flex:1 0 auto;margin:-1px 1.5rem .5rem;-ms-flex-order:-1;order:-1}}@media (min-width:769px){.p-navigation--sidebar .p-search-box{display:-ms-flexbox;display:flex;-ms-flex:1 1 auto;flex:1 1 auto;margin:.35rem 1rem auto auto;max-width:20rem;-ms-flex-order:1;order:1}}.p-navigation--sidebar .row,.p-navigation--sidebar__row{display:-ms-flexbox;display:flex;padding-left:0;padding-right:0;width:100%}@media (max-width:768px){.p-navigation--sidebar .row,.p-navigation--sidebar__row{-ms-flex-direction:column;flex-direction:column}}.p-navigation--sidebar:target .p-navigation__nav{display:-ms-flexbox;display:flex}.p-navigation--sidebar:target .p-navigation__toggle--open{display:none}@media (max-width:768px){.p-navigation--sidebar:target .p-navigation__toggle--close{display:block}}.p-navigation--sidebar__toggle--close,.p-navigation--sidebar__toggle--open{display:none;margin:0 1.5rem auto 1rem;padding:.75rem 0}@media (max-width:768px){.p-navigation--sidebar__toggle--open{display:block}}.p-navigation--sidebar .u-image-position .u-image-position--right{-ms-flex-order:2;order:2;position:relative;right:unset}.p-navigation--sidebar .p-navigation__banner .row{-ms-flex-direction:row;flex-direction:row}.p-navigation--sidebar .sidebar__cta{margin-top:0}.p-navigation--sidebar .sidebar__cta .p-inline-list{display:inline-block}.p-navigation--sidebar .sidebar__cta [class^=p-icon]{cursor:pointer}@media (min-width:769px){.p-navigation--sidebar .sidebar__cta{display:none}}.p-navigation--sidebar .sidebar__content{background:#fff;width:100%}@media (min-width:769px){.p-navigation--sidebar .sidebar__content{display:block!important}}.p-navigation--sidebar .sidebar__link{color:#111;display:block;position:relative}.p-navigation--sidebar .sidebar__link:hover{color:#007aa6}.p-navigation--sidebar .sidebar__link:focus{outline:0}.p-navigation--sidebar .p-navigation__logo{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;margin-left:0}.p-navigation--sidebar .p-navigation__logo .p-navigation__image{height:24px;width:auto}.p-navigation--sidebar .p-navigation__tagline{display:block}.p-navigation--sidebar .is-selected{font-weight:700}.p-navigation--sidebar .sidebar__first-level{padding-left:0}.p-navigation--sidebar .sidebar__third-level{background-color:#666;margin-right:-4rem;padding-left:4rem;position:relative;right:3rem}.p-navigation--sidebar .sidebar__second-level,.p-navigation--sidebar .sidebar__third-level{display:none;list-style:none;margin-left:0;padding-bottom:.25rem;padding-top:.25rem}.p-navigation--sidebar .sidebar__second-level .is-deepest-level,.p-navigation--sidebar .sidebar__third-level .is-deepest-level{background-color:#f7f7f7}.p-navigation--sidebar .p-icon--minus,.p-navigation--sidebar .p-icon--plus{perspective:800px;perspective-origin:50% 100px;position:absolute;right:1rem;top:.5rem;transition:all .5s ease-in-out}.p-navigation--sidebar .p-icon--minus{display:none}.p-navigation--sidebar .is-selected .p-icon--minus{display:block}.p-navigation--sidebar .is-selected .p-icon--plus{display:none}.p-navigation--sidebar .is-selected+.sidebar__second-level,.p-navigation--sidebar .is-selected+.sidebar__third-level{display:block}.p-accordion__list{list-style-type:none;margin:0 0 1.5rem;padding:0}.p-accordion__group:not(:last-child) .p-accordion__tab{border-bottom:1px solid #cdcdcd}.p-accordion__tab{background-position:top .84375rem right 1rem;background-repeat:no-repeat;background-color:inherit;border:0;border-radius:0;margin-bottom:0;padding-left:1rem;padding-right:1rem;text-align:left;transition-duration:0s;width:100%;z-index:2}.p-accordion__tab[aria-expanded=true]{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='9' width='9'%3E%3Cpath d='M0 5V4h9v1z' fill='%23666' fill-rule='evenodd'/%3E%3C/svg%3E");background-size:.75rem}.p-accordion__tab[aria-expanded=false]{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='9' width='9'%3E%3Cg fill='%23666' fill-rule='evenodd'%3E%3Cpath d='M4 0h1v9H4z'/%3E%3Cpath d='M0 5V4h9v1z'/%3E%3C/g%3E%3C/svg%3E");background-size:.75rem}.p-accordion__tab:focus{outline:1px solid #007aa6;outline-offset:2px}.p-accordion__panel{border-bottom:1px solid #cdcdcd;margin:0;overflow:auto;padding-left:2rem}.p-accordion__panel[aria-hidden=true]{display:none}.p-accordion p{margin-bottom:.6rem}.p-aside{border-top:1px solid #cdcdcd;font-size:.875rem;padding:0 1.5rem}@media (min-width:768px){.p-aside{border-left:1px solid #cdcdcd;border-top:0;padding:0 1rem}}.p-aside__header{color:#666;font-size:1rem;line-height:1.5;margin-bottom:1rem;text-transform:uppercase}.p-aside__section{padding:1rem 0}.p-aside__section:not(:last-child){border-bottom:1px dotted #cdcdcd}.p-aside__nav{list-style:none;margin:0;padding:0}.p-aside__nav .p-aside__link{border-bottom:0;color:#111;margin-bottom:.25rem}.p-aside__nav .p-aside__link:visited{color:#111}.p-aside__nav .p-aside__link:hover{color:#007aa6}.p-aside__nav .p-aside__link.is-active{font-weight:400;padding-left:.25rem}.p-breadcrumbs{list-style:none;margin:0;padding:0;width:100%}.p-breadcrumbs__item{display:inline-block;margin-bottom:.6rem}.p-breadcrumbs__item:not(:first-of-type){text-indent:1rem}.p-breadcrumbs__item:not(:first-of-type):before{content:"\203A";margin-left:-.75rem;margin-right:.5rem}.p-button{background-color:#fff;border-color:#cdcdcd}.p-button,.p-button:visited{color:#111}.p-button:active,.p-button:hover{background-color:#f7f7f7;border-color:#cdcdcd}.is--disabled.p-button:active,.is--disabled.p-button:hover,.p-button:disabled:active,.p-button:disabled:hover{background-color:#fff;border-color:#fff}.p-button .p-link--external{color:currentColor}.p-button--neutral{background-color:#fff;border-color:#cdcdcd;color:#111}.p-button--neutral:visited{color:#111}.p-button--neutral:active,.p-button--neutral:hover{background-color:#dedede;border-color:#cdcdcd}.is--disabled.p-button--neutral:active,.is--disabled.p-button--neutral:hover,.p-button--neutral:disabled:active,.p-button--neutral:disabled:hover{background-color:transparent;border-color:#cdcdcd}.p-button--neutral .p-link--external{color:currentColor}.p-button--brand{background-color:#333;border-color:#333;color:#fff}.p-button--brand:visited{color:#fff}.p-button--brand:active,.p-button--brand:hover{background-color:#1a1a1a;border-color:#1a1a1a}.is--disabled.p-button--brand:active,.is--disabled.p-button--brand:hover,.p-button--brand:disabled:active,.p-button--brand:disabled:hover{background-color:#333;border-color:#333}.p-button--brand .p-link--external{color:currentColor}.p-button--positive{background-color:#0e8420;border-color:#0e8420;color:#fff}.p-button--positive:visited{color:#fff}.p-button--positive:active,.p-button--positive:hover{background-color:#095615;border-color:#095615}.is--disabled.p-button--positive:active,.is--disabled.p-button--positive:hover,.p-button--positive:disabled:active,.p-button--positive:disabled:hover{background-color:#0e8420;border-color:#0e8420}.p-button--positive .p-link--external{color:currentColor}.p-button--negative{background-color:#c7162b;border-color:#c7162b;color:#fff}.p-button--negative:visited{color:#fff}.p-button--negative:active,.p-button--negative:hover{background-color:#991121;border-color:#991121}.is--disabled.p-button--negative:active,.is--disabled.p-button--negative:hover,.p-button--negative:disabled:active,.p-button--negative:disabled:hover{background-color:#c7162b;border-color:#c7162b}.p-button--negative .p-link--external{color:currentColor}.p-button--base{background-color:transparent;border-color:transparent;color:#111}.p-button--base:visited{color:#111}.p-button--base:active,.p-button--base:hover{background-color:#f7f7f7;border-color:transparent}.is--disabled.p-button--base:active,.is--disabled.p-button--base:hover,.p-button--base:disabled:active,.p-button--base:disabled:hover{background-color:transparent;border-color:#cdcdcd}.p-button--base .p-link--external{color:currentColor}@media (min-width:768px){[class^=p-button].is-inline{margin-left:1rem;width:auto}}.p-card{padding:.9375rem}.p-card--overlay{background:hsla(0,0%,100%,.9);color:#111}.p-card--muted,.p-card--overlay{margin-bottom:1.5rem;overflow:auto;padding:1rem}.p-card__image{margin-bottom:1rem;vertical-align:top;width:100%}.p-card__thumbnail{max-height:2rem}.p-card__content{margin-top:-1rem}.p-card__header{border-bottom:1px solid #cdcdcd;margin-bottom:1rem}.p-card__header>.p-link--soft{display:inline-block;overflow:auto}.p-code-numbered{counter-reset:a;padding:0}.p-code-numbered .code-line{display:inline-block;padding:.5rem 1rem 0 5.5rem;position:relative;width:100%}.p-code-numbered .code-line:empty{display:block;min-height:2.5rem}.p-code-numbered .code-line:last-of-type,.p-code-numbered .code-line:last-of-type:before{padding-bottom:.5rem}.p-code-numbered .code-line:before{background:#fff;border-right:1px solid #cdcdcd;color:#666;content:counter(a);counter-increment:a;display:inline-block;height:100%;left:0;padding:.5rem 1rem 0;pointer-events:none;position:absolute;text-align:right;top:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:4.5rem}.p-code-snippet{background-color:#fff;border:1px solid #cdcdcd;border-radius:.125rem;color:#111;display:-ms-flexbox;display:flex;overflow:hidden;padding-left:.5rem;padding-right:.5rem;position:relative;transition:border .2s,background-color .2s;width:100%}.p-code-snippet+.p-code-snippet{margin-top:0}.p-code-snippet__input{background-color:transparent;background-image:url('data:image/svg+xml;utf8, ');background-position:0;background-repeat:no-repeat;border:0;box-shadow:none;color:#666;font-family:Ubuntu Mono,Consolas,Monaco,Courier,monospace;font-weight:300;line-height:1.5rem;margin-bottom:0;padding:0;padding-left:1.5rem;width:100%}.p-code-snippet__action{background-color:#f7f7f7;background-image:url('data:image/svg+xml;utf8, ');background-position:50%;background-repeat:no-repeat;background-size:1rem;border-radius:0;display:block;height:100%;margin-bottom:0;margin-top:0;padding:0;position:absolute;right:0;text-indent:-9999px;top:0;width:40px}.p-code-snippet__action,.p-code-snippet__action:hover{border-color:transparent;border-left:1px solid #cdcdcd}.p-contextual-menu,.p-contextual-menu--center,.p-contextual-menu--left{display:inline-block;margin:0;position:relative}.p-contextual-menu__dropdown{display:none;margin:0;max-width:21rem;min-width:10rem;padding:0;position:absolute;right:0;top:calc(100% + .25rem);z-index:1}.p-contextual-menu__dropdown:after,.p-contextual-menu__dropdown:before{border-bottom:8px solid hsla(0,0%,7%,.05);border-left:8px solid transparent;border-right:8px solid transparent;bottom:100%;content:"";height:0;pointer-events:none;position:absolute;right:.5rem;width:0}.p-contextual-menu__dropdown:after{border-bottom:6px solid #fff;border-left:6px solid transparent;border-right:6px solid transparent;right:.6rem}.p-contextual-menu__dropdown[aria-hidden=false]{display:block}.p-contextual-menu__group{display:block;padding:.125rem 0}.p-contextual-menu__group+.p-contextual-menu__group{border-top:1px solid #cdcdcd;margin:0}.p-contextual-menu__link{border:0;clear:both;color:#111;display:block;line-height:1.5rem;margin:0;overflow:hidden;padding:.125rem .5rem;text-align:left;text-overflow:ellipsis;white-space:nowrap;width:100%}.p-contextual-menu__link:hover{background-color:#f7f7f7;text-decoration:none}.p-contextual-menu--left .p-contextual-menu__dropdown{left:0}.p-contextual-menu--left .p-contextual-menu__dropdown:after,.p-contextual-menu--left .p-contextual-menu__dropdown:before{left:.5rem;right:auto}.p-contextual-menu--left .p-contextual-menu__dropdown:after{left:.6rem}.p-contextual-menu--center .p-contextual-menu__dropdown{left:50%;transform:translateX(-50%)}.p-contextual-menu--center .p-contextual-menu__dropdown:after,.p-contextual-menu--center .p-contextual-menu__dropdown:before{left:50%;right:auto;transform:translateX(-50%)}@media (min-width:768px){.p-divider{display:-ms-flexbox;display:flex}}@media (max-width:768px){.p-divider__block{padding-bottom:1.5rem}.p-divider__block:not(:first-child){border-top:1px solid #cdcdcd;padding-top:.9375rem}}@media (min-width:768px){.p-divider__block{padding-right:1rem}.p-divider__block:not(:first-child):before{border-left:1px solid #cdcdcd;bottom:.5rem;content:"";left:-1.5rem;position:absolute;top:.5rem}.p-divider__block:last-child{padding-right:0}}.p-footer{border-top:1px solid #cdcdcd;position:relative}@media only screen and (max-width:1030px){.p-footer{padding-bottom:2rem;padding-top:2rem}}@media only screen and (min-width:1030px){.p-footer{padding-bottom:4rem;padding-top:4rem}}.p-footer__copy{margin-bottom:0}.p-footer__links{margin:0;padding:0}@media (min-width:768px){.p-footer__links{margin-top:0}}.p-footer__nav{margin-top:0}p+.p-footer__nav{margin-top:-1rem}.p-footer__item{display:block}@media (min-width:768px){.p-footer__item{display:inline-block}}.p-footer__item:last-child a:after{opacity:0}.p-footer__link{border-bottom:0;color:#111;display:inline-block}.p-footer__link:visited{color:#000}.p-footer__link:hover{color:#007aa6}@media (min-width:768px){.p-footer__link{margin-right:1rem;position:relative}.p-footer__link:after{content:"\00b7";display:inline-block;font-size:1.5rem;position:absolute;right:-.75rem;top:.4rem}}.p-footer__link:hover:after{color:#111}.p-form-help-text{color:#666}.p-form-validation .p-form-help-text,input+.p-form-help-text{margin-top:-.2rem}.p-form-validation{color:#111;position:relative}.p-form-validation .p-form-validation__input{background-position:calc(100% - .5rem) 50%;background-repeat:no-repeat}.p-form-validation .p-form-validation__icon{position:relative}.p-form-validation .p-form-validation__icon:after{position:absolute;right:.5rem;top:calc(50% - .25rem)}.p-form-help-text .p-form-validation__message,input+.p-form-validation__message{margin-top:-.2rem}.is-error .p-form-validation__input{background-image:url(https://assets.ubuntu.com/v1/4b0cd7fc-icon-error.svg);border-color:#c7162b}.is-success .p-form-validation__input{background-image:url(https://assets.ubuntu.com/v1/94949185-icon-success.svg);border-color:#0e8420}.is-caution .p-form-validation__input{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='16' width='16'%3E%3Cg color='%23000'%3E%3Cpath fill='none' d='M0 0h16v16H0z'/%3E%3Cpath stroke-linejoin='round' fill='%23f99b11' transform='matrix(2.28 0 0 2.437 -2180.8 -490.52)' stroke='%23f99b11' stroke-width='.848' d='M963.07 207.03h-6.15l3.08-5.33z'/%3E%3Cpath d='M7 5v5h2V5H7zm0 6v2h2v-2H7z' fill='%23111'/%3E%3C/g%3E%3C/svg%3E");border-color:#f99b11}.p-form--stacked{width:100%}@media screen and (min-width:768px){.p-form--stacked .p-form__group{-ms-flex-align:baseline;align-items:baseline;display:-ms-flexbox;display:flex;-ms-flex-flow:wrap;flex-flow:wrap}.p-form--stacked .p-form__group+.p-form__group{margin-top:.5rem}}@media screen and (min-width:768px){.p-form--stacked .p-form__label{-ms-flex-preferred-size:25%;flex-basis:25%;-ms-flex-positive:1;flex-grow:1;margin:0;max-width:25%;padding-right:.5rem}}@media screen and (min-width:768px){.p-form--stacked .p-form__control{-ms-flex-preferred-size:75%;flex-basis:75%;-ms-flex-positive:1;flex-grow:1;margin:0;max-width:75%}}@media screen and (min-width:768px){.p-form--inline{-ms-flex-align:baseline;align-items:baseline;display:-ms-inline-flexbox;display:inline-flex;-ms-flex-direction:row;flex-direction:row}.p-form--inline>*{margin:0}}@media screen and (min-width:768px){.p-form--inline .p-form__group{display:-ms-inline-flexbox;display:inline-flex;width:auto}.p-form--inline .p-form__group+.p-form__group,.p-form--inline .p-form__group+[class*=p-button]{margin-left:1.5rem}.p-form--inline .p-form__group .p-form-validation__message,.p-form--inline .p-form__group .p-form__control,.p-form--inline .p-form__group .p-form__label{-ms-flex-item-align:baseline;align-self:baseline;box-sizing:border-box}.p-form--inline .p-form__group .p-form__label{-ms-flex-negative:0;flex-shrink:0;padding-right:1rem}.p-form--inline .p-form__group .p-form__control{display:inline-block}.p-form--inline .p-form__group .p-form-help-text,.p-form--inline .p-form__group .p-form-validation__message{clear:both;min-width:100%;width:0}}.p-form--inline [class*=p-button]{-ms-flex:initial;flex:initial;-ms-flex-negative:0;flex-shrink:0;margin-top:0}form+[class*=p-button]{margin-top:1.5rem}.row{width:100%}[grid-demo] [class*=col-]{background:#cdcdcd;margin-bottom:.5rem}[grid-outline] [class*=col-]{outline:1px solid #fff;padding:.5rem}@media screen and (max-width:400px){@-ms-viewport{width:320px}}img{max-width:100%;height:auto}@media \0screen{img{width:auto}}.row{*zoom:1;margin-right:auto;margin-left:auto;max-width:64.875rem;padding-left:1.5rem;padding-right:1.5rem}.row:after,.row:before{display:table;content:" "}.row:after{clear:both}.row .row{margin-right:0;margin-left:0;max-width:none;padding-right:0;padding-left:0}.mobile-col-1,.mobile-col-2,.mobile-col-3{display:block;float:left;min-height:1px;position:relative;*margin-right:-1px;margin-left:7.80829%}.first-mobile-col,.row .mobile-col-1:first-child,.row .mobile-col-2:first-child,.row .mobile-col-3:first-child{margin-left:0}.mobile-col-1{width:19.14379%}.mobile-col-2{width:46.09586%}.mobile-col-3{width:73.04793%}@media screen and (min-width:620px){.tablet-col-1,.tablet-col-2,.tablet-col-3,.tablet-col-4,.tablet-col-5{display:block;float:left;min-height:1px;position:relative;*margin-right:-1px;margin-left:4.93155%}.first-tablet-col,.row .tablet-col-1:first-child,.row .tablet-col-2:first-child,.row .tablet-col-3:first-child,.row .tablet-col-4:first-child,.row .tablet-col-5:first-child{margin-left:0}.tablet-col-1{width:12.55704%}.tablet-col-2{width:30.04563%}.tablet-col-3{width:47.53423%}.tablet-col-4{width:65.02282%}.tablet-col-5{width:82.51141%}}@media screen and (min-width:768px){.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11{display:block;float:left;min-height:1px;position:relative;*margin-right:-1px;margin-left:3.2877%}.first-col,.row .col-1:first-child,.row .col-2:first-child,.row .col-3:first-child,.row .col-4:first-child,.row .col-5:first-child,.row .col-6:first-child,.row .col-7:first-child,.row .col-8:first-child,.row .col-9:first-child,.row .col-10:first-child,.row .col-11:first-child{margin-left:0}.col-1{width:5.31961%}.col-2{width:13.92692%}.col-3{width:22.53423%}.col-4{width:31.14153%}.col-5{width:39.74884%}.col-6{width:48.35615%}.col-7{width:56.96346%}.col-8{width:65.57077%}.col-9{width:74.17808%}.col-10{width:82.78538%}.col-11{width:91.39269%}.prefix-1{padding-left:8.60731%}.prefix-2{padding-left:17.21462%}.prefix-3{padding-left:25.82192%}.prefix-4{padding-left:34.42923%}.prefix-5{padding-left:43.03654%}.prefix-6{padding-left:51.64385%}.prefix-7{padding-left:60.25116%}.prefix-8{padding-left:68.85847%}.prefix-9{padding-left:77.46577%}.prefix-10{padding-left:86.07308%}.prefix-11{padding-left:94.68039%}.suffix-1{padding-right:8.60731%}.suffix-2{padding-right:17.21462%}.suffix-3{padding-right:25.82192%}.suffix-4{padding-right:34.42923%}.suffix-5{padding-right:43.03654%}.suffix-6{padding-right:51.64385%}.suffix-7{padding-right:60.25116%}.suffix-8{padding-right:68.85847%}.suffix-9{padding-right:77.46577%}.suffix-10{padding-right:86.07308%}.suffix-11{padding-right:94.68039%}.push-1{left:8.60731%}.push-2{left:17.21462%}.push-3{left:25.82192%}.push-4{left:34.42923%}.push-5{left:43.03654%}.push-6{left:51.64385%}.push-7{left:60.25116%}.push-8{left:68.85847%}.push-9{left:77.46577%}.push-10{left:86.07308%}.push-11{left:94.68039%}.pull-1{right:8.60731%}.pull-2{right:17.21462%}.pull-3{right:25.82192%}.pull-4{right:34.42923%}.pull-5{right:43.03654%}.pull-6{right:51.64385%}.pull-7{right:60.25116%}.pull-8{right:68.85847%}.pull-9{right:77.46577%}.pull-10{right:86.07308%}.pull-11{right:94.68039%}.col-11 .col-1,.col-11 .col-2,.col-11 .col-3,.col-11 .col-4,.col-11 .col-5,.col-11 .col-6,.col-11 .col-7,.col-11 .col-8,.col-11 .col-9,.col-11 .col-10{margin-left:3.59733%}.col-11 .col-1{width:5.82061%}.col-11 .col-2{width:15.23855%}.col-11 .col-3{width:24.65649%}.col-11 .col-4{width:34.07442%}.col-11 .col-5{width:43.49236%}.col-11 .col-6{width:52.9103%}.col-11 .col-7{width:62.32824%}.col-11 .col-8{width:71.74618%}.col-11 .col-9{width:81.16412%}.col-11 .col-10{width:90.58206%}.col-10 .col-1,.col-10 .col-2,.col-10 .col-3,.col-10 .col-4,.col-10 .col-5,.col-10 .col-6,.col-10 .col-7,.col-10 .col-8,.col-10 .col-9{margin-left:3.97135%}.col-10 .col-1{width:6.42578%}.col-10 .col-2{width:16.82292%}.col-10 .col-3{width:27.22005%}.col-10 .col-4{width:37.61719%}.col-10 .col-5{width:48.01432%}.col-10 .col-6{width:58.41146%}.col-10 .col-7{width:68.80859%}.col-10 .col-8{width:79.20573%}.col-10 .col-9{width:89.60286%}.col-9 .col-1,.col-9 .col-2,.col-9 .col-3,.col-9 .col-4,.col-9 .col-5,.col-9 .col-6,.col-9 .col-7,.col-9 .col-8{margin-left:4.43217%}.col-9 .col-1{width:7.1714%}.col-9 .col-2{width:18.77498%}.col-9 .col-3{width:30.37855%}.col-9 .col-4{width:41.98213%}.col-9 .col-5{width:53.5857%}.col-9 .col-6{width:65.18928%}.col-9 .col-7{width:76.79285%}.col-9 .col-8{width:88.39643%}.col-8 .col-1,.col-8 .col-2,.col-8 .col-3,.col-8 .col-4,.col-8 .col-5,.col-8 .col-6,.col-8 .col-7{margin-left:5.01397%}.col-8 .col-1{width:8.11278%}.col-8 .col-2{width:21.23952%}.col-8 .col-3{width:34.36627%}.col-8 .col-4{width:47.49301%}.col-8 .col-5{width:60.61976%}.col-8 .col-6{width:73.74651%}.col-8 .col-7{width:86.87325%}.col-7 .col-1,.col-7 .col-2,.col-7 .col-3,.col-7 .col-4,.col-7 .col-5,.col-7 .col-6{margin-left:5.77159%}.col-7 .col-1{width:9.33863%}.col-7 .col-2{width:24.44886%}.col-7 .col-3{width:39.55909%}.col-7 .col-4{width:54.66932%}.col-7 .col-5{width:69.77954%}.col-7 .col-6{width:84.88977%}.col-6 .col-1,.col-6 .col-2,.col-6 .col-3,.col-6 .col-4,.col-6 .col-5{margin-left:6.79893%}.col-6 .col-1{width:11.00089%}.col-6 .col-2{width:28.80072%}.col-6 .col-3{width:46.60054%}.col-6 .col-4{width:64.40036%}.col-6 .col-5{width:82.20018%}.col-5 .col-1,.col-5 .col-2,.col-5 .col-3,.col-5 .col-4{margin-left:8.27118%}.col-5 .col-1{width:13.38305%}.col-5 .col-2{width:35.03729%}.col-5 .col-3{width:56.69153%}.col-5 .col-4{width:78.34576%}.col-4 .col-1,.col-4 .col-2,.col-4 .col-3{margin-left:10.55728%}.col-4 .col-1{width:17.08204%}.col-4 .col-2{width:44.72136%}.col-4 .col-3{width:72.36068%}.col-3 .col-1,.col-3 .col-2{margin-left:14.5898%}.col-3 .col-1{width:23.6068%}.col-3 .col-2{width:61.8034%}.col-2 .col-1{margin-left:23.6068%;width:38.1966%}}.row .center-col{float:none;margin-left:auto!important;margin-right:auto}@media screen and (max-width:619px){.hidden-mobile,.visible-desktop,.visible-tablet{display:none!important}}@media screen and (min-width:620px) and (max-width:767px){.hidden-tablet,.visible-desktop,.visible-mobile{display:none!important}}@media screen and (min-width:768px){.hidden-desktop,.visible-mobile,.visible-tablet{display:none!important}}.p-heading-icon{margin-bottom:1rem}@media (min-width:768px){.p-heading-icon{margin-bottom:0}}.p-heading-icon__header{display:-ms-flexbox;display:flex;margin-bottom:.75rem}.p-heading-icon__title{margin-bottom:0;padding-top:0}.p-heading-icon__img{-ms-flex-negative:0;flex-shrink:0;height:2.5rem;margin-right:1rem;width:2.5rem}@media (min-width:768px){.p-heading-icon__img{height:3.75rem;width:3.75rem}}.p-icon--plus{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='9' width='9'%3E%3Cg fill='%23666' fill-rule='evenodd'%3E%3Cpath d='M4 0h1v9H4z'/%3E%3Cpath d='M0 5V4h9v1z'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--plus.is-light,[class*="--dark"] .p-icon--plus{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='9' width='9'%3E%3Cg fill='%23cdcdcd' fill-rule='evenodd'%3E%3Cpath d='M4 0h1v9H4z'/%3E%3Cpath d='M0 5V4h9v1z'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--minus{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='9' width='9'%3E%3Cpath d='M0 5V4h9v1z' fill='%23666' fill-rule='evenodd'/%3E%3C/svg%3E")}.p-icon--minus.is-light,[class*="--dark"] .p-icon--minus{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='9' width='9'%3E%3Cpath d='M0 5V4h9v1z' fill='%23cdcdcd' fill-rule='evenodd'/%3E%3C/svg%3E")}.p-icon--expand{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='15' width='15' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath id='a' d='M0 0h15v15H0z'/%3E%3C/defs%3E%3Cg fill-rule='evenodd' fill='none'%3E%3Cuse xlink:href='%23a'/%3E%3Cpath stroke='%23666' d='M.5.5h14v14H.5z'/%3E%3Cpath fill='%23666' d='M7 4h1v7H7z'/%3E%3Cpath fill='%23666' d='M4 8V7h7v1z'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--expand.is-light,[class*="--dark"] .p-icon--expand{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='15' width='15' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath id='a' d='M0 0h15v15H0z'/%3E%3C/defs%3E%3Cg fill-rule='evenodd' fill='none'%3E%3Cuse xlink:href='%23a'/%3E%3Cpath stroke='%23cdcdcd' d='M.5.5h14v14H.5z'/%3E%3Cpath fill='%23cdcdcd' d='M7 4h1v7H7z'/%3E%3Cpath fill='%23cdcdcd' d='M4 8V7h7v1z'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--collapse{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='15' width='15' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath id='a' d='M0 0h15v15H0z'/%3E%3C/defs%3E%3Cg fill-rule='evenodd' fill='none'%3E%3Cuse xlink:href='%23a'/%3E%3Cpath stroke='%23666' d='M.5.5h14v14H.5z'/%3E%3Cpath fill='%23666' d='M4 8V7h7v1z'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--collapse.is-light,[class*="--dark"] .p-icon--collapse{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='15' width='15' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath id='a' d='M0 0h15v15H0z'/%3E%3C/defs%3E%3Cg fill-rule='evenodd' fill='none'%3E%3Cuse xlink:href='%23a'/%3E%3Cpath stroke='%23cdcdcd' d='M.5.5h14v14H.5z'/%3E%3Cpath fill='%23cdcdcd' d='M4 8V7h7v1z'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--chevron{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='4' width='10'%3E%3Cpath d='M3.637 3.138A26.335 26.335 0 0 1 0 0h1.541a21.242 21.242 0 0 0 1.364 1.187 16.899 16.899 0 0 0 .752.563 19.8 19.8 0 0 0 1.315.848h.054a19.8 19.8 0 0 0 1.315-.848c.398-.28.788-.583 1.169-.904.327-.275.643-.557.947-.846h1.541a26.335 26.335 0 0 1-3.637 3.138c-.519.365-.973.652-1.362.862-.39-.21-.844-.497-1.362-.862z' fill='%23666' fill-rule='evenodd'/%3E%3C/svg%3E")}.p-icon--chevron.is-light,[class*="--dark"] .p-icon--chevron{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='4' width='10'%3E%3Cpath d='M3.637 3.138A26.335 26.335 0 0 1 0 0h1.541a21.242 21.242 0 0 0 1.364 1.187 16.899 16.899 0 0 0 .752.563 19.8 19.8 0 0 0 1.315.848h.054a19.8 19.8 0 0 0 1.315-.848c.398-.28.788-.583 1.169-.904.327-.275.643-.557.947-.846h1.541a26.335 26.335 0 0 1-3.637 3.138c-.519.365-.973.652-1.362.862-.39-.21-.844-.497-1.362-.862z' fill='%23cdcdcd' fill-rule='evenodd'/%3E%3C/svg%3E")}.p-icon--close{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='90' width='90'%3E%3Cg color='%23000'%3E%3Cpath fill='none' d='M0 0h90v90H0z'/%3E%3Cpath d='M14.52 6L6 14.52 36.48 45 6 75.49 14.52 84 45 53.52 75.48 84 84 75.49 53.52 45 84 14.52 75.48 6 45 36.49z' fill='%23666'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--close.is-light,[class*="--dark"] .p-icon--close{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='90' width='90'%3E%3Cg color='%23000'%3E%3Cpath fill='none' d='M0 0h90v90H0z'/%3E%3Cpath d='M14.52 6L6 14.52 36.48 45 6 75.49 14.52 84 45 53.52 75.48 84 84 75.49 53.52 45 84 14.52 75.48 6 45 36.49z' fill='%23cdcdcd'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--help{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='16' width='16'%3E%3Cpath fill='none' color='%23000' d='M-.003.002h16v16h-16z'/%3E%3Cpath d='M8.004 5.23q-.431 0-.825.11-.394.098-.825.332l-.419-1.145q.456-.258 1.035-.406.59-.16 1.206-.16.739 0 1.219.21.48.196.763.504.283.308.394.677.111.37.111.714 0 .419-.16.751-.148.333-.382.616t-.504.542q-.271.246-.505.517-.234.258-.394.554-.148.295-.148.664v.148q0 .074.012.148h-1.28q-.025-.123-.037-.259-.012-.147-.012-.27 0-.407.135-.727.136-.32.345-.59t.443-.506q.246-.234.456-.467.209-.234.344-.48.136-.247.136-.542 0-.407-.283-.665-.271-.271-.825-.271zm.98 6.78q0 .43-.283.7-.284.272-.702.272-.406 0-.702-.271-.283-.271-.283-.702 0-.43.283-.702.296-.283.702-.283.418 0 .702.283.283.271.283.702z' fill='%23666'/%3E%3Cpath d='M2.064 1.002c-.591 0-1.067.476-1.067 1.067v11.867c0 .591.476 1.067 1.067 1.067H13.93c.591 0 1.067-.476 1.067-1.067V2.07c0-.591-.476-1.067-1.067-1.067zm-.067 1h12v12h-12z' fill='%23666' color='%23000'/%3E%3C/svg%3E")}.p-icon--help.is-light,[class*="--dark"] .p-icon--help{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='16' width='16'%3E%3Cpath fill='none' color='%23000' d='M-.003.002h16v16h-16z'/%3E%3Cpath d='M8.004 5.23q-.431 0-.825.11-.394.098-.825.332l-.419-1.145q.456-.258 1.035-.406.59-.16 1.206-.16.739 0 1.219.21.48.196.763.504.283.308.394.677.111.37.111.714 0 .419-.16.751-.148.333-.382.616t-.504.542q-.271.246-.505.517-.234.258-.394.554-.148.295-.148.664v.148q0 .074.012.148h-1.28q-.025-.123-.037-.259-.012-.147-.012-.27 0-.407.135-.727.136-.32.345-.59t.443-.506q.246-.234.456-.467.209-.234.344-.48.136-.247.136-.542 0-.407-.283-.665-.271-.271-.825-.271zm.98 6.78q0 .43-.283.7-.284.272-.702.272-.406 0-.702-.271-.283-.271-.283-.702 0-.43.283-.702.296-.283.702-.283.418 0 .702.283.283.271.283.702z' fill='%23cdcdcd'/%3E%3Cpath d='M2.064 1.002c-.591 0-1.067.476-1.067 1.067v11.867c0 .591.476 1.067 1.067 1.067H13.93c.591 0 1.067-.476 1.067-1.067V2.07c0-.591-.476-1.067-1.067-1.067zm-.067 1h12v12h-12z' fill='%23cdcdcd' color='%23000'/%3E%3C/svg%3E")}.p-icon--information{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='16' width='16'%3E%3Cg color='%23000'%3E%3Cpath d='M2.07 1c-.59 0-1.066.475-1.066 1.066v11.867c0 .591.475 1.067 1.066 1.067h11.867c.591 0 1.066-.476 1.066-1.067V2.066c0-.59-.475-1.066-1.066-1.066zm-.066 1h12v12h-12z' fill='%23666'/%3E%3Cpath d='M7 4v2h2V4zm0 3v5h2V7z' fill='%23666'/%3E%3Cpath fill='none' d='M0 0h16v16H0z'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--information.is-light,[class*="--dark"] .p-icon--information{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='16' width='16'%3E%3Cg color='%23000'%3E%3Cpath d='M2.07 1c-.59 0-1.066.475-1.066 1.066v11.867c0 .591.475 1.067 1.066 1.067h11.867c.591 0 1.066-.476 1.066-1.067V2.066c0-.59-.475-1.066-1.066-1.066zm-.066 1h12v12h-12z' fill='%23cdcdcd'/%3E%3Cpath d='M7 4v2h2V4zm0 3v5h2V7z' fill='%23cdcdcd'/%3E%3Cpath fill='none' d='M0 0h16v16H0z'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--delete{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='16' width='16'%3E%3Cg color='%23000'%3E%3Cpath fill='none' d='M0 0h16v16H0z'/%3E%3Cpath fill='none' d='M0 0h16v16H0z'/%3E%3Cpath fill='none' d='M0 0h16v16H0z'/%3E%3Cpath style='text-decoration-color:%23000;isolation:auto;mix-blend-mode:normal;block-progression:tb;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none' d='M2 4v1h2V4H2zm11 0v1h2V4h-2zM2 6v8.506c0 .822.678 1.5 1.5 1.5h10c.822 0 1.5-.678 1.5-1.5V6h-2v7.506c0 .286-.214.5-.5.5h-8a.488.488 0 0 1-.5-.5V6H2z' fill='%23666'/%3E%3Cpath d='M6 0v3h1V1h3v2h1V0H6zM5 6h1v6H5zm3 0h1v6H8zm3 0h1v6h-1z' fill='%23666'/%3E%3Cpath style='text-decoration-color:%23000;isolation:auto;mix-blend-mode:normal;block-progression:tb;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none' d='M3.5 2C2.678 2 2 2.678 2 3.5V5h13V3.5c0-.822-.678-1.5-1.5-1.5h-10zM2 6v8.006h2V6H2zm11 0v8.006h2V6h-2z' fill='%23666'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--delete.is-light,[class*="--dark"] .p-icon--delete{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='16' width='16'%3E%3Cg color='%23000'%3E%3Cpath fill='none' d='M0 0h16v16H0z'/%3E%3Cpath fill='none' d='M0 0h16v16H0z'/%3E%3Cpath fill='none' d='M0 0h16v16H0z'/%3E%3Cpath style='text-decoration-color:%23000;isolation:auto;mix-blend-mode:normal;block-progression:tb;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none' d='M2 4v1h2V4H2zm11 0v1h2V4h-2zM2 6v8.506c0 .822.678 1.5 1.5 1.5h10c.822 0 1.5-.678 1.5-1.5V6h-2v7.506c0 .286-.214.5-.5.5h-8a.488.488 0 0 1-.5-.5V6H2z' fill='%23cdcdcd'/%3E%3Cpath d='M6 0v3h1V1h3v2h1V0H6zM5 6h1v6H5zm3 0h1v6H8zm3 0h1v6h-1z' fill='%23cdcdcd'/%3E%3Cpath style='text-decoration-color:%23000;isolation:auto;mix-blend-mode:normal;block-progression:tb;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none' d='M3.5 2C2.678 2 2 2.678 2 3.5V5h13V3.5c0-.822-.678-1.5-1.5-1.5h-10zM2 6v8.006h2V6H2zm11 0v8.006h2V6h-2z' fill='%23cdcdcd'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--error{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='16' viewBox='0 0 16.000017 16.000017' width='16'%3E%3Cg stroke-width='1.5' color='%23000'%3E%3Cpath d='M8 0C3.59 0 0 3.59 0 8s3.59 8 8 8 8-3.59 8-8-3.59-8-8-8z' fill='%23c7162b'/%3E%3Cpath fill='none' d='M0 0h16v16H0z'/%3E%3Cpath d='M5 5l6 6m0-6l-6 6' stroke-dashoffset='.8' stroke='%23fff' fill='none'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--warning{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='16' width='16'%3E%3Cg color='%23000'%3E%3Cpath fill='none' d='M0 0h16v16H0z'/%3E%3Cpath stroke-linejoin='round' fill='%23f99b11' transform='matrix(2.28 0 0 2.437 -2180.8 -490.52)' stroke='%23f99b11' stroke-width='.848' d='M963.07 207.03h-6.15l3.08-5.33z'/%3E%3Cpath d='M7 5v5h2V5H7zm0 6v2h2v-2H7z' fill='%23111'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--external-link{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='16' width='16'%3E%3Cpath fill='none' d='M.003.001h16v16h-16z'/%3E%3Cpath d='M8.581 2.068S12.208.631 16-.005c.002 0 .002 0 .002.002v.006h.002c-.708 3.964-2.08 7.406-2.08 7.406L8.58 2.069z' fill='%23666'/%3E%3Cpath stroke-linejoin='round' d='M7.87 8.128l4.446-4.445' stroke='%23666' stroke-width='2' fill='none'/%3E%3Cpath d='M1.503 2.001c-.822 0-1.5.678-1.5 1.5v11c0 .823.678 1.5 1.5 1.5h11c.823 0 1.5-.677 1.5-1.5v-5.5h-2v4.5c0 .287-.214.5-.5.5h-9a.488.488 0 0 1-.5-.5v-9c0-.285.215-.5.5-.5h4.5v-2h-5.5z' fill='%23666'/%3E%3C/svg%3E")}.p-icon--external-link.is-light,[class*="--dark"] .p-icon--external-link{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='16' width='16'%3E%3Cpath fill='none' d='M.003.001h16v16h-16z'/%3E%3Cpath d='M8.581 2.068S12.208.631 16-.005c.002 0 .002 0 .002.002v.006h.002c-.708 3.964-2.08 7.406-2.08 7.406L8.58 2.069z' fill='%23cdcdcd'/%3E%3Cpath stroke-linejoin='round' d='M7.87 8.128l4.446-4.445' stroke='%23cdcdcd' stroke-width='2' fill='none'/%3E%3Cpath d='M1.503 2.001c-.822 0-1.5.678-1.5 1.5v11c0 .823.678 1.5 1.5 1.5h11c.823 0 1.5-.677 1.5-1.5v-5.5h-2v4.5c0 .287-.214.5-.5.5h-9a.488.488 0 0 1-.5-.5v-9c0-.285.215-.5.5-.5h4.5v-2h-5.5z' fill='%23cdcdcd'/%3E%3C/svg%3E")}.p-icon--contextual-menu{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='14' width='6' viewBox='0 0 6 14'%3E%3Cg fill-rule='evenodd' fill='none'%3E%3Cpath d='M-10-6h26v26h-26z'/%3E%3Cpath fill-rule='nonzero' fill='%23666' d='M0 0v2h6V0M0 6v2h6V6m-6 6v2h6v-2'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--contextual-menu.is-light,[class*="--dark"] .p-icon--contextual-menu{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='14' width='6' viewBox='0 0 6 14'%3E%3Cg fill-rule='evenodd' fill='none'%3E%3Cpath d='M-10-6h26v26h-26z'/%3E%3Cpath fill-rule='nonzero' fill='%23cdcdcd' d='M0 0v2h6V0M0 6v2h6V6m-6 6v2h6v-2'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--code{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='16' width='16'%3E%3Cpath opacity='.212' fill='none' d='M.005.002h16v16h-16z'/%3E%3Cpath d='M2.671 2.002c-1.778 0-2.666 0-2.666 2.068v8.866c0 2.067.888 2.066 2.666 2.066H13.34c1.778 0 2.666 0 2.666-2.066v-8.8c0-2.133-.888-2.134-2.666-2.134H2.671zm1.28 1.89h1.101v1.143c.339.028.642.078.91.148.268.064.48.128.635.192L6.333 6.42a6.601 6.601 0 0 0-.73-.222 3.858 3.858 0 0 0-.953-.106c-.382 0-.67.072-.86.213a.646.646 0 0 0-.285.56c0 .142.028.261.084.36a.875.875 0 0 0 .256.254c.113.07.25.142.412.213.162.063.346.13.55.201.29.113.561.233.815.36.261.12.487.266.678.435.19.163.34.356.445.582.113.226.17.494.17.805a1.8 1.8 0 0 1-.433 1.207c-.29.339-.766.558-1.43.657v1.324H3.95V11.97c-.508-.036-.922-.103-1.24-.201a4.692 4.692 0 0 1-.697-.286l.36-1.005a4.8 4.8 0 0 0 .814.306c.324.092.692.139 1.101.139.487 0 .823-.072 1.006-.213a.703.703 0 0 0 .287-.582.764.764 0 0 0-.117-.424 1.09 1.09 0 0 0-.328-.319 2.828 2.828 0 0 0-.508-.253c-.19-.078-.404-.158-.637-.243a8.505 8.505 0 0 1-.656-.265 2.866 2.866 0 0 1-.582-.36c-.17-.148-.306-.324-.412-.529s-.16-.456-.16-.752c0-.487.146-.901.435-1.24.29-.346.734-.567 1.334-.666V3.892zm4.054 8.096h3.99v.996h-3.99v-.996z' fill='%23666'/%3E%3C/svg%3E")}.p-icon--code.is-light,[class*="--dark"] .p-icon--code{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='16' width='16'%3E%3Cpath opacity='.212' fill='none' d='M.005.002h16v16h-16z'/%3E%3Cpath d='M2.671 2.002c-1.778 0-2.666 0-2.666 2.068v8.866c0 2.067.888 2.066 2.666 2.066H13.34c1.778 0 2.666 0 2.666-2.066v-8.8c0-2.133-.888-2.134-2.666-2.134H2.671zm1.28 1.89h1.101v1.143c.339.028.642.078.91.148.268.064.48.128.635.192L6.333 6.42a6.601 6.601 0 0 0-.73-.222 3.858 3.858 0 0 0-.953-.106c-.382 0-.67.072-.86.213a.646.646 0 0 0-.285.56c0 .142.028.261.084.36a.875.875 0 0 0 .256.254c.113.07.25.142.412.213.162.063.346.13.55.201.29.113.561.233.815.36.261.12.487.266.678.435.19.163.34.356.445.582.113.226.17.494.17.805a1.8 1.8 0 0 1-.433 1.207c-.29.339-.766.558-1.43.657v1.324H3.95V11.97c-.508-.036-.922-.103-1.24-.201a4.692 4.692 0 0 1-.697-.286l.36-1.005a4.8 4.8 0 0 0 .814.306c.324.092.692.139 1.101.139.487 0 .823-.072 1.006-.213a.703.703 0 0 0 .287-.582.764.764 0 0 0-.117-.424 1.09 1.09 0 0 0-.328-.319 2.828 2.828 0 0 0-.508-.253c-.19-.078-.404-.158-.637-.243a8.505 8.505 0 0 1-.656-.265 2.866 2.866 0 0 1-.582-.36c-.17-.148-.306-.324-.412-.529s-.16-.456-.16-.752c0-.487.146-.901.435-1.24.29-.346.734-.567 1.334-.666V3.892zm4.054 8.096h3.99v.996h-3.99v-.996z' fill='%23cdcdcd'/%3E%3C/svg%3E")}.p-icon--menu{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='19' width='25' viewBox='0 0 79 60'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath fill='%23666' d='M.995 0h78v12h-78zm0 24h78v12h-78zm0 24h78v12h-78z'/%3E%3Cpath d='M-5.005-15h90v90h-90z'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--menu.is-light,[class*="--dark"] .p-icon--menu{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='19' width='25' viewBox='0 0 79 60'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath fill='%23cdcdcd' d='M.995 0h78v12h-78zm0 24h78v12h-78zm0 24h78v12h-78z'/%3E%3Cpath d='M-5.005-15h90v90h-90z'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--copy{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='17' width='16'%3E%3Cg fill='%23666' fill-rule='evenodd'%3E%3Cpath d='M10.587 1.8h3.259c.472 0 .846.053 1.161.2s.567.412.716.748c.298.67.266 1.491.277 2.613v8.479c-.011 1.121.021 1.942-.277 2.613-.149.335-.401.6-.716.747s-.689.2-1.161.2H4.154c-.472 0-.846-.053-1.16-.2s-.568-.412-.717-.747c-.246-.554-.268-1.21-.273-2.053h.803c.016.854.058 1.428.178 1.707.072.166.151.26.336.348s.477.145.896.145h9.566c.42 0 .712-.057.897-.145a.602.602 0 0 0 .335-.348c.143-.331.175-1.081.185-2.222V5.309c-.01-1.137-.042-1.885-.185-2.216a.603.603 0 0 0-.335-.348c-.185-.088-.477-.145-.897-.145h-3.538c.182-.225.304-.5.342-.8zm-3.174 0c.038.3.16.575.341.8H4.217c-.42 0-.712.057-.896.145a.603.603 0 0 0-.336.348c-.143.33-.175 1.079-.185 2.216V10.8H2V5.361c.01-1.122-.021-1.942.277-2.613.149-.336.401-.601.716-.748s.689-.2 1.16-.2h3.26z'/%3E%3Cpath fill-rule='nonzero' d='M11.398 1.8v2.4H6.6V1.8h1.6c0 .447.353.8.8.8a.794.794 0 0 0 .799-.8h1.6z'/%3E%3Cpath fill-rule='nonzero' d='M10.6 1.6c0 .879-.722 1.6-1.6 1.6-.879 0-1.6-.721-1.6-1.6C7.4.72 8.121 0 9 0c.879 0 1.6.72 1.6 1.6zm-.8 0c0-.447-.354-.8-.8-.8-.447 0-.8.353-.8.8 0 .446.353.8.8.8.446 0 .8-.354.8-.8z'/%3E%3Cpath d='M8.4 7.2H14v1H8.4zm0 2.4H14v1H8.4zM10 12h4v1h-4z'/%3E%3Cpath fill-rule='nonzero' d='M4.4 10s2.134 1.026 4 2.505h-.002C6.427 14.03 4.4 15 4.4 15v-5z'/%3E%3Cpath d='M0 11.6h4.4v2H0z'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--copy.is-light,[class*="--dark"] .p-icon--copy{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='17' width='16'%3E%3Cg fill='%23cdcdcd' fill-rule='evenodd'%3E%3Cpath d='M10.587 1.8h3.259c.472 0 .846.053 1.161.2s.567.412.716.748c.298.67.266 1.491.277 2.613v8.479c-.011 1.121.021 1.942-.277 2.613-.149.335-.401.6-.716.747s-.689.2-1.161.2H4.154c-.472 0-.846-.053-1.16-.2s-.568-.412-.717-.747c-.246-.554-.268-1.21-.273-2.053h.803c.016.854.058 1.428.178 1.707.072.166.151.26.336.348s.477.145.896.145h9.566c.42 0 .712-.057.897-.145a.602.602 0 0 0 .335-.348c.143-.331.175-1.081.185-2.222V5.309c-.01-1.137-.042-1.885-.185-2.216a.603.603 0 0 0-.335-.348c-.185-.088-.477-.145-.897-.145h-3.538c.182-.225.304-.5.342-.8zm-3.174 0c.038.3.16.575.341.8H4.217c-.42 0-.712.057-.896.145a.603.603 0 0 0-.336.348c-.143.33-.175 1.079-.185 2.216V10.8H2V5.361c.01-1.122-.021-1.942.277-2.613.149-.336.401-.601.716-.748s.689-.2 1.16-.2h3.26z'/%3E%3Cpath fill-rule='nonzero' d='M11.398 1.8v2.4H6.6V1.8h1.6c0 .447.353.8.8.8a.794.794 0 0 0 .799-.8h1.6z'/%3E%3Cpath fill-rule='nonzero' d='M10.6 1.6c0 .879-.722 1.6-1.6 1.6-.879 0-1.6-.721-1.6-1.6C7.4.72 8.121 0 9 0c.879 0 1.6.72 1.6 1.6zm-.8 0c0-.447-.354-.8-.8-.8-.447 0-.8.353-.8.8 0 .446.353.8.8.8.446 0 .8-.354.8-.8z'/%3E%3Cpath d='M8.4 7.2H14v1H8.4zm0 2.4H14v1H8.4zM10 12h4v1h-4z'/%3E%3Cpath fill-rule='nonzero' d='M4.4 10s2.134 1.026 4 2.505h-.002C6.427 14.03 4.4 15 4.4 15v-5z'/%3E%3Cpath d='M0 11.6h4.4v2H0z'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--search{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='16' width='16'%3E%3Cg transform='translate(-74.67 -285.57) scale(.66667)' color='%23000'%3E%3Cpath opacity='.05' fill='none' d='M112 452.36h24v-24h-24z'/%3E%3Cpath style='isolation:auto;mix-blend-mode:normal;block-progression:tb;text-decoration-line:none;text-indent:0;text-transform:none' d='M129.93 444.03l-2.27 2.273 6.07 6.07 2.27-2.27z' fill='%23666'/%3E%3Cellipse stroke-linejoin='round' stroke='%23666' rx='9.479' ry='9.479' cy='438.86' cx='122.5' stroke-linecap='round' stroke-width='2.041' fill='none'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--search.is-light,[class*="--dark"] .p-icon--search{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='16' width='16'%3E%3Cg transform='translate(-74.67 -285.57) scale(.66667)' color='%23000'%3E%3Cpath opacity='.05' fill='none' d='M112 452.36h24v-24h-24z'/%3E%3Cpath style='isolation:auto;mix-blend-mode:normal;block-progression:tb;text-decoration-line:none;text-indent:0;text-transform:none' d='M129.93 444.03l-2.27 2.273 6.07 6.07 2.27-2.27z' fill='%23cdcdcd'/%3E%3Cellipse stroke-linejoin='round' stroke='%23cdcdcd' rx='9.479' ry='9.479' cy='438.86' cx='122.5' stroke-linecap='round' stroke-width='2.041' fill='none'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--success{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='17' height='17' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform='translate(1 1)' fill='none' fill-rule='evenodd'%3E%3Ccircle stroke='%230e8420' stroke-width='1.5' fill='%230e8420' cx='7.25' cy='7.25' r='7.25'/%3E%3Cpath fill='%23fff' d='M11.05 4.173l-.066.058L6.25 8.378l-2.776-2.38-.839.948L6.25 10.75l5.5-5.787-.7-.79z'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--share{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='16' width='16'%3E%3Cg color='%23000'%3E%3Cpath style='block-progression:tb;text-decoration-line:none;text-indent:0;text-transform:none' d='M11.43.012a2.48 2.48 0 0 0-1.5.597l-.952.797v.574a6.7 6.7 0 0 1-.154 1.489c-.102.452-.286.84-.543 1.158a2.333 2.333 0 0 1-.999.756c-.421.185-.953.278-1.59.278-.622 0-1.072-.04-1.568-.112-.929.544-1.363 1.382-1.363 2.493s.53 1.732 1.363 2.53a14.294 14.294 0 0 1 1.569-.077c.636 0 1.168.093 1.59.278.42.174.751.427.998.756.257.318.44.7.543 1.152.103.452.154.95.154 1.495v.414l.922.78a2.49 2.49 0 0 0 1.813.63 2.49 2.49 0 0 0 1.713-.866 2.49 2.49 0 0 0 .57-1.833 2.49 2.49 0 0 0-.923-1.684l-.65-.55h-1.696a4 4 0 0 1-1.229-.182 2.59 2.59 0 0 1-.993-.55 2.54 2.54 0 0 1-.65-.934c-.16-.372-.242-.818-.242-1.335s.083-.967.242-1.347c.16-.38.377-.69.65-.934a2.83 2.83 0 0 1 .993-.55 4.25 4.25 0 0 1 1.23-.17h1.536l.821-.686c.798-.646 1.116-1.822.752-2.782-.363-.96-1.381-1.63-2.406-1.585z' fill='%23666'/%3E%3Cpath opacity='.1' fill='none' d='M-.003.005h16v16h-16z'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--share.is-light,[class*="--dark"] .p-icon--share{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='16' width='16'%3E%3Cg color='%23000'%3E%3Cpath style='block-progression:tb;text-decoration-line:none;text-indent:0;text-transform:none' d='M11.43.012a2.48 2.48 0 0 0-1.5.597l-.952.797v.574a6.7 6.7 0 0 1-.154 1.489c-.102.452-.286.84-.543 1.158a2.333 2.333 0 0 1-.999.756c-.421.185-.953.278-1.59.278-.622 0-1.072-.04-1.568-.112-.929.544-1.363 1.382-1.363 2.493s.53 1.732 1.363 2.53a14.294 14.294 0 0 1 1.569-.077c.636 0 1.168.093 1.59.278.42.174.751.427.998.756.257.318.44.7.543 1.152.103.452.154.95.154 1.495v.414l.922.78a2.49 2.49 0 0 0 1.813.63 2.49 2.49 0 0 0 1.713-.866 2.49 2.49 0 0 0 .57-1.833 2.49 2.49 0 0 0-.923-1.684l-.65-.55h-1.696a4 4 0 0 1-1.229-.182 2.59 2.59 0 0 1-.993-.55 2.54 2.54 0 0 1-.65-.934c-.16-.372-.242-.818-.242-1.335s.083-.967.242-1.347c.16-.38.377-.69.65-.934a2.83 2.83 0 0 1 .993-.55 4.25 4.25 0 0 1 1.23-.17h1.536l.821-.686c.798-.646 1.116-1.822.752-2.782-.363-.96-1.381-1.63-2.406-1.585z' fill='%23cdcdcd'/%3E%3Cpath opacity='.1' fill='none' d='M-.003.005h16v16h-16z'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--user{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='16' width='16'%3E%3Cpath opacity='.12' fill='none' color='%23000' d='M15.997 15.998v-16h-16v16z'/%3E%3Cpath style='text-decoration-color:%23000;font-variant-numeric:normal;text-decoration-line:none;font-variant-position:normal;mix-blend-mode:normal;block-progression:tb;font-feature-settings:normal;shape-padding:0;font-variant-alternates:normal;text-indent:0;font-variant-caps:normal;text-decoration-style:solid;font-variant-ligatures:normal;isolation:auto;text-transform:none' d='M8 0c-.587 0-1.142.109-1.651.329a3.795 3.795 0 0 0-1.329.912h-.004a4.235 4.235 0 0 0-.844 1.426 5.128 5.128 0 0 0-.299 1.787c0 .653.098 1.256.3 1.802a4.26 4.26 0 0 0 .843 1.41h.004c.25.264.531.49.841.676-.258.066-.701.144-.956.237-.878.322-1.617.766-2.196 1.334h-.004a5.586 5.586 0 0 0-1.286 2.03h-.002a7.541 7.541 0 0 0-.394 2.464v1.572L14.98 16v-1.572c0-.891-.139-1.7-.42-2.467a5.19 5.19 0 0 0-1.291-2.039c-.58-.567-1.316-1.011-2.194-1.333-.25-.093-.687-.17-.94-.236.31-.187.59-.414.834-.681.373-.397.661-.872.86-1.411a5.17 5.17 0 0 0 .3-1.803c0-.645-.098-1.243-.3-1.788a4.108 4.108 0 0 0-.86-1.427A3.652 3.652 0 0 0 9.652.33 4.14 4.14 0 0 0 8.001 0z' fill='%23666' color='%23000' white-space='normal'/%3E%3C/svg%3E")}.p-icon--user.is-light,[class*="--dark"] .p-icon--user{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='16' width='16'%3E%3Cpath opacity='.12' fill='none' color='%23000' d='M15.997 15.998v-16h-16v16z'/%3E%3Cpath style='text-decoration-color:%23000;font-variant-numeric:normal;text-decoration-line:none;font-variant-position:normal;mix-blend-mode:normal;block-progression:tb;font-feature-settings:normal;shape-padding:0;font-variant-alternates:normal;text-indent:0;font-variant-caps:normal;text-decoration-style:solid;font-variant-ligatures:normal;isolation:auto;text-transform:none' d='M8 0c-.587 0-1.142.109-1.651.329a3.795 3.795 0 0 0-1.329.912h-.004a4.235 4.235 0 0 0-.844 1.426 5.128 5.128 0 0 0-.299 1.787c0 .653.098 1.256.3 1.802a4.26 4.26 0 0 0 .843 1.41h.004c.25.264.531.49.841.676-.258.066-.701.144-.956.237-.878.322-1.617.766-2.196 1.334h-.004a5.586 5.586 0 0 0-1.286 2.03h-.002a7.541 7.541 0 0 0-.394 2.464v1.572L14.98 16v-1.572c0-.891-.139-1.7-.42-2.467a5.19 5.19 0 0 0-1.291-2.039c-.58-.567-1.316-1.011-2.194-1.333-.25-.093-.687-.17-.94-.236.31-.187.59-.414.834-.681.373-.397.661-.872.86-1.411a5.17 5.17 0 0 0 .3-1.803c0-.645-.098-1.243-.3-1.788a4.108 4.108 0 0 0-.86-1.427A3.652 3.652 0 0 0 9.652.33 4.14 4.14 0 0 0 8.001 0z' fill='%23cdcdcd' color='%23000' white-space='normal'/%3E%3C/svg%3E")}.p-icon--question{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='16' width='16'%3E%3Cpath fill='none' color='%23000' d='M-.003.002h16v16h-16z'/%3E%3Cpath d='M7.997.002c-4.41 0-8 3.59-8 8s3.59 8 8 8 8-3.589 8-8-3.589-8-8-8z' fill='%23335280' color='%23000'/%3E%3Cpath d='M8.004 5.23q-.431 0-.825.11-.394.098-.825.332l-.419-1.145q.456-.258 1.035-.406.59-.16 1.206-.16.739 0 1.219.21.48.196.763.504.283.308.394.677.111.37.111.714 0 .419-.16.751-.148.333-.382.616t-.504.542q-.271.246-.505.517-.234.258-.394.554-.148.295-.148.664v.148q0 .074.012.148h-1.28q-.025-.123-.037-.259-.012-.147-.012-.27 0-.407.135-.727.136-.32.345-.59t.443-.506q.246-.234.456-.467.209-.234.344-.48.136-.247.136-.542 0-.407-.283-.665-.271-.271-.825-.271zm.98 6.78q0 .43-.283.7-.284.272-.702.272-.406 0-.702-.271-.283-.271-.283-.702 0-.43.283-.702.296-.283.702-.283.418 0 .702.283.283.271.283.702z' fill='%23fff'/%3E%3C/svg%3E")}.p-icon--spinner{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='24' width='24' viewBox='0 0 24 24'%3E%3Ctitle%3Espinner-dark-grey%3C/title%3E%3Cpath d='M7.49 23.123a11.92 11.92 0 0 0 8.975 0c4.247-1.72 6.972-5.603 7.424-9.87l-1.136-.118c-.408 3.86-2.875 7.374-6.717 8.93a10.775 10.775 0 0 1-8.118 0l-.43 1.058zm-2.21-1.176a11.937 11.937 0 0 1-4.404-5.45C-1.284 11.146.686 5.15 5.28 2.05l.638.946C1.76 5.802-.02 11.228 1.934 16.068a10.785 10.785 0 0 0 3.985 4.933l-.64.947zm18.61-11.2a12.009 12.009 0 0 0-.81-3.242C20.602 1.363 13.623-1.605 7.49.877l.43 1.057c5.546-2.245 11.86.44 14.103 5.998.388.963.63 1.95.733 2.933l1.134-.12z' fill='%23666'/%3E%3C/svg%3E")}.p-icon--spinner.is-light,[class*="--dark"] .p-icon--spinner{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='24' width='24' viewBox='0 0 24 24'%3E%3Ctitle%3Espinner-dark-grey%3C/title%3E%3Cpath d='M7.49 23.123a11.92 11.92 0 0 0 8.975 0c4.247-1.72 6.972-5.603 7.424-9.87l-1.136-.118c-.408 3.86-2.875 7.374-6.717 8.93a10.775 10.775 0 0 1-8.118 0l-.43 1.058zm-2.21-1.176a11.937 11.937 0 0 1-4.404-5.45C-1.284 11.146.686 5.15 5.28 2.05l.638.946C1.76 5.802-.02 11.228 1.934 16.068a10.785 10.785 0 0 0 3.985 4.933l-.64.947zm18.61-11.2a12.009 12.009 0 0 0-.81-3.242C20.602 1.363 13.623-1.605 7.49.877l.43 1.057c5.546-2.245 11.86.44 14.103 5.998.388.963.63 1.95.733 2.933l1.134-.12z' fill='%23cdcdcd'/%3E%3C/svg%3E")}.p-icon--facebook{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Ccircle id='a' cx='20' cy='20' r='20'/%3E%3C/defs%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cmask id='b' fill='%23fff'%3E%3Cuse xlink:href='%23a'/%3E%3C/mask%3E%3Cuse fill='%23666' fill-rule='nonzero' xlink:href='%23a'/%3E%3Cpath d='M30.037 10.001c-3.92 0-6.603 2.449-6.603 6.945v3.526H19v5.255h4.434V40c1.82-.246 3.6-.728 5.3-1.438V25.727h4.423l.66-5.255h-5.084V17.47c0-1.522.48-3.085 2.55-2.563H34v-4.7c-.47-.064-2.085-.207-3.963-.207v.001z' fill='%23FFF' fill-rule='nonzero' mask='url(%23b)'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--facebook:hover{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='40' width='40' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Ccircle id='a' cx='20' cy='20' r='20'/%3E%3C/defs%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cmask id='b' fill='%23fff'%3E%3Cuse xlink:href='%23a'/%3E%3C/mask%3E%3Cuse fill='%233b5998' fill-rule='nonzero' xlink:href='%23a'/%3E%3Cpath d='M30.037 10.001c-3.92 0-6.603 2.449-6.603 6.945v3.526H19v5.255h4.434V40c1.82-.246 3.6-.728 5.3-1.438V25.727h4.423l.66-5.255h-5.084V17.47c0-1.522.48-3.085 2.55-2.563H34v-4.7c-.47-.064-2.085-.207-3.963-.207v.001z' fill='%23FFF' fill-rule='nonzero' mask='url(%23b)'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--google{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='40' height='40'%3E%3Cpath d='M20 0C8.955 0 0 8.955 0 20s8.955 20 20 20 20-8.955 20-20S31.045 0 20 0zm-4.862 26.805A6.799 6.799 0 0 1 8.333 20a6.799 6.799 0 0 1 6.805-6.805c1.839 0 3.374.67 4.559 1.778l-1.845 1.78c-.507-.486-1.39-1.05-2.714-1.05-2.323 0-4.218 1.925-4.218 4.299 0 2.373 1.897 4.298 4.218 4.298 2.694 0 3.707-1.937 3.86-2.937h-3.86V19.03h6.425c.06.34.107.68.107 1.128.002 3.887-2.605 6.647-6.532 6.647zm16.529-5.833H28.75v2.916h-1.945v-2.916h-2.917v-1.944h2.917v-2.916h1.945v2.916h2.917v1.944z' fill='%23666'/%3E%3C/svg%3E")}.p-icon--google:hover{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='40' height='40'%3E%3Cpath d='M20 0C8.955 0 0 8.955 0 20s8.955 20 20 20 20-8.955 20-20S31.045 0 20 0zm-4.862 26.805A6.799 6.799 0 0 1 8.333 20a6.799 6.799 0 0 1 6.805-6.805c1.839 0 3.374.67 4.559 1.778l-1.845 1.78c-.507-.486-1.39-1.05-2.714-1.05-2.323 0-4.218 1.925-4.218 4.299 0 2.373 1.897 4.298 4.218 4.298 2.694 0 3.707-1.937 3.86-2.937h-3.86V19.03h6.425c.06.34.107.68.107 1.128.002 3.887-2.605 6.647-6.532 6.647zm16.529-5.833H28.75v2.916h-1.945v-2.916h-2.917v-1.944h2.917v-2.916h1.945v2.916h2.917v1.944z' fill='%23dd4b39'/%3E%3C/svg%3E")}.p-icon--twitter{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='40' height='40'%3E%3Cg fill='none'%3E%3Ccircle cx='20' cy='20' r='20' fill='%23666'/%3E%3Cpath d='M16.34 30.55c8.87 0 13.72-7.35 13.72-13.72 0-.21 0-.42-.01-.62.94-.68 1.76-1.53 2.41-2.5-.86.38-1.79.64-2.77.76 1-.6 1.76-1.54 2.12-2.67-.93.55-1.96.95-3.06 1.17a4.799 4.799 0 0 0-3.52-1.52c-2.66 0-4.82 2.16-4.82 4.82 0 .38.04.75.13 1.1a13.68 13.68 0 0 1-9.94-5.04c-.41.71-.65 1.54-.65 2.42a4.8 4.8 0 0 0 2.15 4.01c-.79-.02-1.53-.24-2.18-.6v.06c0 2.34 1.66 4.28 3.87 4.73a4.807 4.807 0 0 1-2.18.08 4.815 4.815 0 0 0 4.5 3.35 9.693 9.693 0 0 1-7.14 1.99c2.11 1.38 4.65 2.18 7.37 2.18' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--twitter:hover{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='40' height='40'%3E%3Cg fill='none'%3E%3Ccircle cx='20' cy='20' r='20' fill='%231da1f2'/%3E%3Cpath d='M16.34 30.55c8.87 0 13.72-7.35 13.72-13.72 0-.21 0-.42-.01-.62.94-.68 1.76-1.53 2.41-2.5-.86.38-1.79.64-2.77.76 1-.6 1.76-1.54 2.12-2.67-.93.55-1.96.95-3.06 1.17a4.799 4.799 0 0 0-3.52-1.52c-2.66 0-4.82 2.16-4.82 4.82 0 .38.04.75.13 1.1a13.68 13.68 0 0 1-9.94-5.04c-.41.71-.65 1.54-.65 2.42a4.8 4.8 0 0 0 2.15 4.01c-.79-.02-1.53-.24-2.18-.6v.06c0 2.34 1.66 4.28 3.87 4.73a4.807 4.807 0 0 1-2.18.08 4.815 4.815 0 0 0 4.5 3.35 9.693 9.693 0 0 1-7.14 1.99c2.11 1.38 4.65 2.18 7.37 2.18' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--instagram{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='40' height='40' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath id='a' d='M0 28.479h28.473V.009H0z'/%3E%3C/defs%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle cx='20' cy='20' r='20' fill='%23666' fill-rule='nonzero'/%3E%3Cg transform='translate(6 6)'%3E%3Cmask id='b' fill='%23fff'%3E%3Cuse xlink:href='%23a'/%3E%3C/mask%3E%3Cpath d='M14.237.009c-3.867 0-4.352.016-5.87.086-1.515.069-2.55.31-3.456.661a6.994 6.994 0 0 0-2.522 1.642A6.978 6.978 0 0 0 .747 4.92C.395 5.826.155 6.86.086 8.376.016 9.894 0 10.379 0 14.246c0 3.866.016 4.35.086 5.87.069 1.515.31 2.55.661 3.455.364.936.851 1.73 1.642 2.522a6.98 6.98 0 0 0 2.522 1.642c.906.352 1.94.592 3.456.661 1.518.07 2.003.086 5.87.086 3.866 0 4.35-.016 5.87-.086 1.515-.069 2.55-.31 3.455-.661a6.98 6.98 0 0 0 2.522-1.642 6.98 6.98 0 0 0 1.642-2.522c.352-.905.592-1.94.661-3.456.07-1.518.086-2.003.086-5.87 0-3.866-.016-4.35-.086-5.87-.069-1.514-.31-2.55-.661-3.455a6.98 6.98 0 0 0-1.642-2.522A6.978 6.978 0 0 0 23.562.756c-.905-.352-1.94-.592-3.456-.661-1.518-.07-2.003-.086-5.87-.086zm0 2.565c3.8 0 4.251.015 5.752.083 1.388.063 2.142.295 2.644.49a4.41 4.41 0 0 1 1.637 1.065 4.41 4.41 0 0 1 1.065 1.637c.195.502.427 1.256.49 2.644.068 1.501.083 1.951.083 5.753 0 3.8-.015 4.251-.083 5.752-.063 1.388-.295 2.142-.49 2.644a4.41 4.41 0 0 1-1.065 1.637 4.41 4.41 0 0 1-1.637 1.065c-.502.195-1.256.427-2.644.49-1.5.068-1.95.083-5.752.083-3.802 0-4.252-.015-5.753-.083-1.388-.063-2.142-.295-2.644-.49a4.41 4.41 0 0 1-1.637-1.065 4.411 4.411 0 0 1-1.065-1.637c-.195-.502-.427-1.256-.49-2.644-.068-1.5-.083-1.951-.083-5.752 0-3.802.015-4.252.083-5.753.063-1.388.295-2.142.49-2.644a4.41 4.41 0 0 1 1.065-1.637A4.41 4.41 0 0 1 5.84 3.147c.502-.195 1.256-.427 2.644-.49 1.501-.068 1.951-.083 5.753-.083z' fill='%23FFF' mask='url(%23b)'/%3E%3C/g%3E%3Cpath d='M20.24 24.991a4.746 4.746 0 1 1 0-9.49 4.746 4.746 0 0 1 0 9.49zm0-12.056a7.31 7.31 0 1 0 0 14.621 7.31 7.31 0 0 0 0-14.621zm9.3-.289a1.708 1.708 0 1 1-3.416 0 1.708 1.708 0 0 1 3.417 0' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--instagram:hover{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='40' height='40' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath id='a' d='M0 28.479h28.473V.009H0z'/%3E%3C/defs%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle cx='20' cy='20' r='20' fill='%23fb3958' fill-rule='nonzero'/%3E%3Cg transform='translate(6 6)'%3E%3Cmask id='b' fill='%23fff'%3E%3Cuse xlink:href='%23a'/%3E%3C/mask%3E%3Cpath d='M14.237.009c-3.867 0-4.352.016-5.87.086-1.515.069-2.55.31-3.456.661a6.994 6.994 0 0 0-2.522 1.642A6.978 6.978 0 0 0 .747 4.92C.395 5.826.155 6.86.086 8.376.016 9.894 0 10.379 0 14.246c0 3.866.016 4.35.086 5.87.069 1.515.31 2.55.661 3.455.364.936.851 1.73 1.642 2.522a6.98 6.98 0 0 0 2.522 1.642c.906.352 1.94.592 3.456.661 1.518.07 2.003.086 5.87.086 3.866 0 4.35-.016 5.87-.086 1.515-.069 2.55-.31 3.455-.661a6.98 6.98 0 0 0 2.522-1.642 6.98 6.98 0 0 0 1.642-2.522c.352-.905.592-1.94.661-3.456.07-1.518.086-2.003.086-5.87 0-3.866-.016-4.35-.086-5.87-.069-1.514-.31-2.55-.661-3.455a6.98 6.98 0 0 0-1.642-2.522A6.978 6.978 0 0 0 23.562.756c-.905-.352-1.94-.592-3.456-.661-1.518-.07-2.003-.086-5.87-.086zm0 2.565c3.8 0 4.251.015 5.752.083 1.388.063 2.142.295 2.644.49a4.41 4.41 0 0 1 1.637 1.065 4.41 4.41 0 0 1 1.065 1.637c.195.502.427 1.256.49 2.644.068 1.501.083 1.951.083 5.753 0 3.8-.015 4.251-.083 5.752-.063 1.388-.295 2.142-.49 2.644a4.41 4.41 0 0 1-1.065 1.637 4.41 4.41 0 0 1-1.637 1.065c-.502.195-1.256.427-2.644.49-1.5.068-1.95.083-5.752.083-3.802 0-4.252-.015-5.753-.083-1.388-.063-2.142-.295-2.644-.49a4.41 4.41 0 0 1-1.637-1.065 4.411 4.411 0 0 1-1.065-1.637c-.195-.502-.427-1.256-.49-2.644-.068-1.5-.083-1.951-.083-5.752 0-3.802.015-4.252.083-5.753.063-1.388.295-2.142.49-2.644a4.41 4.41 0 0 1 1.065-1.637A4.41 4.41 0 0 1 5.84 3.147c.502-.195 1.256-.427 2.644-.49 1.501-.068 1.951-.083 5.753-.083z' fill='%23FFF' mask='url(%23b)'/%3E%3C/g%3E%3Cpath d='M20.24 24.991a4.746 4.746 0 1 1 0-9.49 4.746 4.746 0 0 1 0 9.49zm0-12.056a7.31 7.31 0 1 0 0 14.621 7.31 7.31 0 0 0 0-14.621zm9.3-.289a1.708 1.708 0 1 1-3.416 0 1.708 1.708 0 0 1 3.417 0' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--linkedin{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='40' height='40'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle fill='%23666' fill-rule='nonzero' cx='20' cy='20' r='20'/%3E%3Cpath d='M11.07 8.406a2.743 2.743 0 0 1 2.731 2.75c0 1.52-1.225 2.753-2.731 2.753a2.743 2.743 0 0 1-2.734-2.752 2.742 2.742 0 0 1 2.734-2.751zM8.712 31.268h4.713V15.997H8.712v15.271zm7.67-15.271h4.52v2.087h.064c.63-1.201 2.167-2.467 4.46-2.467 4.773 0 5.654 3.163 5.654 7.274v8.377h-4.71v-7.426c0-1.771-.032-4.05-2.45-4.05-2.452 0-2.828 1.93-2.828 3.921v7.555h-4.71V15.997' fill='%23FFFFFE'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--linkedin:hover{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='40' height='40'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle fill='%230071a1' fill-rule='nonzero' cx='20' cy='20' r='20'/%3E%3Cpath d='M11.07 8.406a2.743 2.743 0 0 1 2.731 2.75c0 1.52-1.225 2.753-2.731 2.753a2.743 2.743 0 0 1-2.734-2.752 2.742 2.742 0 0 1 2.734-2.751zM8.712 31.268h4.713V15.997H8.712v15.271zm7.67-15.271h4.52v2.087h.064c.63-1.201 2.167-2.467 4.46-2.467 4.773 0 5.654 3.163 5.654 7.274v8.377h-4.71v-7.426c0-1.771-.032-4.05-2.45-4.05-2.452 0-2.828 1.93-2.828 3.921v7.555h-4.71V15.997' fill='%23FFFFFE'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--youtube{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='40' height='40' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath id='a' d='M.009 18.367V.006h26.06v18.36z'/%3E%3C/defs%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle fill='%23666' fill-rule='nonzero' cx='20' cy='20' r='20'/%3E%3Cg transform='translate(7 11)'%3E%3Cmask id='b' fill='%23fff'%3E%3Cuse xlink:href='%23a'/%3E%3C/mask%3E%3Cpath d='M25.524 2.868A3.275 3.275 0 0 0 23.22.548C21.187 0 13.034 0 13.034 0S4.882 0 2.85.548a3.275 3.275 0 0 0-2.305 2.32C0 4.914 0 9.183 0 9.183s0 4.27.545 6.316a3.276 3.276 0 0 0 2.305 2.32c2.032.548 10.184.548 10.184.548s8.153 0 10.185-.548a3.276 3.276 0 0 0 2.305-2.32c.545-2.047.545-6.316.545-6.316s0-4.269-.545-6.315' fill='%23FFF' mask='url(%23b)'/%3E%3C/g%3E%3Cpath fill='%23666' d='M17.368 24.06l6.814-3.876-6.814-3.877v7.753'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--youtube:hover{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='40' height='40' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath id='a' d='M.009 18.367V.006h26.06v18.36z'/%3E%3C/defs%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle fill='%23d9252a' fill-rule='nonzero' cx='20' cy='20' r='20'/%3E%3Cg transform='translate(7 11)'%3E%3Cmask id='b' fill='%23fff'%3E%3Cuse xlink:href='%23a'/%3E%3C/mask%3E%3Cpath d='M25.524 2.868A3.275 3.275 0 0 0 23.22.548C21.187 0 13.034 0 13.034 0S4.882 0 2.85.548a3.275 3.275 0 0 0-2.305 2.32C0 4.914 0 9.183 0 9.183s0 4.27.545 6.316a3.276 3.276 0 0 0 2.305 2.32c2.032.548 10.184.548 10.184.548s8.153 0 10.185-.548a3.276 3.276 0 0 0 2.305-2.32c.545-2.047.545-6.316.545-6.316s0-4.269-.545-6.315' fill='%23FFF' mask='url(%23b)'/%3E%3C/g%3E%3Cpath fill='%23d9252a' d='M17.368 24.06l6.814-3.876-6.814-3.877v7.753'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--canonical{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='40' height='40'%3E%3Cpath d='M20 32.735c-7.036 0-12.736-5.7-12.736-12.736 0-7.034 5.7-12.734 12.736-12.734 7.036 0 12.736 5.7 12.736 12.734 0 7.036-5.7 12.736-12.736 12.736zM40 20c0 11.045-8.955 20-20 20S0 31.045 0 20C0 8.954 8.955 0 20 0s20 8.954 20 20zM20 4.865C11.636 4.865 4.864 11.642 4.864 20c0 8.36 6.772 15.135 15.136 15.135 8.364 0 15.136-6.775 15.136-15.135 0-8.358-6.772-15.135-15.136-15.135z' fill='%23666'/%3E%3C/svg%3E")}.p-icon--canonical:hover{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='40' height='40'%3E%3Cpath d='M20 32.735c-7.036 0-12.736-5.7-12.736-12.736 0-7.034 5.7-12.734 12.736-12.734 7.036 0 12.736 5.7 12.736 12.734 0 7.036-5.7 12.736-12.736 12.736zM40 20c0 11.045-8.955 20-20 20S0 31.045 0 20C0 8.954 8.955 0 20 0s20 8.954 20 20zM20 4.865C11.636 4.865 4.864 11.642 4.864 20c0 8.36 6.772 15.135 15.136 15.135 8.364 0 15.136-6.775 15.136-15.135 0-8.358-6.772-15.135-15.136-15.135z' fill='%23772953'/%3E%3C/svg%3E")}.p-icon--ubuntu{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='40' height='40'%3E%3Cg fill='none'%3E%3Cpath d='M39.906 20.013c0 10.987-8.905 19.893-19.892 19.893C9.028 39.906.122 31 .122 20.013.122 9.028 9.028.122 20.014.122c10.987 0 19.892 8.905 19.892 19.891z' fill='%23666'/%3E%3Cpath d='M9.69 20.013a2.558 2.558 0 1 1-5.116 0 2.558 2.558 0 0 1 5.116 0zM24.241 32.45a2.559 2.559 0 0 0 4.43-2.558 2.557 2.557 0 1 0-4.43 2.558zm4.429-22.313a2.557 2.557 0 1 0-4.43-2.556 2.557 2.557 0 0 0 4.43 2.556zm-8.656 2.584a7.292 7.292 0 0 1 7.265 6.648l3.701-.059a10.954 10.954 0 0 0-3.227-7.094 3.591 3.591 0 0 1-3.097-.24A3.592 3.592 0 0 1 22.9 9.41c-.92-.25-1.888-.384-2.886-.384-1.75 0-3.404.41-4.874 1.137l1.801 3.234a7.278 7.278 0 0 1 3.073-.677zm-7.294 7.293a7.283 7.283 0 0 1 3.102-5.967l-1.9-3.177a11.005 11.005 0 0 0-4.533 6.341 3.59 3.59 0 0 1 1.343 2.803 3.592 3.592 0 0 1-1.343 2.804 11.01 11.01 0 0 0 4.532 6.343l1.9-3.177a7.286 7.286 0 0 1-3.1-5.97zm7.294 7.295a7.267 7.267 0 0 1-3.073-.678l-1.8 3.234a10.938 10.938 0 0 0 4.873 1.137c.998 0 1.966-.132 2.886-.383a3.587 3.587 0 0 1 1.756-2.564 3.591 3.591 0 0 1 3.097-.24 10.958 10.958 0 0 0 3.227-7.096l-3.701-.058a7.293 7.293 0 0 1-7.265 6.648z' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--ubuntu:hover{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='40' height='40'%3E%3Cg fill='none'%3E%3Cpath d='M39.906 20.013c0 10.987-8.905 19.893-19.892 19.893C9.028 39.906.122 31 .122 20.013.122 9.028 9.028.122 20.014.122c10.987 0 19.892 8.905 19.892 19.891z' fill='%23e95420'/%3E%3Cpath d='M9.69 20.013a2.558 2.558 0 1 1-5.116 0 2.558 2.558 0 0 1 5.116 0zM24.241 32.45a2.559 2.559 0 0 0 4.43-2.558 2.557 2.557 0 1 0-4.43 2.558zm4.429-22.313a2.557 2.557 0 1 0-4.43-2.556 2.557 2.557 0 0 0 4.43 2.556zm-8.656 2.584a7.292 7.292 0 0 1 7.265 6.648l3.701-.059a10.954 10.954 0 0 0-3.227-7.094 3.591 3.591 0 0 1-3.097-.24A3.592 3.592 0 0 1 22.9 9.41c-.92-.25-1.888-.384-2.886-.384-1.75 0-3.404.41-4.874 1.137l1.801 3.234a7.278 7.278 0 0 1 3.073-.677zm-7.294 7.293a7.283 7.283 0 0 1 3.102-5.967l-1.9-3.177a11.005 11.005 0 0 0-4.533 6.341 3.59 3.59 0 0 1 1.343 2.803 3.592 3.592 0 0 1-1.343 2.804 11.01 11.01 0 0 0 4.532 6.343l1.9-3.177a7.286 7.286 0 0 1-3.1-5.97zm7.294 7.295a7.267 7.267 0 0 1-3.073-.678l-1.8 3.234a10.938 10.938 0 0 0 4.873 1.137c.998 0 1.966-.132 2.886-.383a3.587 3.587 0 0 1 1.756-2.564 3.591 3.591 0 0 1 3.097-.24 10.958 10.958 0 0 0 3.227-7.096l-3.701-.058a7.293 7.293 0 0 1-7.265 6.648z' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--medium{height:1.25rem;width:1.25rem}.p-icon--large{height:1.5rem;width:1.5rem}.p-icon--x-large{height:1.75rem;width:1.75rem;height:2.25rem;width:2.25rem}.p-icon--xx-large{height:3rem;width:3rem}[class*=p-button-] [class*=p-icon-]{top:-1px;vertical-align:middle}.p-image--bordered{border:1px solid #cdcdcd}.p-image--shadowed{box-shadow:0 1px 5px 1px hsla(0,0%,80%,.2)}.p-inline-images{display:block;list-style:none;margin-left:0;padding-left:0;text-align:center}.p-inline-images__item{display:inline-block;margin:1rem;overflow:hidden;text-align:center;vertical-align:middle}@media only screen and (min-width:768px){.p-inline-images__item{margin:1.875rem}}.p-inline-images__item img,.p-inline-images__logo{max-height:3rem;max-width:7rem;width:auto}@media screen and (min-width:768px){.p-inline-images__item img,.p-inline-images__logo{max-height:5.5rem;max-width:9rem}}.p-inline-images__img{display:inline-block;margin:2rem;max-width:6rem;text-align:center;vertical-align:middle;width:100%}@media (min-width:768px){.p-inline-images__img{margin:3rem;max-width:11.25rem}}.p-link--soft{color:#111}.p-link--soft:visited{color:#111;text-decoration:none}.p-link--soft:hover{color:#007aa6}.p-link--soft.is-selected{font-weight:400}.p-link--strong{font-weight:400}.p-link--strong,.p-link--strong:visited{color:currentColor}.p-link--strong:hover{color:#007aa6;text-decoration:underline}.p-link--inverted{color:#f7f7f7;font-weight:400}.p-link--inverted:hover{color:#f7f7f7}.p-link--inverted:visited{color:#dedede}@supports ((-webkit-mask-size:1em) or (mask-size:1em)) or (-webkit-mask-size:1em){.p-link--external:after{-webkit-mask:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23111' d='M4.867 1.313C.6 1.32.067 1.443.067 4.51v6.4c0 3.2.533 3.2 5.333 3.2h2.133c4.8 0 5.334 0 5.334-3.2v-1.6h-1.6v1.068c0 2.133 0 2.133-4.267 2.133H5.933c-4.266 0-4.266 0-4.266-2.132V5.044c0-1.93.034-2.112 3.2-2.13v-1.6z'/%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23111' d='M6.435 2.16c.11-.446 7.113-2.196 7.448-1.86.335.334-1.416 7.335-1.863 7.447-.447.112-5.697-5.14-5.586-5.586z'/%3E%3Cpath fill='%23111' d='M9.032 3.38L4.705 7.708l1.767 1.767L10.8 5.148'/%3E%3C/g%3E%3C/svg%3E") no-repeat 0 0/cover;background-color:currentColor;content:"";margin:0 0 0 .25em;mask:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23111' d='M4.867 1.313C.6 1.32.067 1.443.067 4.51v6.4c0 3.2.533 3.2 5.333 3.2h2.133c4.8 0 5.334 0 5.334-3.2v-1.6h-1.6v1.068c0 2.133 0 2.133-4.267 2.133H5.933c-4.266 0-4.266 0-4.266-2.132V5.044c0-1.93.034-2.112 3.2-2.13v-1.6z'/%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23111' d='M6.435 2.16c.11-.446 7.113-2.196 7.448-1.86.335.334-1.416 7.335-1.863 7.447-.447.112-5.697-5.14-5.586-5.586z'/%3E%3Cpath fill='%23111' d='M9.032 3.38L4.705 7.708l1.767 1.767L10.8 5.148'/%3E%3C/g%3E%3C/svg%3E") no-repeat 0 0/cover;padding-right:.75em}.p-link--no-underline{border:0}}@supports not (((-webkit-mask-size:1em) or (mask-size:1em)) or (-webkit-mask-size:1em)){.p-link--external{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='.75em' height='.75em' viewBox='0 0 16 16'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23007aa6' d='M4.867 1.313C.6 1.32.067 1.443.067 4.51v6.4c0 3.2.533 3.2 5.333 3.2h2.133c4.8 0 5.334 0 5.334-3.2v-1.6h-1.6v1.068c0 2.133 0 2.133-4.267 2.133H5.933c-4.266 0-4.266 0-4.266-2.132V5.044c0-1.93.034-2.112 3.2-2.13v-1.6z'/%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23007aa6' d='M6.435 2.16c.11-.446 7.113-2.196 7.448-1.86.335.334-1.416 7.335-1.863 7.447-.447.112-5.697-5.14-5.586-5.586z'/%3E%3Cpath fill='%23007aa6' d='M9.032 3.38L4.705 7.708l1.767 1.767L10.8 5.148'/%3E%3C/g%3E%3C/svg%3E");background-position:100% 0;background-repeat:no-repeat;background-size:.75em;margin-top:-.25em;padding:.25em 1em 0 0}.p-link--external.p-link--soft,.p-link--external.p-link--strong,.p-link--external.sidebar__link{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='.75em' height='.75em' viewBox='0 0 16 16'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23111' d='M4.867 1.313C.6 1.32.067 1.443.067 4.51v6.4c0 3.2.533 3.2 5.333 3.2h2.133c4.8 0 5.334 0 5.334-3.2v-1.6h-1.6v1.068c0 2.133 0 2.133-4.267 2.133H5.933c-4.266 0-4.266 0-4.266-2.132V5.044c0-1.93.034-2.112 3.2-2.13v-1.6z'/%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23111' d='M6.435 2.16c.11-.446 7.113-2.196 7.448-1.86.335.334-1.416 7.335-1.863 7.447-.447.112-5.697-5.14-5.586-5.586z'/%3E%3Cpath fill='%23111' d='M9.032 3.38L4.705 7.708l1.767 1.767L10.8 5.148'/%3E%3C/g%3E%3C/svg%3E")}.p-link--external.p-link--soft:hover,.p-link--external.sidebar__link:hover{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='.75em' height='.75em' viewBox='0 0 16 16'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23007aa6' d='M4.867 1.313C.6 1.32.067 1.443.067 4.51v6.4c0 3.2.533 3.2 5.333 3.2h2.133c4.8 0 5.334 0 5.334-3.2v-1.6h-1.6v1.068c0 2.133 0 2.133-4.267 2.133H5.933c-4.266 0-4.266 0-4.266-2.132V5.044c0-1.93.034-2.112 3.2-2.13v-1.6z'/%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23007aa6' d='M6.435 2.16c.11-.446 7.113-2.196 7.448-1.86.335.334-1.416 7.335-1.863 7.447-.447.112-5.697-5.14-5.586-5.586z'/%3E%3Cpath fill='%23007aa6' d='M9.032 3.38L4.705 7.708l1.767 1.767L10.8 5.148'/%3E%3C/g%3E%3C/svg%3E")}.p-link--external.p-link--inverted{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='.75em' height='.75em' viewBox='0 0 16 16'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23f7f7f7' d='M4.867 1.313C.6 1.32.067 1.443.067 4.51v6.4c0 3.2.533 3.2 5.333 3.2h2.133c4.8 0 5.334 0 5.334-3.2v-1.6h-1.6v1.068c0 2.133 0 2.133-4.267 2.133H5.933c-4.266 0-4.266 0-4.266-2.132V5.044c0-1.93.034-2.112 3.2-2.13v-1.6z'/%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23f7f7f7' d='M6.435 2.16c.11-.446 7.113-2.196 7.448-1.86.335.334-1.416 7.335-1.863 7.447-.447.112-5.697-5.14-5.586-5.586z'/%3E%3Cpath fill='%23f7f7f7' d='M9.032 3.38L4.705 7.708l1.767 1.767L10.8 5.148'/%3E%3C/g%3E%3C/svg%3E")}.p-link--external.p-link--inverted:visited{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='.75em' height='.75em' viewBox='0 0 16 16'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23dedede' d='M4.867 1.313C.6 1.32.067 1.443.067 4.51v6.4c0 3.2.533 3.2 5.333 3.2h2.133c4.8 0 5.334 0 5.334-3.2v-1.6h-1.6v1.068c0 2.133 0 2.133-4.267 2.133H5.933c-4.266 0-4.266 0-4.266-2.132V5.044c0-1.93.034-2.112 3.2-2.13v-1.6z'/%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23dedede' d='M6.435 2.16c.11-.446 7.113-2.196 7.448-1.86.335.334-1.416 7.335-1.863 7.447-.447.112-5.697-5.14-5.586-5.586z'/%3E%3Cpath fill='%23dedede' d='M9.032 3.38L4.705 7.708l1.767 1.767L10.8 5.148'/%3E%3C/g%3E%3C/svg%3E")}.p-link--external.sidebar__link{display:inline-block;padding:0 1em 1em 0}.p-link--no-underline{border:0}.p-button--base .p-link--external,.p-button--neutral .p-link--external,.p-button .p-link--external{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='.75em' height='.75em' viewBox='0 0 16 16'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23111' d='M4.867 1.313C.6 1.32.067 1.443.067 4.51v6.4c0 3.2.533 3.2 5.333 3.2h2.133c4.8 0 5.334 0 5.334-3.2v-1.6h-1.6v1.068c0 2.133 0 2.133-4.267 2.133H5.933c-4.266 0-4.266 0-4.266-2.132V5.044c0-1.93.034-2.112 3.2-2.13v-1.6z'/%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23111' d='M6.435 2.16c.11-.446 7.113-2.196 7.448-1.86.335.334-1.416 7.335-1.863 7.447-.447.112-5.697-5.14-5.586-5.586z'/%3E%3Cpath fill='%23111' d='M9.032 3.38L4.705 7.708l1.767 1.767L10.8 5.148'/%3E%3C/g%3E%3C/svg%3E");padding-top:0}.p-button--brand .p-link--external,.p-button--negative .p-link--external,.p-button--positive .p-link--external{padding-top:0}.p-button--brand .p-link--external,.p-button--negative .p-link--external,.p-button--positive .p-link--external,.p-strip--accent * .p-link--external.p-link--soft,.p-strip--dark * .p-link--external.p-link--soft,.p-strip--image.is-dark * .p-link--external.p-link--soft{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='.75em' height='.75em' viewBox='0 0 16 16'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23fff' d='M4.867 1.313C.6 1.32.067 1.443.067 4.51v6.4c0 3.2.533 3.2 5.333 3.2h2.133c4.8 0 5.334 0 5.334-3.2v-1.6h-1.6v1.068c0 2.133 0 2.133-4.267 2.133H5.933c-4.266 0-4.266 0-4.266-2.132V5.044c0-1.93.034-2.112 3.2-2.13v-1.6z'/%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23fff' d='M6.435 2.16c.11-.446 7.113-2.196 7.448-1.86.335.334-1.416 7.335-1.863 7.447-.447.112-5.697-5.14-5.586-5.586z'/%3E%3Cpath fill='%23fff' d='M9.032 3.38L4.705 7.708l1.767 1.767L10.8 5.148'/%3E%3C/g%3E%3C/svg%3E")}.p-strip--accent * .p-link--external.p-link--soft:hover,.p-strip--dark * .p-link--external.p-link--soft:hover,.p-strip--image.is-dark * .p-link--external.p-link--soft:hover{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='.75em' height='.75em' viewBox='0 0 16 16'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23007aa6' d='M4.867 1.313C.6 1.32.067 1.443.067 4.51v6.4c0 3.2.533 3.2 5.333 3.2h2.133c4.8 0 5.334 0 5.334-3.2v-1.6h-1.6v1.068c0 2.133 0 2.133-4.267 2.133H5.933c-4.266 0-4.266 0-4.266-2.132V5.044c0-1.93.034-2.112 3.2-2.13v-1.6z'/%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23007aa6' d='M6.435 2.16c.11-.446 7.113-2.196 7.448-1.86.335.334-1.416 7.335-1.863 7.447-.447.112-5.697-5.14-5.586-5.586z'/%3E%3Cpath fill='%23007aa6' d='M9.032 3.38L4.705 7.708l1.767 1.767L10.8 5.148'/%3E%3C/g%3E%3C/svg%3E")}.p-strip--accent * .p-link--external.p-link--strong,.p-strip--dark * .p-link--external.p-link--strong,.p-strip--image.is-dark * .p-link--external.p-link--strong{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='.75em' height='.75em' viewBox='0 0 16 16'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23fff' d='M4.867 1.313C.6 1.32.067 1.443.067 4.51v6.4c0 3.2.533 3.2 5.333 3.2h2.133c4.8 0 5.334 0 5.334-3.2v-1.6h-1.6v1.068c0 2.133 0 2.133-4.267 2.133H5.933c-4.266 0-4.266 0-4.266-2.132V5.044c0-1.93.034-2.112 3.2-2.13v-1.6z'/%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23fff' d='M6.435 2.16c.11-.446 7.113-2.196 7.448-1.86.335.334-1.416 7.335-1.863 7.447-.447.112-5.697-5.14-5.586-5.586z'/%3E%3Cpath fill='%23fff' d='M9.032 3.38L4.705 7.708l1.767 1.767L10.8 5.148'/%3E%3C/g%3E%3C/svg%3E")}}.p-top{border-bottom:1px dotted #cdcdcd;clear:both;margin:20px 0}.p-top__link{background:#fff;color:#111;float:right;margin-right:5px;padding:0 5px;position:relative;text-decoration:none;top:-.725rem}.p-list-tree .p-list-tree[aria-hidden=false]:after,.p-list-tree__item--group:after{background-position:50%;background-repeat:no-repeat;content:" ";display:block;height:.9375rem;left:-.75rem;pointer-events:none;position:absolute;top:.4rem;width:.9375rem}.p-list-tree{border-left:1px solid #cdcdcd;list-style-type:none;margin-left:1rem;padding:0 0 0 .25rem}.p-list-tree__item{margin-top:.125rem;padding-left:.8rem;position:relative}.p-list-tree__item:before{background:#cdcdcd;content:" ";display:block;height:1px;left:-.25rem;pointer-events:none;position:absolute;top:.8rem;width:.625rem}.p-list-tree__item--group:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' height='15' width='15' viewBox='0 0 15 15'%3E%3Cdefs%3E%3Cpath id='a' d='M0 0h15v15H0z'/%3E%3C/defs%3E%3Cg fill-rule='evenodd' fill='none'%3E%3Cuse xlink:href='%23a' fill='%23FFF'/%3E%3Cpath stroke='%23888' d='M.5.5h14v14H.5z'/%3E%3Cpath fill='%23888' d='M7 4h1v7H7z'/%3E%3Cpath fill='%23888' d='M4 8V7h7v1z'/%3E%3C/g%3E%3C/svg%3E")}.p-list-tree__toggle{background:transparent;border:0;font-weight:400;margin:0 0 0 -1.75rem;padding:0 0 0 1.75rem;transition-duration:0s;width:auto}.p-list-tree__toggle:hover{background:transparent;color:#007aa6;text-decoration:underline}.p-list-tree__toggle:focus{background:transparent;outline:1px dotted #cdcdcd}.p-list-tree .p-list-tree{display:none;margin-left:0}.p-list-tree .p-list-tree[aria-hidden=false]{display:block}.p-list-tree .p-list-tree[aria-hidden=false]:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' height='15' width='15' viewBox='0 0 15 15'%3E%3Cdefs%3E%3Cpath id='a' d='M0 0h15v15H0z'/%3E%3C/defs%3E%3Cg fill-rule='evenodd' fill='none'%3E%3Cuse xlink:href='%23a' fill='%23FFF'/%3E%3Cpath stroke='%23888' d='M.5.5h14v14H.5z'/%3E%3Cpath fill='%23888' d='M4 8V7h7v1z'/%3E%3C/g%3E%3C/svg%3E");z-index:1}.p-list-step,.p-stepped-list--detailed{counter-reset:b;list-style:none;margin-left:4rem;padding-left:0}.p-list-step>li:before,.p-stepped-list--detailed>li:before{background-color:#666;border-radius:100%;color:#fff;content:counter(b);counter-increment:b;direction:rtl;display:inline-block;margin-left:-4rem;margin-top:.1rem;padding:0;position:absolute;text-align:center;width:2.5rem}@media (max-width:768px){.p-list-step>li:before,.p-stepped-list--detailed>li:before{margin-top:0;width:2rem}}.p-list{list-style:none;margin-left:0;padding-left:0}.p-list .p-list__item{padding-bottom:.25rem;padding-top:.25rem}form .p-list .p-list__item{padding-bottom:0;padding-top:0}form .p-list .p-list__item label{margin-bottom:.1rem}.p-list--divided{list-style:none;margin-left:0;padding-left:0}.p-list--divided .p-list__item{padding-bottom:.25rem;padding-top:.25rem}form .p-list--divided .p-list__item{padding-bottom:0;padding-top:0}form .p-list--divided .p-list__item label{margin-bottom:.1rem}.p-list--divided .p-list__item{position:relative}.p-list--divided .p-list__item:after{border-bottom:1px dotted #cdcdcd;bottom:0;content:"";height:1px;left:0;position:absolute;right:0}.p-list--divided .p-list__item .last-item:after,.p-list--divided .p-list__item:last-of-type:after{border-bottom:0}.p-list--divided.is-split .p-list__item:last-of-type{border-bottom:1px dotted #cdcdcd}.is-ticked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 14 14'%3E%3Ccircle fill='%23333' cx='7' cy='7' r='7'/%3E%3Cpath fill='%23fff' d='M6.1 10.813L2.41 8.105l1.184-1.613L5.9 8.187l4.393-4.394 1.414 1.414z'/%3E%3C/svg%3E");background-position-y:.5625rem;background-repeat:no-repeat;padding-left:2rem}.p-inline-list{margin-left:0;padding-left:0}.p-inline-list__item{display:inline;list-style:none;margin-right:1.25rem}.p-inline-list__item .last-item,.p-inline-list__item:last-of-type{margin-right:0}.p-inline-list--middot{margin-left:0;padding-left:0}.p-inline-list--middot .p-inline-list__item{display:inline;list-style:none;margin-right:1.25rem;margin-right:1.25em;position:relative}.p-inline-list--middot .p-inline-list__item .last-item,.p-inline-list--middot .p-inline-list__item:last-of-type{margin-right:0}.p-inline-list--middot .p-inline-list__item:after{color:#666;content:"\00b7";font-size:1.4em;line-height:0;position:absolute;right:-.5em;top:.4em}.p-inline-list--middot .p-inline-list__item:hover:after{color:#666}.p-inline-list--middot .p-inline-list__item .last-item:after,.p-inline-list--middot .p-inline-list__item:last-of-type:after{content:""}.p-list-step__item{float:none;margin-left:0;width:100%}.p-list-step__content{margin-top:-1rem}.p-list-step__bullet{display:none}@media (min-width:768px){.p-stepped-list--detailed .p-list-step__content{margin-top:0}.p-stepped-list--detailed .p-list-step__item{display:-ms-flexbox;display:flex;margin:0}.p-stepped-list--detailed .p-list-step__item>:nth-child(2n){margin-left:3.2877%}.p-stepped-list--detailed .p-list-step__item>:nth-child(2n),.p-stepped-list--detailed .p-list-step__item>:nth-child(odd){display:block;float:left;min-height:1px;position:relative;*margin-right:-1px;width:48.35615%}}@media (min-width:768px){@supports ((-webkit-columns:1) or (columns:1)){[class*=p-list].is-split{column-gap:2rem;columns:2}[class*=p-list].is-split .p-list__item{display:inline-block;width:100%}}@supports not ((-webkit-columns:1) or (columns:1)){[class*=p-list].is-split{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}[class*=p-list].is-split .p-list__item{width:calc(50% - .5rem)}}[class*=p-list].is-split:nth-child(2n-1){margin-right:1rem}}.p-matrix{-ms-flex-wrap:wrap;flex-wrap:wrap;list-style:none;margin-bottom:1.5rem;margin-left:0;padding-left:0}.p-matrix,.p-matrix__item{display:-ms-flexbox;display:flex}.p-matrix__item{border-top:1px solid #cdcdcd;-ms-flex:1 1 auto;flex:1 1 auto;padding-bottom:1rem;padding-top:.9375rem}@media (min-width:620px){.p-matrix__item{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;width:33.333%}}@media (min-width:620px) and (max-width:1030px){.p-matrix__item{-ms-flex-direction:column;flex-direction:column}}@media (min-width:768px){.p-matrix__item{border-right:1px solid #cdcdcd;padding-left:1rem;padding-right:1rem;width:33.333%}.p-matrix__item:empty{display:block}.p-matrix__item:nth-child(3n+1){padding-left:0}.p-matrix__item:nth-child(3n+3){border-right:0}.p-matrix__item:first-child,.p-matrix__item:nth-child(2),.p-matrix__item:nth-child(3){border-top:0}}@media (min-width:1030px){.p-matrix__item{border-right:1px solid #cdcdcd;padding:1rem;width:33.333%}.p-matrix__item:empty{display:block}.p-matrix__item:nth-child(3n+1){padding-left:0}.p-matrix__item:nth-child(3n+3){border-right:0;padding-right:0}.p-matrix__item:last-child,.p-matrix__item:nth-last-child(2),.p-matrix__item:nth-last-child(3){border-bottom:0}}.p-matrix__img{-ms-flex-item-align:start;align-self:flex-start;margin-bottom:1rem;margin-right:1rem;max-height:3rem;max-width:3rem;width:auto}.p-matrix__content{display:-ms-flexbox;display:flex;-ms-flex:1 1 auto;flex:1 1 auto;-ms-flex-direction:column;flex-direction:column;padding-right:1rem}@media (min-width:1030px){.p-matrix__content{width:calc(100% - 4rem)}}.p-matrix__title{margin-top:-.5rem}.p-matrix__desc{margin-bottom:.1rem;margin-top:-1rem}.p-matrix__desc>p:last-child{margin-bottom:0}.p-matrix__desc+.p-matrix__desc{margin-top:0}@media (max-width:768px){.p-matrix__desc{margin-top:-.5rem}}.p-media-object__image{-ms-flex-item-align:start;align-self:flex-start;border-radius:.125rem;-ms-flex-preferred-size:inherit;flex-basis:inherit;-ms-flex-negative:0;flex-shrink:0;margin-right:1rem;max-height:5rem;max-width:5rem;vertical-align:middle;width:auto}.p-media-object__content{margin-bottom:.6rem;margin-top:0}.p-media-object__image.is-round{border-radius:50%}.p-media-object__title{margin-bottom:.2rem;margin-top:-.5rem}@media only screen and (min-width:768px){.p-media-object__title{margin-bottom:-.05rem}}.p-media-object__meta-list{list-style:none;margin:0;padding-left:0;padding-top:.5rem}.p-media-object__meta-list-item--date{background-image:url('data:image/svg+xml;utf8,')}.p-media-object__meta-list-item--location{background-image:url('data:image/svg+xml;utf8,')}.p-media-object__meta-list-item--venue{background-image:url('data:image/svg+xml;utf8,')}.p-media-object--large .p-media-object__image{max-height:6rem;max-width:6rem}.p-media-object--large .p-media-object__title{margin-bottom:.3rem;margin-top:-.5rem}@media only screen and (min-width:768px){.p-media-object--large .p-media-object__title{margin-bottom:-.2rem}}.p-modal{-ms-flex-align:center;align-items:center;background:hsla(0,0%,7%,.85);content:"";display:-ms-flexbox;display:flex;height:100vh;-ms-flex-pack:center;justify-content:center;left:0;margin:0;padding:1.5rem;top:0;width:100%}.p-modal,.p-modal__dialog{overflow:scroll;position:absolute}.p-modal__dialog{bottom:1.5rem;left:1.5rem;max-width:64.875rem;right:1.5rem;top:1.5rem;width:auto}@media screen and (min-width:768px){.p-modal__dialog{bottom:auto;left:auto;overflow:visible;position:relative;right:auto;top:auto}}.p-modal__header{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.p-modal__title{-ms-flex-item-align:end;align-self:flex-end}.p-modal__close{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='90' width='90'%3E%3Cg color='%23000'%3E%3Cpath fill='none' d='M0 0h90v90H0z'/%3E%3Cpath d='M14.52 6L6 14.52 36.48 45 6 75.49 14.52 84 45 53.52 75.48 84 84 75.49 53.52 45 84 14.52 75.48 6 45 36.49z' fill='%23888'/%3E%3C/g%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:1rem;border:0;box-sizing:content-box;height:1rem;margin:-1rem -1rem 0 0;padding:1rem;text-indent:-999em;width:1rem}.p-modal__close:focus{outline:1px solid #007aa6;outline-offset:2px}.p-notification,.p-notification--caution,.p-notification--information,.p-notification--negative,.p-notification--positive{display:-ms-flexbox;display:flex;padding:0}.p-notification{position:relative}.p-notification:before{top:0;background-color:#666;content:"";position:absolute;height:.1875rem;width:auto;left:0;right:0}.p-notification+.p-notification{margin-top:1.5rem}.p-notification__response{background-position:1rem 1.15rem;background-repeat:no-repeat;background-size:1rem;padding:.9rem 1rem .5rem}.p-notification__action:before,.p-notification__status:after{content:" "}.p-notification .p-icon--close{background-color:transparent;background-size:1rem;border:0;margin:1.1875rem 1rem auto auto;padding:.5rem}.p-notification--floating,.p-notification__response{max-width:60em}.p-notification--positive{position:relative}.p-notification--positive:before{top:0;background-color:#0e8420;content:"";position:absolute;height:.1875rem;width:auto;left:0;right:0}.p-notification--positive .p-notification__response{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='17' height='17' viewBox='0 0 17 17' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform='translate(1 1)' fill='none' fill-rule='evenodd'%3E%3Ccircle stroke='%230e8420' stroke-width='1.5' fill='%230e8420' cx='7.25' cy='7.25' r='7.25'/%3E%3Cpath fill='%23fff' d='M11.05 4.173l-.066.058L6.25 8.378l-2.776-2.38-.839.948L6.25 10.75l5.5-5.787-.7-.79z'/%3E%3C/g%3E%3C/svg%3E");padding-left:3rem}.p-notification--caution{position:relative}.p-notification--caution:before{top:0;background-color:#f99b11;content:"";position:absolute;height:.1875rem;width:auto;left:0;right:0}.p-notification--caution .p-notification__response{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='16' width='16'%3E%3Cg color='%23000'%3E%3Cpath fill='none' d='M0 0h16v16H0z'/%3E%3Cpath stroke-linejoin='round' fill='%23f99b11' transform='matrix(2.28 0 0 2.437 -2180.8 -490.52)' stroke='%23f99b11' stroke-width='.848' d='M963.07 207.03h-6.15l3.08-5.33z'/%3E%3Cpath d='M7 5v5h2V5H7zm0 6v2h2v-2H7z' fill='%23111'/%3E%3C/g%3E%3C/svg%3E");padding-left:3rem}.p-notification--negative{position:relative}.p-notification--negative:before{top:0;background-color:#c7162b;content:"";position:absolute;height:.1875rem;width:auto;left:0;right:0}.p-notification--negative .p-notification__response{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='17' viewBox='0 0 16 17' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath d='M0 .362h16v16H0z'/%3E%3Ccircle stroke='%23c7162b' stroke-width='1.5' fill='%23c7162b' cx='8' cy='8.362' r='7.25'/%3E%3Cpath d='M5 5.362l6 6M11 5.362l-6 6' stroke='%23fff' stroke-width='1.5'/%3E%3C/g%3E%3C/svg%3E");padding-left:3rem}.p-notification--information{position:relative}.p-notification--information:before{top:0;background-color:#335280;content:"";position:absolute;height:.1875rem;width:auto;left:0;right:0}.p-pagination__link--next:after,.p-pagination__link--previous:before{color:#666;content:"\203A";font-size:2rem;position:absolute;top:1rem}.p-pagination{display:-ms-flexbox;display:flex;width:100%}.p-pagination__link,.p-pagination__link--next,.p-pagination__link--previous{margin-top:0;padding:1rem;position:relative;width:50%}.p-pagination__link--next:hover,.p-pagination__link--previous:hover,.p-pagination__link:hover{background:#f7f7f7;text-decoration:none}.p-pagination__link--previous{padding-left:2.5rem;text-align:left}@media (max-width:460px){.p-pagination__link--previous{width:auto}.p-pagination__link--previous:only-child{width:100%}.p-pagination__link--previous:not(:only-child) *{display:none;max-width:.25rem;padding-left:1.5rem}}.p-pagination__link--previous:before{left:.5rem;transform:scaleX(-1)}.p-pagination__link--next{padding-right:2.5rem;text-align:right}@media (max-width:460px){.p-pagination__link--next{width:100%}}.p-pagination__link--next:only-child{margin-left:auto}.p-pagination__link--next:after{right:.5rem}.p-pagination__label,.p-pagination__title{color:#111;display:block;margin-top:0;width:100%}.p-pagination__label{margin-bottom:.25rem}.p-pagination__title{font-size:1.125rem}@media (min-width:620px){.p-pagination__title{font-size:1.25rem}}.p-pull-quote{border:0;margin:1.5rem 0 2rem;overflow:visible;padding:0 2rem;position:relative}.p-pull-quote>p:first-of-type:before{color:#cdcdcd;display:inline-block;font-size:3rem;font-weight:700;max-width:1.25rem;position:absolute;content:"\201C\2002";left:.25rem;top:.05rem}@media (max-width:768px){.p-pull-quote>p:first-of-type:before{font-size:2.75rem;top:.3rem}}.p-pull-quote>p:last-of-type{margin-bottom:0}.p-pull-quote>p:last-of-type:after{color:#cdcdcd;display:inline-block;font-size:3rem;font-weight:700;max-width:1.25rem;position:absolute;content:"\2002\201E";margin-left:.25rem;margin-top:-2.2rem}@media (max-width:768px){.p-pull-quote>p:last-of-type:after{font-size:2.75rem;margin-top:-1.7rem}}.p-pull-quote__citation{font-style:italic;margin-top:.5rem}.p-search-box__button,.p-search-box__reset{background:#fff;border:1px solid #cdcdcd;display:block;height:100%;margin:0;padding:0 .5rem;position:absolute;top:0;width:2.5rem}.p-search-box__button:hover,.p-search-box__reset:hover{background:inherit}.p-search-box__button:hover:disabled,.p-search-box__reset:hover:disabled{cursor:not-allowed}.p-search-box{box-shadow:inset 0 1px 2px rgba(0,0,0,.12);display:-ms-flexbox;display:flex;margin-bottom:1.7rem;position:relative}.p-search-box__input{box-shadow:none;-ms-flex-positive:2;flex-grow:2;margin-bottom:0}.p-search-box__input::-webkit-search-cancel-button{-webkit-appearance:none}.p-search-box__input:not(:valid)~.p-search-box__reset{display:none}.p-search-box__button{right:0}.p-search-box__reset{border-left:0;border-right:0;right:2.5rem}.p-slider{-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:3px;margin:.5rem 0;padding:0;width:100%}.p-slider::-webkit-slider-runnable-track{border:1px solid #cdcdcd;border-radius:3px;height:6px}.p-slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;background:#fff;border:0;border-radius:2px;box-shadow:0 0 2px 1px rgba(0,0,0,.2);height:24px;margin-top:-10.5px;width:24px}.p-slider::-webkit-slider-thumb:hover{cursor:pointer}.p-slider::-moz-range-track{background:#fff;border:1px solid #cdcdcd;border-radius:2px;height:4px}.p-slider::-moz-range-progress{background-color:#335280;border-radius:2px;height:4px}.p-slider::-moz-range-thumb{background:#fff;border:0;border-radius:2px;box-shadow:0 0 2px 1px rgba(0,0,0,.2);height:24px;width:24px}.p-slider::-moz-range-thumb:hover{cursor:pointer}.p-slider::-moz-focus-outer{border:0}.p-slider::-ms-track{background:transparent;border-color:transparent;border-width:12px;color:transparent;height:6px;width:calc(100% - 12px)}.p-slider::-ms-fill-lower{background:#335280;border:1px solid #cdcdcd;border-radius:2px}.p-slider::-ms-fill-upper{background:#fff;border:1px solid #cdcdcd;border-radius:2px}.p-slider::-ms-thumb{background:#fff;border:0;border-radius:2px;box-shadow:0 0 2px 1px rgba(0,0,0,.2);height:24px;margin:0 2px;width:24px}.p-slider::-ms-thumb:hover{cursor:pointer}.p-slider::-ms-tooltip{display:none}.p-slider:focus{outline:none}.p-slider:focus::-webkit-slider-thumb{outline:1px solid #19b6ee;outline-offset:2px}.p-slider:focus::-moz-range-thumb{outline:1px solid #19b6ee;outline-offset:2px}.p-slider:focus::-ms-thumb{outline:1px solid #19b6ee;outline-offset:2px}.p-slider:disabled{opacity:.5}.p-slider__wrapper{-ms-flex-align:center;align-items:center;display:-ms-inline-flexbox;display:inline-flex;width:100%}.p-slider__input{height:2.625em;margin:0 0 0 1rem;min-width:3.5em;text-align:center;width:5%}@media only screen and (max-width:1030px){.is-shallow[class^=p-strip]{padding-bottom:1rem;padding-top:1rem}}@media only screen and (min-width:1030px){.is-shallow[class^=p-strip]{padding-bottom:2rem;padding-top:2rem}}@media only screen and (max-width:1030px){.p-strip,.p-strip--accent,.p-strip--dark,.p-strip--image,.p-strip--light{padding-bottom:2rem;padding-top:2rem}}@media only screen and (min-width:1030px){.p-strip,.p-strip--accent,.p-strip--dark,.p-strip--image,.p-strip--light{padding-bottom:4rem;padding-top:4rem}}@media only screen and (max-width:1030px){.is-deep[class^=p-strip]{padding:3rem 0}}@media only screen and (min-width:1030px){.is-deep[class^=p-strip]{padding:6rem 0}}.p-strip,.p-strip--accent,.p-strip--dark,.p-strip--image,.p-strip--light{clear:both;width:100%}.p-strip{background-color:transparent}.p-strip--light{background-color:#f7f7f7}.p-strip--dark{background-color:#111;color:#f7f7f7}.p-strip--accent{background-color:#333;color:#fff}.p-strip--image{background-repeat:no-repeat;background-size:cover}.p-strip--image.is-light{color:#000}.p-strip--image.is-dark{color:#fff}[class^=p-strip].is-bordered{border-bottom:1px solid #cdcdcd;margin-bottom:-.0625rem}.p-switch{height:1.5rem;margin:0;position:relative;width:3rem}.p-switch:checked+.p-switch__slider:before{left:50%}.p-switch:focus{outline:0}.p-switch:focus+.p-switch__slider{outline:1px solid #19b6ee;outline-offset:2px}.p-switch__slider{background:linear-gradient(90deg,#335280 50%,#cdcdcd 0);box-shadow:inset 0 2px 5px 0 hsla(0,0%,7%,.2);height:1.5rem;margin:.1rem 0 1rem;position:relative;width:3rem}.p-switch__slider:before{transition-duration:.5s;transition-property:all;transition-timing-function:cubic-bezier(.215,.61,.355,1);background:#fff;content:"";height:1.5rem;left:0;position:absolute;width:1.5rem}button.p-switch{-ms-flex-align:stretch;align-items:stretch;border:0;display:-ms-inline-flexbox;display:inline-flex;height:1.5rem;padding:initial;width:3rem}button.p-switch :first-child,button.p-switch :last-child{box-shadow:inset 0 2px 5px 0 hsla(0,0%,7%,.2);line-height:1.5rem;margin:0;text-align:center;width:50%}button.p-switch :first-child{background-color:#335280;border-radius:2px 0 0 2px;color:#fff}button.p-switch :last-child{background-color:#cdcdcd;border-radius:0 2px 2px 0}button.p-switch:before{transition-duration:.5s;transition-property:all;transition-timing-function:cubic-bezier(.215,.61,.355,1);background:inherit;background-color:#fff;border-radius:.125rem;box-shadow:0 1px 5px 1px hsla(0,0%,7%,.2);content:"";display:block;height:100%;left:0;max-height:2rem;padding:0;position:absolute;top:0;width:50%}button.p-switch:after{display:none}button.p-switch[aria-checked=true]:before{left:50%}.p-table-expanding{display:-ms-flexbox;display:flex;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-ms-flex-pack:justify;justify-content:space-between}.p-table-expanding tbody{margin:0}.p-table-expanding tr{display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:0;width:100%}.p-table-expanding tr+tr{margin:0}.p-table-expanding td,.p-table-expanding th{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-positive:1;flex-grow:1;margin:0;word-break:break-word}.p-table-expanding td.p-table-expanding__panel,.p-table-expanding th.p-table-expanding__panel{-ms-flex-preferred-size:100%;flex-basis:100%;max-width:100%}.p-table-expanding td.p-table-expanding__panel[aria-hidden=true],.p-table-expanding th.p-table-expanding__panel[aria-hidden=true]{display:none}.p-table-expanding td.p-table-expanding__panel .row,.p-table-expanding th.p-table-expanding__panel .row{max-width:100%;padding:0;width:100%}@media screen and (max-width:1030px){.p-table--mobile-card thead{display:none}.p-table--mobile-card tbody{-ms-flex-pack:justify;justify-content:space-between}.p-table--mobile-card tbody,.p-table--mobile-card tr{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.p-table--mobile-card tr{border-top:1px solid #cdcdcd;margin:-1px 0 .5rem;width:100%}.p-table--mobile-card tbody th,.p-table--mobile-card td{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;-ms-flex:0 1 auto;flex:0 1 auto;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:left!important;justify-content:left!important;margin:0;overflow:visible;padding-bottom:0;padding-top:0;text-align:left!important;width:25%}.p-table--mobile-card tbody th[aria-label],.p-table--mobile-card td[aria-label]{text-align:right}.p-table--mobile-card tbody th[aria-label]:before,.p-table--mobile-card td[aria-label]:before{content:attr(aria-label);display:block;-ms-flex:0 1 auto;flex:0 1 auto;margin-bottom:0;width:100%}.p-table--mobile-card tbody th.u-align--right,.p-table--mobile-card td.u-align--right{-ms-flex-pack:unset!important;justify-content:unset!important}.p-table--mobile-card .p-contextual-menu,.p-table--mobile-card .p-contextual-menu--center,.p-table--mobile-card .p-contextual-menu--left{width:100%}.p-table--mobile-card .p-contextual-menu--center [role=menuitem],.p-table--mobile-card .p-contextual-menu--left [role=menuitem],.p-table--mobile-card .p-contextual-menu [role=menuitem]{display:none}.p-table--mobile-card .p-contextual-menu__dropdown{box-shadow:none;display:block;max-width:100%;position:relative}.p-table--mobile-card .p-contextual-menu__dropdown:before{display:none}.p-table--mobile-card .p-contextual-menu__group{padding:0}.p-table--mobile-card .p-contextual-menu__group+.p-contextual-menu__group{margin-top:.5rem;padding-top:.5rem}.p-table--mobile-card .p-contextual-menu__link{border:1px solid #cdcdcd;border-radius:.125rem;box-sizing:border-box;color:#000;cursor:pointer;display:block;line-height:1rem;outline:none;padding:.5rem 1.5rem;text-align:center;text-decoration:none;width:100%}.p-table--mobile-card .p-contextual-menu__link+.p-contextual-menu__link{margin-top:.25rem}}.p-table--sortable th[role=columnheader][aria-sort=ascending]:after,.p-table--sortable th[role=columnheader][aria-sort=descending]:after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='4' width='10' viewBox='0 0 10 4'%3E%3Cpath d='M3.637 3.138c-.518-.365-1.052-.778-1.6-1.238C1.486 1.44.946.948.414.423.273.283.135.14 0 0h1.54c.305.29.62.57.948.846.138.116.277.23.417.34.163.13.328.257.495.38.085.062.17.123.257.184.397.282.935.626 1.315.848h.054c.38-.222.918-.566 1.315-.848.4-.28.79-.583 1.17-.904C7.837.57 8.153.29 8.457 0h1.54c-.134.14-.272.282-.414.422C9.05.948 8.51 1.442 7.963 1.9c-.55.46-1.084.873-1.602 1.238S5.39 3.79 5 4c-.39-.21-.845-.497-1.363-.862z' fill='%23888' fill-rule='evenodd'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:100%;content:"";display:inline-block;height:.4rem;margin-left:.25rem;vertical-align:middle;width:1rem}.p-table--sortable{table-layout:fixed}.p-table--sortable th[role=columnheader][aria-sort]{-ms-flex-align:center;align-items:center;cursor:pointer;white-space:nowrap}.p-table--sortable th[role=columnheader][aria-sort=descending]:after{transform:rotate(180deg)}.p-table--sortable th[role=columnheader][aria-sort]:hover{color:#007aa6;text-decoration:underline}.p-tabs{border-radius:0;overflow:hidden;padding:0;position:relative}.p-tabs:before{bottom:0;color:#666;content:"\203A";display:block;font-size:2rem;line-height:1.5rem;padding-right:1.5rem;pointer-events:none;position:absolute;right:.5rem;text-align:right;top:15%;width:1rem;z-index:3}@media screen and (min-width:768px){.p-tabs:before{display:none}}.p-tabs__list{margin:0 auto 1rem;overflow-x:scroll;padding:0;position:relative;white-space:nowrap;width:100%}@media screen and (min-width:768px){.p-tabs__list{max-width:64.875rem;overflow:hidden}}.p-tabs__item{display:inline-block;float:none;margin:0;padding:0;width:auto}@media screen and (min-width:768px){.p-tabs__item{float:left}}.p-tabs__item:last-child{margin-right:3rem}@media screen and (min-width:768px){.p-tabs__item:last-child{margin-right:0}}.p-tabs__link{color:#000;display:inline-block;padding:.75rem 1rem}.p-tabs__link:active,.p-tabs__link:hover,.p-tabs__link:visited{color:#000;text-decoration:none}.p-tabs__link:hover,.p-tabs__link[aria-selected=true]{position:relative}.p-tabs__link:hover:before,.p-tabs__link[aria-selected=true]:before{bottom:0;background-color:#666;content:"";position:absolute;height:.1875rem;width:auto;left:-1px;right:-1px;z-index:1}.p-tooltip{position:relative}.p-tooltip__message{background-color:#111;border:0;border-radius:.125rem;color:#fff;display:none;left:0;margin-bottom:0;min-width:155px;padding:.5rem 1rem;position:absolute;text-align:left;text-decoration:initial;top:100%;transform:translateX(0) translateY(13px);white-space:pre;z-index:1}.p-tooltip__message:before{border-bottom:8px solid #111;border-left:8px solid transparent;border-right:8px solid transparent;bottom:100%;content:"";height:0;left:1rem;pointer-events:none;position:absolute;width:0}.p-tooltip:focus .p-tooltip__message,.p-tooltip:hover .p-tooltip__message{display:inline;text-decoration:initial}.p-tooltip--btm-center .p-tooltip__message{bottom:inherit;left:50%;top:100%;transform:translateX(-50%) translateY(13px)}.p-tooltip--btm-center .p-tooltip__message:before{left:50%;transform:translateX(-50%)}.p-tooltip--btm-right .p-tooltip__message{bottom:inherit;left:auto;right:0;top:100%;transform:translateY(13px)}.p-tooltip--btm-right .p-tooltip__message:before{left:auto;right:.5rem}.p-tooltip--top-left .p-tooltip__message{bottom:100%;left:0;top:auto;transform:translateX(0) translateY(-13px)}.p-tooltip--top-left .p-tooltip__message:before{border-bottom:8px solid transparent;border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid #111;bottom:-1rem;left:.5rem}.p-tooltip--top-center .p-tooltip__message{bottom:100%;left:50%;top:auto;transform:translateX(-50%) translateY(-13px)}.p-tooltip--top-center .p-tooltip__message:before{border-bottom:8px solid transparent;border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid #111;bottom:-1rem;left:50%;transform:translateX(-50%)}.p-tooltip--top-right .p-tooltip__message{bottom:100%;left:auto;right:0;top:auto;transform:translateX(0) translateY(-13px)}.p-tooltip--top-right .p-tooltip__message:before{border-bottom:8px solid transparent;border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid #111;bottom:-1rem;left:auto;right:.5rem}.p-tooltip--right .p-tooltip__message{bottom:inherit;left:100%;top:50%;transform:translateX(14px) translateY(-50%)}.p-tooltip--right .p-tooltip__message:before{border-bottom:8px solid transparent;border-left:8px solid transparent;border-right:8px solid #111;border-top:8px solid transparent;bottom:inherit;left:0;top:50%;transform:translateX(-16px) translateY(-50%)}.p-tooltip--left .p-tooltip__message{bottom:inherit;left:-16px;top:50%;transform:translateX(-100%) translateY(-50%)}.p-tooltip--left .p-tooltip__message:before{border-bottom:8px solid transparent;border-left:8px solid #111;border-right:8px solid transparent;border-top:8px solid transparent;bottom:inherit;left:100%;top:50%;transform:translateX(0) translateY(-50%)}.u-align--center{-ms-flex-pack:center!important;justify-content:center!important;text-align:center!important}.u-align--left{-ms-flex-pack:start!important;justify-content:flex-start!important;text-align:left!important}.u-align--right{-ms-flex-pack:end!important;justify-content:flex-end!important;text-align:right!important}.u-align--bottom{margin-top:auto!important}.u-align-text--center{margin-left:auto!important;margin-right:auto!important;text-align:center!important}.u-align-text--left{margin-right:auto!important;text-align:left!important}.u-align-text--right{margin-left:auto!important;text-align:right!important}.u-animation--spin{animation:a 1s infinite linear}@keyframes a{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.u-baseline-grid{position:relative}.u-baseline-grid:after{background:linear-gradient(0deg,rgba(255,0,0,.3),rgba(255,0,0,.3) 1px,transparent 0,transparent);background-size:100% .5rem;bottom:0;content:"";display:block;left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:4}.u-baseline-grid__toggle{bottom:1.5rem;position:fixed;right:1.5rem;z-index:5}.u-embedded-media{height:0;margin-top:.5rem;max-width:100%;overflow:hidden;padding-bottom:56.25%;position:relative}.u-embedded-media__element{height:100%;left:0;position:absolute;top:0;width:100%}@media only screen and (min-width:768px){.u-equal-height{display:-ms-flexbox;display:flex}}.u-float--right{float:right!important}.u-float--left{float:left!important}.u-float-right{float:right!important}@media (max-width:620px){.u-float-right--small{float:right!important}}@media (min-width:768px) and (max-width:1030px){.u-float-right--medium{float:right!important}}@media (min-width:1030px){.u-float-right--large{float:right!important}}.u-float-left{float:left!important}@media (max-width:620px){.u-float-left--small{float:left!important}}@media (min-width:768px) and (max-width:1030px){.u-float-left--medium{float:left!important}}@media (min-width:1030px){.u-float-left--large{float:left!important}}.u-hide{display:none!important}@media screen and (max-width:768px){.u-hide--small{display:none!important}}@media (min-width:768px) and (max-width:1030px){.u-hide--medium{display:none!important}}@media screen and (min-width:1030px){.u-hide--large{display:none!important}}@media (min-width:768px){.u-image-position{overflow:hidden;position:relative}.u-image-position .u-image-position--bottom,.u-image-position .u-image-position--left,.u-image-position .u-image-position--right,.u-image-position .u-image-position--top{margin:0;position:absolute}.u-image-position [class*=col-]{position:static}.u-image-position--top{top:0}.u-image-position--bottom{bottom:0}.u-image-position--left{left:0}.u-image-position--right{right:0}}.u-no-margin{margin:0!important}.u-no-margin--top{margin-top:0!important}.u-no-margin--right{margin-right:0!important}.u-no-margin--bottom{margin-bottom:0!important}.u-no-margin--left{margin-left:0!important}.u-off-screen{height:1px!important;left:-10000px!important;overflow:hidden!important;position:absolute!important;top:auto!important;width:1px!important}.u-no-padding{padding:0!important}.u-no-padding--top{padding-top:0!important}.u-no-padding--right{padding-right:0!important}.u-no-padding--bottom{padding-bottom:0!important}.u-no-padding--left{padding-left:0!important}.u-show{display:inherit!important}@media screen and (max-width:768px){.u-show--small{display:inherit!important}}@media (min-width:768px) and (max-width:1030px){.u-show--medium{display:inherit!important}}@media screen and (min-width:1030px){.u-show--large{display:inherit!important}}.u-sv0:after,.u-sv1:after,.u-sv2:after,.u-sv3:after,.u-sv-1:after,.u-sv-2:after,.u-sv-3:after{content:"";display:block;height:.0625rem;position:relative}.u-sv-3:after{margin-top:-1.5625rem}.u-sv-2:after{margin-top:-1.0625rem}.u-sv-1:after{margin-top:-.5625rem}.u-sv0:after{margin-top:-.0625rem}.u-sv1:after{margin-top:.4375rem}.u-sv2:after{margin-top:.9375rem}.u-sv3:after{margin-top:1.4375rem}@media (min-width:768px){.u-vertically-center{-ms-flex-align:center!important;align-items:center!important;display:-ms-flexbox!important;display:flex!important}.u-vertically-center>img{-ms-flex-item-align:center!important;align-self:center!important}}.u-hidden{display:none!important}@media screen and (max-width:768px){.u-hidden--small{display:none!important}}@media (min-width:768px) and (max-width:1030px){.u-hidden--medium{display:none!important}}@media screen and (min-width:1030px){.u-hidden--large{display:none!important}}.u-visible{display:inherit!important}@media screen and (max-width:768px){.u-visible--small{display:inherit!important}}@media (min-width:768px) and (max-width:1030px){.u-visible--medium{display:inherit!important}}@media screen and (min-width:1030px){.u-visible--large{display:inherit!important}} \ No newline at end of file diff --git a/webroot/assets/vue-route.js b/webroot/assets/vue-route.js new file mode 100644 index 0000000..c20aa9f --- /dev/null +++ b/webroot/assets/vue-route.js @@ -0,0 +1,2626 @@ +/*! + * vue-router v3.0.2 + * (c) 2018 Evan You + * @license MIT + */ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global.VueRouter = factory()); +}(this, (function () { 'use strict'; + +/* */ + +function assert (condition, message) { + if (!condition) { + throw new Error(("[vue-router] " + message)) + } +} + +function warn (condition, message) { + if ("development" !== 'production' && !condition) { + typeof console !== 'undefined' && console.warn(("[vue-router] " + message)); + } +} + +function isError (err) { + return Object.prototype.toString.call(err).indexOf('Error') > -1 +} + +function extend (a, b) { + for (var key in b) { + a[key] = b[key]; + } + return a +} + +var View = { + name: 'RouterView', + functional: true, + props: { + name: { + type: String, + default: 'default' + } + }, + render: function render (_, ref) { + var props = ref.props; + var children = ref.children; + var parent = ref.parent; + var data = ref.data; + + // used by devtools to display a router-view badge + data.routerView = true; + + // directly use parent context's createElement() function + // so that components rendered by router-view can resolve named slots + var h = parent.$createElement; + var name = props.name; + var route = parent.$route; + var cache = parent._routerViewCache || (parent._routerViewCache = {}); + + // determine current view depth, also check to see if the tree + // has been toggled inactive but kept-alive. + var depth = 0; + var inactive = false; + while (parent && parent._routerRoot !== parent) { + if (parent.$vnode && parent.$vnode.data.routerView) { + depth++; + } + if (parent._inactive) { + inactive = true; + } + parent = parent.$parent; + } + data.routerViewDepth = depth; + + // render previous view if the tree is inactive and kept-alive + if (inactive) { + return h(cache[name], data, children) + } + + var matched = route.matched[depth]; + // render empty node if no matched route + if (!matched) { + cache[name] = null; + return h() + } + + var component = cache[name] = matched.components[name]; + + // attach instance registration hook + // this will be called in the instance's injected lifecycle hooks + data.registerRouteInstance = function (vm, val) { + // val could be undefined for unregistration + var current = matched.instances[name]; + if ( + (val && current !== vm) || + (!val && current === vm) + ) { + matched.instances[name] = val; + } + } + + // also register instance in prepatch hook + // in case the same component instance is reused across different routes + ;(data.hook || (data.hook = {})).prepatch = function (_, vnode) { + matched.instances[name] = vnode.componentInstance; + }; + + // resolve props + var propsToPass = data.props = resolveProps(route, matched.props && matched.props[name]); + if (propsToPass) { + // clone to prevent mutation + propsToPass = data.props = extend({}, propsToPass); + // pass non-declared props as attrs + var attrs = data.attrs = data.attrs || {}; + for (var key in propsToPass) { + if (!component.props || !(key in component.props)) { + attrs[key] = propsToPass[key]; + delete propsToPass[key]; + } + } + } + + return h(component, data, children) + } +} + +function resolveProps (route, config) { + switch (typeof config) { + case 'undefined': + return + case 'object': + return config + case 'function': + return config(route) + case 'boolean': + return config ? route.params : undefined + default: + { + warn( + false, + "props in \"" + (route.path) + "\" is a " + (typeof config) + ", " + + "expecting an object, function or boolean." + ); + } + } +} + +/* */ + +var encodeReserveRE = /[!'()*]/g; +var encodeReserveReplacer = function (c) { return '%' + c.charCodeAt(0).toString(16); }; +var commaRE = /%2C/g; + +// fixed encodeURIComponent which is more conformant to RFC3986: +// - escapes [!'()*] +// - preserve commas +var encode = function (str) { return encodeURIComponent(str) + .replace(encodeReserveRE, encodeReserveReplacer) + .replace(commaRE, ','); }; + +var decode = decodeURIComponent; + +function resolveQuery ( + query, + extraQuery, + _parseQuery +) { + if ( extraQuery === void 0 ) extraQuery = {}; + + var parse = _parseQuery || parseQuery; + var parsedQuery; + try { + parsedQuery = parse(query || ''); + } catch (e) { + "development" !== 'production' && warn(false, e.message); + parsedQuery = {}; + } + for (var key in extraQuery) { + parsedQuery[key] = extraQuery[key]; + } + return parsedQuery +} + +function parseQuery (query) { + var res = {}; + + query = query.trim().replace(/^(\?|#|&)/, ''); + + if (!query) { + return res + } + + query.split('&').forEach(function (param) { + var parts = param.replace(/\+/g, ' ').split('='); + var key = decode(parts.shift()); + var val = parts.length > 0 + ? decode(parts.join('=')) + : null; + + if (res[key] === undefined) { + res[key] = val; + } else if (Array.isArray(res[key])) { + res[key].push(val); + } else { + res[key] = [res[key], val]; + } + }); + + return res +} + +function stringifyQuery (obj) { + var res = obj ? Object.keys(obj).map(function (key) { + var val = obj[key]; + + if (val === undefined) { + return '' + } + + if (val === null) { + return encode(key) + } + + if (Array.isArray(val)) { + var result = []; + val.forEach(function (val2) { + if (val2 === undefined) { + return + } + if (val2 === null) { + result.push(encode(key)); + } else { + result.push(encode(key) + '=' + encode(val2)); + } + }); + return result.join('&') + } + + return encode(key) + '=' + encode(val) + }).filter(function (x) { return x.length > 0; }).join('&') : null; + return res ? ("?" + res) : '' +} + +/* */ + +var trailingSlashRE = /\/?$/; + +function createRoute ( + record, + location, + redirectedFrom, + router +) { + var stringifyQuery$$1 = router && router.options.stringifyQuery; + + var query = location.query || {}; + try { + query = clone(query); + } catch (e) {} + + var route = { + name: location.name || (record && record.name), + meta: (record && record.meta) || {}, + path: location.path || '/', + hash: location.hash || '', + query: query, + params: location.params || {}, + fullPath: getFullPath(location, stringifyQuery$$1), + matched: record ? formatMatch(record) : [] + }; + if (redirectedFrom) { + route.redirectedFrom = getFullPath(redirectedFrom, stringifyQuery$$1); + } + return Object.freeze(route) +} + +function clone (value) { + if (Array.isArray(value)) { + return value.map(clone) + } else if (value && typeof value === 'object') { + var res = {}; + for (var key in value) { + res[key] = clone(value[key]); + } + return res + } else { + return value + } +} + +// the starting route that represents the initial state +var START = createRoute(null, { + path: '/' +}); + +function formatMatch (record) { + var res = []; + while (record) { + res.unshift(record); + record = record.parent; + } + return res +} + +function getFullPath ( + ref, + _stringifyQuery +) { + var path = ref.path; + var query = ref.query; if ( query === void 0 ) query = {}; + var hash = ref.hash; if ( hash === void 0 ) hash = ''; + + var stringify = _stringifyQuery || stringifyQuery; + return (path || '/') + stringify(query) + hash +} + +function isSameRoute (a, b) { + if (b === START) { + return a === b + } else if (!b) { + return false + } else if (a.path && b.path) { + return ( + a.path.replace(trailingSlashRE, '') === b.path.replace(trailingSlashRE, '') && + a.hash === b.hash && + isObjectEqual(a.query, b.query) + ) + } else if (a.name && b.name) { + return ( + a.name === b.name && + a.hash === b.hash && + isObjectEqual(a.query, b.query) && + isObjectEqual(a.params, b.params) + ) + } else { + return false + } +} + +function isObjectEqual (a, b) { + if ( a === void 0 ) a = {}; + if ( b === void 0 ) b = {}; + + // handle null value #1566 + if (!a || !b) { return a === b } + var aKeys = Object.keys(a); + var bKeys = Object.keys(b); + if (aKeys.length !== bKeys.length) { + return false + } + return aKeys.every(function (key) { + var aVal = a[key]; + var bVal = b[key]; + // check nested equality + if (typeof aVal === 'object' && typeof bVal === 'object') { + return isObjectEqual(aVal, bVal) + } + return String(aVal) === String(bVal) + }) +} + +function isIncludedRoute (current, target) { + return ( + current.path.replace(trailingSlashRE, '/').indexOf( + target.path.replace(trailingSlashRE, '/') + ) === 0 && + (!target.hash || current.hash === target.hash) && + queryIncludes(current.query, target.query) + ) +} + +function queryIncludes (current, target) { + for (var key in target) { + if (!(key in current)) { + return false + } + } + return true +} + +/* */ + +// work around weird flow bug +var toTypes = [String, Object]; +var eventTypes = [String, Array]; + +var Link = { + name: 'RouterLink', + props: { + to: { + type: toTypes, + required: true + }, + tag: { + type: String, + default: 'a' + }, + exact: Boolean, + append: Boolean, + replace: Boolean, + activeClass: String, + exactActiveClass: String, + event: { + type: eventTypes, + default: 'click' + } + }, + render: function render (h) { + var this$1 = this; + + var router = this.$router; + var current = this.$route; + var ref = router.resolve(this.to, current, this.append); + var location = ref.location; + var route = ref.route; + var href = ref.href; + + var classes = {}; + var globalActiveClass = router.options.linkActiveClass; + var globalExactActiveClass = router.options.linkExactActiveClass; + // Support global empty active class + var activeClassFallback = globalActiveClass == null + ? 'router-link-active' + : globalActiveClass; + var exactActiveClassFallback = globalExactActiveClass == null + ? 'router-link-exact-active' + : globalExactActiveClass; + var activeClass = this.activeClass == null + ? activeClassFallback + : this.activeClass; + var exactActiveClass = this.exactActiveClass == null + ? exactActiveClassFallback + : this.exactActiveClass; + var compareTarget = location.path + ? createRoute(null, location, null, router) + : route; + + classes[exactActiveClass] = isSameRoute(current, compareTarget); + classes[activeClass] = this.exact + ? classes[exactActiveClass] + : isIncludedRoute(current, compareTarget); + + var handler = function (e) { + if (guardEvent(e)) { + if (this$1.replace) { + router.replace(location); + } else { + router.push(location); + } + } + }; + + var on = { click: guardEvent }; + if (Array.isArray(this.event)) { + this.event.forEach(function (e) { on[e] = handler; }); + } else { + on[this.event] = handler; + } + + var data = { + class: classes + }; + + if (this.tag === 'a') { + data.on = on; + data.attrs = { href: href }; + } else { + // find the first child and apply listener and href + var a = findAnchor(this.$slots.default); + if (a) { + // in case the is a static node + a.isStatic = false; + var aData = a.data = extend({}, a.data); + aData.on = on; + var aAttrs = a.data.attrs = extend({}, a.data.attrs); + aAttrs.href = href; + } else { + // doesn't have child, apply listener to self + data.on = on; + } + } + + return h(this.tag, data, this.$slots.default) + } +} + +function guardEvent (e) { + // don't redirect with control keys + if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) { return } + // don't redirect when preventDefault called + if (e.defaultPrevented) { return } + // don't redirect on right click + if (e.button !== undefined && e.button !== 0) { return } + // don't redirect if `target="_blank"` + if (e.currentTarget && e.currentTarget.getAttribute) { + var target = e.currentTarget.getAttribute('target'); + if (/\b_blank\b/i.test(target)) { return } + } + // this may be a Weex event which doesn't have this method + if (e.preventDefault) { + e.preventDefault(); + } + return true +} + +function findAnchor (children) { + if (children) { + var child; + for (var i = 0; i < children.length; i++) { + child = children[i]; + if (child.tag === 'a') { + return child + } + if (child.children && (child = findAnchor(child.children))) { + return child + } + } + } +} + +var _Vue; + +function install (Vue) { + if (install.installed && _Vue === Vue) { return } + install.installed = true; + + _Vue = Vue; + + var isDef = function (v) { return v !== undefined; }; + + var registerInstance = function (vm, callVal) { + var i = vm.$options._parentVnode; + if (isDef(i) && isDef(i = i.data) && isDef(i = i.registerRouteInstance)) { + i(vm, callVal); + } + }; + + Vue.mixin({ + beforeCreate: function beforeCreate () { + if (isDef(this.$options.router)) { + this._routerRoot = this; + this._router = this.$options.router; + this._router.init(this); + Vue.util.defineReactive(this, '_route', this._router.history.current); + } else { + this._routerRoot = (this.$parent && this.$parent._routerRoot) || this; + } + registerInstance(this, this); + }, + destroyed: function destroyed () { + registerInstance(this); + } + }); + + Object.defineProperty(Vue.prototype, '$router', { + get: function get () { return this._routerRoot._router } + }); + + Object.defineProperty(Vue.prototype, '$route', { + get: function get () { return this._routerRoot._route } + }); + + Vue.component('RouterView', View); + Vue.component('RouterLink', Link); + + var strats = Vue.config.optionMergeStrategies; + // use the same hook merging strategy for route hooks + strats.beforeRouteEnter = strats.beforeRouteLeave = strats.beforeRouteUpdate = strats.created; +} + +/* */ + +var inBrowser = typeof window !== 'undefined'; + +/* */ + +function resolvePath ( + relative, + base, + append +) { + var firstChar = relative.charAt(0); + if (firstChar === '/') { + return relative + } + + if (firstChar === '?' || firstChar === '#') { + return base + relative + } + + var stack = base.split('/'); + + // remove trailing segment if: + // - not appending + // - appending to trailing slash (last segment is empty) + if (!append || !stack[stack.length - 1]) { + stack.pop(); + } + + // resolve relative path + var segments = relative.replace(/^\//, '').split('/'); + for (var i = 0; i < segments.length; i++) { + var segment = segments[i]; + if (segment === '..') { + stack.pop(); + } else if (segment !== '.') { + stack.push(segment); + } + } + + // ensure leading slash + if (stack[0] !== '') { + stack.unshift(''); + } + + return stack.join('/') +} + +function parsePath (path) { + var hash = ''; + var query = ''; + + var hashIndex = path.indexOf('#'); + if (hashIndex >= 0) { + hash = path.slice(hashIndex); + path = path.slice(0, hashIndex); + } + + var queryIndex = path.indexOf('?'); + if (queryIndex >= 0) { + query = path.slice(queryIndex + 1); + path = path.slice(0, queryIndex); + } + + return { + path: path, + query: query, + hash: hash + } +} + +function cleanPath (path) { + return path.replace(/\/\//g, '/') +} + +var isarray = Array.isArray || function (arr) { + return Object.prototype.toString.call(arr) == '[object Array]'; +}; + +/** + * Expose `pathToRegexp`. + */ +var pathToRegexp_1 = pathToRegexp; +var parse_1 = parse; +var compile_1 = compile; +var tokensToFunction_1 = tokensToFunction; +var tokensToRegExp_1 = tokensToRegExp; + +/** + * The main path matching regexp utility. + * + * @type {RegExp} + */ +var PATH_REGEXP = new RegExp([ + // Match escaped characters that would otherwise appear in future matches. + // This allows the user to escape special characters that won't transform. + '(\\\\.)', + // Match Express-style parameters and un-named parameters with a prefix + // and optional suffixes. Matches appear as: + // + // "/:test(\\d+)?" => ["/", "test", "\d+", undefined, "?", undefined] + // "/route(\\d+)" => [undefined, undefined, undefined, "\d+", undefined, undefined] + // "/*" => ["/", undefined, undefined, undefined, undefined, "*"] + '([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))' +].join('|'), 'g'); + +/** + * Parse a string for the raw tokens. + * + * @param {string} str + * @param {Object=} options + * @return {!Array} + */ +function parse (str, options) { + var tokens = []; + var key = 0; + var index = 0; + var path = ''; + var defaultDelimiter = options && options.delimiter || '/'; + var res; + + while ((res = PATH_REGEXP.exec(str)) != null) { + var m = res[0]; + var escaped = res[1]; + var offset = res.index; + path += str.slice(index, offset); + index = offset + m.length; + + // Ignore already escaped sequences. + if (escaped) { + path += escaped[1]; + continue + } + + var next = str[index]; + var prefix = res[2]; + var name = res[3]; + var capture = res[4]; + var group = res[5]; + var modifier = res[6]; + var asterisk = res[7]; + + // Push the current path onto the tokens. + if (path) { + tokens.push(path); + path = ''; + } + + var partial = prefix != null && next != null && next !== prefix; + var repeat = modifier === '+' || modifier === '*'; + var optional = modifier === '?' || modifier === '*'; + var delimiter = res[2] || defaultDelimiter; + var pattern = capture || group; + + tokens.push({ + name: name || key++, + prefix: prefix || '', + delimiter: delimiter, + optional: optional, + repeat: repeat, + partial: partial, + asterisk: !!asterisk, + pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?') + }); + } + + // Match any characters still remaining. + if (index < str.length) { + path += str.substr(index); + } + + // If the path exists, push it onto the end. + if (path) { + tokens.push(path); + } + + return tokens +} + +/** + * Compile a string to a template function for the path. + * + * @param {string} str + * @param {Object=} options + * @return {!function(Object=, Object=)} + */ +function compile (str, options) { + return tokensToFunction(parse(str, options)) +} + +/** + * Prettier encoding of URI path segments. + * + * @param {string} + * @return {string} + */ +function encodeURIComponentPretty (str) { + return encodeURI(str).replace(/[\/?#]/g, function (c) { + return '%' + c.charCodeAt(0).toString(16).toUpperCase() + }) +} + +/** + * Encode the asterisk parameter. Similar to `pretty`, but allows slashes. + * + * @param {string} + * @return {string} + */ +function encodeAsterisk (str) { + return encodeURI(str).replace(/[?#]/g, function (c) { + return '%' + c.charCodeAt(0).toString(16).toUpperCase() + }) +} + +/** + * Expose a method for transforming tokens into the path function. + */ +function tokensToFunction (tokens) { + // Compile all the tokens into regexps. + var matches = new Array(tokens.length); + + // Compile all the patterns before compilation. + for (var i = 0; i < tokens.length; i++) { + if (typeof tokens[i] === 'object') { + matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$'); + } + } + + return function (obj, opts) { + var path = ''; + var data = obj || {}; + var options = opts || {}; + var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent; + + for (var i = 0; i < tokens.length; i++) { + var token = tokens[i]; + + if (typeof token === 'string') { + path += token; + + continue + } + + var value = data[token.name]; + var segment; + + if (value == null) { + if (token.optional) { + // Prepend partial segment prefixes. + if (token.partial) { + path += token.prefix; + } + + continue + } else { + throw new TypeError('Expected "' + token.name + '" to be defined') + } + } + + if (isarray(value)) { + if (!token.repeat) { + throw new TypeError('Expected "' + token.name + '" to not repeat, but received `' + JSON.stringify(value) + '`') + } + + if (value.length === 0) { + if (token.optional) { + continue + } else { + throw new TypeError('Expected "' + token.name + '" to not be empty') + } + } + + for (var j = 0; j < value.length; j++) { + segment = encode(value[j]); + + if (!matches[i].test(segment)) { + throw new TypeError('Expected all "' + token.name + '" to match "' + token.pattern + '", but received `' + JSON.stringify(segment) + '`') + } + + path += (j === 0 ? token.prefix : token.delimiter) + segment; + } + + continue + } + + segment = token.asterisk ? encodeAsterisk(value) : encode(value); + + if (!matches[i].test(segment)) { + throw new TypeError('Expected "' + token.name + '" to match "' + token.pattern + '", but received "' + segment + '"') + } + + path += token.prefix + segment; + } + + return path + } +} + +/** + * Escape a regular expression string. + * + * @param {string} str + * @return {string} + */ +function escapeString (str) { + return str.replace(/([.+*?=^!:${}()[\]|\/\\])/g, '\\$1') +} + +/** + * Escape the capturing group by escaping special characters and meaning. + * + * @param {string} group + * @return {string} + */ +function escapeGroup (group) { + return group.replace(/([=!:$\/()])/g, '\\$1') +} + +/** + * Attach the keys as a property of the regexp. + * + * @param {!RegExp} re + * @param {Array} keys + * @return {!RegExp} + */ +function attachKeys (re, keys) { + re.keys = keys; + return re +} + +/** + * Get the flags for a regexp from the options. + * + * @param {Object} options + * @return {string} + */ +function flags (options) { + return options.sensitive ? '' : 'i' +} + +/** + * Pull out keys from a regexp. + * + * @param {!RegExp} path + * @param {!Array} keys + * @return {!RegExp} + */ +function regexpToRegexp (path, keys) { + // Use a negative lookahead to match only capturing groups. + var groups = path.source.match(/\((?!\?)/g); + + if (groups) { + for (var i = 0; i < groups.length; i++) { + keys.push({ + name: i, + prefix: null, + delimiter: null, + optional: false, + repeat: false, + partial: false, + asterisk: false, + pattern: null + }); + } + } + + return attachKeys(path, keys) +} + +/** + * Transform an array into a regexp. + * + * @param {!Array} path + * @param {Array} keys + * @param {!Object} options + * @return {!RegExp} + */ +function arrayToRegexp (path, keys, options) { + var parts = []; + + for (var i = 0; i < path.length; i++) { + parts.push(pathToRegexp(path[i], keys, options).source); + } + + var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options)); + + return attachKeys(regexp, keys) +} + +/** + * Create a path regexp from string input. + * + * @param {string} path + * @param {!Array} keys + * @param {!Object} options + * @return {!RegExp} + */ +function stringToRegexp (path, keys, options) { + return tokensToRegExp(parse(path, options), keys, options) +} + +/** + * Expose a function for taking tokens and returning a RegExp. + * + * @param {!Array} tokens + * @param {(Array|Object)=} keys + * @param {Object=} options + * @return {!RegExp} + */ +function tokensToRegExp (tokens, keys, options) { + if (!isarray(keys)) { + options = /** @type {!Object} */ (keys || options); + keys = []; + } + + options = options || {}; + + var strict = options.strict; + var end = options.end !== false; + var route = ''; + + // Iterate over the tokens and create our regexp string. + for (var i = 0; i < tokens.length; i++) { + var token = tokens[i]; + + if (typeof token === 'string') { + route += escapeString(token); + } else { + var prefix = escapeString(token.prefix); + var capture = '(?:' + token.pattern + ')'; + + keys.push(token); + + if (token.repeat) { + capture += '(?:' + prefix + capture + ')*'; + } + + if (token.optional) { + if (!token.partial) { + capture = '(?:' + prefix + '(' + capture + '))?'; + } else { + capture = prefix + '(' + capture + ')?'; + } + } else { + capture = prefix + '(' + capture + ')'; + } + + route += capture; + } + } + + var delimiter = escapeString(options.delimiter || '/'); + var endsWithDelimiter = route.slice(-delimiter.length) === delimiter; + + // In non-strict mode we allow a slash at the end of match. If the path to + // match already ends with a slash, we remove it for consistency. The slash + // is valid at the end of a path match, not in the middle. This is important + // in non-ending mode, where "/test/" shouldn't match "/test//route". + if (!strict) { + route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?'; + } + + if (end) { + route += '$'; + } else { + // In non-ending mode, we need the capturing groups to match as much as + // possible by using a positive lookahead to the end or next path segment. + route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)'; + } + + return attachKeys(new RegExp('^' + route, flags(options)), keys) +} + +/** + * Normalize the given path string, returning a regular expression. + * + * An empty array can be passed in for the keys, which will hold the + * placeholder key descriptions. For example, using `/user/:id`, `keys` will + * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`. + * + * @param {(string|RegExp|Array)} path + * @param {(Array|Object)=} keys + * @param {Object=} options + * @return {!RegExp} + */ +function pathToRegexp (path, keys, options) { + if (!isarray(keys)) { + options = /** @type {!Object} */ (keys || options); + keys = []; + } + + options = options || {}; + + if (path instanceof RegExp) { + return regexpToRegexp(path, /** @type {!Array} */ (keys)) + } + + if (isarray(path)) { + return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options) + } + + return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options) +} +pathToRegexp_1.parse = parse_1; +pathToRegexp_1.compile = compile_1; +pathToRegexp_1.tokensToFunction = tokensToFunction_1; +pathToRegexp_1.tokensToRegExp = tokensToRegExp_1; + +/* */ + +// $flow-disable-line +var regexpCompileCache = Object.create(null); + +function fillParams ( + path, + params, + routeMsg +) { + try { + var filler = + regexpCompileCache[path] || + (regexpCompileCache[path] = pathToRegexp_1.compile(path)); + return filler(params || {}, { pretty: true }) + } catch (e) { + { + warn(false, ("missing param for " + routeMsg + ": " + (e.message))); + } + return '' + } +} + +/* */ + +function createRouteMap ( + routes, + oldPathList, + oldPathMap, + oldNameMap +) { + // the path list is used to control path matching priority + var pathList = oldPathList || []; + // $flow-disable-line + var pathMap = oldPathMap || Object.create(null); + // $flow-disable-line + var nameMap = oldNameMap || Object.create(null); + + routes.forEach(function (route) { + addRouteRecord(pathList, pathMap, nameMap, route); + }); + + // ensure wildcard routes are always at the end + for (var i = 0, l = pathList.length; i < l; i++) { + if (pathList[i] === '*') { + pathList.push(pathList.splice(i, 1)[0]); + l--; + i--; + } + } + + return { + pathList: pathList, + pathMap: pathMap, + nameMap: nameMap + } +} + +function addRouteRecord ( + pathList, + pathMap, + nameMap, + route, + parent, + matchAs +) { + var path = route.path; + var name = route.name; + { + assert(path != null, "\"path\" is required in a route configuration."); + assert( + typeof route.component !== 'string', + "route config \"component\" for path: " + (String(path || name)) + " cannot be a " + + "string id. Use an actual component instead." + ); + } + + var pathToRegexpOptions = route.pathToRegexpOptions || {}; + var normalizedPath = normalizePath( + path, + parent, + pathToRegexpOptions.strict + ); + + if (typeof route.caseSensitive === 'boolean') { + pathToRegexpOptions.sensitive = route.caseSensitive; + } + + var record = { + path: normalizedPath, + regex: compileRouteRegex(normalizedPath, pathToRegexpOptions), + components: route.components || { default: route.component }, + instances: {}, + name: name, + parent: parent, + matchAs: matchAs, + redirect: route.redirect, + beforeEnter: route.beforeEnter, + meta: route.meta || {}, + props: route.props == null + ? {} + : route.components + ? route.props + : { default: route.props } + }; + + if (route.children) { + // Warn if route is named, does not redirect and has a default child route. + // If users navigate to this route by name, the default child will + // not be rendered (GH Issue #629) + { + if (route.name && !route.redirect && route.children.some(function (child) { return /^\/?$/.test(child.path); })) { + warn( + false, + "Named Route '" + (route.name) + "' has a default child route. " + + "When navigating to this named route (:to=\"{name: '" + (route.name) + "'\"), " + + "the default child route will not be rendered. Remove the name from " + + "this route and use the name of the default child route for named " + + "links instead." + ); + } + } + route.children.forEach(function (child) { + var childMatchAs = matchAs + ? cleanPath((matchAs + "/" + (child.path))) + : undefined; + addRouteRecord(pathList, pathMap, nameMap, child, record, childMatchAs); + }); + } + + if (route.alias !== undefined) { + var aliases = Array.isArray(route.alias) + ? route.alias + : [route.alias]; + + aliases.forEach(function (alias) { + var aliasRoute = { + path: alias, + children: route.children + }; + addRouteRecord( + pathList, + pathMap, + nameMap, + aliasRoute, + parent, + record.path || '/' // matchAs + ); + }); + } + + if (!pathMap[record.path]) { + pathList.push(record.path); + pathMap[record.path] = record; + } + + if (name) { + if (!nameMap[name]) { + nameMap[name] = record; + } else if ("development" !== 'production' && !matchAs) { + warn( + false, + "Duplicate named routes definition: " + + "{ name: \"" + name + "\", path: \"" + (record.path) + "\" }" + ); + } + } +} + +function compileRouteRegex (path, pathToRegexpOptions) { + var regex = pathToRegexp_1(path, [], pathToRegexpOptions); + { + var keys = Object.create(null); + regex.keys.forEach(function (key) { + warn(!keys[key.name], ("Duplicate param keys in route with path: \"" + path + "\"")); + keys[key.name] = true; + }); + } + return regex +} + +function normalizePath (path, parent, strict) { + if (!strict) { path = path.replace(/\/$/, ''); } + if (path[0] === '/') { return path } + if (parent == null) { return path } + return cleanPath(((parent.path) + "/" + path)) +} + +/* */ + +function normalizeLocation ( + raw, + current, + append, + router +) { + var next = typeof raw === 'string' ? { path: raw } : raw; + // named target + if (next.name || next._normalized) { + return next + } + + // relative params + if (!next.path && next.params && current) { + next = extend({}, next); + next._normalized = true; + var params = extend(extend({}, current.params), next.params); + if (current.name) { + next.name = current.name; + next.params = params; + } else if (current.matched.length) { + var rawPath = current.matched[current.matched.length - 1].path; + next.path = fillParams(rawPath, params, ("path " + (current.path))); + } else { + warn(false, "relative params navigation requires a current route."); + } + return next + } + + var parsedPath = parsePath(next.path || ''); + var basePath = (current && current.path) || '/'; + var path = parsedPath.path + ? resolvePath(parsedPath.path, basePath, append || next.append) + : basePath; + + var query = resolveQuery( + parsedPath.query, + next.query, + router && router.options.parseQuery + ); + + var hash = next.hash || parsedPath.hash; + if (hash && hash.charAt(0) !== '#') { + hash = "#" + hash; + } + + return { + _normalized: true, + path: path, + query: query, + hash: hash + } +} + +/* */ + + + +function createMatcher ( + routes, + router +) { + var ref = createRouteMap(routes); + var pathList = ref.pathList; + var pathMap = ref.pathMap; + var nameMap = ref.nameMap; + + function addRoutes (routes) { + createRouteMap(routes, pathList, pathMap, nameMap); + } + + function match ( + raw, + currentRoute, + redirectedFrom + ) { + var location = normalizeLocation(raw, currentRoute, false, router); + var name = location.name; + + if (name) { + var record = nameMap[name]; + { + warn(record, ("Route with name '" + name + "' does not exist")); + } + if (!record) { return _createRoute(null, location) } + var paramNames = record.regex.keys + .filter(function (key) { return !key.optional; }) + .map(function (key) { return key.name; }); + + if (typeof location.params !== 'object') { + location.params = {}; + } + + if (currentRoute && typeof currentRoute.params === 'object') { + for (var key in currentRoute.params) { + if (!(key in location.params) && paramNames.indexOf(key) > -1) { + location.params[key] = currentRoute.params[key]; + } + } + } + + if (record) { + location.path = fillParams(record.path, location.params, ("named route \"" + name + "\"")); + return _createRoute(record, location, redirectedFrom) + } + } else if (location.path) { + location.params = {}; + for (var i = 0; i < pathList.length; i++) { + var path = pathList[i]; + var record$1 = pathMap[path]; + if (matchRoute(record$1.regex, location.path, location.params)) { + return _createRoute(record$1, location, redirectedFrom) + } + } + } + // no match + return _createRoute(null, location) + } + + function redirect ( + record, + location + ) { + var originalRedirect = record.redirect; + var redirect = typeof originalRedirect === 'function' + ? originalRedirect(createRoute(record, location, null, router)) + : originalRedirect; + + if (typeof redirect === 'string') { + redirect = { path: redirect }; + } + + if (!redirect || typeof redirect !== 'object') { + { + warn( + false, ("invalid redirect option: " + (JSON.stringify(redirect))) + ); + } + return _createRoute(null, location) + } + + var re = redirect; + var name = re.name; + var path = re.path; + var query = location.query; + var hash = location.hash; + var params = location.params; + query = re.hasOwnProperty('query') ? re.query : query; + hash = re.hasOwnProperty('hash') ? re.hash : hash; + params = re.hasOwnProperty('params') ? re.params : params; + + if (name) { + // resolved named direct + var targetRecord = nameMap[name]; + { + assert(targetRecord, ("redirect failed: named route \"" + name + "\" not found.")); + } + return match({ + _normalized: true, + name: name, + query: query, + hash: hash, + params: params + }, undefined, location) + } else if (path) { + // 1. resolve relative redirect + var rawPath = resolveRecordPath(path, record); + // 2. resolve params + var resolvedPath = fillParams(rawPath, params, ("redirect route with path \"" + rawPath + "\"")); + // 3. rematch with existing query and hash + return match({ + _normalized: true, + path: resolvedPath, + query: query, + hash: hash + }, undefined, location) + } else { + { + warn(false, ("invalid redirect option: " + (JSON.stringify(redirect)))); + } + return _createRoute(null, location) + } + } + + function alias ( + record, + location, + matchAs + ) { + var aliasedPath = fillParams(matchAs, location.params, ("aliased route with path \"" + matchAs + "\"")); + var aliasedMatch = match({ + _normalized: true, + path: aliasedPath + }); + if (aliasedMatch) { + var matched = aliasedMatch.matched; + var aliasedRecord = matched[matched.length - 1]; + location.params = aliasedMatch.params; + return _createRoute(aliasedRecord, location) + } + return _createRoute(null, location) + } + + function _createRoute ( + record, + location, + redirectedFrom + ) { + if (record && record.redirect) { + return redirect(record, redirectedFrom || location) + } + if (record && record.matchAs) { + return alias(record, location, record.matchAs) + } + return createRoute(record, location, redirectedFrom, router) + } + + return { + match: match, + addRoutes: addRoutes + } +} + +function matchRoute ( + regex, + path, + params +) { + var m = path.match(regex); + + if (!m) { + return false + } else if (!params) { + return true + } + + for (var i = 1, len = m.length; i < len; ++i) { + var key = regex.keys[i - 1]; + var val = typeof m[i] === 'string' ? decodeURIComponent(m[i]) : m[i]; + if (key) { + // Fix #1994: using * with props: true generates a param named 0 + params[key.name || 'pathMatch'] = val; + } + } + + return true +} + +function resolveRecordPath (path, record) { + return resolvePath(path, record.parent ? record.parent.path : '/', true) +} + +/* */ + +var positionStore = Object.create(null); + +function setupScroll () { + // Fix for #1585 for Firefox + // Fix for #2195 Add optional third attribute to workaround a bug in safari https://bugs.webkit.org/show_bug.cgi?id=182678 + window.history.replaceState({ key: getStateKey() }, '', window.location.href.replace(window.location.origin, '')); + window.addEventListener('popstate', function (e) { + saveScrollPosition(); + if (e.state && e.state.key) { + setStateKey(e.state.key); + } + }); +} + +function handleScroll ( + router, + to, + from, + isPop +) { + if (!router.app) { + return + } + + var behavior = router.options.scrollBehavior; + if (!behavior) { + return + } + + { + assert(typeof behavior === 'function', "scrollBehavior must be a function"); + } + + // wait until re-render finishes before scrolling + router.app.$nextTick(function () { + var position = getScrollPosition(); + var shouldScroll = behavior.call(router, to, from, isPop ? position : null); + + if (!shouldScroll) { + return + } + + if (typeof shouldScroll.then === 'function') { + shouldScroll.then(function (shouldScroll) { + scrollToPosition((shouldScroll), position); + }).catch(function (err) { + { + assert(false, err.toString()); + } + }); + } else { + scrollToPosition(shouldScroll, position); + } + }); +} + +function saveScrollPosition () { + var key = getStateKey(); + if (key) { + positionStore[key] = { + x: window.pageXOffset, + y: window.pageYOffset + }; + } +} + +function getScrollPosition () { + var key = getStateKey(); + if (key) { + return positionStore[key] + } +} + +function getElementPosition (el, offset) { + var docEl = document.documentElement; + var docRect = docEl.getBoundingClientRect(); + var elRect = el.getBoundingClientRect(); + return { + x: elRect.left - docRect.left - offset.x, + y: elRect.top - docRect.top - offset.y + } +} + +function isValidPosition (obj) { + return isNumber(obj.x) || isNumber(obj.y) +} + +function normalizePosition (obj) { + return { + x: isNumber(obj.x) ? obj.x : window.pageXOffset, + y: isNumber(obj.y) ? obj.y : window.pageYOffset + } +} + +function normalizeOffset (obj) { + return { + x: isNumber(obj.x) ? obj.x : 0, + y: isNumber(obj.y) ? obj.y : 0 + } +} + +function isNumber (v) { + return typeof v === 'number' +} + +function scrollToPosition (shouldScroll, position) { + var isObject = typeof shouldScroll === 'object'; + if (isObject && typeof shouldScroll.selector === 'string') { + var el = document.querySelector(shouldScroll.selector); + if (el) { + var offset = shouldScroll.offset && typeof shouldScroll.offset === 'object' ? shouldScroll.offset : {}; + offset = normalizeOffset(offset); + position = getElementPosition(el, offset); + } else if (isValidPosition(shouldScroll)) { + position = normalizePosition(shouldScroll); + } + } else if (isObject && isValidPosition(shouldScroll)) { + position = normalizePosition(shouldScroll); + } + + if (position) { + window.scrollTo(position.x, position.y); + } +} + +/* */ + +var supportsPushState = inBrowser && (function () { + var ua = window.navigator.userAgent; + + if ( + (ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && + ua.indexOf('Mobile Safari') !== -1 && + ua.indexOf('Chrome') === -1 && + ua.indexOf('Windows Phone') === -1 + ) { + return false + } + + return window.history && 'pushState' in window.history +})(); + +// use User Timing api (if present) for more accurate key precision +var Time = inBrowser && window.performance && window.performance.now + ? window.performance + : Date; + +var _key = genKey(); + +function genKey () { + return Time.now().toFixed(3) +} + +function getStateKey () { + return _key +} + +function setStateKey (key) { + _key = key; +} + +function pushState (url, replace) { + saveScrollPosition(); + // try...catch the pushState call to get around Safari + // DOM Exception 18 where it limits to 100 pushState calls + var history = window.history; + try { + if (replace) { + history.replaceState({ key: _key }, '', url); + } else { + _key = genKey(); + history.pushState({ key: _key }, '', url); + } + } catch (e) { + window.location[replace ? 'replace' : 'assign'](url); + } +} + +function replaceState (url) { + pushState(url, true); +} + +/* */ + +function runQueue (queue, fn, cb) { + var step = function (index) { + if (index >= queue.length) { + cb(); + } else { + if (queue[index]) { + fn(queue[index], function () { + step(index + 1); + }); + } else { + step(index + 1); + } + } + }; + step(0); +} + +/* */ + +function resolveAsyncComponents (matched) { + return function (to, from, next) { + var hasAsync = false; + var pending = 0; + var error = null; + + flatMapComponents(matched, function (def, _, match, key) { + // if it's a function and doesn't have cid attached, + // assume it's an async component resolve function. + // we are not using Vue's default async resolving mechanism because + // we want to halt the navigation until the incoming component has been + // resolved. + if (typeof def === 'function' && def.cid === undefined) { + hasAsync = true; + pending++; + + var resolve = once(function (resolvedDef) { + if (isESModule(resolvedDef)) { + resolvedDef = resolvedDef.default; + } + // save resolved on async factory in case it's used elsewhere + def.resolved = typeof resolvedDef === 'function' + ? resolvedDef + : _Vue.extend(resolvedDef); + match.components[key] = resolvedDef; + pending--; + if (pending <= 0) { + next(); + } + }); + + var reject = once(function (reason) { + var msg = "Failed to resolve async component " + key + ": " + reason; + "development" !== 'production' && warn(false, msg); + if (!error) { + error = isError(reason) + ? reason + : new Error(msg); + next(error); + } + }); + + var res; + try { + res = def(resolve, reject); + } catch (e) { + reject(e); + } + if (res) { + if (typeof res.then === 'function') { + res.then(resolve, reject); + } else { + // new syntax in Vue 2.3 + var comp = res.component; + if (comp && typeof comp.then === 'function') { + comp.then(resolve, reject); + } + } + } + } + }); + + if (!hasAsync) { next(); } + } +} + +function flatMapComponents ( + matched, + fn +) { + return flatten(matched.map(function (m) { + return Object.keys(m.components).map(function (key) { return fn( + m.components[key], + m.instances[key], + m, key + ); }) + })) +} + +function flatten (arr) { + return Array.prototype.concat.apply([], arr) +} + +var hasSymbol = + typeof Symbol === 'function' && + typeof Symbol.toStringTag === 'symbol'; + +function isESModule (obj) { + return obj.__esModule || (hasSymbol && obj[Symbol.toStringTag] === 'Module') +} + +// in Webpack 2, require.ensure now also returns a Promise +// so the resolve/reject functions may get called an extra time +// if the user uses an arrow function shorthand that happens to +// return that Promise. +function once (fn) { + var called = false; + return function () { + var args = [], len = arguments.length; + while ( len-- ) args[ len ] = arguments[ len ]; + + if (called) { return } + called = true; + return fn.apply(this, args) + } +} + +/* */ + +var History = function History (router, base) { + this.router = router; + this.base = normalizeBase(base); + // start with a route object that stands for "nowhere" + this.current = START; + this.pending = null; + this.ready = false; + this.readyCbs = []; + this.readyErrorCbs = []; + this.errorCbs = []; +}; + +History.prototype.listen = function listen (cb) { + this.cb = cb; +}; + +History.prototype.onReady = function onReady (cb, errorCb) { + if (this.ready) { + cb(); + } else { + this.readyCbs.push(cb); + if (errorCb) { + this.readyErrorCbs.push(errorCb); + } + } +}; + +History.prototype.onError = function onError (errorCb) { + this.errorCbs.push(errorCb); +}; + +History.prototype.transitionTo = function transitionTo (location, onComplete, onAbort) { + var this$1 = this; + + var route = this.router.match(location, this.current); + this.confirmTransition(route, function () { + this$1.updateRoute(route); + onComplete && onComplete(route); + this$1.ensureURL(); + + // fire ready cbs once + if (!this$1.ready) { + this$1.ready = true; + this$1.readyCbs.forEach(function (cb) { cb(route); }); + } + }, function (err) { + if (onAbort) { + onAbort(err); + } + if (err && !this$1.ready) { + this$1.ready = true; + this$1.readyErrorCbs.forEach(function (cb) { cb(err); }); + } + }); +}; + +History.prototype.confirmTransition = function confirmTransition (route, onComplete, onAbort) { + var this$1 = this; + + var current = this.current; + var abort = function (err) { + if (isError(err)) { + if (this$1.errorCbs.length) { + this$1.errorCbs.forEach(function (cb) { cb(err); }); + } else { + warn(false, 'uncaught error during route navigation:'); + console.error(err); + } + } + onAbort && onAbort(err); + }; + if ( + isSameRoute(route, current) && + // in the case the route map has been dynamically appended to + route.matched.length === current.matched.length + ) { + this.ensureURL(); + return abort() + } + + var ref = resolveQueue(this.current.matched, route.matched); + var updated = ref.updated; + var deactivated = ref.deactivated; + var activated = ref.activated; + + var queue = [].concat( + // in-component leave guards + extractLeaveGuards(deactivated), + // global before hooks + this.router.beforeHooks, + // in-component update hooks + extractUpdateHooks(updated), + // in-config enter guards + activated.map(function (m) { return m.beforeEnter; }), + // async components + resolveAsyncComponents(activated) + ); + + this.pending = route; + var iterator = function (hook, next) { + if (this$1.pending !== route) { + return abort() + } + try { + hook(route, current, function (to) { + if (to === false || isError(to)) { + // next(false) -> abort navigation, ensure current URL + this$1.ensureURL(true); + abort(to); + } else if ( + typeof to === 'string' || + (typeof to === 'object' && ( + typeof to.path === 'string' || + typeof to.name === 'string' + )) + ) { + // next('/') or next({ path: '/' }) -> redirect + abort(); + if (typeof to === 'object' && to.replace) { + this$1.replace(to); + } else { + this$1.push(to); + } + } else { + // confirm transition and pass on the value + next(to); + } + }); + } catch (e) { + abort(e); + } + }; + + runQueue(queue, iterator, function () { + var postEnterCbs = []; + var isValid = function () { return this$1.current === route; }; + // wait until async components are resolved before + // extracting in-component enter guards + var enterGuards = extractEnterGuards(activated, postEnterCbs, isValid); + var queue = enterGuards.concat(this$1.router.resolveHooks); + runQueue(queue, iterator, function () { + if (this$1.pending !== route) { + return abort() + } + this$1.pending = null; + onComplete(route); + if (this$1.router.app) { + this$1.router.app.$nextTick(function () { + postEnterCbs.forEach(function (cb) { cb(); }); + }); + } + }); + }); +}; + +History.prototype.updateRoute = function updateRoute (route) { + var prev = this.current; + this.current = route; + this.cb && this.cb(route); + this.router.afterHooks.forEach(function (hook) { + hook && hook(route, prev); + }); +}; + +function normalizeBase (base) { + if (!base) { + if (inBrowser) { + // respect tag + var baseEl = document.querySelector('base'); + base = (baseEl && baseEl.getAttribute('href')) || '/'; + // strip full URL origin + base = base.replace(/^https?:\/\/[^\/]+/, ''); + } else { + base = '/'; + } + } + // make sure there's the starting slash + if (base.charAt(0) !== '/') { + base = '/' + base; + } + // remove trailing slash + return base.replace(/\/$/, '') +} + +function resolveQueue ( + current, + next +) { + var i; + var max = Math.max(current.length, next.length); + for (i = 0; i < max; i++) { + if (current[i] !== next[i]) { + break + } + } + return { + updated: next.slice(0, i), + activated: next.slice(i), + deactivated: current.slice(i) + } +} + +function extractGuards ( + records, + name, + bind, + reverse +) { + var guards = flatMapComponents(records, function (def, instance, match, key) { + var guard = extractGuard(def, name); + if (guard) { + return Array.isArray(guard) + ? guard.map(function (guard) { return bind(guard, instance, match, key); }) + : bind(guard, instance, match, key) + } + }); + return flatten(reverse ? guards.reverse() : guards) +} + +function extractGuard ( + def, + key +) { + if (typeof def !== 'function') { + // extend now so that global mixins are applied. + def = _Vue.extend(def); + } + return def.options[key] +} + +function extractLeaveGuards (deactivated) { + return extractGuards(deactivated, 'beforeRouteLeave', bindGuard, true) +} + +function extractUpdateHooks (updated) { + return extractGuards(updated, 'beforeRouteUpdate', bindGuard) +} + +function bindGuard (guard, instance) { + if (instance) { + return function boundRouteGuard () { + return guard.apply(instance, arguments) + } + } +} + +function extractEnterGuards ( + activated, + cbs, + isValid +) { + return extractGuards(activated, 'beforeRouteEnter', function (guard, _, match, key) { + return bindEnterGuard(guard, match, key, cbs, isValid) + }) +} + +function bindEnterGuard ( + guard, + match, + key, + cbs, + isValid +) { + return function routeEnterGuard (to, from, next) { + return guard(to, from, function (cb) { + next(cb); + if (typeof cb === 'function') { + cbs.push(function () { + // #750 + // if a router-view is wrapped with an out-in transition, + // the instance may not have been registered at this time. + // we will need to poll for registration until current route + // is no longer valid. + poll(cb, match.instances, key, isValid); + }); + } + }) + } +} + +function poll ( + cb, // somehow flow cannot infer this is a function + instances, + key, + isValid +) { + if ( + instances[key] && + !instances[key]._isBeingDestroyed // do not reuse being destroyed instance + ) { + cb(instances[key]); + } else if (isValid()) { + setTimeout(function () { + poll(cb, instances, key, isValid); + }, 16); + } +} + +/* */ + +var HTML5History = (function (History$$1) { + function HTML5History (router, base) { + var this$1 = this; + + History$$1.call(this, router, base); + + var expectScroll = router.options.scrollBehavior; + var supportsScroll = supportsPushState && expectScroll; + + if (supportsScroll) { + setupScroll(); + } + + var initLocation = getLocation(this.base); + window.addEventListener('popstate', function (e) { + var current = this$1.current; + + // Avoiding first `popstate` event dispatched in some browsers but first + // history route not updated since async guard at the same time. + var location = getLocation(this$1.base); + if (this$1.current === START && location === initLocation) { + return + } + + this$1.transitionTo(location, function (route) { + if (supportsScroll) { + handleScroll(router, route, current, true); + } + }); + }); + } + + if ( History$$1 ) HTML5History.__proto__ = History$$1; + HTML5History.prototype = Object.create( History$$1 && History$$1.prototype ); + HTML5History.prototype.constructor = HTML5History; + + HTML5History.prototype.go = function go (n) { + window.history.go(n); + }; + + HTML5History.prototype.push = function push (location, onComplete, onAbort) { + var this$1 = this; + + var ref = this; + var fromRoute = ref.current; + this.transitionTo(location, function (route) { + pushState(cleanPath(this$1.base + route.fullPath)); + handleScroll(this$1.router, route, fromRoute, false); + onComplete && onComplete(route); + }, onAbort); + }; + + HTML5History.prototype.replace = function replace (location, onComplete, onAbort) { + var this$1 = this; + + var ref = this; + var fromRoute = ref.current; + this.transitionTo(location, function (route) { + replaceState(cleanPath(this$1.base + route.fullPath)); + handleScroll(this$1.router, route, fromRoute, false); + onComplete && onComplete(route); + }, onAbort); + }; + + HTML5History.prototype.ensureURL = function ensureURL (push) { + if (getLocation(this.base) !== this.current.fullPath) { + var current = cleanPath(this.base + this.current.fullPath); + push ? pushState(current) : replaceState(current); + } + }; + + HTML5History.prototype.getCurrentLocation = function getCurrentLocation () { + return getLocation(this.base) + }; + + return HTML5History; +}(History)); + +function getLocation (base) { + var path = decodeURI(window.location.pathname); + if (base && path.indexOf(base) === 0) { + path = path.slice(base.length); + } + return (path || '/') + window.location.search + window.location.hash +} + +/* */ + +var HashHistory = (function (History$$1) { + function HashHistory (router, base, fallback) { + History$$1.call(this, router, base); + // check history fallback deeplinking + if (fallback && checkFallback(this.base)) { + return + } + ensureSlash(); + } + + if ( History$$1 ) HashHistory.__proto__ = History$$1; + HashHistory.prototype = Object.create( History$$1 && History$$1.prototype ); + HashHistory.prototype.constructor = HashHistory; + + // this is delayed until the app mounts + // to avoid the hashchange listener being fired too early + HashHistory.prototype.setupListeners = function setupListeners () { + var this$1 = this; + + var router = this.router; + var expectScroll = router.options.scrollBehavior; + var supportsScroll = supportsPushState && expectScroll; + + if (supportsScroll) { + setupScroll(); + } + + window.addEventListener(supportsPushState ? 'popstate' : 'hashchange', function () { + var current = this$1.current; + if (!ensureSlash()) { + return + } + this$1.transitionTo(getHash(), function (route) { + if (supportsScroll) { + handleScroll(this$1.router, route, current, true); + } + if (!supportsPushState) { + replaceHash(route.fullPath); + } + }); + }); + }; + + HashHistory.prototype.push = function push (location, onComplete, onAbort) { + var this$1 = this; + + var ref = this; + var fromRoute = ref.current; + this.transitionTo(location, function (route) { + pushHash(route.fullPath); + handleScroll(this$1.router, route, fromRoute, false); + onComplete && onComplete(route); + }, onAbort); + }; + + HashHistory.prototype.replace = function replace (location, onComplete, onAbort) { + var this$1 = this; + + var ref = this; + var fromRoute = ref.current; + this.transitionTo(location, function (route) { + replaceHash(route.fullPath); + handleScroll(this$1.router, route, fromRoute, false); + onComplete && onComplete(route); + }, onAbort); + }; + + HashHistory.prototype.go = function go (n) { + window.history.go(n); + }; + + HashHistory.prototype.ensureURL = function ensureURL (push) { + var current = this.current.fullPath; + if (getHash() !== current) { + push ? pushHash(current) : replaceHash(current); + } + }; + + HashHistory.prototype.getCurrentLocation = function getCurrentLocation () { + return getHash() + }; + + return HashHistory; +}(History)); + +function checkFallback (base) { + var location = getLocation(base); + if (!/^\/#/.test(location)) { + window.location.replace( + cleanPath(base + '/#' + location) + ); + return true + } +} + +function ensureSlash () { + var path = getHash(); + if (path.charAt(0) === '/') { + return true + } + replaceHash('/' + path); + return false +} + +function getHash () { + // We can't use window.location.hash here because it's not + // consistent across browsers - Firefox will pre-decode it! + var href = window.location.href; + var index = href.indexOf('#'); + return index === -1 ? '' : decodeURI(href.slice(index + 1)) +} + +function getUrl (path) { + var href = window.location.href; + var i = href.indexOf('#'); + var base = i >= 0 ? href.slice(0, i) : href; + return (base + "#" + path) +} + +function pushHash (path) { + if (supportsPushState) { + pushState(getUrl(path)); + } else { + window.location.hash = path; + } +} + +function replaceHash (path) { + if (supportsPushState) { + replaceState(getUrl(path)); + } else { + window.location.replace(getUrl(path)); + } +} + +/* */ + +var AbstractHistory = (function (History$$1) { + function AbstractHistory (router, base) { + History$$1.call(this, router, base); + this.stack = []; + this.index = -1; + } + + if ( History$$1 ) AbstractHistory.__proto__ = History$$1; + AbstractHistory.prototype = Object.create( History$$1 && History$$1.prototype ); + AbstractHistory.prototype.constructor = AbstractHistory; + + AbstractHistory.prototype.push = function push (location, onComplete, onAbort) { + var this$1 = this; + + this.transitionTo(location, function (route) { + this$1.stack = this$1.stack.slice(0, this$1.index + 1).concat(route); + this$1.index++; + onComplete && onComplete(route); + }, onAbort); + }; + + AbstractHistory.prototype.replace = function replace (location, onComplete, onAbort) { + var this$1 = this; + + this.transitionTo(location, function (route) { + this$1.stack = this$1.stack.slice(0, this$1.index).concat(route); + onComplete && onComplete(route); + }, onAbort); + }; + + AbstractHistory.prototype.go = function go (n) { + var this$1 = this; + + var targetIndex = this.index + n; + if (targetIndex < 0 || targetIndex >= this.stack.length) { + return + } + var route = this.stack[targetIndex]; + this.confirmTransition(route, function () { + this$1.index = targetIndex; + this$1.updateRoute(route); + }); + }; + + AbstractHistory.prototype.getCurrentLocation = function getCurrentLocation () { + var current = this.stack[this.stack.length - 1]; + return current ? current.fullPath : '/' + }; + + AbstractHistory.prototype.ensureURL = function ensureURL () { + // noop + }; + + return AbstractHistory; +}(History)); + +/* */ + + + +var VueRouter = function VueRouter (options) { + if ( options === void 0 ) options = {}; + + this.app = null; + this.apps = []; + this.options = options; + this.beforeHooks = []; + this.resolveHooks = []; + this.afterHooks = []; + this.matcher = createMatcher(options.routes || [], this); + + var mode = options.mode || 'hash'; + this.fallback = mode === 'history' && !supportsPushState && options.fallback !== false; + if (this.fallback) { + mode = 'hash'; + } + if (!inBrowser) { + mode = 'abstract'; + } + this.mode = mode; + + switch (mode) { + case 'history': + this.history = new HTML5History(this, options.base); + break + case 'hash': + this.history = new HashHistory(this, options.base, this.fallback); + break + case 'abstract': + this.history = new AbstractHistory(this, options.base); + break + default: + { + assert(false, ("invalid mode: " + mode)); + } + } +}; + +var prototypeAccessors = { currentRoute: { configurable: true } }; + +VueRouter.prototype.match = function match ( + raw, + current, + redirectedFrom +) { + return this.matcher.match(raw, current, redirectedFrom) +}; + +prototypeAccessors.currentRoute.get = function () { + return this.history && this.history.current +}; + +VueRouter.prototype.init = function init (app /* Vue component instance */) { + var this$1 = this; + + "development" !== 'production' && assert( + install.installed, + "not installed. Make sure to call `Vue.use(VueRouter)` " + + "before creating root instance." + ); + + this.apps.push(app); + + // main app already initialized. + if (this.app) { + return + } + + this.app = app; + + var history = this.history; + + if (history instanceof HTML5History) { + history.transitionTo(history.getCurrentLocation()); + } else if (history instanceof HashHistory) { + var setupHashListener = function () { + history.setupListeners(); + }; + history.transitionTo( + history.getCurrentLocation(), + setupHashListener, + setupHashListener + ); + } + + history.listen(function (route) { + this$1.apps.forEach(function (app) { + app._route = route; + }); + }); +}; + +VueRouter.prototype.beforeEach = function beforeEach (fn) { + return registerHook(this.beforeHooks, fn) +}; + +VueRouter.prototype.beforeResolve = function beforeResolve (fn) { + return registerHook(this.resolveHooks, fn) +}; + +VueRouter.prototype.afterEach = function afterEach (fn) { + return registerHook(this.afterHooks, fn) +}; + +VueRouter.prototype.onReady = function onReady (cb, errorCb) { + this.history.onReady(cb, errorCb); +}; + +VueRouter.prototype.onError = function onError (errorCb) { + this.history.onError(errorCb); +}; + +VueRouter.prototype.push = function push (location, onComplete, onAbort) { + this.history.push(location, onComplete, onAbort); +}; + +VueRouter.prototype.replace = function replace (location, onComplete, onAbort) { + this.history.replace(location, onComplete, onAbort); +}; + +VueRouter.prototype.go = function go (n) { + this.history.go(n); +}; + +VueRouter.prototype.back = function back () { + this.go(-1); +}; + +VueRouter.prototype.forward = function forward () { + this.go(1); +}; + +VueRouter.prototype.getMatchedComponents = function getMatchedComponents (to) { + var route = to + ? to.matched + ? to + : this.resolve(to).route + : this.currentRoute; + if (!route) { + return [] + } + return [].concat.apply([], route.matched.map(function (m) { + return Object.keys(m.components).map(function (key) { + return m.components[key] + }) + })) +}; + +VueRouter.prototype.resolve = function resolve ( + to, + current, + append +) { + var location = normalizeLocation( + to, + current || this.history.current, + append, + this + ); + var route = this.match(location, current); + var fullPath = route.redirectedFrom || route.fullPath; + var base = this.history.base; + var href = createHref(base, fullPath, this.mode); + return { + location: location, + route: route, + href: href, + // for backwards compat + normalizedTo: location, + resolved: route + } +}; + +VueRouter.prototype.addRoutes = function addRoutes (routes) { + this.matcher.addRoutes(routes); + if (this.history.current !== START) { + this.history.transitionTo(this.history.getCurrentLocation()); + } +}; + +Object.defineProperties( VueRouter.prototype, prototypeAccessors ); + +function registerHook (list, fn) { + list.push(fn); + return function () { + var i = list.indexOf(fn); + if (i > -1) { list.splice(i, 1); } + } +} + +function createHref (base, fullPath, mode) { + var path = mode === 'hash' ? '#' + fullPath : fullPath; + return base ? cleanPath(base + '/' + path) : path +} + +VueRouter.install = install; +VueRouter.version = '3.0.2'; + +if (inBrowser && window.Vue) { + window.Vue.use(VueRouter); +} + +return VueRouter; + +}))); diff --git a/webroot/assets/vue.js b/webroot/assets/vue.js new file mode 100644 index 0000000..087ee42 --- /dev/null +++ b/webroot/assets/vue.js @@ -0,0 +1,6 @@ +/*! + * Vue.js v2.6.10 + * (c) 2014-2019 Evan You + * Released under the MIT License. + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).Vue=t()}(this,function(){"use strict";var e=Object.freeze({});function t(e){return null==e}function n(e){return null!=e}function r(e){return!0===e}function i(e){return"string"==typeof e||"number"==typeof e||"symbol"==typeof e||"boolean"==typeof e}function o(e){return null!==e&&"object"==typeof e}var a=Object.prototype.toString;function s(e){return"[object Object]"===a.call(e)}function c(e){var t=parseFloat(String(e));return t>=0&&Math.floor(t)===t&&isFinite(e)}function u(e){return n(e)&&"function"==typeof e.then&&"function"==typeof e.catch}function l(e){return null==e?"":Array.isArray(e)||s(e)&&e.toString===a?JSON.stringify(e,null,2):String(e)}function f(e){var t=parseFloat(e);return isNaN(t)?e:t}function p(e,t){for(var n=Object.create(null),r=e.split(","),i=0;i-1)return e.splice(n,1)}}var m=Object.prototype.hasOwnProperty;function y(e,t){return m.call(e,t)}function g(e){var t=Object.create(null);return function(n){return t[n]||(t[n]=e(n))}}var _=/-(\w)/g,b=g(function(e){return e.replace(_,function(e,t){return t?t.toUpperCase():""})}),$=g(function(e){return e.charAt(0).toUpperCase()+e.slice(1)}),w=/\B([A-Z])/g,C=g(function(e){return e.replace(w,"-$1").toLowerCase()});var x=Function.prototype.bind?function(e,t){return e.bind(t)}:function(e,t){function n(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n};function k(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n+t];return r}function A(e,t){for(var n in t)e[n]=t[n];return e}function O(e){for(var t={},n=0;n0,Z=J&&J.indexOf("edge/")>0,G=(J&&J.indexOf("android"),J&&/iphone|ipad|ipod|ios/.test(J)||"ios"===K),X=(J&&/chrome\/\d+/.test(J),J&&/phantomjs/.test(J),J&&J.match(/firefox\/(\d+)/)),Y={}.watch,Q=!1;if(z)try{var ee={};Object.defineProperty(ee,"passive",{get:function(){Q=!0}}),window.addEventListener("test-passive",null,ee)}catch(e){}var te=function(){return void 0===B&&(B=!z&&!V&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),B},ne=z&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function re(e){return"function"==typeof e&&/native code/.test(e.toString())}var ie,oe="undefined"!=typeof Symbol&&re(Symbol)&&"undefined"!=typeof Reflect&&re(Reflect.ownKeys);ie="undefined"!=typeof Set&&re(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var ae=S,se=0,ce=function(){this.id=se++,this.subs=[]};ce.prototype.addSub=function(e){this.subs.push(e)},ce.prototype.removeSub=function(e){h(this.subs,e)},ce.prototype.depend=function(){ce.target&&ce.target.addDep(this)},ce.prototype.notify=function(){for(var e=this.subs.slice(),t=0,n=e.length;t-1)if(o&&!y(i,"default"))a=!1;else if(""===a||a===C(e)){var c=Pe(String,i.type);(c<0||s0&&(st((u=e(u,(a||"")+"_"+c))[0])&&st(f)&&(s[l]=he(f.text+u[0].text),u.shift()),s.push.apply(s,u)):i(u)?st(f)?s[l]=he(f.text+u):""!==u&&s.push(he(u)):st(u)&&st(f)?s[l]=he(f.text+u.text):(r(o._isVList)&&n(u.tag)&&t(u.key)&&n(a)&&(u.key="__vlist"+a+"_"+c+"__"),s.push(u)));return s}(e):void 0}function st(e){return n(e)&&n(e.text)&&!1===e.isComment}function ct(e,t){if(e){for(var n=Object.create(null),r=oe?Reflect.ownKeys(e):Object.keys(e),i=0;i0,a=t?!!t.$stable:!o,s=t&&t.$key;if(t){if(t._normalized)return t._normalized;if(a&&r&&r!==e&&s===r.$key&&!o&&!r.$hasNormal)return r;for(var c in i={},t)t[c]&&"$"!==c[0]&&(i[c]=pt(n,c,t[c]))}else i={};for(var u in n)u in i||(i[u]=dt(n,u));return t&&Object.isExtensible(t)&&(t._normalized=i),R(i,"$stable",a),R(i,"$key",s),R(i,"$hasNormal",o),i}function pt(e,t,n){var r=function(){var e=arguments.length?n.apply(null,arguments):n({});return(e=e&&"object"==typeof e&&!Array.isArray(e)?[e]:at(e))&&(0===e.length||1===e.length&&e[0].isComment)?void 0:e};return n.proxy&&Object.defineProperty(e,t,{get:r,enumerable:!0,configurable:!0}),r}function dt(e,t){return function(){return e[t]}}function vt(e,t){var r,i,a,s,c;if(Array.isArray(e)||"string"==typeof e)for(r=new Array(e.length),i=0,a=e.length;idocument.createEvent("Event").timeStamp&&(sn=function(){return cn.now()})}function un(){var e,t;for(an=sn(),rn=!0,Qt.sort(function(e,t){return e.id-t.id}),on=0;onon&&Qt[n].id>e.id;)n--;Qt.splice(n+1,0,e)}else Qt.push(e);nn||(nn=!0,Ye(un))}}(this)},fn.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||o(e)||this.deep){var t=this.value;if(this.value=e,this.user)try{this.cb.call(this.vm,e,t)}catch(e){Re(e,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,e,t)}}},fn.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},fn.prototype.depend=function(){for(var e=this.deps.length;e--;)this.deps[e].depend()},fn.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||h(this.vm._watchers,this);for(var e=this.deps.length;e--;)this.deps[e].removeSub(this);this.active=!1}};var pn={enumerable:!0,configurable:!0,get:S,set:S};function dn(e,t,n){pn.get=function(){return this[t][n]},pn.set=function(e){this[t][n]=e},Object.defineProperty(e,n,pn)}function vn(e){e._watchers=[];var t=e.$options;t.props&&function(e,t){var n=e.$options.propsData||{},r=e._props={},i=e.$options._propKeys=[];e.$parent&&$e(!1);var o=function(o){i.push(o);var a=Me(o,t,n,e);xe(r,o,a),o in e||dn(e,"_props",o)};for(var a in t)o(a);$e(!0)}(e,t.props),t.methods&&function(e,t){e.$options.props;for(var n in t)e[n]="function"!=typeof t[n]?S:x(t[n],e)}(e,t.methods),t.data?function(e){var t=e.$options.data;s(t=e._data="function"==typeof t?function(e,t){le();try{return e.call(t,t)}catch(e){return Re(e,t,"data()"),{}}finally{fe()}}(t,e):t||{})||(t={});var n=Object.keys(t),r=e.$options.props,i=(e.$options.methods,n.length);for(;i--;){var o=n[i];r&&y(r,o)||(a=void 0,36!==(a=(o+"").charCodeAt(0))&&95!==a&&dn(e,"_data",o))}var a;Ce(t,!0)}(e):Ce(e._data={},!0),t.computed&&function(e,t){var n=e._computedWatchers=Object.create(null),r=te();for(var i in t){var o=t[i],a="function"==typeof o?o:o.get;r||(n[i]=new fn(e,a||S,S,hn)),i in e||mn(e,i,o)}}(e,t.computed),t.watch&&t.watch!==Y&&function(e,t){for(var n in t){var r=t[n];if(Array.isArray(r))for(var i=0;i-1:"string"==typeof e?e.split(",").indexOf(t)>-1:(n=e,"[object RegExp]"===a.call(n)&&e.test(t));var n}function An(e,t){var n=e.cache,r=e.keys,i=e._vnode;for(var o in n){var a=n[o];if(a){var s=xn(a.componentOptions);s&&!t(s)&&On(n,o,r,i)}}}function On(e,t,n,r){var i=e[t];!i||r&&i.tag===r.tag||i.componentInstance.$destroy(),e[t]=null,h(n,t)}!function(t){t.prototype._init=function(t){var n=this;n._uid=bn++,n._isVue=!0,t&&t._isComponent?function(e,t){var n=e.$options=Object.create(e.constructor.options),r=t._parentVnode;n.parent=t.parent,n._parentVnode=r;var i=r.componentOptions;n.propsData=i.propsData,n._parentListeners=i.listeners,n._renderChildren=i.children,n._componentTag=i.tag,t.render&&(n.render=t.render,n.staticRenderFns=t.staticRenderFns)}(n,t):n.$options=De($n(n.constructor),t||{},n),n._renderProxy=n,n._self=n,function(e){var t=e.$options,n=t.parent;if(n&&!t.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(e)}e.$parent=n,e.$root=n?n.$root:e,e.$children=[],e.$refs={},e._watcher=null,e._inactive=null,e._directInactive=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}(n),function(e){e._events=Object.create(null),e._hasHookEvent=!1;var t=e.$options._parentListeners;t&&qt(e,t)}(n),function(t){t._vnode=null,t._staticTrees=null;var n=t.$options,r=t.$vnode=n._parentVnode,i=r&&r.context;t.$slots=ut(n._renderChildren,i),t.$scopedSlots=e,t._c=function(e,n,r,i){return Pt(t,e,n,r,i,!1)},t.$createElement=function(e,n,r,i){return Pt(t,e,n,r,i,!0)};var o=r&&r.data;xe(t,"$attrs",o&&o.attrs||e,null,!0),xe(t,"$listeners",n._parentListeners||e,null,!0)}(n),Yt(n,"beforeCreate"),function(e){var t=ct(e.$options.inject,e);t&&($e(!1),Object.keys(t).forEach(function(n){xe(e,n,t[n])}),$e(!0))}(n),vn(n),function(e){var t=e.$options.provide;t&&(e._provided="function"==typeof t?t.call(e):t)}(n),Yt(n,"created"),n.$options.el&&n.$mount(n.$options.el)}}(wn),function(e){var t={get:function(){return this._data}},n={get:function(){return this._props}};Object.defineProperty(e.prototype,"$data",t),Object.defineProperty(e.prototype,"$props",n),e.prototype.$set=ke,e.prototype.$delete=Ae,e.prototype.$watch=function(e,t,n){if(s(t))return _n(this,e,t,n);(n=n||{}).user=!0;var r=new fn(this,e,t,n);if(n.immediate)try{t.call(this,r.value)}catch(e){Re(e,this,'callback for immediate watcher "'+r.expression+'"')}return function(){r.teardown()}}}(wn),function(e){var t=/^hook:/;e.prototype.$on=function(e,n){var r=this;if(Array.isArray(e))for(var i=0,o=e.length;i1?k(t):t;for(var n=k(arguments,1),r='event handler for "'+e+'"',i=0,o=t.length;iparseInt(this.max)&&On(a,s[0],s,this._vnode)),t.data.keepAlive=!0}return t||e&&e[0]}}};!function(e){var t={get:function(){return F}};Object.defineProperty(e,"config",t),e.util={warn:ae,extend:A,mergeOptions:De,defineReactive:xe},e.set=ke,e.delete=Ae,e.nextTick=Ye,e.observable=function(e){return Ce(e),e},e.options=Object.create(null),M.forEach(function(t){e.options[t+"s"]=Object.create(null)}),e.options._base=e,A(e.options.components,Tn),function(e){e.use=function(e){var t=this._installedPlugins||(this._installedPlugins=[]);if(t.indexOf(e)>-1)return this;var n=k(arguments,1);return n.unshift(this),"function"==typeof e.install?e.install.apply(e,n):"function"==typeof e&&e.apply(null,n),t.push(e),this}}(e),function(e){e.mixin=function(e){return this.options=De(this.options,e),this}}(e),Cn(e),function(e){M.forEach(function(t){e[t]=function(e,n){return n?("component"===t&&s(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),"directive"===t&&"function"==typeof n&&(n={bind:n,update:n}),this.options[t+"s"][e]=n,n):this.options[t+"s"][e]}})}(e)}(wn),Object.defineProperty(wn.prototype,"$isServer",{get:te}),Object.defineProperty(wn.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(wn,"FunctionalRenderContext",{value:Tt}),wn.version="2.6.10";var En=p("style,class"),Nn=p("input,textarea,option,select,progress"),jn=function(e,t,n){return"value"===n&&Nn(e)&&"button"!==t||"selected"===n&&"option"===e||"checked"===n&&"input"===e||"muted"===n&&"video"===e},Dn=p("contenteditable,draggable,spellcheck"),Ln=p("events,caret,typing,plaintext-only"),Mn=function(e,t){return Hn(t)||"false"===t?"false":"contenteditable"===e&&Ln(t)?t:"true"},In=p("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible"),Fn="http://www.w3.org/1999/xlink",Pn=function(e){return":"===e.charAt(5)&&"xlink"===e.slice(0,5)},Rn=function(e){return Pn(e)?e.slice(6,e.length):""},Hn=function(e){return null==e||!1===e};function Bn(e){for(var t=e.data,r=e,i=e;n(i.componentInstance);)(i=i.componentInstance._vnode)&&i.data&&(t=Un(i.data,t));for(;n(r=r.parent);)r&&r.data&&(t=Un(t,r.data));return function(e,t){if(n(e)||n(t))return zn(e,Vn(t));return""}(t.staticClass,t.class)}function Un(e,t){return{staticClass:zn(e.staticClass,t.staticClass),class:n(e.class)?[e.class,t.class]:t.class}}function zn(e,t){return e?t?e+" "+t:e:t||""}function Vn(e){return Array.isArray(e)?function(e){for(var t,r="",i=0,o=e.length;i-1?hr(e,t,n):In(t)?Hn(n)?e.removeAttribute(t):(n="allowfullscreen"===t&&"EMBED"===e.tagName?"true":t,e.setAttribute(t,n)):Dn(t)?e.setAttribute(t,Mn(t,n)):Pn(t)?Hn(n)?e.removeAttributeNS(Fn,Rn(t)):e.setAttributeNS(Fn,t,n):hr(e,t,n)}function hr(e,t,n){if(Hn(n))e.removeAttribute(t);else{if(q&&!W&&"TEXTAREA"===e.tagName&&"placeholder"===t&&""!==n&&!e.__ieph){var r=function(t){t.stopImmediatePropagation(),e.removeEventListener("input",r)};e.addEventListener("input",r),e.__ieph=!0}e.setAttribute(t,n)}}var mr={create:dr,update:dr};function yr(e,r){var i=r.elm,o=r.data,a=e.data;if(!(t(o.staticClass)&&t(o.class)&&(t(a)||t(a.staticClass)&&t(a.class)))){var s=Bn(r),c=i._transitionClasses;n(c)&&(s=zn(s,Vn(c))),s!==i._prevClass&&(i.setAttribute("class",s),i._prevClass=s)}}var gr,_r,br,$r,wr,Cr,xr={create:yr,update:yr},kr=/[\w).+\-_$\]]/;function Ar(e){var t,n,r,i,o,a=!1,s=!1,c=!1,u=!1,l=0,f=0,p=0,d=0;for(r=0;r=0&&" "===(h=e.charAt(v));v--);h&&kr.test(h)||(u=!0)}}else void 0===i?(d=r+1,i=e.slice(0,r).trim()):m();function m(){(o||(o=[])).push(e.slice(d,r).trim()),d=r+1}if(void 0===i?i=e.slice(0,r).trim():0!==d&&m(),o)for(r=0;r-1?{exp:e.slice(0,$r),key:'"'+e.slice($r+1)+'"'}:{exp:e,key:null};_r=e,$r=wr=Cr=0;for(;!zr();)Vr(br=Ur())?Jr(br):91===br&&Kr(br);return{exp:e.slice(0,wr),key:e.slice(wr+1,Cr)}}(e);return null===n.key?e+"="+t:"$set("+n.exp+", "+n.key+", "+t+")"}function Ur(){return _r.charCodeAt(++$r)}function zr(){return $r>=gr}function Vr(e){return 34===e||39===e}function Kr(e){var t=1;for(wr=$r;!zr();)if(Vr(e=Ur()))Jr(e);else if(91===e&&t++,93===e&&t--,0===t){Cr=$r;break}}function Jr(e){for(var t=e;!zr()&&(e=Ur())!==t;);}var qr,Wr="__r",Zr="__c";function Gr(e,t,n){var r=qr;return function i(){null!==t.apply(null,arguments)&&Qr(e,i,n,r)}}var Xr=Ve&&!(X&&Number(X[1])<=53);function Yr(e,t,n,r){if(Xr){var i=an,o=t;t=o._wrapper=function(e){if(e.target===e.currentTarget||e.timeStamp>=i||e.timeStamp<=0||e.target.ownerDocument!==document)return o.apply(this,arguments)}}qr.addEventListener(e,t,Q?{capture:n,passive:r}:n)}function Qr(e,t,n,r){(r||qr).removeEventListener(e,t._wrapper||t,n)}function ei(e,r){if(!t(e.data.on)||!t(r.data.on)){var i=r.data.on||{},o=e.data.on||{};qr=r.elm,function(e){if(n(e[Wr])){var t=q?"change":"input";e[t]=[].concat(e[Wr],e[t]||[]),delete e[Wr]}n(e[Zr])&&(e.change=[].concat(e[Zr],e.change||[]),delete e[Zr])}(i),rt(i,o,Yr,Qr,Gr,r.context),qr=void 0}}var ti,ni={create:ei,update:ei};function ri(e,r){if(!t(e.data.domProps)||!t(r.data.domProps)){var i,o,a=r.elm,s=e.data.domProps||{},c=r.data.domProps||{};for(i in n(c.__ob__)&&(c=r.data.domProps=A({},c)),s)i in c||(a[i]="");for(i in c){if(o=c[i],"textContent"===i||"innerHTML"===i){if(r.children&&(r.children.length=0),o===s[i])continue;1===a.childNodes.length&&a.removeChild(a.childNodes[0])}if("value"===i&&"PROGRESS"!==a.tagName){a._value=o;var u=t(o)?"":String(o);ii(a,u)&&(a.value=u)}else if("innerHTML"===i&&qn(a.tagName)&&t(a.innerHTML)){(ti=ti||document.createElement("div")).innerHTML=""+o+"";for(var l=ti.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;l.firstChild;)a.appendChild(l.firstChild)}else if(o!==s[i])try{a[i]=o}catch(e){}}}}function ii(e,t){return!e.composing&&("OPTION"===e.tagName||function(e,t){var n=!0;try{n=document.activeElement!==e}catch(e){}return n&&e.value!==t}(e,t)||function(e,t){var r=e.value,i=e._vModifiers;if(n(i)){if(i.number)return f(r)!==f(t);if(i.trim)return r.trim()!==t.trim()}return r!==t}(e,t))}var oi={create:ri,update:ri},ai=g(function(e){var t={},n=/:(.+)/;return e.split(/;(?![^(]*\))/g).forEach(function(e){if(e){var r=e.split(n);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t});function si(e){var t=ci(e.style);return e.staticStyle?A(e.staticStyle,t):t}function ci(e){return Array.isArray(e)?O(e):"string"==typeof e?ai(e):e}var ui,li=/^--/,fi=/\s*!important$/,pi=function(e,t,n){if(li.test(t))e.style.setProperty(t,n);else if(fi.test(n))e.style.setProperty(C(t),n.replace(fi,""),"important");else{var r=vi(t);if(Array.isArray(n))for(var i=0,o=n.length;i-1?t.split(yi).forEach(function(t){return e.classList.add(t)}):e.classList.add(t);else{var n=" "+(e.getAttribute("class")||"")+" ";n.indexOf(" "+t+" ")<0&&e.setAttribute("class",(n+t).trim())}}function _i(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(yi).forEach(function(t){return e.classList.remove(t)}):e.classList.remove(t),e.classList.length||e.removeAttribute("class");else{for(var n=" "+(e.getAttribute("class")||"")+" ",r=" "+t+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?e.setAttribute("class",n):e.removeAttribute("class")}}function bi(e){if(e){if("object"==typeof e){var t={};return!1!==e.css&&A(t,$i(e.name||"v")),A(t,e),t}return"string"==typeof e?$i(e):void 0}}var $i=g(function(e){return{enterClass:e+"-enter",enterToClass:e+"-enter-to",enterActiveClass:e+"-enter-active",leaveClass:e+"-leave",leaveToClass:e+"-leave-to",leaveActiveClass:e+"-leave-active"}}),wi=z&&!W,Ci="transition",xi="animation",ki="transition",Ai="transitionend",Oi="animation",Si="animationend";wi&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(ki="WebkitTransition",Ai="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Oi="WebkitAnimation",Si="webkitAnimationEnd"));var Ti=z?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(e){return e()};function Ei(e){Ti(function(){Ti(e)})}function Ni(e,t){var n=e._transitionClasses||(e._transitionClasses=[]);n.indexOf(t)<0&&(n.push(t),gi(e,t))}function ji(e,t){e._transitionClasses&&h(e._transitionClasses,t),_i(e,t)}function Di(e,t,n){var r=Mi(e,t),i=r.type,o=r.timeout,a=r.propCount;if(!i)return n();var s=i===Ci?Ai:Si,c=0,u=function(){e.removeEventListener(s,l),n()},l=function(t){t.target===e&&++c>=a&&u()};setTimeout(function(){c0&&(n=Ci,l=a,f=o.length):t===xi?u>0&&(n=xi,l=u,f=c.length):f=(n=(l=Math.max(a,u))>0?a>u?Ci:xi:null)?n===Ci?o.length:c.length:0,{type:n,timeout:l,propCount:f,hasTransform:n===Ci&&Li.test(r[ki+"Property"])}}function Ii(e,t){for(;e.length1}function Ui(e,t){!0!==t.data.show&&Pi(t)}var zi=function(e){var o,a,s={},c=e.modules,u=e.nodeOps;for(o=0;ov?_(e,t(i[y+1])?null:i[y+1].elm,i,d,y,o):d>y&&$(0,r,p,v)}(p,h,y,o,l):n(y)?(n(e.text)&&u.setTextContent(p,""),_(p,null,y,0,y.length-1,o)):n(h)?$(0,h,0,h.length-1):n(e.text)&&u.setTextContent(p,""):e.text!==i.text&&u.setTextContent(p,i.text),n(v)&&n(d=v.hook)&&n(d=d.postpatch)&&d(e,i)}}}function k(e,t,i){if(r(i)&&n(e.parent))e.parent.data.pendingInsert=t;else for(var o=0;o-1,a.selected!==o&&(a.selected=o);else if(N(Wi(a),r))return void(e.selectedIndex!==s&&(e.selectedIndex=s));i||(e.selectedIndex=-1)}}function qi(e,t){return t.every(function(t){return!N(t,e)})}function Wi(e){return"_value"in e?e._value:e.value}function Zi(e){e.target.composing=!0}function Gi(e){e.target.composing&&(e.target.composing=!1,Xi(e.target,"input"))}function Xi(e,t){var n=document.createEvent("HTMLEvents");n.initEvent(t,!0,!0),e.dispatchEvent(n)}function Yi(e){return!e.componentInstance||e.data&&e.data.transition?e:Yi(e.componentInstance._vnode)}var Qi={model:Vi,show:{bind:function(e,t,n){var r=t.value,i=(n=Yi(n)).data&&n.data.transition,o=e.__vOriginalDisplay="none"===e.style.display?"":e.style.display;r&&i?(n.data.show=!0,Pi(n,function(){e.style.display=o})):e.style.display=r?o:"none"},update:function(e,t,n){var r=t.value;!r!=!t.oldValue&&((n=Yi(n)).data&&n.data.transition?(n.data.show=!0,r?Pi(n,function(){e.style.display=e.__vOriginalDisplay}):Ri(n,function(){e.style.display="none"})):e.style.display=r?e.__vOriginalDisplay:"none")},unbind:function(e,t,n,r,i){i||(e.style.display=e.__vOriginalDisplay)}}},eo={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function to(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?to(zt(t.children)):e}function no(e){var t={},n=e.$options;for(var r in n.propsData)t[r]=e[r];var i=n._parentListeners;for(var o in i)t[b(o)]=i[o];return t}function ro(e,t){if(/\d-keep-alive$/.test(t.tag))return e("keep-alive",{props:t.componentOptions.propsData})}var io=function(e){return e.tag||Ut(e)},oo=function(e){return"show"===e.name},ao={name:"transition",props:eo,abstract:!0,render:function(e){var t=this,n=this.$slots.default;if(n&&(n=n.filter(io)).length){var r=this.mode,o=n[0];if(function(e){for(;e=e.parent;)if(e.data.transition)return!0}(this.$vnode))return o;var a=to(o);if(!a)return o;if(this._leaving)return ro(e,o);var s="__transition-"+this._uid+"-";a.key=null==a.key?a.isComment?s+"comment":s+a.tag:i(a.key)?0===String(a.key).indexOf(s)?a.key:s+a.key:a.key;var c=(a.data||(a.data={})).transition=no(this),u=this._vnode,l=to(u);if(a.data.directives&&a.data.directives.some(oo)&&(a.data.show=!0),l&&l.data&&!function(e,t){return t.key===e.key&&t.tag===e.tag}(a,l)&&!Ut(l)&&(!l.componentInstance||!l.componentInstance._vnode.isComment)){var f=l.data.transition=A({},c);if("out-in"===r)return this._leaving=!0,it(f,"afterLeave",function(){t._leaving=!1,t.$forceUpdate()}),ro(e,o);if("in-out"===r){if(Ut(a))return u;var p,d=function(){p()};it(c,"afterEnter",d),it(c,"enterCancelled",d),it(f,"delayLeave",function(e){p=e})}}return o}}},so=A({tag:String,moveClass:String},eo);function co(e){e.elm._moveCb&&e.elm._moveCb(),e.elm._enterCb&&e.elm._enterCb()}function uo(e){e.data.newPos=e.elm.getBoundingClientRect()}function lo(e){var t=e.data.pos,n=e.data.newPos,r=t.left-n.left,i=t.top-n.top;if(r||i){e.data.moved=!0;var o=e.elm.style;o.transform=o.WebkitTransform="translate("+r+"px,"+i+"px)",o.transitionDuration="0s"}}delete so.mode;var fo={Transition:ao,TransitionGroup:{props:so,beforeMount:function(){var e=this,t=this._update;this._update=function(n,r){var i=Zt(e);e.__patch__(e._vnode,e.kept,!1,!0),e._vnode=e.kept,i(),t.call(e,n,r)}},render:function(e){for(var t=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,i=this.$slots.default||[],o=this.children=[],a=no(this),s=0;s-1?Gn[e]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:Gn[e]=/HTMLUnknownElement/.test(t.toString())},A(wn.options.directives,Qi),A(wn.options.components,fo),wn.prototype.__patch__=z?zi:S,wn.prototype.$mount=function(e,t){return function(e,t,n){var r;return e.$el=t,e.$options.render||(e.$options.render=ve),Yt(e,"beforeMount"),r=function(){e._update(e._render(),n)},new fn(e,r,S,{before:function(){e._isMounted&&!e._isDestroyed&&Yt(e,"beforeUpdate")}},!0),n=!1,null==e.$vnode&&(e._isMounted=!0,Yt(e,"mounted")),e}(this,e=e&&z?Yn(e):void 0,t)},z&&setTimeout(function(){F.devtools&&ne&&ne.emit("init",wn)},0);var po=/\{\{((?:.|\r?\n)+?)\}\}/g,vo=/[-.*+?^${}()|[\]\/\\]/g,ho=g(function(e){var t=e[0].replace(vo,"\\$&"),n=e[1].replace(vo,"\\$&");return new RegExp(t+"((?:.|\\n)+?)"+n,"g")});var mo={staticKeys:["staticClass"],transformNode:function(e,t){t.warn;var n=Fr(e,"class");n&&(e.staticClass=JSON.stringify(n));var r=Ir(e,"class",!1);r&&(e.classBinding=r)},genData:function(e){var t="";return e.staticClass&&(t+="staticClass:"+e.staticClass+","),e.classBinding&&(t+="class:"+e.classBinding+","),t}};var yo,go={staticKeys:["staticStyle"],transformNode:function(e,t){t.warn;var n=Fr(e,"style");n&&(e.staticStyle=JSON.stringify(ai(n)));var r=Ir(e,"style",!1);r&&(e.styleBinding=r)},genData:function(e){var t="";return e.staticStyle&&(t+="staticStyle:"+e.staticStyle+","),e.styleBinding&&(t+="style:("+e.styleBinding+"),"),t}},_o=function(e){return(yo=yo||document.createElement("div")).innerHTML=e,yo.textContent},bo=p("area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr"),$o=p("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source"),wo=p("address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track"),Co=/^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,xo=/^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,ko="[a-zA-Z_][\\-\\.0-9_a-zA-Z"+P.source+"]*",Ao="((?:"+ko+"\\:)?"+ko+")",Oo=new RegExp("^<"+Ao),So=/^\s*(\/?)>/,To=new RegExp("^<\\/"+Ao+"[^>]*>"),Eo=/^]+>/i,No=/^",""":'"',"&":"&"," ":"\n"," ":"\t","'":"'"},Io=/&(?:lt|gt|quot|amp|#39);/g,Fo=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,Po=p("pre,textarea",!0),Ro=function(e,t){return e&&Po(e)&&"\n"===t[0]};function Ho(e,t){var n=t?Fo:Io;return e.replace(n,function(e){return Mo[e]})}var Bo,Uo,zo,Vo,Ko,Jo,qo,Wo,Zo=/^@|^v-on:/,Go=/^v-|^@|^:/,Xo=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,Yo=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,Qo=/^\(|\)$/g,ea=/^\[.*\]$/,ta=/:(.*)$/,na=/^:|^\.|^v-bind:/,ra=/\.[^.\]]+(?=[^\]]*$)/g,ia=/^v-slot(:|$)|^#/,oa=/[\r\n]/,aa=/\s+/g,sa=g(_o),ca="_empty_";function ua(e,t,n){return{type:1,tag:e,attrsList:t,attrsMap:ma(t),rawAttrsMap:{},parent:n,children:[]}}function la(e,t){Bo=t.warn||Sr,Jo=t.isPreTag||T,qo=t.mustUseProp||T,Wo=t.getTagNamespace||T;t.isReservedTag;zo=Tr(t.modules,"transformNode"),Vo=Tr(t.modules,"preTransformNode"),Ko=Tr(t.modules,"postTransformNode"),Uo=t.delimiters;var n,r,i=[],o=!1!==t.preserveWhitespace,a=t.whitespace,s=!1,c=!1;function u(e){if(l(e),s||e.processed||(e=fa(e,t)),i.length||e===n||n.if&&(e.elseif||e.else)&&da(n,{exp:e.elseif,block:e}),r&&!e.forbidden)if(e.elseif||e.else)a=e,(u=function(e){var t=e.length;for(;t--;){if(1===e[t].type)return e[t];e.pop()}}(r.children))&&u.if&&da(u,{exp:a.elseif,block:a});else{if(e.slotScope){var o=e.slotTarget||'"default"';(r.scopedSlots||(r.scopedSlots={}))[o]=e}r.children.push(e),e.parent=r}var a,u;e.children=e.children.filter(function(e){return!e.slotScope}),l(e),e.pre&&(s=!1),Jo(e.tag)&&(c=!1);for(var f=0;f]*>)","i")),p=e.replace(f,function(e,n,r){return u=r.length,Do(l)||"noscript"===l||(n=n.replace(//g,"$1").replace(//g,"$1")),Ro(l,n)&&(n=n.slice(1)),t.chars&&t.chars(n),""});c+=e.length-p.length,e=p,A(l,c-u,c)}else{var d=e.indexOf("<");if(0===d){if(No.test(e)){var v=e.indexOf("--\x3e");if(v>=0){t.shouldKeepComment&&t.comment(e.substring(4,v),c,c+v+3),C(v+3);continue}}if(jo.test(e)){var h=e.indexOf("]>");if(h>=0){C(h+2);continue}}var m=e.match(Eo);if(m){C(m[0].length);continue}var y=e.match(To);if(y){var g=c;C(y[0].length),A(y[1],g,c);continue}var _=x();if(_){k(_),Ro(_.tagName,e)&&C(1);continue}}var b=void 0,$=void 0,w=void 0;if(d>=0){for($=e.slice(d);!(To.test($)||Oo.test($)||No.test($)||jo.test($)||(w=$.indexOf("<",1))<0);)d+=w,$=e.slice(d);b=e.substring(0,d)}d<0&&(b=e),b&&C(b.length),t.chars&&b&&t.chars(b,c-b.length,c)}if(e===n){t.chars&&t.chars(e);break}}function C(t){c+=t,e=e.substring(t)}function x(){var t=e.match(Oo);if(t){var n,r,i={tagName:t[1],attrs:[],start:c};for(C(t[0].length);!(n=e.match(So))&&(r=e.match(xo)||e.match(Co));)r.start=c,C(r[0].length),r.end=c,i.attrs.push(r);if(n)return i.unarySlash=n[1],C(n[0].length),i.end=c,i}}function k(e){var n=e.tagName,c=e.unarySlash;o&&("p"===r&&wo(n)&&A(r),s(n)&&r===n&&A(n));for(var u=a(n)||!!c,l=e.attrs.length,f=new Array(l),p=0;p=0&&i[a].lowerCasedTag!==s;a--);else a=0;if(a>=0){for(var u=i.length-1;u>=a;u--)t.end&&t.end(i[u].tag,n,o);i.length=a,r=a&&i[a-1].tag}else"br"===s?t.start&&t.start(e,[],!0,n,o):"p"===s&&(t.start&&t.start(e,[],!1,n,o),t.end&&t.end(e,n,o))}A()}(e,{warn:Bo,expectHTML:t.expectHTML,isUnaryTag:t.isUnaryTag,canBeLeftOpenTag:t.canBeLeftOpenTag,shouldDecodeNewlines:t.shouldDecodeNewlines,shouldDecodeNewlinesForHref:t.shouldDecodeNewlinesForHref,shouldKeepComment:t.comments,outputSourceRange:t.outputSourceRange,start:function(e,o,a,l,f){var p=r&&r.ns||Wo(e);q&&"svg"===p&&(o=function(e){for(var t=[],n=0;nc&&(s.push(o=e.slice(c,i)),a.push(JSON.stringify(o)));var u=Ar(r[1].trim());a.push("_s("+u+")"),s.push({"@binding":u}),c=i+r[0].length}return c-1"+("true"===o?":("+t+")":":_q("+t+","+o+")")),Mr(e,"change","var $$a="+t+",$$el=$event.target,$$c=$$el.checked?("+o+"):("+a+");if(Array.isArray($$a)){var $$v="+(r?"_n("+i+")":i)+",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&("+Br(t,"$$a.concat([$$v])")+")}else{$$i>-1&&("+Br(t,"$$a.slice(0,$$i).concat($$a.slice($$i+1))")+")}}else{"+Br(t,"$$c")+"}",null,!0)}(e,r,i);else if("input"===o&&"radio"===a)!function(e,t,n){var r=n&&n.number,i=Ir(e,"value")||"null";Er(e,"checked","_q("+t+","+(i=r?"_n("+i+")":i)+")"),Mr(e,"change",Br(t,i),null,!0)}(e,r,i);else if("input"===o||"textarea"===o)!function(e,t,n){var r=e.attrsMap.type,i=n||{},o=i.lazy,a=i.number,s=i.trim,c=!o&&"range"!==r,u=o?"change":"range"===r?Wr:"input",l="$event.target.value";s&&(l="$event.target.value.trim()"),a&&(l="_n("+l+")");var f=Br(t,l);c&&(f="if($event.target.composing)return;"+f),Er(e,"value","("+t+")"),Mr(e,u,f,null,!0),(s||a)&&Mr(e,"blur","$forceUpdate()")}(e,r,i);else if(!F.isReservedTag(o))return Hr(e,r,i),!1;return!0},text:function(e,t){t.value&&Er(e,"textContent","_s("+t.value+")",t)},html:function(e,t){t.value&&Er(e,"innerHTML","_s("+t.value+")",t)}},isPreTag:function(e){return"pre"===e},isUnaryTag:bo,mustUseProp:jn,canBeLeftOpenTag:$o,isReservedTag:Wn,getTagNamespace:Zn,staticKeys:function(e){return e.reduce(function(e,t){return e.concat(t.staticKeys||[])},[]).join(",")}(ba)},xa=g(function(e){return p("type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap"+(e?","+e:""))});function ka(e,t){e&&($a=xa(t.staticKeys||""),wa=t.isReservedTag||T,function e(t){t.static=function(e){if(2===e.type)return!1;if(3===e.type)return!0;return!(!e.pre&&(e.hasBindings||e.if||e.for||d(e.tag)||!wa(e.tag)||function(e){for(;e.parent;){if("template"!==(e=e.parent).tag)return!1;if(e.for)return!0}return!1}(e)||!Object.keys(e).every($a)))}(t);if(1===t.type){if(!wa(t.tag)&&"slot"!==t.tag&&null==t.attrsMap["inline-template"])return;for(var n=0,r=t.children.length;n|^function\s*(?:[\w$]+)?\s*\(/,Oa=/\([^)]*?\);*$/,Sa=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,Ta={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},Ea={esc:["Esc","Escape"],tab:"Tab",enter:"Enter",space:[" ","Spacebar"],up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete","Del"]},Na=function(e){return"if("+e+")return null;"},ja={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:Na("$event.target !== $event.currentTarget"),ctrl:Na("!$event.ctrlKey"),shift:Na("!$event.shiftKey"),alt:Na("!$event.altKey"),meta:Na("!$event.metaKey"),left:Na("'button' in $event && $event.button !== 0"),middle:Na("'button' in $event && $event.button !== 1"),right:Na("'button' in $event && $event.button !== 2")};function Da(e,t){var n=t?"nativeOn:":"on:",r="",i="";for(var o in e){var a=La(e[o]);e[o]&&e[o].dynamic?i+=o+","+a+",":r+='"'+o+'":'+a+","}return r="{"+r.slice(0,-1)+"}",i?n+"_d("+r+",["+i.slice(0,-1)+"])":n+r}function La(e){if(!e)return"function(){}";if(Array.isArray(e))return"["+e.map(function(e){return La(e)}).join(",")+"]";var t=Sa.test(e.value),n=Aa.test(e.value),r=Sa.test(e.value.replace(Oa,""));if(e.modifiers){var i="",o="",a=[];for(var s in e.modifiers)if(ja[s])o+=ja[s],Ta[s]&&a.push(s);else if("exact"===s){var c=e.modifiers;o+=Na(["ctrl","shift","alt","meta"].filter(function(e){return!c[e]}).map(function(e){return"$event."+e+"Key"}).join("||"))}else a.push(s);return a.length&&(i+=function(e){return"if(!$event.type.indexOf('key')&&"+e.map(Ma).join("&&")+")return null;"}(a)),o&&(i+=o),"function($event){"+i+(t?"return "+e.value+"($event)":n?"return ("+e.value+")($event)":r?"return "+e.value:e.value)+"}"}return t||n?e.value:"function($event){"+(r?"return "+e.value:e.value)+"}"}function Ma(e){var t=parseInt(e,10);if(t)return"$event.keyCode!=="+t;var n=Ta[e],r=Ea[e];return"_k($event.keyCode,"+JSON.stringify(e)+","+JSON.stringify(n)+",$event.key,"+JSON.stringify(r)+")"}var Ia={on:function(e,t){e.wrapListeners=function(e){return"_g("+e+","+t.value+")"}},bind:function(e,t){e.wrapData=function(n){return"_b("+n+",'"+e.tag+"',"+t.value+","+(t.modifiers&&t.modifiers.prop?"true":"false")+(t.modifiers&&t.modifiers.sync?",true":"")+")"}},cloak:S},Fa=function(e){this.options=e,this.warn=e.warn||Sr,this.transforms=Tr(e.modules,"transformCode"),this.dataGenFns=Tr(e.modules,"genData"),this.directives=A(A({},Ia),e.directives);var t=e.isReservedTag||T;this.maybeComponent=function(e){return!!e.component||!t(e.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1};function Pa(e,t){var n=new Fa(t);return{render:"with(this){return "+(e?Ra(e,n):'_c("div")')+"}",staticRenderFns:n.staticRenderFns}}function Ra(e,t){if(e.parent&&(e.pre=e.pre||e.parent.pre),e.staticRoot&&!e.staticProcessed)return Ha(e,t);if(e.once&&!e.onceProcessed)return Ba(e,t);if(e.for&&!e.forProcessed)return za(e,t);if(e.if&&!e.ifProcessed)return Ua(e,t);if("template"!==e.tag||e.slotTarget||t.pre){if("slot"===e.tag)return function(e,t){var n=e.slotName||'"default"',r=qa(e,t),i="_t("+n+(r?","+r:""),o=e.attrs||e.dynamicAttrs?Ga((e.attrs||[]).concat(e.dynamicAttrs||[]).map(function(e){return{name:b(e.name),value:e.value,dynamic:e.dynamic}})):null,a=e.attrsMap["v-bind"];!o&&!a||r||(i+=",null");o&&(i+=","+o);a&&(i+=(o?"":",null")+","+a);return i+")"}(e,t);var n;if(e.component)n=function(e,t,n){var r=t.inlineTemplate?null:qa(t,n,!0);return"_c("+e+","+Va(t,n)+(r?","+r:"")+")"}(e.component,e,t);else{var r;(!e.plain||e.pre&&t.maybeComponent(e))&&(r=Va(e,t));var i=e.inlineTemplate?null:qa(e,t,!0);n="_c('"+e.tag+"'"+(r?","+r:"")+(i?","+i:"")+")"}for(var o=0;o>>0}(a):"")+")"}(e,e.scopedSlots,t)+","),e.model&&(n+="model:{value:"+e.model.value+",callback:"+e.model.callback+",expression:"+e.model.expression+"},"),e.inlineTemplate){var o=function(e,t){var n=e.children[0];if(n&&1===n.type){var r=Pa(n,t.options);return"inlineTemplate:{render:function(){"+r.render+"},staticRenderFns:["+r.staticRenderFns.map(function(e){return"function(){"+e+"}"}).join(",")+"]}"}}(e,t);o&&(n+=o+",")}return n=n.replace(/,$/,"")+"}",e.dynamicAttrs&&(n="_b("+n+',"'+e.tag+'",'+Ga(e.dynamicAttrs)+")"),e.wrapData&&(n=e.wrapData(n)),e.wrapListeners&&(n=e.wrapListeners(n)),n}function Ka(e){return 1===e.type&&("slot"===e.tag||e.children.some(Ka))}function Ja(e,t){var n=e.attrsMap["slot-scope"];if(e.if&&!e.ifProcessed&&!n)return Ua(e,t,Ja,"null");if(e.for&&!e.forProcessed)return za(e,t,Ja);var r=e.slotScope===ca?"":String(e.slotScope),i="function("+r+"){return "+("template"===e.tag?e.if&&n?"("+e.if+")?"+(qa(e,t)||"undefined")+":undefined":qa(e,t)||"undefined":Ra(e,t))+"}",o=r?"":",proxy:true";return"{key:"+(e.slotTarget||'"default"')+",fn:"+i+o+"}"}function qa(e,t,n,r,i){var o=e.children;if(o.length){var a=o[0];if(1===o.length&&a.for&&"template"!==a.tag&&"slot"!==a.tag){var s=n?t.maybeComponent(a)?",1":",0":"";return""+(r||Ra)(a,t)+s}var c=n?function(e,t){for(var n=0,r=0;r':'
',ts.innerHTML.indexOf(" ")>0}var os=!!z&&is(!1),as=!!z&&is(!0),ss=g(function(e){var t=Yn(e);return t&&t.innerHTML}),cs=wn.prototype.$mount;return wn.prototype.$mount=function(e,t){if((e=e&&Yn(e))===document.body||e===document.documentElement)return this;var n=this.$options;if(!n.render){var r=n.template;if(r)if("string"==typeof r)"#"===r.charAt(0)&&(r=ss(r));else{if(!r.nodeType)return this;r=r.innerHTML}else e&&(r=function(e){if(e.outerHTML)return e.outerHTML;var t=document.createElement("div");return t.appendChild(e.cloneNode(!0)),t.innerHTML}(e));if(r){var i=rs(r,{outputSourceRange:!1,shouldDecodeNewlines:os,shouldDecodeNewlinesForHref:as,delimiters:n.delimiters,comments:n.comments},this),o=i.render,a=i.staticRenderFns;n.render=o,n.staticRenderFns=a}}return cs.call(this,e,t)},wn.compile=rs,wn}); \ No newline at end of file diff --git a/webroot/assets/vuex.js b/webroot/assets/vuex.js new file mode 100644 index 0000000..0ffa597 --- /dev/null +++ b/webroot/assets/vuex.js @@ -0,0 +1,6 @@ +/** + * vuex v2.0.0 + * (c) 2016 Evan You + * @license MIT + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.Vuex=e()}(this,function(){"use strict";function t(t){b&&(t._devtoolHook=b,b.emit("vuex:init",t),b.on("vuex:travel-to-state",function(e){t.replaceState(e)}),t.subscribe(function(t,e){b.emit("vuex:mutation",t,e)}))}function e(t){function e(){var t=this.$options;t.store?this.$store=t.store:t.parent&&t.parent.$store&&(this.$store=t.parent.$store)}var n=Number(t.version.split(".")[0]);if(n>=2){var o=t.config._lifecycleHooks.indexOf("init")>-1;t.mixin(o?{init:e}:{beforeCreate:e})}else{var i=t.prototype._init;t.prototype._init=function(t){void 0===t&&(t={}),t.init=t.init?[e].concat(t.init):e,i.call(this,t)}}}function n(t){var e={};return s(t).forEach(function(t){var n=t.key,o=t.val;e[n]=function(){return"function"==typeof o?o.call(this,this.$store.state,this.$store.getters):this.$store.state[o]}}),e}function o(t){var e={};return s(t).forEach(function(t){var n=t.key,o=t.val;e[n]=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return this.$store.commit.apply(this.$store,[o].concat(t))}}),e}function i(t){var e={};return s(t).forEach(function(t){var n=t.key,o=t.val;e[n]=function(){return o in this.$store.getters||console.error("[vuex] unknown getter: "+o),this.$store.getters[o]}}),e}function r(t){var e={};return s(t).forEach(function(t){var n=t.key,o=t.val;e[n]=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return this.$store.dispatch.apply(this.$store,[o].concat(t))}}),e}function s(t){return Array.isArray(t)?t.map(function(t){return{key:t,val:t}}):Object.keys(t).map(function(e){return{key:e,val:t[e]}})}function u(t){return null!==t&&"object"==typeof t}function a(t){return t&&"function"==typeof t.then}function c(t,e){if(!t)throw new Error("[vuex] "+e)}function f(t,e){if(e.actions&&(t.actions=e.actions),e.mutations&&(t.mutations=e.mutations),e.getters&&(t.getters=e.getters),e.modules)for(var n in e.modules){if(!t.modules||!t.modules[n])return void console.warn("[vuex] trying to add a new module '"+n+"' on hot reloading, manual reload is needed");f(t.modules[n],e.modules[n])}}function l(t){t._actions=Object.create(null),t._mutations=Object.create(null),t._wrappedGetters=Object.create(null);var e=t.state;p(t,e,[],t._options,!0),Object.keys(t._runtimeModules).forEach(function(n){p(t,e,n.split("."),t._runtimeModules[n],!0)}),h(t,e)}function h(t,e){var n=t._vm;t.getters={};var o=t._wrappedGetters,i={};Object.keys(o).forEach(function(e){var n=o[e];i[e]=function(){return n(t)},Object.defineProperty(t.getters,e,{get:function(){return t._vm[e]}})});var r=w.config.silent;w.config.silent=!0,t._vm=new w({data:{state:e},computed:i}),w.config.silent=r,t.strict&&y(t),n&&(t._withCommit(function(){n.state=null}),w.nextTick(function(){return n.$destroy()}))}function p(t,e,n,o,i){var r=!n.length,s=o.state,u=o.actions,a=o.mutations,c=o.getters,f=o.modules;if(!r&&!i){var l=_(e,n.slice(0,-1)),h=n[n.length-1];t._withCommit(function(){w.set(l,h,s||{})})}a&&Object.keys(a).forEach(function(e){d(t,e,a[e],n)}),u&&Object.keys(u).forEach(function(e){m(t,e,u[e],n)}),c&&v(t,c,n),f&&Object.keys(f).forEach(function(o){p(t,e,n.concat(o),f[o],i)})}function d(t,e,n,o){void 0===o&&(o=[]);var i=t._mutations[e]||(t._mutations[e]=[]);i.push(function(e){n(_(t.state,o),e)})}function m(t,e,n,o){void 0===o&&(o=[]);var i=t._actions[e]||(t._actions[e]=[]),r=t.dispatch,s=t.commit;i.push(function(e,i){var u=n({dispatch:r,commit:s,getters:t.getters,state:_(t.state,o),rootState:t.state},e,i);return a(u)||(u=Promise.resolve(u)),t._devtoolHook?u.catch(function(e){throw t._devtoolHook.emit("vuex:error",e),e}):u})}function v(t,e,n){Object.keys(e).forEach(function(o){var i=e[o];return t._wrappedGetters[o]?void console.error("[vuex] duplicate getter key: "+o):void(t._wrappedGetters[o]=function(t){return i(_(t.state,n),t.getters,t.state)})})}function y(t){t._vm.$watch("state",function(){c(t._committing,"Do not mutate vuex store state outside mutation handlers.")},{deep:!0,sync:!0})}function _(t,e){return e.length?e.reduce(function(t,e){return t[e]},t):t}function g(t){return w?void console.error("[vuex] already installed. Vue.use(Vuex) should be called only once."):(w=t,void e(w))}var w,b="undefined"!=typeof window&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__,x=function(e){var n=this;void 0===e&&(e={}),c(w,"must call Vue.use(Vuex) before creating a store instance."),c("undefined"!=typeof Promise,"vuex requires a Promise polyfill in this browser.");var o=e.state;void 0===o&&(o={});var i=e.plugins;void 0===i&&(i=[]);var r=e.strict;void 0===r&&(r=!1),this._options=e,this._committing=!1,this._actions=Object.create(null),this._mutations=Object.create(null),this._wrappedGetters=Object.create(null),this._runtimeModules=Object.create(null),this._subscribers=[],this._watcherVM=new w;var s=this,u=this,a=u.dispatch,f=u.commit;this.dispatch=function(t,e){return a.call(s,t,e)},this.commit=function(t,e,n){return f.call(s,t,e,n)},this.strict=r,p(this,o,[],e),h(this,o),i.concat(t).forEach(function(t){return t(n)})},O={state:{}};O.state.get=function(){return this._vm.state},O.state.set=function(t){c(!1,"Use store.replaceState() to explicit replace store state.")},x.prototype.commit=function(t,e,n){var o=this;u(t)&&t.type&&(n=e,e=t,t=t.type);var i={type:t,payload:e},r=this._mutations[t];return r?(this._withCommit(function(){r.forEach(function(t){t(e)})}),void(n&&n.silent||this._subscribers.forEach(function(t){return t(i,o.state)}))):void console.error("[vuex] unknown mutation type: "+t)},x.prototype.dispatch=function(t,e){u(t)&&t.type&&(e=t,t=t.type);var n=this._actions[t];return n?n.length>1?Promise.all(n.map(function(t){return t(e)})):n[0](e):void console.error("[vuex] unknown action type: "+t)},x.prototype.subscribe=function(t){var e=this._subscribers;return e.indexOf(t)<0&&e.push(t),function(){var n=e.indexOf(t);n>-1&&e.splice(n,1)}},x.prototype.watch=function(t,e,n){var o=this;return c("function"==typeof t,"store.watch only accepts a function."),this._watcherVM.$watch(function(){return t(o.state)},e,n)},x.prototype.replaceState=function(t){var e=this;this._withCommit(function(){e._vm.state=t})},x.prototype.registerModule=function(t,e){"string"==typeof t&&(t=[t]),c(Array.isArray(t),"module path must be a string or an Array."),this._runtimeModules[t.join(".")]=e,p(this,this.state,t,e),h(this,this.state)},x.prototype.unregisterModule=function(t){var e=this;"string"==typeof t&&(t=[t]),c(Array.isArray(t),"module path must be a string or an Array."),delete this._runtimeModules[t.join(".")],this._withCommit(function(){var n=_(e.state,t.slice(0,-1));w.delete(n,t[t.length-1])}),l(this)},x.prototype.hotUpdate=function(t){f(this._options,t),l(this)},x.prototype._withCommit=function(t){var e=this._committing;this._committing=!0,t(),this._committing=e},Object.defineProperties(x.prototype,O),"undefined"!=typeof window&&window.Vue&&g(window.Vue);var k={Store:x,install:g,mapState:n,mapMutations:o,mapGetters:i,mapActions:r};return k}); \ No newline at end of file diff --git a/webroot/css/main.css b/webroot/css/main.css new file mode 100644 index 0000000..72c0024 --- /dev/null +++ b/webroot/css/main.css @@ -0,0 +1,4 @@ +.p-navigation__logo { + font-size: 1.5rem; + line-height: 3rem; +} diff --git a/webroot/index.html b/webroot/index.html new file mode 100644 index 0000000..05b0014 --- /dev/null +++ b/webroot/index.html @@ -0,0 +1,52 @@ + + + + + + Wifictld + + + + + + + + +
+ +
+ +
+
+ + + + + + + + diff --git a/webroot/js/main.js b/webroot/js/main.js new file mode 100644 index 0000000..5472939 --- /dev/null +++ b/webroot/js/main.js @@ -0,0 +1,4 @@ +const app = new Vue({ + el: '#app', + router, +}) diff --git a/webroot/js/utils.js b/webroot/js/utils.js new file mode 100644 index 0000000..2bce158 --- /dev/null +++ b/webroot/js/utils.js @@ -0,0 +1,28 @@ +function http(url,type,data) { + return new Promise(function (resolve, reject) { + var req = new XMLHttpRequest(); + req.open(type, url); + + req.onload = function onload() { + if (req.status === 200) { + resolve(req.response); + } else { + reject(Error(req.response)); + } + }; + + req.onerror = function onerror() { + reject(Error('Network Error')); + }; + req.send(data); + }); +} +function httpJSON(url, type, data) { + return http(url, type, data).then(JSON.parse); +} +function get(url) { + return http(url,'GET'); +} +function getJSON(url) { + return httpJSON(url, 'GET'); +} diff --git a/webroot/js/view.js b/webroot/js/view.js new file mode 100644 index 0000000..b4b8ca4 --- /dev/null +++ b/webroot/js/view.js @@ -0,0 +1,10 @@ + +const router = new VueRouter({ + routes: [ + { path: '/date', component: ViewDates, name: "dates" }, + { path: '/date/:id', component: ViewDate, name: "date.show"}, + { path: '/job', component: ViewJobs, name: "job" }, + { path: '/person', component: ViewPersons, name: "person" }, + { path: '/', redirect: '/date' } + ] +}) diff --git a/webroot/js/view/date.js b/webroot/js/view/date.js new file mode 100644 index 0000000..a26b844 --- /dev/null +++ b/webroot/js/view/date.js @@ -0,0 +1,71 @@ +const ViewDate = { + data () { + return { + form: false, + data: {}, + } + }, + created () { + self = this; + self.refresh() + }, + watch: { + '$route': 'refresh' + }, + methods: { + refresh() { + getJSON(`//${location.host}${location.pathname}api/date/`+self.$route.params.id).then(function(data){ + self.data = data; + }) + }, + openAdd() { + self.form = true; + self.edit.id = 0; + }, + send() { + if (self.edit.id === 0) { + httpJSON(`//${location.host}${location.pathname}api/date`,'POST', self.edit) + .then(function(data) { + self.form = false; + }, function (err) { + alert("unable to add new date:" + err.message); + }) + } + }, + }, + template: `
+

+ Termin: {{new Date(data.date).toDateString()}} + {{$route.params.id}} +

+

+ + + + + + + + + +
DatumPersonen
+
`, +} diff --git a/webroot/js/view/dates.js b/webroot/js/view/dates.js new file mode 100644 index 0000000..c9c99e9 --- /dev/null +++ b/webroot/js/view/dates.js @@ -0,0 +1,88 @@ +const ViewDates = { + data () { + return { + edit: { + id: 0, + }, + form: false, + list: [], + } + }, + created () { + self = this + self.refresh(); + }, + watch: { + '$route': 'refresh' + }, + methods: { + refresh() { + getJSON(`//${location.host}${location.pathname}api/date`).then(function(data){ + self.list = data; + }) + }, + openAdd() { + self.form = true; + self.edit.id = 0; + }, + send() { + if (self.edit.id === 0) { + httpJSON(`//${location.host}${location.pathname}api/date`,'POST', '"' + new Date(self.edit.date).toISOString() + '"') + .then(function(data) { + self.refresh(); + self.form = false; + }, function (err) { + alert("unable to add new date:" + err.message); + }) + } + }, + personen (date) { + return 0; + } + }, + template: `
+

+ Termine + + + +

+

+ + + + + + + + + + + + + +
DatumPersonen
{{ new Date(item.date).toDateString() }} + + {{ personen(item) }} + +
+
`, +} diff --git a/webroot/js/view/jobs.js b/webroot/js/view/jobs.js new file mode 100644 index 0000000..98beee4 --- /dev/null +++ b/webroot/js/view/jobs.js @@ -0,0 +1,79 @@ +const ViewJobs = { + data () { + return { + edit: { + id: 0, + }, + form: false, + list: [], + } + }, + created () { + self = this; + self.refresh(); + }, + watch: { + '$route': 'refresh' + }, + methods: { + refresh () { + getJSON(`//${location.host}${location.pathname}api/job`).then(function(data){ + self.list = data; + }) + }, + openAdd() { + self.form = true; + self.edit.id = 0; + }, + send() { + if (self.edit.id === 0) { + httpJSON(`//${location.host}${location.pathname}api/job`,'POST', '"' + self.edit.name + '"') + .then(function(data) { + self.refresh(); + self.form = false; + }, function (err) { + alert("unable to add new job:" + err.message); + }) + } + } + }, + template: `
+

+ Job + + + +

+

+ + + + + + + + + + + +
Name/Bezeichnung
{{ item.name }}
+
`, +} diff --git a/webroot/js/view/persons.js b/webroot/js/view/persons.js new file mode 100644 index 0000000..88851dc --- /dev/null +++ b/webroot/js/view/persons.js @@ -0,0 +1,79 @@ +const ViewPersons = { + data () { + return { + edit: { + id: 0, + }, + form: false, + list: [], + } + }, + created () { + self = this; + self.refresh() + }, + watch: { + '$route': 'refresh' + }, + methods: { + refresh () { + getJSON(`//${location.host}${location.pathname}api/person`).then(function(data){ + self.list = data; + }) + }, + openAdd() { + self.form = true; + self.edit.id = 0; + }, + send() { + if (self.edit.id === 0) { + httpJSON(`//${location.host}${location.pathname}api/person`,'POST', '"' + self.edit.name + '"') + .then(function(data) { + self.refresh(); + self.form = false; + }, function (err) { + alert("unable to add new person:" + err.message); + }) + } + } + }, + template: `
+

+ Person + + + +

+

+ + + + + + + + + + + +
Name
{{ item.name }}
+
`, +}