diff options
| author | Clement Michaud <clement.michaud34@gmail.com> | 2019-11-19 00:37:36 +0100 | 
|---|---|---|
| committer | Clément Michaud <clement.michaud34@gmail.com> | 2019-12-05 11:05:24 +0100 | 
| commit | 9ae2096d2a0840dc0a14925f8b1a9a7c3af715c2 (patch) | |
| tree | fee8a46bd77119e4f240c652e332cde099cbeebd | |
| parent | 05129207a2206550c42342f3f6a45d02a3a35f17 (diff) | |
Rewrite authelia frontend to improve user experience.
This refactoring simplify the code of the frontend and prepare the
portal for receiving a user settings page and an admin page.
92 files changed, 17574 insertions, 14 deletions
diff --git a/.travis.yml b/.travis.yml index a6b23b400..e333fe95d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -30,7 +30,7 @@ install: # Install ChromeDriver (64bits; replace 64 with 32 for 32bits).  before_script:    - export PATH=./cmd/authelia-scripts/:/tmp:$PATH    - curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash -  - nvm install v11 && nvm use v11 && npm i +  - nvm install v12 && nvm use v12 && npm i    - source bootstrap.sh  jobs: diff --git a/example/compose/authelia/docker-compose.frontend.yml b/example/compose/authelia/docker-compose.frontend.yml index 6515e1073..f5671e024 100644 --- a/example/compose/authelia/docker-compose.frontend.yml +++ b/example/compose/authelia/docker-compose.frontend.yml @@ -7,6 +7,6 @@ services:      command: npm run start      working_dir: /app      volumes: -      - "./client:/app" +      - "./web:/app"      networks:        - authelianet diff --git a/example/compose/nginx/backend/html/home/index.html b/example/compose/nginx/backend/html/home/index.html index dc577ce71..43e649fbf 100644 --- a/example/compose/nginx/backend/html/home/index.html +++ b/example/compose/nginx/backend/html/home/index.html @@ -59,7 +59,7 @@      </li>    </ul> -  You can also log off by visiting the following <a href="https://login.example.com:8080/#/logout?rd=https://home.example.com:8080/">link</a>. +  You can also log off by visiting the following <a href="https://login.example.com:8080/logout?rd=https://home.example.com:8080/">link</a>.    <h1>List of users</h1>    Here is the list of credentials you can log in with to test access control.<br/> diff --git a/example/compose/nginx/portal/nginx.conf b/example/compose/nginx/portal/nginx.conf index a398b8538..f34573a4a 100644 --- a/example/compose/nginx/portal/nginx.conf +++ b/example/compose/nginx/portal/nginx.conf @@ -122,7 +122,7 @@ http {              # Set the `target_url` variable based on the request. It will be used to build the portal              # URL with the correct redirection parameter.              set                         $target_url $scheme://$http_host$request_uri; -            error_page 401 =302         https://login.example.com:8080/#/?rd=$target_url; +            error_page 401 =302         https://login.example.com:8080/?rd=$target_url;              proxy_pass                  $upstream_endpoint;          } @@ -167,7 +167,7 @@ http {              proxy_set_header            Custom-Forwarded-Groups $groups;              set                         $target_url $scheme://$http_host$request_uri; -            error_page 401 =302         https://login.example.com:8080/#/?rd=$target_url; +            error_page 401 =302         https://login.example.com:8080/?rd=$target_url;              proxy_pass                  $upstream_headers;          } diff --git a/internal/handlers/handler_firstfactor.go b/internal/handlers/handler_firstfactor.go index 96f6a4a31..3458ce761 100644 --- a/internal/handlers/handler_firstfactor.go +++ b/internal/handlers/handler_firstfactor.go @@ -120,6 +120,7 @@ func FirstFactorPost(ctx *middlewares.AutheliaCtx) {  		safeRedirection := isRedirectionSafe(*targetURL, ctx.Configuration.Session.Domain)  		if safeRedirection && requiredLevel <= authorization.OneFactor { +			ctx.Logger.Debugf("Redirection is safe, redirecting...")  			response := redirectResponse{bodyJSON.TargetURL}  			ctx.SetJSONBody(response)  		} else { diff --git a/internal/handlers/handler_register_totp.go b/internal/handlers/handler_register_totp.go index 947c0ae83..5f046b6fe 100644 --- a/internal/handlers/handler_register_totp.go +++ b/internal/handlers/handler_register_totp.go @@ -31,7 +31,7 @@ var SecondFactorTOTPIdentityStart = middlewares.IdentityVerificationStart(middle  	MailSubject:           "[Authelia] Register your mobile",  	MailTitle:             "Register your mobile",  	MailButtonContent:     "Register", -	TargetEndpoint:        "/one-time-password-registration", +	TargetEndpoint:        "/one-time-password/register",  	ActionClaim:           TOTPRegistrationAction,  	IdentityRetrieverFunc: identityRetrieverFromSession,  }) diff --git a/internal/handlers/handler_register_u2f_step1.go b/internal/handlers/handler_register_u2f_step1.go index 0f937b78c..dad231e0b 100644 --- a/internal/handlers/handler_register_u2f_step1.go +++ b/internal/handlers/handler_register_u2f_step1.go @@ -18,7 +18,7 @@ var SecondFactorU2FIdentityStart = middlewares.IdentityVerificationStart(middlew  	MailSubject:           "[Authelia] Register your key",  	MailTitle:             "Register your key",  	MailButtonContent:     "Register", -	TargetEndpoint:        "/security-key-registration", +	TargetEndpoint:        "/security-key/register",  	ActionClaim:           U2FRegistrationAction,  	IdentityRetrieverFunc: identityRetrieverFromSession,  }) diff --git a/internal/handlers/handler_reset_password_step1.go b/internal/handlers/handler_reset_password_step1.go index abb88e682..eb85640c2 100644 --- a/internal/handlers/handler_reset_password_step1.go +++ b/internal/handlers/handler_reset_password_step1.go @@ -38,7 +38,7 @@ var ResetPasswordIdentityStart = middlewares.IdentityVerificationStart(middlewar  	MailSubject:           "[Authelia] Reset your password",  	MailTitle:             "Reset your password",  	MailButtonContent:     "Reset", -	TargetEndpoint:        "/reset-password", +	TargetEndpoint:        "/reset-password/step2",  	ActionClaim:           ResetPasswordAction,  	IdentityRetrieverFunc: identityRetrieverFromStorage,  }) diff --git a/internal/middlewares/identity_verification.go b/internal/middlewares/identity_verification.go index c476694ed..2e8c47bc3 100644 --- a/internal/middlewares/identity_verification.go +++ b/internal/middlewares/identity_verification.go @@ -49,7 +49,7 @@ func IdentityVerificationStart(args IdentityVerificationStartArgs) RequestHandle  			return  		} -		link := fmt.Sprintf("%s://%s/#%s?token=%s", ctx.XForwardedProto(), +		link := fmt.Sprintf("%s://%s%s?token=%s", ctx.XForwardedProto(),  			ctx.XForwardedHost(), args.TargetEndpoint, ss)  		params := map[string]interface{}{ diff --git a/internal/server/server.go b/internal/server/server.go index fd89adcba..542808fcd 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -27,6 +27,7 @@ func StartServer(configuration schema.Configuration, providers middlewares.Provi  	fmt.Println("Selected public_html directory is ", publicDir)  	router.GET("/", fasthttp.FSHandler(publicDir, 0)) +	router.NotFound = fasthttp.FSHandler(publicDir, 0)  	router.ServeFiles("/static/*filepath", publicDir+"/static")  	router.GET("/api/state", autheliaMiddleware(handlers.StateGet)) diff --git a/internal/suites/constants.go b/internal/suites/constants.go index 29d32c709..443c73ca2 100644 --- a/internal/suites/constants.go +++ b/internal/suites/constants.go @@ -6,7 +6,7 @@ import "fmt"  var BaseDomain = "example.com:8080"  // LoginBaseURL the base URL of the login portal -var LoginBaseURL = fmt.Sprintf("https://login.%s/#/", BaseDomain) +var LoginBaseURL = fmt.Sprintf("https://login.%s/", BaseDomain)  // SingleFactorBaseURL the base URL of the singlefactor domain  var SingleFactorBaseURL = fmt.Sprintf("https://singlefactor.%s", BaseDomain) diff --git a/internal/suites/environment.go b/internal/suites/environment.go index 054cb7728..9210bc667 100644 --- a/internal/suites/environment.go +++ b/internal/suites/environment.go @@ -14,7 +14,7 @@ func waitUntilServiceLogDetected(  	timeout time.Duration,  	dockerEnvironment *DockerEnvironment,  	service string, -	logPattern string) error { +	logPatterns []string) error {  	log.Debug("Waiting for service " + service + " to be ready...")  	err := utils.CheckUntil(5*time.Second, 1*time.Minute, func() (bool, error) {  		logs, err := dockerEnvironment.Logs(service, []string{"--tail", "20"}) @@ -23,7 +23,12 @@ func waitUntilServiceLogDetected(  		if err != nil {  			return false, err  		} -		return strings.Contains(logs, logPattern), nil +		for _, pattern := range logPatterns { +			if strings.Contains(logs, pattern) { +				return true, nil +			} +		} +		return false, nil  	})  	fmt.Print("\n") @@ -38,7 +43,7 @@ func waitUntilAutheliaIsReady(dockerEnvironment *DockerEnvironment) error {  		90*time.Second,  		dockerEnvironment,  		"authelia-backend", -		"Authelia is listening on") +		[]string{"Authelia is listening on"})  	if err != nil {  		return err @@ -49,7 +54,7 @@ func waitUntilAutheliaIsReady(dockerEnvironment *DockerEnvironment) error {  		90*time.Second,  		dockerEnvironment,  		"authelia-frontend", -		"You can now view authelia-portal in the browser.") +		[]string{"You can now view web in the browser.", "Compiled with warnings", "Compiled successfully!"})  	if err != nil {  		return err diff --git a/web/.env.development b/web/.env.development new file mode 100644 index 000000000..cacb4b96f --- /dev/null +++ b/web/.env.development @@ -0,0 +1,2 @@ + +HOST=authelia-frontend
\ No newline at end of file diff --git a/web/.gitignore b/web/.gitignore new file mode 100644 index 000000000..4d29575de --- /dev/null +++ b/web/.gitignore @@ -0,0 +1,23 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/web/README.md b/web/README.md new file mode 100644 index 000000000..a31481cae --- /dev/null +++ b/web/README.md @@ -0,0 +1,44 @@ +This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). + +## Available Scripts + +In the project directory, you can run: + +### `npm start` + +Runs the app in the development mode.<br /> +Open [http://localhost:3000](http://localhost:3000) to view it in the browser. + +The page will reload if you make edits.<br /> +You will also see any lint errors in the console. + +### `npm test` + +Launches the test runner in the interactive watch mode.<br /> +See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. + +### `npm run build` + +Builds the app for production to the `build` folder.<br /> +It correctly bundles React in production mode and optimizes the build for the best performance. + +The build is minified and the filenames include the hashes.<br /> +Your app is ready to be deployed! + +See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. + +### `npm run eject` + +**Note: this is a one-way operation. Once you `eject`, you can’t go back!** + +If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. + +Instead, it will copy all the configuration files and the transitive dependencies (Webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own. + +You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. + +## Learn More + +You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). + +To learn React, check out the [React documentation](https://reactjs.org/). diff --git a/web/package-lock.json b/web/package-lock.json new file mode 100644 index 000000000..2aed700f5 --- /dev/null +++ b/web/package-lock.json @@ -0,0 +1,13930 @@ +{ +  "name": "web", +  "version": "0.1.0", +  "lockfileVersion": 1, +  "requires": true, +  "dependencies": { +    "@babel/code-frame": { +      "version": "7.5.5", +      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", +      "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", +      "requires": { +        "@babel/highlight": "^7.0.0" +      } +    }, +    "@babel/core": { +      "version": "7.6.0", +      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.6.0.tgz", +      "integrity": "sha512-FuRhDRtsd6IptKpHXAa+4WPZYY2ZzgowkbLBecEDDSje1X/apG7jQM33or3NdOmjXBKWGOg4JmSiRfUfuTtHXw==", +      "requires": { +        "@babel/code-frame": "^7.5.5", +        "@babel/generator": "^7.6.0", +        "@babel/helpers": "^7.6.0", +        "@babel/parser": "^7.6.0", +        "@babel/template": "^7.6.0", +        "@babel/traverse": "^7.6.0", +        "@babel/types": "^7.6.0", +        "convert-source-map": "^1.1.0", +        "debug": "^4.1.0", +        "json5": "^2.1.0", +        "lodash": "^4.17.13", +        "resolve": "^1.3.2", +        "semver": "^5.4.1", +        "source-map": "^0.5.0" +      }, +      "dependencies": { +        "semver": { +          "version": "5.7.1", +          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", +          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" +        } +      } +    }, +    "@babel/generator": { +      "version": "7.7.2", +      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.2.tgz", +      "integrity": "sha512-WthSArvAjYLz4TcbKOi88me+KmDJdKSlfwwN8CnUYn9jBkzhq0ZEPuBfkAWIvjJ3AdEV1Cf/+eSQTnp3IDJKlQ==", +      "requires": { +        "@babel/types": "^7.7.2", +        "jsesc": "^2.5.1", +        "lodash": "^4.17.13", +        "source-map": "^0.5.0" +      } +    }, +    "@babel/helper-annotate-as-pure": { +      "version": "7.7.0", +      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.7.0.tgz", +      "integrity": "sha512-k50CQxMlYTYo+GGyUGFwpxKVtxVJi9yh61sXZji3zYHccK9RYliZGSTOgci85T+r+0VFN2nWbGM04PIqwfrpMg==", +      "requires": { +        "@babel/types": "^7.7.0" +      } +    }, +    "@babel/helper-builder-binary-assignment-operator-visitor": { +      "version": "7.7.0", +      "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.7.0.tgz", +      "integrity": "sha512-Cd8r8zs4RKDwMG/92lpZcnn5WPQ3LAMQbCw42oqUh4s7vsSN5ANUZjMel0OOnxDLq57hoDDbai+ryygYfCTOsw==", +      "requires": { +        "@babel/helper-explode-assignable-expression": "^7.7.0", +        "@babel/types": "^7.7.0" +      } +    }, +    "@babel/helper-builder-react-jsx": { +      "version": "7.7.0", +      "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.7.0.tgz", +      "integrity": "sha512-LSln3cexwInTMYYoFeVLKnYPPMfWNJ8PubTBs3hkh7wCu9iBaqq1OOyW+xGmEdLxT1nhsl+9SJ+h2oUDYz0l2A==", +      "requires": { +        "@babel/types": "^7.7.0", +        "esutils": "^2.0.0" +      } +    }, +    "@babel/helper-call-delegate": { +      "version": "7.7.0", +      "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.7.0.tgz", +      "integrity": "sha512-Su0Mdq7uSSWGZayGMMQ+z6lnL00mMCnGAbO/R0ZO9odIdB/WNU/VfQKqMQU0fdIsxQYbRjDM4BixIa93SQIpvw==", +      "requires": { +        "@babel/helper-hoist-variables": "^7.7.0", +        "@babel/traverse": "^7.7.0", +        "@babel/types": "^7.7.0" +      } +    }, +    "@babel/helper-create-class-features-plugin": { +      "version": "7.7.0", +      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.7.0.tgz", +      "integrity": "sha512-MZiB5qvTWoyiFOgootmRSDV1udjIqJW/8lmxgzKq6oDqxdmHUjeP2ZUOmgHdYjmUVNABqRrHjYAYRvj8Eox/UA==", +      "requires": { +        "@babel/helper-function-name": "^7.7.0", +        "@babel/helper-member-expression-to-functions": "^7.7.0", +        "@babel/helper-optimise-call-expression": "^7.7.0", +        "@babel/helper-plugin-utils": "^7.0.0", +        "@babel/helper-replace-supers": "^7.7.0", +        "@babel/helper-split-export-declaration": "^7.7.0" +      } +    }, +    "@babel/helper-create-regexp-features-plugin": { +      "version": "7.7.2", +      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.7.2.tgz", +      "integrity": "sha512-pAil/ZixjTlrzNpjx+l/C/wJk002Wo7XbbZ8oujH/AoJ3Juv0iN/UTcPUHXKMFLqsfS0Hy6Aow8M31brUYBlQQ==", +      "requires": { +        "@babel/helper-regex": "^7.4.4", +        "regexpu-core": "^4.6.0" +      } +    }, +    "@babel/helper-define-map": { +      "version": "7.7.0", +      "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.7.0.tgz", +      "integrity": "sha512-kPKWPb0dMpZi+ov1hJiwse9dWweZsz3V9rP4KdytnX1E7z3cTNmFGglwklzFPuqIcHLIY3bgKSs4vkwXXdflQA==", +      "requires": { +        "@babel/helper-function-name": "^7.7.0", +        "@babel/types": "^7.7.0", +        "lodash": "^4.17.13" +      } +    }, +    "@babel/helper-explode-assignable-expression": { +      "version": "7.7.0", +      "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.7.0.tgz", +      "integrity": "sha512-CDs26w2shdD1urNUAji2RJXyBFCaR+iBEGnFz3l7maizMkQe3saVw9WtjG1tz8CwbjvlFnaSLVhgnu1SWaherg==", +      "requires": { +        "@babel/traverse": "^7.7.0", +        "@babel/types": "^7.7.0" +      } +    }, +    "@babel/helper-function-name": { +      "version": "7.7.0", +      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.0.tgz", +      "integrity": "sha512-tDsJgMUAP00Ugv8O2aGEua5I2apkaQO7lBGUq1ocwN3G23JE5Dcq0uh3GvFTChPa4b40AWiAsLvCZOA2rdnQ7Q==", +      "requires": { +        "@babel/helper-get-function-arity": "^7.7.0", +        "@babel/template": "^7.7.0", +        "@babel/types": "^7.7.0" +      } +    }, +    "@babel/helper-get-function-arity": { +      "version": "7.7.0", +      "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.0.tgz", +      "integrity": "sha512-tLdojOTz4vWcEnHWHCuPN5P85JLZWbm5Fx5ZsMEMPhF3Uoe3O7awrbM2nQ04bDOUToH/2tH/ezKEOR8zEYzqyw==", +      "requires": { +        "@babel/types": "^7.7.0" +      } +    }, +    "@babel/helper-hoist-variables": { +      "version": "7.7.0", +      "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.7.0.tgz", +      "integrity": "sha512-LUe/92NqsDAkJjjCEWkNe+/PcpnisvnqdlRe19FahVapa4jndeuJ+FBiTX1rcAKWKcJGE+C3Q3tuEuxkSmCEiQ==", +      "requires": { +        "@babel/types": "^7.7.0" +      } +    }, +    "@babel/helper-member-expression-to-functions": { +      "version": "7.7.0", +      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.0.tgz", +      "integrity": "sha512-QaCZLO2RtBcmvO/ekOLp8p7R5X2JriKRizeDpm5ChATAFWrrYDcDxPuCIBXKyBjY+i1vYSdcUTMIb8psfxHDPA==", +      "requires": { +        "@babel/types": "^7.7.0" +      } +    }, +    "@babel/helper-module-imports": { +      "version": "7.7.0", +      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.7.0.tgz", +      "integrity": "sha512-Dv3hLKIC1jyfTkClvyEkYP2OlkzNvWs5+Q8WgPbxM5LMeorons7iPP91JM+DU7tRbhqA1ZeooPaMFvQrn23RHw==", +      "requires": { +        "@babel/types": "^7.7.0" +      } +    }, +    "@babel/helper-module-transforms": { +      "version": "7.7.0", +      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.7.0.tgz", +      "integrity": "sha512-rXEefBuheUYQyX4WjV19tuknrJFwyKw0HgzRwbkyTbB+Dshlq7eqkWbyjzToLrMZk/5wKVKdWFluiAsVkHXvuQ==", +      "requires": { +        "@babel/helper-module-imports": "^7.7.0", +        "@babel/helper-simple-access": "^7.7.0", +        "@babel/helper-split-export-declaration": "^7.7.0", +        "@babel/template": "^7.7.0", +        "@babel/types": "^7.7.0", +        "lodash": "^4.17.13" +      } +    }, +    "@babel/helper-optimise-call-expression": { +      "version": "7.7.0", +      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.0.tgz", +      "integrity": "sha512-48TeqmbazjNU/65niiiJIJRc5JozB8acui1OS7bSd6PgxfuovWsvjfWSzlgx+gPFdVveNzUdpdIg5l56Pl5jqg==", +      "requires": { +        "@babel/types": "^7.7.0" +      } +    }, +    "@babel/helper-plugin-utils": { +      "version": "7.0.0", +      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", +      "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==" +    }, +    "@babel/helper-regex": { +      "version": "7.5.5", +      "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.5.5.tgz", +      "integrity": "sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==", +      "requires": { +        "lodash": "^4.17.13" +      } +    }, +    "@babel/helper-remap-async-to-generator": { +      "version": "7.7.0", +      "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.7.0.tgz", +      "integrity": "sha512-pHx7RN8X0UNHPB/fnuDnRXVZ316ZigkO8y8D835JlZ2SSdFKb6yH9MIYRU4fy/KPe5sPHDFOPvf8QLdbAGGiyw==", +      "requires": { +        "@babel/helper-annotate-as-pure": "^7.7.0", +        "@babel/helper-wrap-function": "^7.7.0", +        "@babel/template": "^7.7.0", +        "@babel/traverse": "^7.7.0", +        "@babel/types": "^7.7.0" +      } +    }, +    "@babel/helper-replace-supers": { +      "version": "7.7.0", +      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.7.0.tgz", +      "integrity": "sha512-5ALYEul5V8xNdxEeWvRsBzLMxQksT7MaStpxjJf9KsnLxpAKBtfw5NeMKZJSYDa0lKdOcy0g+JT/f5mPSulUgg==", +      "requires": { +        "@babel/helper-member-expression-to-functions": "^7.7.0", +        "@babel/helper-optimise-call-expression": "^7.7.0", +        "@babel/traverse": "^7.7.0", +        "@babel/types": "^7.7.0" +      } +    }, +    "@babel/helper-simple-access": { +      "version": "7.7.0", +      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.7.0.tgz", +      "integrity": "sha512-AJ7IZD7Eem3zZRuj5JtzFAptBw7pMlS3y8Qv09vaBWoFsle0d1kAn5Wq6Q9MyBXITPOKnxwkZKoAm4bopmv26g==", +      "requires": { +        "@babel/template": "^7.7.0", +        "@babel/types": "^7.7.0" +      } +    }, +    "@babel/helper-split-export-declaration": { +      "version": "7.7.0", +      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.0.tgz", +      "integrity": "sha512-HgYSI8rH08neWlAH3CcdkFg9qX9YsZysZI5GD8LjhQib/mM0jGOZOVkoUiiV2Hu978fRtjtsGsW6w0pKHUWtqA==", +      "requires": { +        "@babel/types": "^7.7.0" +      } +    }, +    "@babel/helper-wrap-function": { +      "version": "7.7.0", +      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.7.0.tgz", +      "integrity": "sha512-sd4QjeMgQqzshSjecZjOp8uKfUtnpmCyQhKQrVJBBgeHAB/0FPi33h3AbVlVp07qQtMD4QgYSzaMI7VwncNK/w==", +      "requires": { +        "@babel/helper-function-name": "^7.7.0", +        "@babel/template": "^7.7.0", +        "@babel/traverse": "^7.7.0", +        "@babel/types": "^7.7.0" +      } +    }, +    "@babel/helpers": { +      "version": "7.7.0", +      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.7.0.tgz", +      "integrity": "sha512-VnNwL4YOhbejHb7x/b5F39Zdg5vIQpUUNzJwx0ww1EcVRt41bbGRZWhAURrfY32T5zTT3qwNOQFWpn+P0i0a2g==", +      "requires": { +        "@babel/template": "^7.7.0", +        "@babel/traverse": "^7.7.0", +        "@babel/types": "^7.7.0" +      } +    }, +    "@babel/highlight": { +      "version": "7.5.0", +      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", +      "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", +      "requires": { +        "chalk": "^2.0.0", +        "esutils": "^2.0.2", +        "js-tokens": "^4.0.0" +      } +    }, +    "@babel/parser": { +      "version": "7.7.3", +      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.3.tgz", +      "integrity": "sha512-bqv+iCo9i+uLVbI0ILzKkvMorqxouI+GbV13ivcARXn9NNEabi2IEz912IgNpT/60BNXac5dgcfjb94NjsF33A==" +    }, +    "@babel/plugin-proposal-async-generator-functions": { +      "version": "7.7.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.7.0.tgz", +      "integrity": "sha512-ot/EZVvf3mXtZq0Pd0+tSOfGWMizqmOohXmNZg6LNFjHOV+wOPv7BvVYh8oPR8LhpIP3ye8nNooKL50YRWxpYA==", +      "requires": { +        "@babel/helper-plugin-utils": "^7.0.0", +        "@babel/helper-remap-async-to-generator": "^7.7.0", +        "@babel/plugin-syntax-async-generators": "^7.2.0" +      } +    }, +    "@babel/plugin-proposal-class-properties": { +      "version": "7.5.5", +      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.5.5.tgz", +      "integrity": "sha512-AF79FsnWFxjlaosgdi421vmYG6/jg79bVD0dpD44QdgobzHKuLZ6S3vl8la9qIeSwGi8i1fS0O1mfuDAAdo1/A==", +      "requires": { +        "@babel/helper-create-class-features-plugin": "^7.5.5", +        "@babel/helper-plugin-utils": "^7.0.0" +      } +    }, +    "@babel/plugin-proposal-decorators": { +      "version": "7.6.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.6.0.tgz", +      "integrity": "sha512-ZSyYw9trQI50sES6YxREXKu+4b7MAg6Qx2cvyDDYjP2Hpzd3FleOUwC9cqn1+za8d0A2ZU8SHujxFao956efUg==", +      "requires": { +        "@babel/helper-create-class-features-plugin": "^7.6.0", +        "@babel/helper-plugin-utils": "^7.0.0", +        "@babel/plugin-syntax-decorators": "^7.2.0" +      } +    }, +    "@babel/plugin-proposal-dynamic-import": { +      "version": "7.7.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.7.0.tgz", +      "integrity": "sha512-7poL3Xi+QFPC7sGAzEIbXUyYzGJwbc2+gSD0AkiC5k52kH2cqHdqxm5hNFfLW3cRSTcx9bN0Fl7/6zWcLLnKAQ==", +      "requires": { +        "@babel/helper-plugin-utils": "^7.0.0", +        "@babel/plugin-syntax-dynamic-import": "^7.2.0" +      } +    }, +    "@babel/plugin-proposal-json-strings": { +      "version": "7.2.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz", +      "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==", +      "requires": { +        "@babel/helper-plugin-utils": "^7.0.0", +        "@babel/plugin-syntax-json-strings": "^7.2.0" +      } +    }, +    "@babel/plugin-proposal-object-rest-spread": { +      "version": "7.6.2", +      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.6.2.tgz", +      "integrity": "sha512-LDBXlmADCsMZV1Y9OQwMc0MyGZ8Ta/zlD9N67BfQT8uYwkRswiu2hU6nJKrjrt/58aH/vqfQlR/9yId/7A2gWw==", +      "requires": { +        "@babel/helper-plugin-utils": "^7.0.0", +        "@babel/plugin-syntax-object-rest-spread": "^7.2.0" +      } +    }, +    "@babel/plugin-proposal-optional-catch-binding": { +      "version": "7.2.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz", +      "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==", +      "requires": { +        "@babel/helper-plugin-utils": "^7.0.0", +        "@babel/plugin-syntax-optional-catch-binding": "^7.2.0" +      } +    }, +    "@babel/plugin-proposal-unicode-property-regex": { +      "version": "7.7.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.0.tgz", +      "integrity": "sha512-mk34H+hp7kRBWJOOAR0ZMGCydgKMD4iN9TpDRp3IIcbunltxEY89XSimc6WbtSLCDrwcdy/EEw7h5CFCzxTchw==", +      "requires": { +        "@babel/helper-create-regexp-features-plugin": "^7.7.0", +        "@babel/helper-plugin-utils": "^7.0.0" +      } +    }, +    "@babel/plugin-syntax-async-generators": { +      "version": "7.2.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz", +      "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==", +      "requires": { +        "@babel/helper-plugin-utils": "^7.0.0" +      } +    }, +    "@babel/plugin-syntax-decorators": { +      "version": "7.2.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.2.0.tgz", +      "integrity": "sha512-38QdqVoXdHUQfTpZo3rQwqQdWtCn5tMv4uV6r2RMfTqNBuv4ZBhz79SfaQWKTVmxHjeFv/DnXVC/+agHCklYWA==", +      "requires": { +        "@babel/helper-plugin-utils": "^7.0.0" +      } +    }, +    "@babel/plugin-syntax-dynamic-import": { +      "version": "7.2.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz", +      "integrity": "sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==", +      "requires": { +        "@babel/helper-plugin-utils": "^7.0.0" +      } +    }, +    "@babel/plugin-syntax-flow": { +      "version": "7.7.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.7.0.tgz", +      "integrity": "sha512-vQMV07p+L+jZeUnvX3pEJ9EiXGCjB5CTTvsirFD9rpEuATnoAvLBLoYbw1v5tyn3d2XxSuvEKi8cV3KqYUa0vQ==", +      "requires": { +        "@babel/helper-plugin-utils": "^7.0.0" +      } +    }, +    "@babel/plugin-syntax-json-strings": { +      "version": "7.2.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz", +      "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==", +      "requires": { +        "@babel/helper-plugin-utils": "^7.0.0" +      } +    }, +    "@babel/plugin-syntax-jsx": { +      "version": "7.2.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz", +      "integrity": "sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw==", +      "requires": { +        "@babel/helper-plugin-utils": "^7.0.0" +      } +    }, +    "@babel/plugin-syntax-object-rest-spread": { +      "version": "7.2.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", +      "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", +      "requires": { +        "@babel/helper-plugin-utils": "^7.0.0" +      } +    }, +    "@babel/plugin-syntax-optional-catch-binding": { +      "version": "7.2.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz", +      "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==", +      "requires": { +        "@babel/helper-plugin-utils": "^7.0.0" +      } +    }, +    "@babel/plugin-syntax-top-level-await": { +      "version": "7.7.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.7.0.tgz", +      "integrity": "sha512-hi8FUNiFIY1fnUI2n1ViB1DR0R4QeK4iHcTlW6aJkrPoTdb8Rf1EMQ6GT3f67DDkYyWgew9DFoOZ6gOoEsdzTA==", +      "requires": { +        "@babel/helper-plugin-utils": "^7.0.0" +      } +    }, +    "@babel/plugin-syntax-typescript": { +      "version": "7.3.3", +      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.3.3.tgz", +      "integrity": "sha512-dGwbSMA1YhVS8+31CnPR7LB4pcbrzcV99wQzby4uAfrkZPYZlQ7ImwdpzLqi6Z6IL02b8IAL379CaMwo0x5Lag==", +      "requires": { +        "@babel/helper-plugin-utils": "^7.0.0" +      } +    }, +    "@babel/plugin-transform-arrow-functions": { +      "version": "7.2.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz", +      "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==", +      "requires": { +        "@babel/helper-plugin-utils": "^7.0.0" +      } +    }, +    "@babel/plugin-transform-async-to-generator": { +      "version": "7.7.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.7.0.tgz", +      "integrity": "sha512-vLI2EFLVvRBL3d8roAMqtVY0Bm9C1QzLkdS57hiKrjUBSqsQYrBsMCeOg/0KK7B0eK9V71J5mWcha9yyoI2tZw==", +      "requires": { +        "@babel/helper-module-imports": "^7.7.0", +        "@babel/helper-plugin-utils": "^7.0.0", +        "@babel/helper-remap-async-to-generator": "^7.7.0" +      } +    }, +    "@babel/plugin-transform-block-scoped-functions": { +      "version": "7.2.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz", +      "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==", +      "requires": { +        "@babel/helper-plugin-utils": "^7.0.0" +      } +    }, +    "@babel/plugin-transform-block-scoping": { +      "version": "7.6.3", +      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.3.tgz", +      "integrity": "sha512-7hvrg75dubcO3ZI2rjYTzUrEuh1E9IyDEhhB6qfcooxhDA33xx2MasuLVgdxzcP6R/lipAC6n9ub9maNW6RKdw==", +      "requires": { +        "@babel/helper-plugin-utils": "^7.0.0", +        "lodash": "^4.17.13" +      } +    }, +    "@babel/plugin-transform-classes": { +      "version": "7.7.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.7.0.tgz", +      "integrity": "sha512-/b3cKIZwGeUesZheU9jNYcwrEA7f/Bo4IdPmvp7oHgvks2majB5BoT5byAql44fiNQYOPzhk2w8DbgfuafkMoA==", +      "requires": { +        "@babel/helper-annotate-as-pure": "^7.7.0", +        "@babel/helper-define-map": "^7.7.0", +        "@babel/helper-function-name": "^7.7.0", +        "@babel/helper-optimise-call-expression": "^7.7.0", +        "@babel/helper-plugin-utils": "^7.0.0", +        "@babel/helper-replace-supers": "^7.7.0", +        "@babel/helper-split-export-declaration": "^7.7.0", +        "globals": "^11.1.0" +      } +    }, +    "@babel/plugin-transform-computed-properties": { +      "version": "7.2.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz", +      "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==", +      "requires": { +        "@babel/helper-plugin-utils": "^7.0.0" +      } +    }, +    "@babel/plugin-transform-destructuring": { +      "version": "7.6.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.6.0.tgz", +      "integrity": "sha512-2bGIS5P1v4+sWTCnKNDZDxbGvEqi0ijeqM/YqHtVGrvG2y0ySgnEEhXErvE9dA0bnIzY9bIzdFK0jFA46ASIIQ==", +      "requires": { +        "@babel/helper-plugin-utils": "^7.0.0" +      } +    }, +    "@babel/plugin-transform-dotall-regex": { +      "version": "7.7.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.0.tgz", +      "integrity": "sha512-3QQlF7hSBnSuM1hQ0pS3pmAbWLax/uGNCbPBND9y+oJ4Y776jsyujG2k0Sn2Aj2a0QwVOiOFL5QVPA7spjvzSA==", +      "requires": { +        "@babel/helper-create-regexp-features-plugin": "^7.7.0", +        "@babel/helper-plugin-utils": "^7.0.0" +      } +    }, +    "@babel/plugin-transform-duplicate-keys": { +      "version": "7.5.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz", +      "integrity": "sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ==", +      "requires": { +        "@babel/helper-plugin-utils": "^7.0.0" +      } +    }, +    "@babel/plugin-transform-exponentiation-operator": { +      "version": "7.2.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz", +      "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==", +      "requires": { +        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", +        "@babel/helper-plugin-utils": "^7.0.0" +      } +    }, +    "@babel/plugin-transform-flow-strip-types": { +      "version": "7.4.4", +      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.4.4.tgz", +      "integrity": "sha512-WyVedfeEIILYEaWGAUWzVNyqG4sfsNooMhXWsu/YzOvVGcsnPb5PguysjJqI3t3qiaYj0BR8T2f5njdjTGe44Q==", +      "requires": { +        "@babel/helper-plugin-utils": "^7.0.0", +        "@babel/plugin-syntax-flow": "^7.2.0" +      } +    }, +    "@babel/plugin-transform-for-of": { +      "version": "7.4.4", +      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz", +      "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==", +      "requires": { +        "@babel/helper-plugin-utils": "^7.0.0" +      } +    }, +    "@babel/plugin-transform-function-name": { +      "version": "7.7.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.7.0.tgz", +      "integrity": "sha512-P5HKu0d9+CzZxP5jcrWdpe7ZlFDe24bmqP6a6X8BHEBl/eizAsY8K6LX8LASZL0Jxdjm5eEfzp+FIrxCm/p8bA==", +      "requires": { +        "@babel/helper-function-name": "^7.7.0", +        "@babel/helper-plugin-utils": "^7.0.0" +      } +    }, +    "@babel/plugin-transform-literals": { +      "version": "7.2.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz", +      "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==", +      "requires": { +        "@babel/helper-plugin-utils": "^7.0.0" +      } +    }, +    "@babel/plugin-transform-member-expression-literals": { +      "version": "7.2.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz", +      "integrity": "sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==", +      "requires": { +        "@babel/helper-plugin-utils": "^7.0.0" +      } +    }, +    "@babel/plugin-transform-modules-amd": { +      "version": "7.5.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz", +      "integrity": "sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg==", +      "requires": { +        "@babel/helper-module-transforms": "^7.1.0", +        "@babel/helper-plugin-utils": "^7.0.0", +        "babel-plugin-dynamic-import-node": "^2.3.0" +      } +    }, +    "@babel/plugin-transform-modules-commonjs": { +      "version": "7.7.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.0.tgz", +      "integrity": "sha512-KEMyWNNWnjOom8vR/1+d+Ocz/mILZG/eyHHO06OuBQ2aNhxT62fr4y6fGOplRx+CxCSp3IFwesL8WdINfY/3kg==", +      "requires": { +        "@babel/helper-module-transforms": "^7.7.0", +        "@babel/helper-plugin-utils": "^7.0.0", +        "@babel/helper-simple-access": "^7.7.0", +        "babel-plugin-dynamic-import-node": "^2.3.0" +      } +    }, +    "@babel/plugin-transform-modules-systemjs": { +      "version": "7.7.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.7.0.tgz", +      "integrity": "sha512-ZAuFgYjJzDNv77AjXRqzQGlQl4HdUM6j296ee4fwKVZfhDR9LAGxfvXjBkb06gNETPnN0sLqRm9Gxg4wZH6dXg==", +      "requires": { +        "@babel/helper-hoist-variables": "^7.7.0", +        "@babel/helper-plugin-utils": "^7.0.0", +        "babel-plugin-dynamic-import-node": "^2.3.0" +      } +    }, +    "@babel/plugin-transform-modules-umd": { +      "version": "7.7.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.7.0.tgz", +      "integrity": "sha512-u7eBA03zmUswQ9LQ7Qw0/ieC1pcAkbp5OQatbWUzY1PaBccvuJXUkYzoN1g7cqp7dbTu6Dp9bXyalBvD04AANA==", +      "requires": { +        "@babel/helper-module-transforms": "^7.7.0", +        "@babel/helper-plugin-utils": "^7.0.0" +      } +    }, +    "@babel/plugin-transform-named-capturing-groups-regex": { +      "version": "7.7.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.7.0.tgz", +      "integrity": "sha512-+SicSJoKouPctL+j1pqktRVCgy+xAch1hWWTMy13j0IflnyNjaoskj+DwRQFimHbLqO3sq2oN2CXMvXq3Bgapg==", +      "requires": { +        "@babel/helper-create-regexp-features-plugin": "^7.7.0" +      } +    }, +    "@babel/plugin-transform-new-target": { +      "version": "7.4.4", +      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz", +      "integrity": "sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==", +      "requires": { +        "@babel/helper-plugin-utils": "^7.0.0" +      } +    }, +    "@babel/plugin-transform-object-super": { +      "version": "7.5.5", +      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz", +      "integrity": "sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ==", +      "requires": { +        "@babel/helper-plugin-utils": "^7.0.0", +        "@babel/helper-replace-supers": "^7.5.5" +      } +    }, +    "@babel/plugin-transform-parameters": { +      "version": "7.4.4", +      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz", +      "integrity": "sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==", +      "requires": { +        "@babel/helper-call-delegate": "^7.4.4", +        "@babel/helper-get-function-arity": "^7.0.0", +        "@babel/helper-plugin-utils": "^7.0.0" +      } +    }, +    "@babel/plugin-transform-property-literals": { +      "version": "7.2.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz", +      "integrity": "sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==", +      "requires": { +        "@babel/helper-plugin-utils": "^7.0.0" +      } +    }, +    "@babel/plugin-transform-react-constant-elements": { +      "version": "7.6.3", +      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.6.3.tgz", +      "integrity": "sha512-1/YogSSU7Tby9rq2VCmhuRg+6pxsHy2rI7w/oo8RKoBt6uBUFG+mk6x13kK+FY1/ggN92HAfg7ADd1v1+NCOKg==", +      "requires": { +        "@babel/helper-annotate-as-pure": "^7.0.0", +        "@babel/helper-plugin-utils": "^7.0.0" +      } +    }, +    "@babel/plugin-transform-react-display-name": { +      "version": "7.2.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz", +      "integrity": "sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A==", +      "requires": { +        "@babel/helper-plugin-utils": "^7.0.0" +      } +    }, +    "@babel/plugin-transform-react-jsx": { +      "version": "7.7.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.7.0.tgz", +      "integrity": "sha512-mXhBtyVB1Ujfy+0L6934jeJcSXj/VCg6whZzEcgiiZHNS0PGC7vUCsZDQCxxztkpIdF+dY1fUMcjAgEOC3ZOMQ==", +      "requires": { +        "@babel/helper-builder-react-jsx": "^7.7.0", +        "@babel/helper-plugin-utils": "^7.0.0", +        "@babel/plugin-syntax-jsx": "^7.2.0" +      } +    }, +    "@babel/plugin-transform-react-jsx-self": { +      "version": "7.2.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.2.0.tgz", +      "integrity": "sha512-v6S5L/myicZEy+jr6ielB0OR8h+EH/1QFx/YJ7c7Ua+7lqsjj/vW6fD5FR9hB/6y7mGbfT4vAURn3xqBxsUcdg==", +      "requires": { +        "@babel/helper-plugin-utils": "^7.0.0", +        "@babel/plugin-syntax-jsx": "^7.2.0" +      } +    }, +    "@babel/plugin-transform-react-jsx-source": { +      "version": "7.5.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.5.0.tgz", +      "integrity": "sha512-58Q+Jsy4IDCZx7kqEZuSDdam/1oW8OdDX8f+Loo6xyxdfg1yF0GE2XNJQSTZCaMol93+FBzpWiPEwtbMloAcPg==", +      "requires": { +        "@babel/helper-plugin-utils": "^7.0.0", +        "@babel/plugin-syntax-jsx": "^7.2.0" +      } +    }, +    "@babel/plugin-transform-regenerator": { +      "version": "7.7.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.7.0.tgz", +      "integrity": "sha512-AXmvnC+0wuj/cFkkS/HFHIojxH3ffSXE+ttulrqWjZZRaUOonfJc60e1wSNT4rV8tIunvu/R3wCp71/tLAa9xg==", +      "requires": { +        "regenerator-transform": "^0.14.0" +      } +    }, +    "@babel/plugin-transform-reserved-words": { +      "version": "7.2.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz", +      "integrity": "sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==", +      "requires": { +        "@babel/helper-plugin-utils": "^7.0.0" +      } +    }, +    "@babel/plugin-transform-runtime": { +      "version": "7.6.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.6.0.tgz", +      "integrity": "sha512-Da8tMf7uClzwUm/pnJ1S93m/aRXmoYNDD7TkHua8xBDdaAs54uZpTWvEt6NGwmoVMb9mZbntfTqmG2oSzN/7Vg==", +      "requires": { +        "@babel/helper-module-imports": "^7.0.0", +        "@babel/helper-plugin-utils": "^7.0.0", +        "resolve": "^1.8.1", +        "semver": "^5.5.1" +      }, +      "dependencies": { +        "semver": { +          "version": "5.7.1", +          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", +          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" +        } +      } +    }, +    "@babel/plugin-transform-shorthand-properties": { +      "version": "7.2.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz", +      "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==", +      "requires": { +        "@babel/helper-plugin-utils": "^7.0.0" +      } +    }, +    "@babel/plugin-transform-spread": { +      "version": "7.6.2", +      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.6.2.tgz", +      "integrity": "sha512-DpSvPFryKdK1x+EDJYCy28nmAaIMdxmhot62jAXF/o99iA33Zj2Lmcp3vDmz+MUh0LNYVPvfj5iC3feb3/+PFg==", +      "requires": { +        "@babel/helper-plugin-utils": "^7.0.0" +      } +    }, +    "@babel/plugin-transform-sticky-regex": { +      "version": "7.2.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz", +      "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==", +      "requires": { +        "@babel/helper-plugin-utils": "^7.0.0", +        "@babel/helper-regex": "^7.0.0" +      } +    }, +    "@babel/plugin-transform-template-literals": { +      "version": "7.4.4", +      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz", +      "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==", +      "requires": { +        "@babel/helper-annotate-as-pure": "^7.0.0", +        "@babel/helper-plugin-utils": "^7.0.0" +      } +    }, +    "@babel/plugin-transform-typeof-symbol": { +      "version": "7.2.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz", +      "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==", +      "requires": { +        "@babel/helper-plugin-utils": "^7.0.0" +      } +    }, +    "@babel/plugin-transform-typescript": { +      "version": "7.7.2", +      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.7.2.tgz", +      "integrity": "sha512-UWhDaJRqdPUtdK1s0sKYdoRuqK0NepjZto2UZltvuCgMoMZmdjhgz5hcRokie/3aYEaSz3xvusyoayVaq4PjRg==", +      "requires": { +        "@babel/helper-create-class-features-plugin": "^7.7.0", +        "@babel/helper-plugin-utils": "^7.0.0", +        "@babel/plugin-syntax-typescript": "^7.2.0" +      } +    }, +    "@babel/plugin-transform-unicode-regex": { +      "version": "7.7.0", +      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.0.tgz", +      "integrity": "sha512-RrThb0gdrNwFAqEAAx9OWgtx6ICK69x7i9tCnMdVrxQwSDp/Abu9DXFU5Hh16VP33Rmxh04+NGW28NsIkFvFKA==", +      "requires": { +        "@babel/helper-create-regexp-features-plugin": "^7.7.0", +        "@babel/helper-plugin-utils": "^7.0.0" +      } +    }, +    "@babel/preset-env": { +      "version": "7.7.1", +      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.7.1.tgz", +      "integrity": "sha512-/93SWhi3PxcVTDpSqC+Dp4YxUu3qZ4m7I76k0w73wYfn7bGVuRIO4QUz95aJksbS+AD1/mT1Ie7rbkT0wSplaA==", +      "requires": { +        "@babel/helper-module-imports": "^7.7.0", +        "@babel/helper-plugin-utils": "^7.0.0", +        "@babel/plugin-proposal-async-generator-functions": "^7.7.0", +        "@babel/plugin-proposal-dynamic-import": "^7.7.0", +        "@babel/plugin-proposal-json-strings": "^7.2.0", +        "@babel/plugin-proposal-object-rest-spread": "^7.6.2", +        "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", +        "@babel/plugin-proposal-unicode-property-regex": "^7.7.0", +        "@babel/plugin-syntax-async-generators": "^7.2.0", +        "@babel/plugin-syntax-dynamic-import": "^7.2.0", +        "@babel/plugin-syntax-json-strings": "^7.2.0", +        "@babel/plugin-syntax-object-rest-spread": "^7.2.0", +        "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", +        "@babel/plugin-syntax-top-level-await": "^7.7.0", +        "@babel/plugin-transform-arrow-functions": "^7.2.0", +        "@babel/plugin-transform-async-to-generator": "^7.7.0", +        "@babel/plugin-transform-block-scoped-functions": "^7.2.0", +        "@babel/plugin-transform-block-scoping": "^7.6.3", +        "@babel/plugin-transform-classes": "^7.7.0", +        "@babel/plugin-transform-computed-properties": "^7.2.0", +        "@babel/plugin-transform-destructuring": "^7.6.0", +        "@babel/plugin-transform-dotall-regex": "^7.7.0", +        "@babel/plugin-transform-duplicate-keys": "^7.5.0", +        "@babel/plugin-transform-exponentiation-operator": "^7.2.0", +        "@babel/plugin-transform-for-of": "^7.4.4", +        "@babel/plugin-transform-function-name": "^7.7.0", +        "@babel/plugin-transform-literals": "^7.2.0", +        "@babel/plugin-transform-member-expression-literals": "^7.2.0", +        "@babel/plugin-transform-modules-amd": "^7.5.0", +        "@babel/plugin-transform-modules-commonjs": "^7.7.0", +        "@babel/plugin-transform-modules-systemjs": "^7.7.0", +        "@babel/plugin-transform-modules-umd": "^7.7.0", +        "@babel/plugin-transform-named-capturing-groups-regex": "^7.7.0", +        "@babel/plugin-transform-new-target": "^7.4.4", +        "@babel/plugin-transform-object-super": "^7.5.5", +        "@babel/plugin-transform-parameters": "^7.4.4", +        "@babel/plugin-transform-property-literals": "^7.2.0", +        "@babel/plugin-transform-regenerator": "^7.7.0", +        "@babel/plugin-transform-reserved-words": "^7.2.0", +        "@babel/plugin-transform-shorthand-properties": "^7.2.0", +        "@babel/plugin-transform-spread": "^7.6.2", +        "@babel/plugin-transform-sticky-regex": "^7.2.0", +        "@babel/plugin-transform-template-literals": "^7.4.4", +        "@babel/plugin-transform-typeof-symbol": "^7.2.0", +        "@babel/plugin-transform-unicode-regex": "^7.7.0", +        "@babel/types": "^7.7.1", +        "browserslist": "^4.6.0", +        "core-js-compat": "^3.1.1", +        "invariant": "^2.2.2", +        "js-levenshtein": "^1.1.3", +        "semver": "^5.5.0" +      }, +      "dependencies": { +        "semver": { +          "version": "5.7.1", +          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", +          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" +        } +      } +    }, +    "@babel/preset-react": { +      "version": "7.7.0", +      "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.7.0.tgz", +      "integrity": "sha512-IXXgSUYBPHUGhUkH+89TR6faMcBtuMW0h5OHbMuVbL3/5wK2g6a2M2BBpkLa+Kw0sAHiZ9dNVgqJMDP/O4GRBA==", +      "requires": { +        "@babel/helper-plugin-utils": "^7.0.0", +        "@babel/plugin-transform-react-display-name": "^7.0.0", +        "@babel/plugin-transform-react-jsx": "^7.7.0", +        "@babel/plugin-transform-react-jsx-self": "^7.0.0", +        "@babel/plugin-transform-react-jsx-source": "^7.0.0" +      } +    }, +    "@babel/preset-typescript": { +      "version": "7.6.0", +      "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.6.0.tgz", +      "integrity": "sha512-4xKw3tTcCm0qApyT6PqM9qniseCE79xGHiUnNdKGdxNsGUc2X7WwZybqIpnTmoukg3nhPceI5KPNzNqLNeIJww==", +      "requires": { +        "@babel/helper-plugin-utils": "^7.0.0", +        "@babel/plugin-transform-typescript": "^7.6.0" +      } +    }, +    "@babel/runtime": { +      "version": "7.6.0", +      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.0.tgz", +      "integrity": "sha512-89eSBLJsxNxOERC0Op4vd+0Bqm6wRMqMbFtV3i0/fbaWw/mJ8Q3eBvgX0G4SyrOOLCtbu98HspF8o09MRT+KzQ==", +      "requires": { +        "regenerator-runtime": "^0.13.2" +      } +    }, +    "@babel/template": { +      "version": "7.7.0", +      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.0.tgz", +      "integrity": "sha512-OKcwSYOW1mhWbnTBgQY5lvg1Fxg+VyfQGjcBduZFljfc044J5iDlnDSfhQ867O17XHiSCxYHUxHg2b7ryitbUQ==", +      "requires": { +        "@babel/code-frame": "^7.0.0", +        "@babel/parser": "^7.7.0", +        "@babel/types": "^7.7.0" +      } +    }, +    "@babel/traverse": { +      "version": "7.7.2", +      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.2.tgz", +      "integrity": "sha512-TM01cXib2+rgIZrGJOLaHV/iZUAxf4A0dt5auY6KNZ+cm6aschuJGqKJM3ROTt3raPUdIDk9siAufIFEleRwtw==", +      "requires": { +        "@babel/code-frame": "^7.5.5", +        "@babel/generator": "^7.7.2", +        "@babel/helper-function-name": "^7.7.0", +        "@babel/helper-split-export-declaration": "^7.7.0", +        "@babel/parser": "^7.7.2", +        "@babel/types": "^7.7.2", +        "debug": "^4.1.0", +        "globals": "^11.1.0", +        "lodash": "^4.17.13" +      } +    }, +    "@babel/types": { +      "version": "7.7.2", +      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.2.tgz", +      "integrity": "sha512-YTf6PXoh3+eZgRCBzzP25Bugd2ngmpQVrk7kXX0i5N9BO7TFBtIgZYs7WtxtOGs8e6A4ZI7ECkbBCEHeXocvOA==", +      "requires": { +        "esutils": "^2.0.2", +        "lodash": "^4.17.13", +        "to-fast-properties": "^2.0.0" +      } +    }, +    "@cnakazawa/watch": { +      "version": "1.0.3", +      "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz", +      "integrity": "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==", +      "requires": { +        "exec-sh": "^0.3.2", +        "minimist": "^1.2.0" +      } +    }, +    "@csstools/convert-colors": { +      "version": "1.4.0", +      "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", +      "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==" +    }, +    "@csstools/normalize.css": { +      "version": "9.0.1", +      "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-9.0.1.tgz", +      "integrity": "sha512-6It2EVfGskxZCQhuykrfnALg7oVeiI6KclWSmGDqB0AiInVrTGB9Jp9i4/Ad21u9Jde/voVQz6eFX/eSg/UsPA==" +    }, +    "@emotion/hash": { +      "version": "0.7.3", +      "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.7.3.tgz", +      "integrity": "sha512-14ZVlsB9akwvydAdaEnVnvqu6J2P6ySv39hYyl/aoB6w/V+bXX0tay8cF6paqbgZsN2n5Xh15uF4pE+GvE+itw==" +    }, +    "@fortawesome/fontawesome-common-types": { +      "version": "0.2.25", +      "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.25.tgz", +      "integrity": "sha512-3RuZPDuuPELd7RXtUqTCfed14fcny9UiPOkdr2i+cYxBoTOfQgxcDoq77fHiiHcgWuo1LoBUpvGxFF1H/y7s3Q==" +    }, +    "@fortawesome/fontawesome-svg-core": { +      "version": "1.2.25", +      "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.25.tgz", +      "integrity": "sha512-MotKnn53JKqbkLQiwcZSBJVYtTgIKFbh7B8+kd05TSnfKYPFmjKKI59o2fpz5t0Hzl35vVGU6+N4twoOpZUrqA==", +      "requires": { +        "@fortawesome/fontawesome-common-types": "^0.2.25" +      } +    }, +    "@fortawesome/free-regular-svg-icons": { +      "version": "5.11.2", +      "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-5.11.2.tgz", +      "integrity": "sha512-k0vbThRv9AvnXYBWi1gn1rFW4X7co/aFkbm0ZNmAR5PoWb9vY9EDDDobg8Ay4ISaXtCPypvJ0W1FWkSpLQwZ6w==", +      "requires": { +        "@fortawesome/fontawesome-common-types": "^0.2.25" +      } +    }, +    "@fortawesome/free-solid-svg-icons": { +      "version": "5.11.2", +      "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.11.2.tgz", +      "integrity": "sha512-zBue4i0PAZJUXOmLBBvM7L0O7wmsDC8dFv9IhpW5QL4kT9xhhVUsYg/LX1+5KaukWq4/cbDcKT+RT1aRe543sg==", +      "requires": { +        "@fortawesome/fontawesome-common-types": "^0.2.25" +      } +    }, +    "@fortawesome/react-fontawesome": { +      "version": "0.1.7", +      "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.7.tgz", +      "integrity": "sha512-AHWSzOsHBe5vqOkrvs+CKw+8eLl+0XZsVixOWhTPpGpOA8WQUbVU6J9cmtAvTaxUU5OIf+rgxxF8ZKc3BVldxg==", +      "requires": { +        "prop-types": "^15.5.10" +      } +    }, +    "@hapi/address": { +      "version": "2.1.4", +      "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", +      "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==" +    }, +    "@hapi/bourne": { +      "version": "1.3.2", +      "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", +      "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==" +    }, +    "@hapi/hoek": { +      "version": "8.5.0", +      "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.0.tgz", +      "integrity": "sha512-7XYT10CZfPsH7j9F1Jmg1+d0ezOux2oM2GfArAzLwWe4mE2Dr3hVjsAL6+TFY49RRJlCdJDMw3nJsLFroTc8Kw==" +    }, +    "@hapi/joi": { +      "version": "15.1.1", +      "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", +      "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", +      "requires": { +        "@hapi/address": "2.x.x", +        "@hapi/bourne": "1.x.x", +        "@hapi/hoek": "8.x.x", +        "@hapi/topo": "3.x.x" +      } +    }, +    "@hapi/topo": { +      "version": "3.1.6", +      "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", +      "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", +      "requires": { +        "@hapi/hoek": "^8.3.0" +      } +    }, +    "@jest/console": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", +      "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", +      "requires": { +        "@jest/source-map": "^24.9.0", +        "chalk": "^2.0.1", +        "slash": "^2.0.0" +      } +    }, +    "@jest/core": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.9.0.tgz", +      "integrity": "sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==", +      "requires": { +        "@jest/console": "^24.7.1", +        "@jest/reporters": "^24.9.0", +        "@jest/test-result": "^24.9.0", +        "@jest/transform": "^24.9.0", +        "@jest/types": "^24.9.0", +        "ansi-escapes": "^3.0.0", +        "chalk": "^2.0.1", +        "exit": "^0.1.2", +        "graceful-fs": "^4.1.15", +        "jest-changed-files": "^24.9.0", +        "jest-config": "^24.9.0", +        "jest-haste-map": "^24.9.0", +        "jest-message-util": "^24.9.0", +        "jest-regex-util": "^24.3.0", +        "jest-resolve": "^24.9.0", +        "jest-resolve-dependencies": "^24.9.0", +        "jest-runner": "^24.9.0", +        "jest-runtime": "^24.9.0", +        "jest-snapshot": "^24.9.0", +        "jest-util": "^24.9.0", +        "jest-validate": "^24.9.0", +        "jest-watcher": "^24.9.0", +        "micromatch": "^3.1.10", +        "p-each-series": "^1.0.0", +        "realpath-native": "^1.1.0", +        "rimraf": "^2.5.4", +        "slash": "^2.0.0", +        "strip-ansi": "^5.0.0" +      }, +      "dependencies": { +        "ansi-escapes": { +          "version": "3.2.0", +          "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", +          "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" +        } +      } +    }, +    "@jest/environment": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz", +      "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==", +      "requires": { +        "@jest/fake-timers": "^24.9.0", +        "@jest/transform": "^24.9.0", +        "@jest/types": "^24.9.0", +        "jest-mock": "^24.9.0" +      } +    }, +    "@jest/fake-timers": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", +      "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", +      "requires": { +        "@jest/types": "^24.9.0", +        "jest-message-util": "^24.9.0", +        "jest-mock": "^24.9.0" +      } +    }, +    "@jest/reporters": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.9.0.tgz", +      "integrity": "sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==", +      "requires": { +        "@jest/environment": "^24.9.0", +        "@jest/test-result": "^24.9.0", +        "@jest/transform": "^24.9.0", +        "@jest/types": "^24.9.0", +        "chalk": "^2.0.1", +        "exit": "^0.1.2", +        "glob": "^7.1.2", +        "istanbul-lib-coverage": "^2.0.2", +        "istanbul-lib-instrument": "^3.0.1", +        "istanbul-lib-report": "^2.0.4", +        "istanbul-lib-source-maps": "^3.0.1", +        "istanbul-reports": "^2.2.6", +        "jest-haste-map": "^24.9.0", +        "jest-resolve": "^24.9.0", +        "jest-runtime": "^24.9.0", +        "jest-util": "^24.9.0", +        "jest-worker": "^24.6.0", +        "node-notifier": "^5.4.2", +        "slash": "^2.0.0", +        "source-map": "^0.6.0", +        "string-length": "^2.0.0" +      }, +      "dependencies": { +        "source-map": { +          "version": "0.6.1", +          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", +          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" +        } +      } +    }, +    "@jest/source-map": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", +      "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", +      "requires": { +        "callsites": "^3.0.0", +        "graceful-fs": "^4.1.15", +        "source-map": "^0.6.0" +      }, +      "dependencies": { +        "callsites": { +          "version": "3.1.0", +          "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", +          "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" +        }, +        "source-map": { +          "version": "0.6.1", +          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", +          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" +        } +      } +    }, +    "@jest/test-result": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", +      "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", +      "requires": { +        "@jest/console": "^24.9.0", +        "@jest/types": "^24.9.0", +        "@types/istanbul-lib-coverage": "^2.0.0" +      } +    }, +    "@jest/test-sequencer": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz", +      "integrity": "sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==", +      "requires": { +        "@jest/test-result": "^24.9.0", +        "jest-haste-map": "^24.9.0", +        "jest-runner": "^24.9.0", +        "jest-runtime": "^24.9.0" +      } +    }, +    "@jest/transform": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz", +      "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==", +      "requires": { +        "@babel/core": "^7.1.0", +        "@jest/types": "^24.9.0", +        "babel-plugin-istanbul": "^5.1.0", +        "chalk": "^2.0.1", +        "convert-source-map": "^1.4.0", +        "fast-json-stable-stringify": "^2.0.0", +        "graceful-fs": "^4.1.15", +        "jest-haste-map": "^24.9.0", +        "jest-regex-util": "^24.9.0", +        "jest-util": "^24.9.0", +        "micromatch": "^3.1.10", +        "pirates": "^4.0.1", +        "realpath-native": "^1.1.0", +        "slash": "^2.0.0", +        "source-map": "^0.6.1", +        "write-file-atomic": "2.4.1" +      }, +      "dependencies": { +        "source-map": { +          "version": "0.6.1", +          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", +          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" +        } +      } +    }, +    "@jest/types": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", +      "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", +      "requires": { +        "@types/istanbul-lib-coverage": "^2.0.0", +        "@types/istanbul-reports": "^1.1.1", +        "@types/yargs": "^13.0.0" +      } +    }, +    "@material-ui/core": { +      "version": "4.7.0", +      "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-4.7.0.tgz", +      "integrity": "sha512-mwLehUo0Q9ZxjuWo7J1uy1/Grh3nRxlOAaWJ3EtKeJP2HwqlSy8bWrcvRQYlapaYIPXa5jN8zWbTwi8Pk30VQg==", +      "requires": { +        "@babel/runtime": "^7.4.4", +        "@material-ui/styles": "^4.6.0", +        "@material-ui/system": "^4.5.2", +        "@material-ui/types": "^4.1.1", +        "@material-ui/utils": "^4.5.2", +        "@types/react-transition-group": "^4.2.0", +        "clsx": "^1.0.2", +        "convert-css-length": "^2.0.1", +        "hoist-non-react-statics": "^3.2.1", +        "normalize-scroll-left": "^0.2.0", +        "popper.js": "^1.14.1", +        "prop-types": "^15.7.2", +        "react-transition-group": "^4.3.0" +      } +    }, +    "@material-ui/icons": { +      "version": "4.5.1", +      "resolved": "https://registry.npmjs.org/@material-ui/icons/-/icons-4.5.1.tgz", +      "integrity": "sha512-YZ/BgJbXX4a0gOuKWb30mBaHaoXRqPanlePam83JQPZ/y4kl+3aW0Wv9tlR70hB5EGAkEJGW5m4ktJwMgxQAeA==", +      "requires": { +        "@babel/runtime": "^7.4.4" +      } +    }, +    "@material-ui/styles": { +      "version": "4.6.0", +      "resolved": "https://registry.npmjs.org/@material-ui/styles/-/styles-4.6.0.tgz", +      "integrity": "sha512-lqqh4UEMdIYcU1Yth4pQyMTah02uAkg3NOT3MirN9FUexdL8pNA6zCHigEgDSfwmvnXyxHhxTkphfy0DRfnt9w==", +      "requires": { +        "@babel/runtime": "^7.4.4", +        "@emotion/hash": "^0.7.1", +        "@material-ui/types": "^4.1.1", +        "@material-ui/utils": "^4.5.2", +        "clsx": "^1.0.2", +        "csstype": "^2.5.2", +        "hoist-non-react-statics": "^3.2.1", +        "jss": "^10.0.0", +        "jss-plugin-camel-case": "^10.0.0", +        "jss-plugin-default-unit": "^10.0.0", +        "jss-plugin-global": "^10.0.0", +        "jss-plugin-nested": "^10.0.0", +        "jss-plugin-props-sort": "^10.0.0", +        "jss-plugin-rule-value-function": "^10.0.0", +        "jss-plugin-vendor-prefixer": "^10.0.0", +        "prop-types": "^15.7.2" +      } +    }, +    "@material-ui/system": { +      "version": "4.5.2", +      "resolved": "https://registry.npmjs.org/@material-ui/system/-/system-4.5.2.tgz", +      "integrity": "sha512-h9RWvdM9XKlHHqwiuhyvWdobptQkHli+m2jJFs7i1AI/hmGsIc4reDmS7fInhETgt/Txx7uiAIznfRNIIVHmQw==", +      "requires": { +        "@babel/runtime": "^7.4.4", +        "@material-ui/utils": "^4.5.2", +        "prop-types": "^15.7.2" +      } +    }, +    "@material-ui/types": { +      "version": "4.1.1", +      "resolved": "https://registry.npmjs.org/@material-ui/types/-/types-4.1.1.tgz", +      "integrity": "sha512-AN+GZNXytX9yxGi0JOfxHrRTbhFybjUJ05rnsBVjcB+16e466Z0Xe5IxawuOayVZgTBNDxmPKo5j4V6OnMtaSQ==", +      "requires": { +        "@types/react": "*" +      } +    }, +    "@material-ui/utils": { +      "version": "4.5.2", +      "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-4.5.2.tgz", +      "integrity": "sha512-zhbNfHd1gLa8At6RPDG7uMZubHxbY+LtM6IkSfeWi6Lo4Ax80l62YaN1QmUpO1IvGCkn/j62tQX3yObiQZrJsQ==", +      "requires": { +        "@babel/runtime": "^7.4.4", +        "prop-types": "^15.7.2", +        "react-is": "^16.8.6" +      } +    }, +    "@mrmlnc/readdir-enhanced": { +      "version": "2.2.1", +      "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", +      "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", +      "requires": { +        "call-me-maybe": "^1.0.1", +        "glob-to-regexp": "^0.3.0" +      } +    }, +    "@nodelib/fs.stat": { +      "version": "1.1.3", +      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", +      "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" +    }, +    "@svgr/babel-plugin-add-jsx-attribute": { +      "version": "4.2.0", +      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-4.2.0.tgz", +      "integrity": "sha512-j7KnilGyZzYr/jhcrSYS3FGWMZVaqyCG0vzMCwzvei0coIkczuYMcniK07nI0aHJINciujjH11T72ICW5eL5Ig==" +    }, +    "@svgr/babel-plugin-remove-jsx-attribute": { +      "version": "4.2.0", +      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-4.2.0.tgz", +      "integrity": "sha512-3XHLtJ+HbRCH4n28S7y/yZoEQnRpl0tvTZQsHqvaeNXPra+6vE5tbRliH3ox1yZYPCxrlqaJT/Mg+75GpDKlvQ==" +    }, +    "@svgr/babel-plugin-remove-jsx-empty-expression": { +      "version": "4.2.0", +      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-4.2.0.tgz", +      "integrity": "sha512-yTr2iLdf6oEuUE9MsRdvt0NmdpMBAkgK8Bjhl6epb+eQWk6abBaX3d65UZ3E3FWaOwePyUgNyNCMVG61gGCQ7w==" +    }, +    "@svgr/babel-plugin-replace-jsx-attribute-value": { +      "version": "4.2.0", +      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-4.2.0.tgz", +      "integrity": "sha512-U9m870Kqm0ko8beHawRXLGLvSi/ZMrl89gJ5BNcT452fAjtF2p4uRzXkdzvGJJJYBgx7BmqlDjBN/eCp5AAX2w==" +    }, +    "@svgr/babel-plugin-svg-dynamic-title": { +      "version": "4.3.3", +      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-4.3.3.tgz", +      "integrity": "sha512-w3Be6xUNdwgParsvxkkeZb545VhXEwjGMwExMVBIdPQJeyMQHqm9Msnb2a1teHBqUYL66qtwfhNkbj1iarCG7w==" +    }, +    "@svgr/babel-plugin-svg-em-dimensions": { +      "version": "4.2.0", +      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-4.2.0.tgz", +      "integrity": "sha512-C0Uy+BHolCHGOZ8Dnr1zXy/KgpBOkEUYY9kI/HseHVPeMbluaX3CijJr7D4C5uR8zrc1T64nnq/k63ydQuGt4w==" +    }, +    "@svgr/babel-plugin-transform-react-native-svg": { +      "version": "4.2.0", +      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-4.2.0.tgz", +      "integrity": "sha512-7YvynOpZDpCOUoIVlaaOUU87J4Z6RdD6spYN4eUb5tfPoKGSF9OG2NuhgYnq4jSkAxcpMaXWPf1cePkzmqTPNw==" +    }, +    "@svgr/babel-plugin-transform-svg-component": { +      "version": "4.2.0", +      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-4.2.0.tgz", +      "integrity": "sha512-hYfYuZhQPCBVotABsXKSCfel2slf/yvJY8heTVX1PCTaq/IgASq1IyxPPKJ0chWREEKewIU/JMSsIGBtK1KKxw==" +    }, +    "@svgr/babel-preset": { +      "version": "4.3.3", +      "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-4.3.3.tgz", +      "integrity": "sha512-6PG80tdz4eAlYUN3g5GZiUjg2FMcp+Wn6rtnz5WJG9ITGEF1pmFdzq02597Hn0OmnQuCVaBYQE1OVFAnwOl+0A==", +      "requires": { +        "@svgr/babel-plugin-add-jsx-attribute": "^4.2.0", +        "@svgr/babel-plugin-remove-jsx-attribute": "^4.2.0", +        "@svgr/babel-plugin-remove-jsx-empty-expression": "^4.2.0", +        "@svgr/babel-plugin-replace-jsx-attribute-value": "^4.2.0", +        "@svgr/babel-plugin-svg-dynamic-title": "^4.3.3", +        "@svgr/babel-plugin-svg-em-dimensions": "^4.2.0", +        "@svgr/babel-plugin-transform-react-native-svg": "^4.2.0", +        "@svgr/babel-plugin-transform-svg-component": "^4.2.0" +      } +    }, +    "@svgr/core": { +      "version": "4.3.3", +      "resolved": "https://registry.npmjs.org/@svgr/core/-/core-4.3.3.tgz", +      "integrity": "sha512-qNuGF1QON1626UCaZamWt5yedpgOytvLj5BQZe2j1k1B8DUG4OyugZyfEwBeXozCUwhLEpsrgPrE+eCu4fY17w==", +      "requires": { +        "@svgr/plugin-jsx": "^4.3.3", +        "camelcase": "^5.3.1", +        "cosmiconfig": "^5.2.1" +      } +    }, +    "@svgr/hast-util-to-babel-ast": { +      "version": "4.3.2", +      "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-4.3.2.tgz", +      "integrity": "sha512-JioXclZGhFIDL3ddn4Kiq8qEqYM2PyDKV0aYno8+IXTLuYt6TOgHUbUAAFvqtb0Xn37NwP0BTHglejFoYr8RZg==", +      "requires": { +        "@babel/types": "^7.4.4" +      } +    }, +    "@svgr/plugin-jsx": { +      "version": "4.3.3", +      "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-4.3.3.tgz", +      "integrity": "sha512-cLOCSpNWQnDB1/v+SUENHH7a0XY09bfuMKdq9+gYvtuwzC2rU4I0wKGFEp1i24holdQdwodCtDQdFtJiTCWc+w==", +      "requires": { +        "@babel/core": "^7.4.5", +        "@svgr/babel-preset": "^4.3.3", +        "@svgr/hast-util-to-babel-ast": "^4.3.2", +        "svg-parser": "^2.0.0" +      } +    }, +    "@svgr/plugin-svgo": { +      "version": "4.3.1", +      "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-4.3.1.tgz", +      "integrity": "sha512-PrMtEDUWjX3Ea65JsVCwTIXuSqa3CG9px+DluF1/eo9mlDrgrtFE7NE/DjdhjJgSM9wenlVBzkzneSIUgfUI/w==", +      "requires": { +        "cosmiconfig": "^5.2.1", +        "merge-deep": "^3.0.2", +        "svgo": "^1.2.2" +      } +    }, +    "@svgr/webpack": { +      "version": "4.3.2", +      "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-4.3.2.tgz", +      "integrity": "sha512-F3VE5OvyOWBEd2bF7BdtFRyI6E9it3mN7teDw0JQTlVtc4HZEYiiLSl+Uf9Uub6IYHVGc+qIrxxDyeedkQru2w==", +      "requires": { +        "@babel/core": "^7.4.5", +        "@babel/plugin-transform-react-constant-elements": "^7.0.0", +        "@babel/preset-env": "^7.4.5", +        "@babel/preset-react": "^7.0.0", +        "@svgr/core": "^4.3.2", +        "@svgr/plugin-jsx": "^4.3.2", +        "@svgr/plugin-svgo": "^4.3.1", +        "loader-utils": "^1.2.3" +      } +    }, +    "@types/babel__core": { +      "version": "7.1.3", +      "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.3.tgz", +      "integrity": "sha512-8fBo0UR2CcwWxeX7WIIgJ7lXjasFxoYgRnFHUj+hRvKkpiBJbxhdAPTCY6/ZKM0uxANFVzt4yObSLuTiTnazDA==", +      "requires": { +        "@babel/parser": "^7.1.0", +        "@babel/types": "^7.0.0", +        "@types/babel__generator": "*", +        "@types/babel__template": "*", +        "@types/babel__traverse": "*" +      } +    }, +    "@types/babel__generator": { +      "version": "7.6.0", +      "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.0.tgz", +      "integrity": "sha512-c1mZUu4up5cp9KROs/QAw0gTeHrw/x7m52LcnvMxxOZ03DmLwPV0MlGmlgzV3cnSdjhJOZsj7E7FHeioai+egw==", +      "requires": { +        "@babel/types": "^7.0.0" +      } +    }, +    "@types/babel__template": { +      "version": "7.0.2", +      "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz", +      "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==", +      "requires": { +        "@babel/parser": "^7.1.0", +        "@babel/types": "^7.0.0" +      } +    }, +    "@types/babel__traverse": { +      "version": "7.0.7", +      "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.7.tgz", +      "integrity": "sha512-CeBpmX1J8kWLcDEnI3Cl2Eo6RfbGvzUctA+CjZUhOKDFbLfcr7fc4usEqLNWetrlJd7RhAkyYe2czXop4fICpw==", +      "requires": { +        "@babel/types": "^7.3.0" +      } +    }, +    "@types/classnames": { +      "version": "2.2.9", +      "resolved": "https://registry.npmjs.org/@types/classnames/-/classnames-2.2.9.tgz", +      "integrity": "sha512-MNl+rT5UmZeilaPxAVs6YaPC2m6aA8rofviZbhbxpPpl61uKodfdQVsBtgJGTqGizEf02oW3tsVe7FYB8kK14A==" +    }, +    "@types/eslint-visitor-keys": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", +      "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==" +    }, +    "@types/history": { +      "version": "4.7.3", +      "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.3.tgz", +      "integrity": "sha512-cS5owqtwzLN5kY+l+KgKdRJ/Cee8tlmQoGQuIE9tWnSmS3JMKzmxo2HIAk2wODMifGwO20d62xZQLYz+RLfXmw==" +    }, +    "@types/istanbul-lib-coverage": { +      "version": "2.0.1", +      "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", +      "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==" +    }, +    "@types/istanbul-lib-report": { +      "version": "1.1.1", +      "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz", +      "integrity": "sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg==", +      "requires": { +        "@types/istanbul-lib-coverage": "*" +      } +    }, +    "@types/istanbul-reports": { +      "version": "1.1.1", +      "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz", +      "integrity": "sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==", +      "requires": { +        "@types/istanbul-lib-coverage": "*", +        "@types/istanbul-lib-report": "*" +      } +    }, +    "@types/jest": { +      "version": "24.0.23", +      "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.0.23.tgz", +      "integrity": "sha512-L7MBvwfNpe7yVPTXLn32df/EK+AMBFAFvZrRuArGs7npEWnlziUXK+5GMIUTI4NIuwok3XibsjXCs5HxviYXjg==", +      "requires": { +        "jest-diff": "^24.3.0" +      } +    }, +    "@types/json-schema": { +      "version": "7.0.3", +      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.3.tgz", +      "integrity": "sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A==" +    }, +    "@types/node": { +      "version": "12.12.12", +      "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.12.tgz", +      "integrity": "sha512-MGuvYJrPU0HUwqF7LqvIj50RZUX23Z+m583KBygKYUZLlZ88n6w28XRNJRJgsHukLEnLz6w6SvxZoLgbr5wLqQ==" +    }, +    "@types/prop-types": { +      "version": "15.7.3", +      "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", +      "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==" +    }, +    "@types/q": { +      "version": "1.5.2", +      "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz", +      "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==" +    }, +    "@types/qrcode.react": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/@types/qrcode.react/-/qrcode.react-1.0.0.tgz", +      "integrity": "sha512-CyH8QizAyp/G2RTz+2W0qIp/qbJMNC6a8aossG+zN42Rmx3loQlgBCWFatjKJ3NeJaX99e22SJ75yU2EVHlu3g==", +      "requires": { +        "@types/react": "*" +      } +    }, +    "@types/query-string": { +      "version": "6.3.0", +      "resolved": "https://registry.npmjs.org/@types/query-string/-/query-string-6.3.0.tgz", +      "integrity": "sha512-yuIv/WRffRzL7cBW+sla4HwBZrEXRNf1MKQ5SklPEadth+BKbDxiVG8A3iISN5B3yC4EeSCzMZP8llHTcUhOzQ==", +      "requires": { +        "query-string": "*" +      } +    }, +    "@types/react": { +      "version": "16.9.12", +      "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.12.tgz", +      "integrity": "sha512-tc2xuDvJ8uhGmRg/WVpn2IltHoGqijmxntSNkl2tgbMH2boX78ptcAWdyXPgxD0FoaYw8CczUdvjD1G8Y0JtSw==", +      "requires": { +        "@types/prop-types": "*", +        "csstype": "^2.2.0" +      } +    }, +    "@types/react-dom": { +      "version": "16.9.4", +      "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.4.tgz", +      "integrity": "sha512-fya9xteU/n90tda0s+FtN5Ym4tbgxpq/hb/Af24dvs6uYnYn+fspaxw5USlw0R8apDNwxsqumdRoCoKitckQqw==", +      "requires": { +        "@types/react": "*" +      } +    }, +    "@types/react-router": { +      "version": "5.1.3", +      "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.3.tgz", +      "integrity": "sha512-0gGhmerBqN8CzlnDmSgGNun3tuZFXerUclWkqEhozdLaJtfcJRUTGkKaEKk+/MpHd1KDS1+o2zb/3PkBUiv2qQ==", +      "requires": { +        "@types/history": "*", +        "@types/react": "*" +      } +    }, +    "@types/react-router-dom": { +      "version": "5.1.2", +      "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.1.2.tgz", +      "integrity": "sha512-kRx8hoBflE4Dp7uus+j/0uMHR5uGTAvQtc4A3vOTWKS+epe0leCuxEx7HNT7XGUd1lH53/moWM51MV2YUyhzAg==", +      "requires": { +        "@types/history": "*", +        "@types/react": "*", +        "@types/react-router": "*" +      } +    }, +    "@types/react-transition-group": { +      "version": "4.2.3", +      "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.2.3.tgz", +      "integrity": "sha512-Hk8jiuT7iLOHrcjKP/ZVSyCNXK73wJAUz60xm0mVhiRujrdiI++j4duLiL282VGxwAgxetHQFfqA29LgEeSkFA==", +      "requires": { +        "@types/react": "*" +      } +    }, +    "@types/stack-utils": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", +      "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==" +    }, +    "@types/yargs": { +      "version": "13.0.3", +      "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.3.tgz", +      "integrity": "sha512-K8/LfZq2duW33XW/tFwEAfnZlqIfVsoyRB3kfXdPXYhl0nfM8mmh7GS0jg7WrX2Dgq/0Ha/pR1PaR+BvmWwjiQ==", +      "requires": { +        "@types/yargs-parser": "*" +      } +    }, +    "@types/yargs-parser": { +      "version": "13.1.0", +      "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-13.1.0.tgz", +      "integrity": "sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg==" +    }, +    "@typescript-eslint/eslint-plugin": { +      "version": "2.7.0", +      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.7.0.tgz", +      "integrity": "sha512-H5G7yi0b0FgmqaEUpzyBlVh0d9lq4cWG2ap0RKa6BkF3rpBb6IrAoubt1NWh9R2kRs/f0k6XwRDiDz3X/FqXhQ==", +      "requires": { +        "@typescript-eslint/experimental-utils": "2.7.0", +        "eslint-utils": "^1.4.2", +        "functional-red-black-tree": "^1.0.1", +        "regexpp": "^2.0.1", +        "tsutils": "^3.17.1" +      } +    }, +    "@typescript-eslint/experimental-utils": { +      "version": "2.7.0", +      "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.7.0.tgz", +      "integrity": "sha512-9/L/OJh2a5G2ltgBWJpHRfGnt61AgDeH6rsdg59BH0naQseSwR7abwHq3D5/op0KYD/zFT4LS5gGvWcMmegTEg==", +      "requires": { +        "@types/json-schema": "^7.0.3", +        "@typescript-eslint/typescript-estree": "2.7.0", +        "eslint-scope": "^5.0.0" +      } +    }, +    "@typescript-eslint/parser": { +      "version": "2.7.0", +      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.7.0.tgz", +      "integrity": "sha512-ctC0g0ZvYclxMh/xI+tyqP0EC2fAo6KicN9Wm2EIao+8OppLfxji7KAGJosQHSGBj3TcqUrA96AjgXuKa5ob2g==", +      "requires": { +        "@types/eslint-visitor-keys": "^1.0.0", +        "@typescript-eslint/experimental-utils": "2.7.0", +        "@typescript-eslint/typescript-estree": "2.7.0", +        "eslint-visitor-keys": "^1.1.0" +      } +    }, +    "@typescript-eslint/typescript-estree": { +      "version": "2.7.0", +      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.7.0.tgz", +      "integrity": "sha512-vVCE/DY72N4RiJ/2f10PTyYekX2OLaltuSIBqeHYI44GQ940VCYioInIb8jKMrK9u855OEJdFC+HmWAZTnC+Ag==", +      "requires": { +        "debug": "^4.1.1", +        "glob": "^7.1.4", +        "is-glob": "^4.0.1", +        "lodash.unescape": "4.0.1", +        "semver": "^6.3.0", +        "tsutils": "^3.17.1" +      } +    }, +    "@webassemblyjs/ast": { +      "version": "1.8.5", +      "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", +      "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", +      "requires": { +        "@webassemblyjs/helper-module-context": "1.8.5", +        "@webassemblyjs/helper-wasm-bytecode": "1.8.5", +        "@webassemblyjs/wast-parser": "1.8.5" +      } +    }, +    "@webassemblyjs/floating-point-hex-parser": { +      "version": "1.8.5", +      "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", +      "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==" +    }, +    "@webassemblyjs/helper-api-error": { +      "version": "1.8.5", +      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", +      "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==" +    }, +    "@webassemblyjs/helper-buffer": { +      "version": "1.8.5", +      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", +      "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==" +    }, +    "@webassemblyjs/helper-code-frame": { +      "version": "1.8.5", +      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", +      "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", +      "requires": { +        "@webassemblyjs/wast-printer": "1.8.5" +      } +    }, +    "@webassemblyjs/helper-fsm": { +      "version": "1.8.5", +      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", +      "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==" +    }, +    "@webassemblyjs/helper-module-context": { +      "version": "1.8.5", +      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", +      "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", +      "requires": { +        "@webassemblyjs/ast": "1.8.5", +        "mamacro": "^0.0.3" +      } +    }, +    "@webassemblyjs/helper-wasm-bytecode": { +      "version": "1.8.5", +      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", +      "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==" +    }, +    "@webassemblyjs/helper-wasm-section": { +      "version": "1.8.5", +      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", +      "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", +      "requires": { +        "@webassemblyjs/ast": "1.8.5", +        "@webassemblyjs/helper-buffer": "1.8.5", +        "@webassemblyjs/helper-wasm-bytecode": "1.8.5", +        "@webassemblyjs/wasm-gen": "1.8.5" +      } +    }, +    "@webassemblyjs/ieee754": { +      "version": "1.8.5", +      "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", +      "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", +      "requires": { +        "@xtuc/ieee754": "^1.2.0" +      } +    }, +    "@webassemblyjs/leb128": { +      "version": "1.8.5", +      "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", +      "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", +      "requires": { +        "@xtuc/long": "4.2.2" +      } +    }, +    "@webassemblyjs/utf8": { +      "version": "1.8.5", +      "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", +      "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==" +    }, +    "@webassemblyjs/wasm-edit": { +      "version": "1.8.5", +      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", +      "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", +      "requires": { +        "@webassemblyjs/ast": "1.8.5", +        "@webassemblyjs/helper-buffer": "1.8.5", +        "@webassemblyjs/helper-wasm-bytecode": "1.8.5", +        "@webassemblyjs/helper-wasm-section": "1.8.5", +        "@webassemblyjs/wasm-gen": "1.8.5", +        "@webassemblyjs/wasm-opt": "1.8.5", +        "@webassemblyjs/wasm-parser": "1.8.5", +        "@webassemblyjs/wast-printer": "1.8.5" +      } +    }, +    "@webassemblyjs/wasm-gen": { +      "version": "1.8.5", +      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", +      "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", +      "requires": { +        "@webassemblyjs/ast": "1.8.5", +        "@webassemblyjs/helper-wasm-bytecode": "1.8.5", +        "@webassemblyjs/ieee754": "1.8.5", +        "@webassemblyjs/leb128": "1.8.5", +        "@webassemblyjs/utf8": "1.8.5" +      } +    }, +    "@webassemblyjs/wasm-opt": { +      "version": "1.8.5", +      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", +      "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", +      "requires": { +        "@webassemblyjs/ast": "1.8.5", +        "@webassemblyjs/helper-buffer": "1.8.5", +        "@webassemblyjs/wasm-gen": "1.8.5", +        "@webassemblyjs/wasm-parser": "1.8.5" +      } +    }, +    "@webassemblyjs/wasm-parser": { +      "version": "1.8.5", +      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", +      "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", +      "requires": { +        "@webassemblyjs/ast": "1.8.5", +        "@webassemblyjs/helper-api-error": "1.8.5", +        "@webassemblyjs/helper-wasm-bytecode": "1.8.5", +        "@webassemblyjs/ieee754": "1.8.5", +        "@webassemblyjs/leb128": "1.8.5", +        "@webassemblyjs/utf8": "1.8.5" +      } +    }, +    "@webassemblyjs/wast-parser": { +      "version": "1.8.5", +      "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", +      "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", +      "requires": { +        "@webassemblyjs/ast": "1.8.5", +        "@webassemblyjs/floating-point-hex-parser": "1.8.5", +        "@webassemblyjs/helper-api-error": "1.8.5", +        "@webassemblyjs/helper-code-frame": "1.8.5", +        "@webassemblyjs/helper-fsm": "1.8.5", +        "@xtuc/long": "4.2.2" +      } +    }, +    "@webassemblyjs/wast-printer": { +      "version": "1.8.5", +      "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", +      "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", +      "requires": { +        "@webassemblyjs/ast": "1.8.5", +        "@webassemblyjs/wast-parser": "1.8.5", +        "@xtuc/long": "4.2.2" +      } +    }, +    "@xtuc/ieee754": { +      "version": "1.2.0", +      "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", +      "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" +    }, +    "@xtuc/long": { +      "version": "4.2.2", +      "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", +      "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" +    }, +    "abab": { +      "version": "2.0.3", +      "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz", +      "integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==" +    }, +    "accepts": { +      "version": "1.3.7", +      "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", +      "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", +      "requires": { +        "mime-types": "~2.1.24", +        "negotiator": "0.6.2" +      } +    }, +    "acorn": { +      "version": "7.1.0", +      "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", +      "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==" +    }, +    "acorn-globals": { +      "version": "4.3.4", +      "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", +      "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", +      "requires": { +        "acorn": "^6.0.1", +        "acorn-walk": "^6.0.1" +      }, +      "dependencies": { +        "acorn": { +          "version": "6.3.0", +          "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", +          "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==" +        } +      } +    }, +    "acorn-jsx": { +      "version": "5.1.0", +      "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz", +      "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==" +    }, +    "acorn-walk": { +      "version": "6.2.0", +      "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", +      "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==" +    }, +    "address": { +      "version": "1.1.2", +      "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", +      "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==" +    }, +    "adjust-sourcemap-loader": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-2.0.0.tgz", +      "integrity": "sha512-4hFsTsn58+YjrU9qKzML2JSSDqKvN8mUGQ0nNIrfPi8hmIONT4L3uUaT6MKdMsZ9AjsU6D2xDkZxCkbQPxChrA==", +      "requires": { +        "assert": "1.4.1", +        "camelcase": "5.0.0", +        "loader-utils": "1.2.3", +        "object-path": "0.11.4", +        "regex-parser": "2.2.10" +      }, +      "dependencies": { +        "camelcase": { +          "version": "5.0.0", +          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", +          "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==" +        } +      } +    }, +    "ajv": { +      "version": "6.10.2", +      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", +      "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", +      "requires": { +        "fast-deep-equal": "^2.0.1", +        "fast-json-stable-stringify": "^2.0.0", +        "json-schema-traverse": "^0.4.1", +        "uri-js": "^4.2.2" +      } +    }, +    "ajv-errors": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", +      "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" +    }, +    "ajv-keywords": { +      "version": "3.4.1", +      "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", +      "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==" +    }, +    "alphanum-sort": { +      "version": "1.0.2", +      "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", +      "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" +    }, +    "ansi-colors": { +      "version": "3.2.4", +      "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", +      "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==" +    }, +    "ansi-escapes": { +      "version": "4.3.0", +      "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.0.tgz", +      "integrity": "sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg==", +      "requires": { +        "type-fest": "^0.8.1" +      } +    }, +    "ansi-html": { +      "version": "0.0.7", +      "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", +      "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=" +    }, +    "ansi-regex": { +      "version": "4.1.0", +      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", +      "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" +    }, +    "ansi-styles": { +      "version": "3.2.1", +      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", +      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", +      "requires": { +        "color-convert": "^1.9.0" +      } +    }, +    "anymatch": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", +      "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", +      "requires": { +        "micromatch": "^3.1.4", +        "normalize-path": "^2.1.1" +      } +    }, +    "aproba": { +      "version": "1.2.0", +      "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", +      "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" +    }, +    "argparse": { +      "version": "1.0.10", +      "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", +      "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", +      "requires": { +        "sprintf-js": "~1.0.2" +      } +    }, +    "aria-query": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", +      "integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=", +      "requires": { +        "ast-types-flow": "0.0.7", +        "commander": "^2.11.0" +      } +    }, +    "arity-n": { +      "version": "1.0.4", +      "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", +      "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=" +    }, +    "arr-diff": { +      "version": "4.0.0", +      "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", +      "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" +    }, +    "arr-flatten": { +      "version": "1.1.0", +      "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", +      "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" +    }, +    "arr-union": { +      "version": "3.1.0", +      "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", +      "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" +    }, +    "array-equal": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", +      "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=" +    }, +    "array-flatten": { +      "version": "2.1.2", +      "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", +      "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" +    }, +    "array-includes": { +      "version": "3.0.3", +      "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", +      "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", +      "requires": { +        "define-properties": "^1.1.2", +        "es-abstract": "^1.7.0" +      } +    }, +    "array-union": { +      "version": "1.0.2", +      "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", +      "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", +      "requires": { +        "array-uniq": "^1.0.1" +      } +    }, +    "array-uniq": { +      "version": "1.0.3", +      "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", +      "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" +    }, +    "array-unique": { +      "version": "0.3.2", +      "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", +      "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" +    }, +    "arrify": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", +      "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" +    }, +    "asap": { +      "version": "2.0.6", +      "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", +      "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" +    }, +    "asn1": { +      "version": "0.2.4", +      "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", +      "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", +      "requires": { +        "safer-buffer": "~2.1.0" +      } +    }, +    "asn1.js": { +      "version": "4.10.1", +      "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", +      "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", +      "requires": { +        "bn.js": "^4.0.0", +        "inherits": "^2.0.1", +        "minimalistic-assert": "^1.0.0" +      } +    }, +    "assert": { +      "version": "1.4.1", +      "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", +      "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", +      "requires": { +        "util": "0.10.3" +      } +    }, +    "assert-plus": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", +      "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" +    }, +    "assign-symbols": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", +      "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" +    }, +    "ast-types-flow": { +      "version": "0.0.7", +      "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", +      "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=" +    }, +    "astral-regex": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", +      "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" +    }, +    "async": { +      "version": "2.6.3", +      "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", +      "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", +      "requires": { +        "lodash": "^4.17.14" +      } +    }, +    "async-each": { +      "version": "1.0.3", +      "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", +      "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" +    }, +    "async-limiter": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", +      "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" +    }, +    "asynckit": { +      "version": "0.4.0", +      "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", +      "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" +    }, +    "atob": { +      "version": "2.1.2", +      "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", +      "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" +    }, +    "autoprefixer": { +      "version": "9.7.1", +      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.1.tgz", +      "integrity": "sha512-w3b5y1PXWlhYulevrTJ0lizkQ5CyqfeU6BIRDbuhsMupstHQOeb1Ur80tcB1zxSu7AwyY/qCQ7Vvqklh31ZBFw==", +      "requires": { +        "browserslist": "^4.7.2", +        "caniuse-lite": "^1.0.30001006", +        "chalk": "^2.4.2", +        "normalize-range": "^0.1.2", +        "num2fraction": "^1.2.2", +        "postcss": "^7.0.21", +        "postcss-value-parser": "^4.0.2" +      }, +      "dependencies": { +        "postcss-value-parser": { +          "version": "4.0.2", +          "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz", +          "integrity": "sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ==" +        } +      } +    }, +    "aws-sign2": { +      "version": "0.7.0", +      "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", +      "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" +    }, +    "aws4": { +      "version": "1.8.0", +      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", +      "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" +    }, +    "axios": { +      "version": "0.19.0", +      "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz", +      "integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==", +      "requires": { +        "follow-redirects": "1.5.10", +        "is-buffer": "^2.0.2" +      }, +      "dependencies": { +        "debug": { +          "version": "3.1.0", +          "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", +          "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", +          "requires": { +            "ms": "2.0.0" +          } +        }, +        "follow-redirects": { +          "version": "1.5.10", +          "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", +          "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", +          "requires": { +            "debug": "=3.1.0" +          } +        }, +        "is-buffer": { +          "version": "2.0.4", +          "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", +          "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==" +        }, +        "ms": { +          "version": "2.0.0", +          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", +          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" +        } +      } +    }, +    "axobject-query": { +      "version": "2.0.2", +      "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz", +      "integrity": "sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww==", +      "requires": { +        "ast-types-flow": "0.0.7" +      } +    }, +    "babel-code-frame": { +      "version": "6.26.0", +      "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", +      "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", +      "requires": { +        "chalk": "^1.1.3", +        "esutils": "^2.0.2", +        "js-tokens": "^3.0.2" +      }, +      "dependencies": { +        "ansi-regex": { +          "version": "2.1.1", +          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", +          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" +        }, +        "ansi-styles": { +          "version": "2.2.1", +          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", +          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" +        }, +        "chalk": { +          "version": "1.1.3", +          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", +          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", +          "requires": { +            "ansi-styles": "^2.2.1", +            "escape-string-regexp": "^1.0.2", +            "has-ansi": "^2.0.0", +            "strip-ansi": "^3.0.0", +            "supports-color": "^2.0.0" +          } +        }, +        "js-tokens": { +          "version": "3.0.2", +          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", +          "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" +        }, +        "strip-ansi": { +          "version": "3.0.1", +          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", +          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", +          "requires": { +            "ansi-regex": "^2.0.0" +          } +        }, +        "supports-color": { +          "version": "2.0.0", +          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", +          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" +        } +      } +    }, +    "babel-eslint": { +      "version": "10.0.3", +      "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.3.tgz", +      "integrity": "sha512-z3U7eMY6r/3f3/JB9mTsLjyxrv0Yb1zb8PCWCLpguxfCzBIZUwy23R1t/XKewP+8mEN2Ck8Dtr4q20z6ce6SoA==", +      "requires": { +        "@babel/code-frame": "^7.0.0", +        "@babel/parser": "^7.0.0", +        "@babel/traverse": "^7.0.0", +        "@babel/types": "^7.0.0", +        "eslint-visitor-keys": "^1.0.0", +        "resolve": "^1.12.0" +      } +    }, +    "babel-extract-comments": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz", +      "integrity": "sha512-qWWzi4TlddohA91bFwgt6zO/J0X+io7Qp184Fw0m2JYRSTZnJbFR8+07KmzudHCZgOiKRCrjhylwv9Xd8gfhVQ==", +      "requires": { +        "babylon": "^6.18.0" +      } +    }, +    "babel-jest": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz", +      "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==", +      "requires": { +        "@jest/transform": "^24.9.0", +        "@jest/types": "^24.9.0", +        "@types/babel__core": "^7.1.0", +        "babel-plugin-istanbul": "^5.1.0", +        "babel-preset-jest": "^24.9.0", +        "chalk": "^2.4.2", +        "slash": "^2.0.0" +      } +    }, +    "babel-loader": { +      "version": "8.0.6", +      "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz", +      "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==", +      "requires": { +        "find-cache-dir": "^2.0.0", +        "loader-utils": "^1.0.2", +        "mkdirp": "^0.5.1", +        "pify": "^4.0.1" +      }, +      "dependencies": { +        "pify": { +          "version": "4.0.1", +          "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", +          "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" +        } +      } +    }, +    "babel-plugin-dynamic-import-node": { +      "version": "2.3.0", +      "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", +      "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", +      "requires": { +        "object.assign": "^4.1.0" +      } +    }, +    "babel-plugin-istanbul": { +      "version": "5.2.0", +      "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz", +      "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==", +      "requires": { +        "@babel/helper-plugin-utils": "^7.0.0", +        "find-up": "^3.0.0", +        "istanbul-lib-instrument": "^3.3.0", +        "test-exclude": "^5.2.3" +      } +    }, +    "babel-plugin-jest-hoist": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz", +      "integrity": "sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==", +      "requires": { +        "@types/babel__traverse": "^7.0.6" +      } +    }, +    "babel-plugin-macros": { +      "version": "2.6.1", +      "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.6.1.tgz", +      "integrity": "sha512-6W2nwiXme6j1n2erPOnmRiWfObUhWH7Qw1LMi9XZy8cj+KtESu3T6asZvtk5bMQQjX8te35o7CFueiSdL/2NmQ==", +      "requires": { +        "@babel/runtime": "^7.4.2", +        "cosmiconfig": "^5.2.0", +        "resolve": "^1.10.0" +      } +    }, +    "babel-plugin-named-asset-import": { +      "version": "0.3.4", +      "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.4.tgz", +      "integrity": "sha512-S6d+tEzc5Af1tKIMbsf2QirCcPdQ+mKUCY2H1nJj1DyA1ShwpsoxEOAwbWsG5gcXNV/olpvQd9vrUWRx4bnhpw==" +    }, +    "babel-plugin-syntax-object-rest-spread": { +      "version": "6.13.0", +      "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", +      "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=" +    }, +    "babel-plugin-transform-object-rest-spread": { +      "version": "6.26.0", +      "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", +      "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", +      "requires": { +        "babel-plugin-syntax-object-rest-spread": "^6.8.0", +        "babel-runtime": "^6.26.0" +      } +    }, +    "babel-plugin-transform-react-remove-prop-types": { +      "version": "0.4.24", +      "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", +      "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" +    }, +    "babel-preset-jest": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz", +      "integrity": "sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==", +      "requires": { +        "@babel/plugin-syntax-object-rest-spread": "^7.0.0", +        "babel-plugin-jest-hoist": "^24.9.0" +      } +    }, +    "babel-preset-react-app": { +      "version": "9.0.2", +      "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-9.0.2.tgz", +      "integrity": "sha512-aXD+CTH8Chn8sNJr4tO/trWKqe5sSE4hdO76j9fhVezJSzmpWYWUSc5JoPmdSxADwef5kQFNGKXd433vvkd2VQ==", +      "requires": { +        "@babel/core": "7.6.0", +        "@babel/plugin-proposal-class-properties": "7.5.5", +        "@babel/plugin-proposal-decorators": "7.6.0", +        "@babel/plugin-proposal-object-rest-spread": "7.5.5", +        "@babel/plugin-syntax-dynamic-import": "7.2.0", +        "@babel/plugin-transform-destructuring": "7.6.0", +        "@babel/plugin-transform-flow-strip-types": "7.4.4", +        "@babel/plugin-transform-react-display-name": "7.2.0", +        "@babel/plugin-transform-runtime": "7.6.0", +        "@babel/preset-env": "7.6.0", +        "@babel/preset-react": "7.0.0", +        "@babel/preset-typescript": "7.6.0", +        "@babel/runtime": "7.6.0", +        "babel-plugin-dynamic-import-node": "2.3.0", +        "babel-plugin-macros": "2.6.1", +        "babel-plugin-transform-react-remove-prop-types": "0.4.24" +      }, +      "dependencies": { +        "@babel/plugin-proposal-object-rest-spread": { +          "version": "7.5.5", +          "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.5.tgz", +          "integrity": "sha512-F2DxJJSQ7f64FyTVl5cw/9MWn6naXGdk3Q3UhDbFEEHv+EilCPoeRD3Zh/Utx1CJz4uyKlQ4uH+bJPbEhMV7Zw==", +          "requires": { +            "@babel/helper-plugin-utils": "^7.0.0", +            "@babel/plugin-syntax-object-rest-spread": "^7.2.0" +          } +        }, +        "@babel/preset-env": { +          "version": "7.6.0", +          "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.6.0.tgz", +          "integrity": "sha512-1efzxFv/TcPsNXlRhMzRnkBFMeIqBBgzwmZwlFDw5Ubj0AGLeufxugirwZmkkX/ayi3owsSqoQ4fw8LkfK9SYg==", +          "requires": { +            "@babel/helper-module-imports": "^7.0.0", +            "@babel/helper-plugin-utils": "^7.0.0", +            "@babel/plugin-proposal-async-generator-functions": "^7.2.0", +            "@babel/plugin-proposal-dynamic-import": "^7.5.0", +            "@babel/plugin-proposal-json-strings": "^7.2.0", +            "@babel/plugin-proposal-object-rest-spread": "^7.5.5", +            "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", +            "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", +            "@babel/plugin-syntax-async-generators": "^7.2.0", +            "@babel/plugin-syntax-dynamic-import": "^7.2.0", +            "@babel/plugin-syntax-json-strings": "^7.2.0", +            "@babel/plugin-syntax-object-rest-spread": "^7.2.0", +            "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", +            "@babel/plugin-transform-arrow-functions": "^7.2.0", +            "@babel/plugin-transform-async-to-generator": "^7.5.0", +            "@babel/plugin-transform-block-scoped-functions": "^7.2.0", +            "@babel/plugin-transform-block-scoping": "^7.6.0", +            "@babel/plugin-transform-classes": "^7.5.5", +            "@babel/plugin-transform-computed-properties": "^7.2.0", +            "@babel/plugin-transform-destructuring": "^7.6.0", +            "@babel/plugin-transform-dotall-regex": "^7.4.4", +            "@babel/plugin-transform-duplicate-keys": "^7.5.0", +            "@babel/plugin-transform-exponentiation-operator": "^7.2.0", +            "@babel/plugin-transform-for-of": "^7.4.4", +            "@babel/plugin-transform-function-name": "^7.4.4", +            "@babel/plugin-transform-literals": "^7.2.0", +            "@babel/plugin-transform-member-expression-literals": "^7.2.0", +            "@babel/plugin-transform-modules-amd": "^7.5.0", +            "@babel/plugin-transform-modules-commonjs": "^7.6.0", +            "@babel/plugin-transform-modules-systemjs": "^7.5.0", +            "@babel/plugin-transform-modules-umd": "^7.2.0", +            "@babel/plugin-transform-named-capturing-groups-regex": "^7.6.0", +            "@babel/plugin-transform-new-target": "^7.4.4", +            "@babel/plugin-transform-object-super": "^7.5.5", +            "@babel/plugin-transform-parameters": "^7.4.4", +            "@babel/plugin-transform-property-literals": "^7.2.0", +            "@babel/plugin-transform-regenerator": "^7.4.5", +            "@babel/plugin-transform-reserved-words": "^7.2.0", +            "@babel/plugin-transform-shorthand-properties": "^7.2.0", +            "@babel/plugin-transform-spread": "^7.2.0", +            "@babel/plugin-transform-sticky-regex": "^7.2.0", +            "@babel/plugin-transform-template-literals": "^7.4.4", +            "@babel/plugin-transform-typeof-symbol": "^7.2.0", +            "@babel/plugin-transform-unicode-regex": "^7.4.4", +            "@babel/types": "^7.6.0", +            "browserslist": "^4.6.0", +            "core-js-compat": "^3.1.1", +            "invariant": "^2.2.2", +            "js-levenshtein": "^1.1.3", +            "semver": "^5.5.0" +          } +        }, +        "@babel/preset-react": { +          "version": "7.0.0", +          "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.0.0.tgz", +          "integrity": "sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w==", +          "requires": { +            "@babel/helper-plugin-utils": "^7.0.0", +            "@babel/plugin-transform-react-display-name": "^7.0.0", +            "@babel/plugin-transform-react-jsx": "^7.0.0", +            "@babel/plugin-transform-react-jsx-self": "^7.0.0", +            "@babel/plugin-transform-react-jsx-source": "^7.0.0" +          } +        }, +        "semver": { +          "version": "5.7.1", +          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", +          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" +        } +      } +    }, +    "babel-runtime": { +      "version": "6.26.0", +      "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", +      "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", +      "requires": { +        "core-js": "^2.4.0", +        "regenerator-runtime": "^0.11.0" +      }, +      "dependencies": { +        "core-js": { +          "version": "2.6.10", +          "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.10.tgz", +          "integrity": "sha512-I39t74+4t+zau64EN1fE5v2W31Adtc/REhzWN+gWRRXg6WH5qAsZm62DHpQ1+Yhe4047T55jvzz7MUqF/dBBlA==" +        }, +        "regenerator-runtime": { +          "version": "0.11.1", +          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", +          "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" +        } +      } +    }, +    "babylon": { +      "version": "6.18.0", +      "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", +      "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" +    }, +    "balanced-match": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", +      "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" +    }, +    "base": { +      "version": "0.11.2", +      "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", +      "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", +      "requires": { +        "cache-base": "^1.0.1", +        "class-utils": "^0.3.5", +        "component-emitter": "^1.2.1", +        "define-property": "^1.0.0", +        "isobject": "^3.0.1", +        "mixin-deep": "^1.2.0", +        "pascalcase": "^0.1.1" +      }, +      "dependencies": { +        "define-property": { +          "version": "1.0.0", +          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", +          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", +          "requires": { +            "is-descriptor": "^1.0.0" +          } +        }, +        "is-accessor-descriptor": { +          "version": "1.0.0", +          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", +          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", +          "requires": { +            "kind-of": "^6.0.0" +          } +        }, +        "is-data-descriptor": { +          "version": "1.0.0", +          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", +          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", +          "requires": { +            "kind-of": "^6.0.0" +          } +        }, +        "is-descriptor": { +          "version": "1.0.2", +          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", +          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", +          "requires": { +            "is-accessor-descriptor": "^1.0.0", +            "is-data-descriptor": "^1.0.0", +            "kind-of": "^6.0.2" +          } +        }, +        "kind-of": { +          "version": "6.0.2", +          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", +          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" +        } +      } +    }, +    "base64-js": { +      "version": "1.3.1", +      "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", +      "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" +    }, +    "batch": { +      "version": "0.6.1", +      "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", +      "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=" +    }, +    "bcrypt-pbkdf": { +      "version": "1.0.2", +      "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", +      "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", +      "requires": { +        "tweetnacl": "^0.14.3" +      } +    }, +    "big.js": { +      "version": "5.2.2", +      "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", +      "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" +    }, +    "binary-extensions": { +      "version": "1.13.1", +      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", +      "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" +    }, +    "bluebird": { +      "version": "3.7.1", +      "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.1.tgz", +      "integrity": "sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==" +    }, +    "bn.js": { +      "version": "4.11.8", +      "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", +      "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" +    }, +    "body-parser": { +      "version": "1.19.0", +      "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", +      "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", +      "requires": { +        "bytes": "3.1.0", +        "content-type": "~1.0.4", +        "debug": "2.6.9", +        "depd": "~1.1.2", +        "http-errors": "1.7.2", +        "iconv-lite": "0.4.24", +        "on-finished": "~2.3.0", +        "qs": "6.7.0", +        "raw-body": "2.4.0", +        "type-is": "~1.6.17" +      }, +      "dependencies": { +        "bytes": { +          "version": "3.1.0", +          "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", +          "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" +        }, +        "debug": { +          "version": "2.6.9", +          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", +          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", +          "requires": { +            "ms": "2.0.0" +          } +        }, +        "ms": { +          "version": "2.0.0", +          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", +          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" +        }, +        "qs": { +          "version": "6.7.0", +          "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", +          "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" +        } +      } +    }, +    "bonjour": { +      "version": "3.5.0", +      "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", +      "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", +      "requires": { +        "array-flatten": "^2.1.0", +        "deep-equal": "^1.0.1", +        "dns-equal": "^1.0.0", +        "dns-txt": "^2.0.2", +        "multicast-dns": "^6.0.1", +        "multicast-dns-service-types": "^1.1.0" +      } +    }, +    "boolbase": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", +      "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" +    }, +    "brace-expansion": { +      "version": "1.1.11", +      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", +      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", +      "requires": { +        "balanced-match": "^1.0.0", +        "concat-map": "0.0.1" +      } +    }, +    "braces": { +      "version": "2.3.2", +      "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", +      "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", +      "requires": { +        "arr-flatten": "^1.1.0", +        "array-unique": "^0.3.2", +        "extend-shallow": "^2.0.1", +        "fill-range": "^4.0.0", +        "isobject": "^3.0.1", +        "repeat-element": "^1.1.2", +        "snapdragon": "^0.8.1", +        "snapdragon-node": "^2.0.1", +        "split-string": "^3.0.2", +        "to-regex": "^3.0.1" +      }, +      "dependencies": { +        "extend-shallow": { +          "version": "2.0.1", +          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", +          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", +          "requires": { +            "is-extendable": "^0.1.0" +          } +        } +      } +    }, +    "brorand": { +      "version": "1.1.0", +      "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", +      "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" +    }, +    "browser-process-hrtime": { +      "version": "0.1.3", +      "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", +      "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==" +    }, +    "browser-resolve": { +      "version": "1.11.3", +      "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", +      "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", +      "requires": { +        "resolve": "1.1.7" +      }, +      "dependencies": { +        "resolve": { +          "version": "1.1.7", +          "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", +          "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=" +        } +      } +    }, +    "browserify-aes": { +      "version": "1.2.0", +      "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", +      "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", +      "requires": { +        "buffer-xor": "^1.0.3", +        "cipher-base": "^1.0.0", +        "create-hash": "^1.1.0", +        "evp_bytestokey": "^1.0.3", +        "inherits": "^2.0.1", +        "safe-buffer": "^5.0.1" +      } +    }, +    "browserify-cipher": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", +      "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", +      "requires": { +        "browserify-aes": "^1.0.4", +        "browserify-des": "^1.0.0", +        "evp_bytestokey": "^1.0.0" +      } +    }, +    "browserify-des": { +      "version": "1.0.2", +      "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", +      "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", +      "requires": { +        "cipher-base": "^1.0.1", +        "des.js": "^1.0.0", +        "inherits": "^2.0.1", +        "safe-buffer": "^5.1.2" +      } +    }, +    "browserify-rsa": { +      "version": "4.0.1", +      "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", +      "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", +      "requires": { +        "bn.js": "^4.1.0", +        "randombytes": "^2.0.1" +      } +    }, +    "browserify-sign": { +      "version": "4.0.4", +      "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", +      "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", +      "requires": { +        "bn.js": "^4.1.1", +        "browserify-rsa": "^4.0.0", +        "create-hash": "^1.1.0", +        "create-hmac": "^1.1.2", +        "elliptic": "^6.0.0", +        "inherits": "^2.0.1", +        "parse-asn1": "^5.0.0" +      } +    }, +    "browserify-zlib": { +      "version": "0.2.0", +      "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", +      "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", +      "requires": { +        "pako": "~1.0.5" +      } +    }, +    "browserslist": { +      "version": "4.7.2", +      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.7.2.tgz", +      "integrity": "sha512-uZavT/gZXJd2UTi9Ov7/Z340WOSQ3+m1iBVRUknf+okKxonL9P83S3ctiBDtuRmRu8PiCHjqyueqQ9HYlJhxiw==", +      "requires": { +        "caniuse-lite": "^1.0.30001004", +        "electron-to-chromium": "^1.3.295", +        "node-releases": "^1.1.38" +      } +    }, +    "bser": { +      "version": "2.1.1", +      "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", +      "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", +      "requires": { +        "node-int64": "^0.4.0" +      } +    }, +    "buffer": { +      "version": "4.9.2", +      "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", +      "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", +      "requires": { +        "base64-js": "^1.0.2", +        "ieee754": "^1.1.4", +        "isarray": "^1.0.0" +      } +    }, +    "buffer-from": { +      "version": "1.1.1", +      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", +      "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" +    }, +    "buffer-indexof": { +      "version": "1.1.1", +      "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", +      "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" +    }, +    "buffer-xor": { +      "version": "1.0.3", +      "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", +      "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" +    }, +    "builtin-status-codes": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", +      "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" +    }, +    "bytes": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", +      "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" +    }, +    "cacache": { +      "version": "12.0.3", +      "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", +      "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", +      "requires": { +        "bluebird": "^3.5.5", +        "chownr": "^1.1.1", +        "figgy-pudding": "^3.5.1", +        "glob": "^7.1.4", +        "graceful-fs": "^4.1.15", +        "infer-owner": "^1.0.3", +        "lru-cache": "^5.1.1", +        "mississippi": "^3.0.0", +        "mkdirp": "^0.5.1", +        "move-concurrently": "^1.0.1", +        "promise-inflight": "^1.0.1", +        "rimraf": "^2.6.3", +        "ssri": "^6.0.1", +        "unique-filename": "^1.1.1", +        "y18n": "^4.0.0" +      } +    }, +    "cache-base": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", +      "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", +      "requires": { +        "collection-visit": "^1.0.0", +        "component-emitter": "^1.2.1", +        "get-value": "^2.0.6", +        "has-value": "^1.0.0", +        "isobject": "^3.0.1", +        "set-value": "^2.0.0", +        "to-object-path": "^0.3.0", +        "union-value": "^1.0.0", +        "unset-value": "^1.0.0" +      } +    }, +    "call-me-maybe": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", +      "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=" +    }, +    "caller-callsite": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", +      "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", +      "requires": { +        "callsites": "^2.0.0" +      } +    }, +    "caller-path": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", +      "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", +      "requires": { +        "caller-callsite": "^2.0.0" +      } +    }, +    "callsites": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", +      "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" +    }, +    "camel-case": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", +      "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", +      "requires": { +        "no-case": "^2.2.0", +        "upper-case": "^1.1.1" +      } +    }, +    "camelcase": { +      "version": "5.3.1", +      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", +      "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" +    }, +    "caniuse-api": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", +      "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", +      "requires": { +        "browserslist": "^4.0.0", +        "caniuse-lite": "^1.0.0", +        "lodash.memoize": "^4.1.2", +        "lodash.uniq": "^4.5.0" +      } +    }, +    "caniuse-lite": { +      "version": "1.0.30001010", +      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001010.tgz", +      "integrity": "sha512-RA5GH9YjFNea4ZQszdWgh2SC+dpLiRAg4VDQS2b5JRI45OxmbGrYocYHTa9x0bKMQUE7uvHkNPNffUr+pCxSGw==" +    }, +    "capture-exit": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", +      "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", +      "requires": { +        "rsvp": "^4.8.4" +      } +    }, +    "case-sensitive-paths-webpack-plugin": { +      "version": "2.2.0", +      "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.2.0.tgz", +      "integrity": "sha512-u5ElzokS8A1pm9vM3/iDgTcI3xqHxuCao94Oz8etI3cf0Tio0p8izkDYbTIn09uP3yUUr6+veaE6IkjnTYS46g==" +    }, +    "caseless": { +      "version": "0.12.0", +      "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", +      "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" +    }, +    "chalk": { +      "version": "2.4.2", +      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", +      "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", +      "requires": { +        "ansi-styles": "^3.2.1", +        "escape-string-regexp": "^1.0.5", +        "supports-color": "^5.3.0" +      } +    }, +    "chardet": { +      "version": "0.7.0", +      "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", +      "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" +    }, +    "chokidar": { +      "version": "2.1.8", +      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", +      "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", +      "requires": { +        "anymatch": "^2.0.0", +        "async-each": "^1.0.1", +        "braces": "^2.3.2", +        "fsevents": "^1.2.7", +        "glob-parent": "^3.1.0", +        "inherits": "^2.0.3", +        "is-binary-path": "^1.0.0", +        "is-glob": "^4.0.0", +        "normalize-path": "^3.0.0", +        "path-is-absolute": "^1.0.0", +        "readdirp": "^2.2.1", +        "upath": "^1.1.1" +      }, +      "dependencies": { +        "fsevents": { +          "version": "1.2.9", +          "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", +          "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", +          "optional": true, +          "requires": { +            "nan": "^2.12.1", +            "node-pre-gyp": "^0.12.0" +          }, +          "dependencies": { +            "abbrev": { +              "version": "1.1.1", +              "bundled": true, +              "optional": true +            }, +            "ansi-regex": { +              "version": "2.1.1", +              "bundled": true, +              "optional": true +            }, +            "aproba": { +              "version": "1.2.0", +              "bundled": true, +              "optional": true +            }, +            "are-we-there-yet": { +              "version": "1.1.5", +              "bundled": true, +              "optional": true, +              "requires": { +                "delegates": "^1.0.0", +                "readable-stream": "^2.0.6" +              } +            }, +            "balanced-match": { +              "version": "1.0.0", +              "bundled": true, +              "optional": true +            }, +            "brace-expansion": { +              "version": "1.1.11", +              "bundled": true, +              "optional": true, +              "requires": { +                "balanced-match": "^1.0.0", +                "concat-map": "0.0.1" +              } +            }, +            "chownr": { +              "version": "1.1.1", +              "bundled": true, +              "optional": true +            }, +            "code-point-at": { +              "version": "1.1.0", +              "bundled": true, +              "optional": true +            }, +            "concat-map": { +              "version": "0.0.1", +              "bundled": true, +              "optional": true +            }, +            "console-control-strings": { +              "version": "1.1.0", +              "bundled": true, +              "optional": true +            }, +            "core-util-is": { +              "version": "1.0.2", +              "bundled": true, +              "optional": true +            }, +            "debug": { +              "version": "4.1.1", +              "bundled": true, +              "optional": true, +              "requires": { +                "ms": "^2.1.1" +              } +            }, +            "deep-extend": { +              "version": "0.6.0", +              "bundled": true, +              "optional": true +            }, +            "delegates": { +              "version": "1.0.0", +              "bundled": true, +              "optional": true +            }, +            "detect-libc": { +              "version": "1.0.3", +              "bundled": true, +              "optional": true +            }, +            "fs-minipass": { +              "version": "1.2.5", +              "bundled": true, +              "optional": true, +              "requires": { +                "minipass": "^2.2.1" +              } +            }, +            "fs.realpath": { +              "version": "1.0.0", +              "bundled": true, +              "optional": true +            }, +            "gauge": { +              "version": "2.7.4", +              "bundled": true, +              "optional": true, +              "requires": { +                "aproba": "^1.0.3", +                "console-control-strings": "^1.0.0", +                "has-unicode": "^2.0.0", +                "object-assign": "^4.1.0", +                "signal-exit": "^3.0.0", +                "string-width": "^1.0.1", +                "strip-ansi": "^3.0.1", +                "wide-align": "^1.1.0" +              } +            }, +            "glob": { +              "version": "7.1.3", +              "bundled": true, +              "optional": true, +              "requires": { +                "fs.realpath": "^1.0.0", +                "inflight": "^1.0.4", +                "inherits": "2", +                "minimatch": "^3.0.4", +                "once": "^1.3.0", +                "path-is-absolute": "^1.0.0" +              } +            }, +            "has-unicode": { +              "version": "2.0.1", +              "bundled": true, +              "optional": true +            }, +            "iconv-lite": { +              "version": "0.4.24", +              "bundled": true, +              "optional": true, +              "requires": { +                "safer-buffer": ">= 2.1.2 < 3" +              } +            }, +            "ignore-walk": { +              "version": "3.0.1", +              "bundled": true, +              "optional": true, +              "requires": { +                "minimatch": "^3.0.4" +              } +            }, +            "inflight": { +              "version": "1.0.6", +              "bundled": true, +              "optional": true, +              "requires": { +                "once": "^1.3.0", +                "wrappy": "1" +              } +            }, +            "inherits": { +              "version": "2.0.3", +              "bundled": true, +              "optional": true +            }, +            "ini": { +              "version": "1.3.5", +              "bundled": true, +              "optional": true +            }, +            "is-fullwidth-code-point": { +              "version": "1.0.0", +              "bundled": true, +              "optional": true, +              "requires": { +                "number-is-nan": "^1.0.0" +              } +            }, +            "isarray": { +              "version": "1.0.0", +              "bundled": true, +              "optional": true +            }, +            "minimatch": { +              "version": "3.0.4", +              "bundled": true, +              "optional": true, +              "requires": { +                "brace-expansion": "^1.1.7" +              } +            }, +            "minimist": { +              "version": "0.0.8", +              "bundled": true, +              "optional": true +            }, +            "minipass": { +              "version": "2.3.5", +              "bundled": true, +              "optional": true, +              "requires": { +                "safe-buffer": "^5.1.2", +                "yallist": "^3.0.0" +              } +            }, +            "minizlib": { +              "version": "1.2.1", +              "bundled": true, +              "optional": true, +              "requires": { +                "minipass": "^2.2.1" +              } +            }, +            "mkdirp": { +              "version": "0.5.1", +              "bundled": true, +              "optional": true, +              "requires": { +                "minimist": "0.0.8" +              } +            }, +            "ms": { +              "version": "2.1.1", +              "bundled": true, +              "optional": true +            }, +            "needle": { +              "version": "2.3.0", +              "bundled": true, +              "optional": true, +              "requires": { +                "debug": "^4.1.0", +                "iconv-lite": "^0.4.4", +                "sax": "^1.2.4" +              } +            }, +            "node-pre-gyp": { +              "version": "0.12.0", +              "bundled": true, +              "optional": true, +              "requires": { +                "detect-libc": "^1.0.2", +                "mkdirp": "^0.5.1", +                "needle": "^2.2.1", +                "nopt": "^4.0.1", +                "npm-packlist": "^1.1.6", +                "npmlog": "^4.0.2", +                "rc": "^1.2.7", +                "rimraf": "^2.6.1", +                "semver": "^5.3.0", +                "tar": "^4" +              } +            }, +            "nopt": { +              "version": "4.0.1", +              "bundled": true, +              "optional": true, +              "requires": { +                "abbrev": "1", +                "osenv": "^0.1.4" +              } +            }, +            "npm-bundled": { +              "version": "1.0.6", +              "bundled": true, +              "optional": true +            }, +            "npm-packlist": { +              "version": "1.4.1", +              "bundled": true, +              "optional": true, +              "requires": { +                "ignore-walk": "^3.0.1", +                "npm-bundled": "^1.0.1" +              } +            }, +            "npmlog": { +              "version": "4.1.2", +              "bundled": true, +              "optional": true, +              "requires": { +                "are-we-there-yet": "~1.1.2", +                "console-control-strings": "~1.1.0", +                "gauge": "~2.7.3", +                "set-blocking": "~2.0.0" +              } +            }, +            "number-is-nan": { +              "version": "1.0.1", +              "bundled": true, +              "optional": true +            }, +            "object-assign": { +              "version": "4.1.1", +              "bundled": true, +              "optional": true +            }, +            "once": { +              "version": "1.4.0", +              "bundled": true, +              "optional": true, +              "requires": { +                "wrappy": "1" +              } +            }, +            "os-homedir": { +              "version": "1.0.2", +              "bundled": true, +              "optional": true +            }, +            "os-tmpdir": { +              "version": "1.0.2", +              "bundled": true, +              "optional": true +            }, +            "osenv": { +              "version": "0.1.5", +              "bundled": true, +              "optional": true, +              "requires": { +                "os-homedir": "^1.0.0", +                "os-tmpdir": "^1.0.0" +              } +            }, +            "path-is-absolute": { +              "version": "1.0.1", +              "bundled": true, +              "optional": true +            }, +            "process-nextick-args": { +              "version": "2.0.0", +              "bundled": true, +              "optional": true +            }, +            "rc": { +              "version": "1.2.8", +              "bundled": true, +              "optional": true, +              "requires": { +                "deep-extend": "^0.6.0", +                "ini": "~1.3.0", +                "minimist": "^1.2.0", +                "strip-json-comments": "~2.0.1" +              }, +              "dependencies": { +                "minimist": { +                  "version": "1.2.0", +                  "bundled": true, +                  "optional": true +                } +              } +            }, +            "readable-stream": { +              "version": "2.3.6", +              "bundled": true, +              "optional": true, +              "requires": { +                "core-util-is": "~1.0.0", +                "inherits": "~2.0.3", +                "isarray": "~1.0.0", +                "process-nextick-args": "~2.0.0", +                "safe-buffer": "~5.1.1", +                "string_decoder": "~1.1.1", +                "util-deprecate": "~1.0.1" +              } +            }, +            "rimraf": { +              "version": "2.6.3", +              "bundled": true, +              "optional": true, +              "requires": { +                "glob": "^7.1.3" +              } +            }, +            "safe-buffer": { +              "version": "5.1.2", +              "bundled": true, +              "optional": true +            }, +            "safer-buffer": { +              "version": "2.1.2", +              "bundled": true, +              "optional": true +            }, +            "sax": { +              "version": "1.2.4", +              "bundled": true, +              "optional": true +            }, +            "semver": { +              "version": "5.7.0", +              "bundled": true, +              "optional": true +            }, +            "set-blocking": { +              "version": "2.0.0", +              "bundled": true, +              "optional": true +            }, +            "signal-exit": { +              "version": "3.0.2", +              "bundled": true, +              "optional": true +            }, +            "string-width": { +              "version": "1.0.2", +              "bundled": true, +              "optional": true, +              "requires": { +                "code-point-at": "^1.0.0", +                "is-fullwidth-code-point": "^1.0.0", +                "strip-ansi": "^3.0.0" +              } +            }, +            "string_decoder": { +              "version": "1.1.1", +              "bundled": true, +              "optional": true, +              "requires": { +                "safe-buffer": "~5.1.0" +              } +            }, +            "strip-ansi": { +              "version": "3.0.1", +              "bundled": true, +              "optional": true, +              "requires": { +                "ansi-regex": "^2.0.0" +              } +            }, +            "strip-json-comments": { +              "version": "2.0.1", +              "bundled": true, +              "optional": true +            }, +            "tar": { +              "version": "4.4.8", +              "bundled": true, +              "optional": true, +              "requires": { +                "chownr": "^1.1.1", +                "fs-minipass": "^1.2.5", +                "minipass": "^2.3.4", +                "minizlib": "^1.1.1", +                "mkdirp": "^0.5.0", +                "safe-buffer": "^5.1.2", +                "yallist": "^3.0.2" +              } +            }, +            "util-deprecate": { +              "version": "1.0.2", +              "bundled": true, +              "optional": true +            }, +            "wide-align": { +              "version": "1.1.3", +              "bundled": true, +              "optional": true, +              "requires": { +                "string-width": "^1.0.2 || 2" +              } +            }, +            "wrappy": { +              "version": "1.0.2", +              "bundled": true, +              "optional": true +            }, +            "yallist": { +              "version": "3.0.3", +              "bundled": true, +              "optional": true +            } +          } +        }, +        "glob-parent": { +          "version": "3.1.0", +          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", +          "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", +          "requires": { +            "is-glob": "^3.1.0", +            "path-dirname": "^1.0.0" +          }, +          "dependencies": { +            "is-glob": { +              "version": "3.1.0", +              "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", +              "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", +              "requires": { +                "is-extglob": "^2.1.0" +              } +            } +          } +        }, +        "normalize-path": { +          "version": "3.0.0", +          "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", +          "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" +        } +      } +    }, +    "chownr": { +      "version": "1.1.3", +      "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz", +      "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==" +    }, +    "chrome-trace-event": { +      "version": "1.0.2", +      "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", +      "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", +      "requires": { +        "tslib": "^1.9.0" +      } +    }, +    "ci-info": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", +      "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" +    }, +    "cipher-base": { +      "version": "1.0.4", +      "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", +      "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", +      "requires": { +        "inherits": "^2.0.1", +        "safe-buffer": "^5.0.1" +      } +    }, +    "class-utils": { +      "version": "0.3.6", +      "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", +      "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", +      "requires": { +        "arr-union": "^3.1.0", +        "define-property": "^0.2.5", +        "isobject": "^3.0.0", +        "static-extend": "^0.1.1" +      }, +      "dependencies": { +        "define-property": { +          "version": "0.2.5", +          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", +          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", +          "requires": { +            "is-descriptor": "^0.1.0" +          } +        } +      } +    }, +    "classnames": { +      "version": "2.2.6", +      "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", +      "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" +    }, +    "clean-css": { +      "version": "4.2.1", +      "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", +      "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", +      "requires": { +        "source-map": "~0.6.0" +      }, +      "dependencies": { +        "source-map": { +          "version": "0.6.1", +          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", +          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" +        } +      } +    }, +    "cli-cursor": { +      "version": "3.1.0", +      "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", +      "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", +      "requires": { +        "restore-cursor": "^3.1.0" +      } +    }, +    "cli-width": { +      "version": "2.2.0", +      "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", +      "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" +    }, +    "cliui": { +      "version": "5.0.0", +      "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", +      "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", +      "requires": { +        "string-width": "^3.1.0", +        "strip-ansi": "^5.2.0", +        "wrap-ansi": "^5.1.0" +      }, +      "dependencies": { +        "emoji-regex": { +          "version": "7.0.3", +          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", +          "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" +        }, +        "is-fullwidth-code-point": { +          "version": "2.0.0", +          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", +          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" +        }, +        "string-width": { +          "version": "3.1.0", +          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", +          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", +          "requires": { +            "emoji-regex": "^7.0.1", +            "is-fullwidth-code-point": "^2.0.0", +            "strip-ansi": "^5.1.0" +          } +        } +      } +    }, +    "clone-deep": { +      "version": "0.2.4", +      "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz", +      "integrity": "sha1-TnPdCen7lxzDhnDF3O2cGJZIHMY=", +      "requires": { +        "for-own": "^0.1.3", +        "is-plain-object": "^2.0.1", +        "kind-of": "^3.0.2", +        "lazy-cache": "^1.0.3", +        "shallow-clone": "^0.1.2" +      } +    }, +    "clsx": { +      "version": "1.0.4", +      "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.0.4.tgz", +      "integrity": "sha512-1mQ557MIZTrL/140j+JVdRM6e31/OA4vTYxXgqIIZlndyfjHpyawKZia1Im05Vp9BWmImkcNrNtFYQMyFcgJDg==" +    }, +    "co": { +      "version": "4.6.0", +      "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", +      "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" +    }, +    "coa": { +      "version": "2.0.2", +      "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", +      "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", +      "requires": { +        "@types/q": "^1.5.1", +        "chalk": "^2.4.1", +        "q": "^1.1.2" +      } +    }, +    "code-point-at": { +      "version": "1.1.0", +      "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", +      "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" +    }, +    "collection-visit": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", +      "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", +      "requires": { +        "map-visit": "^1.0.0", +        "object-visit": "^1.0.0" +      } +    }, +    "color": { +      "version": "3.1.2", +      "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", +      "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", +      "requires": { +        "color-convert": "^1.9.1", +        "color-string": "^1.5.2" +      } +    }, +    "color-convert": { +      "version": "1.9.3", +      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", +      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", +      "requires": { +        "color-name": "1.1.3" +      } +    }, +    "color-name": { +      "version": "1.1.3", +      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", +      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" +    }, +    "color-string": { +      "version": "1.5.3", +      "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", +      "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", +      "requires": { +        "color-name": "^1.0.0", +        "simple-swizzle": "^0.2.2" +      } +    }, +    "combined-stream": { +      "version": "1.0.8", +      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", +      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", +      "requires": { +        "delayed-stream": "~1.0.0" +      } +    }, +    "commander": { +      "version": "2.20.3", +      "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", +      "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" +    }, +    "common-tags": { +      "version": "1.8.0", +      "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", +      "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==" +    }, +    "commondir": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", +      "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" +    }, +    "component-emitter": { +      "version": "1.3.0", +      "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", +      "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" +    }, +    "compose-function": { +      "version": "3.0.3", +      "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", +      "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", +      "requires": { +        "arity-n": "^1.0.4" +      } +    }, +    "compressible": { +      "version": "2.0.17", +      "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", +      "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==", +      "requires": { +        "mime-db": ">= 1.40.0 < 2" +      } +    }, +    "compression": { +      "version": "1.7.4", +      "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", +      "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", +      "requires": { +        "accepts": "~1.3.5", +        "bytes": "3.0.0", +        "compressible": "~2.0.16", +        "debug": "2.6.9", +        "on-headers": "~1.0.2", +        "safe-buffer": "5.1.2", +        "vary": "~1.1.2" +      }, +      "dependencies": { +        "debug": { +          "version": "2.6.9", +          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", +          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", +          "requires": { +            "ms": "2.0.0" +          } +        }, +        "ms": { +          "version": "2.0.0", +          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", +          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" +        } +      } +    }, +    "concat-map": { +      "version": "0.0.1", +      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", +      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" +    }, +    "concat-stream": { +      "version": "1.6.2", +      "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", +      "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", +      "requires": { +        "buffer-from": "^1.0.0", +        "inherits": "^2.0.3", +        "readable-stream": "^2.2.2", +        "typedarray": "^0.0.6" +      }, +      "dependencies": { +        "readable-stream": { +          "version": "2.3.6", +          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", +          "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", +          "requires": { +            "core-util-is": "~1.0.0", +            "inherits": "~2.0.3", +            "isarray": "~1.0.0", +            "process-nextick-args": "~2.0.0", +            "safe-buffer": "~5.1.1", +            "string_decoder": "~1.1.1", +            "util-deprecate": "~1.0.1" +          } +        }, +        "string_decoder": { +          "version": "1.1.1", +          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", +          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", +          "requires": { +            "safe-buffer": "~5.1.0" +          } +        } +      } +    }, +    "confusing-browser-globals": { +      "version": "1.0.9", +      "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz", +      "integrity": "sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw==" +    }, +    "connect-history-api-fallback": { +      "version": "1.6.0", +      "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", +      "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==" +    }, +    "console-browserify": { +      "version": "1.2.0", +      "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", +      "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" +    }, +    "constants-browserify": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", +      "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" +    }, +    "contains-path": { +      "version": "0.1.0", +      "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", +      "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=" +    }, +    "content-disposition": { +      "version": "0.5.3", +      "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", +      "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", +      "requires": { +        "safe-buffer": "5.1.2" +      } +    }, +    "content-type": { +      "version": "1.0.4", +      "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", +      "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" +    }, +    "convert-css-length": { +      "version": "2.0.1", +      "resolved": "https://registry.npmjs.org/convert-css-length/-/convert-css-length-2.0.1.tgz", +      "integrity": "sha512-iGpbcvhLPRKUbBc0Quxx7w/bV14AC3ItuBEGMahA5WTYqB8lq9jH0kTXFheCBASsYnqeMFZhiTruNxr1N59Axg==" +    }, +    "convert-source-map": { +      "version": "1.7.0", +      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", +      "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", +      "requires": { +        "safe-buffer": "~5.1.1" +      } +    }, +    "cookie": { +      "version": "0.4.0", +      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", +      "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" +    }, +    "cookie-signature": { +      "version": "1.0.6", +      "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", +      "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" +    }, +    "copy-concurrently": { +      "version": "1.0.5", +      "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", +      "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", +      "requires": { +        "aproba": "^1.1.1", +        "fs-write-stream-atomic": "^1.0.8", +        "iferr": "^0.1.5", +        "mkdirp": "^0.5.1", +        "rimraf": "^2.5.4", +        "run-queue": "^1.0.0" +      } +    }, +    "copy-descriptor": { +      "version": "0.1.1", +      "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", +      "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" +    }, +    "core-js": { +      "version": "3.2.1", +      "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.2.1.tgz", +      "integrity": "sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw==" +    }, +    "core-js-compat": { +      "version": "3.4.1", +      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.4.1.tgz", +      "integrity": "sha512-YdeJI26gLc0CQJ9asLE5obEgBz2I0+CIgnoTbS2T0d5IPQw/OCgCIFR527RmpduxjrB3gSEHoGOCTq9sigOyfw==", +      "requires": { +        "browserslist": "^4.7.2", +        "semver": "^6.3.0" +      } +    }, +    "core-util-is": { +      "version": "1.0.2", +      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", +      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" +    }, +    "cosmiconfig": { +      "version": "5.2.1", +      "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", +      "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", +      "requires": { +        "import-fresh": "^2.0.0", +        "is-directory": "^0.3.1", +        "js-yaml": "^3.13.1", +        "parse-json": "^4.0.0" +      } +    }, +    "create-ecdh": { +      "version": "4.0.3", +      "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", +      "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", +      "requires": { +        "bn.js": "^4.1.0", +        "elliptic": "^6.0.0" +      } +    }, +    "create-hash": { +      "version": "1.2.0", +      "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", +      "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", +      "requires": { +        "cipher-base": "^1.0.1", +        "inherits": "^2.0.1", +        "md5.js": "^1.3.4", +        "ripemd160": "^2.0.1", +        "sha.js": "^2.4.0" +      } +    }, +    "create-hmac": { +      "version": "1.1.7", +      "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", +      "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", +      "requires": { +        "cipher-base": "^1.0.3", +        "create-hash": "^1.1.0", +        "inherits": "^2.0.1", +        "ripemd160": "^2.0.0", +        "safe-buffer": "^5.0.1", +        "sha.js": "^2.4.8" +      } +    }, +    "cross-spawn": { +      "version": "6.0.5", +      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", +      "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", +      "requires": { +        "nice-try": "^1.0.4", +        "path-key": "^2.0.1", +        "semver": "^5.5.0", +        "shebang-command": "^1.2.0", +        "which": "^1.2.9" +      }, +      "dependencies": { +        "semver": { +          "version": "5.7.1", +          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", +          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" +        } +      } +    }, +    "crypto-browserify": { +      "version": "3.12.0", +      "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", +      "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", +      "requires": { +        "browserify-cipher": "^1.0.0", +        "browserify-sign": "^4.0.0", +        "create-ecdh": "^4.0.0", +        "create-hash": "^1.1.0", +        "create-hmac": "^1.1.0", +        "diffie-hellman": "^5.0.0", +        "inherits": "^2.0.1", +        "pbkdf2": "^3.0.3", +        "public-encrypt": "^4.0.0", +        "randombytes": "^2.0.0", +        "randomfill": "^1.0.3" +      } +    }, +    "css": { +      "version": "2.2.4", +      "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", +      "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", +      "requires": { +        "inherits": "^2.0.3", +        "source-map": "^0.6.1", +        "source-map-resolve": "^0.5.2", +        "urix": "^0.1.0" +      }, +      "dependencies": { +        "source-map": { +          "version": "0.6.1", +          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", +          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" +        } +      } +    }, +    "css-blank-pseudo": { +      "version": "0.1.4", +      "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz", +      "integrity": "sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w==", +      "requires": { +        "postcss": "^7.0.5" +      } +    }, +    "css-color-names": { +      "version": "0.0.4", +      "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", +      "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=" +    }, +    "css-declaration-sorter": { +      "version": "4.0.1", +      "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", +      "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", +      "requires": { +        "postcss": "^7.0.1", +        "timsort": "^0.3.0" +      } +    }, +    "css-has-pseudo": { +      "version": "0.10.0", +      "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz", +      "integrity": "sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ==", +      "requires": { +        "postcss": "^7.0.6", +        "postcss-selector-parser": "^5.0.0-rc.4" +      }, +      "dependencies": { +        "cssesc": { +          "version": "2.0.0", +          "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", +          "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" +        }, +        "postcss-selector-parser": { +          "version": "5.0.0", +          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", +          "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", +          "requires": { +            "cssesc": "^2.0.0", +            "indexes-of": "^1.0.1", +            "uniq": "^1.0.1" +          } +        } +      } +    }, +    "css-loader": { +      "version": "2.1.1", +      "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-2.1.1.tgz", +      "integrity": "sha512-OcKJU/lt232vl1P9EEDamhoO9iKY3tIjY5GU+XDLblAykTdgs6Ux9P1hTHve8nFKy5KPpOXOsVI/hIwi3841+w==", +      "requires": { +        "camelcase": "^5.2.0", +        "icss-utils": "^4.1.0", +        "loader-utils": "^1.2.3", +        "normalize-path": "^3.0.0", +        "postcss": "^7.0.14", +        "postcss-modules-extract-imports": "^2.0.0", +        "postcss-modules-local-by-default": "^2.0.6", +        "postcss-modules-scope": "^2.1.0", +        "postcss-modules-values": "^2.0.0", +        "postcss-value-parser": "^3.3.0", +        "schema-utils": "^1.0.0" +      }, +      "dependencies": { +        "normalize-path": { +          "version": "3.0.0", +          "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", +          "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" +        } +      } +    }, +    "css-prefers-color-scheme": { +      "version": "3.1.1", +      "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz", +      "integrity": "sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg==", +      "requires": { +        "postcss": "^7.0.5" +      } +    }, +    "css-select": { +      "version": "2.1.0", +      "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", +      "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", +      "requires": { +        "boolbase": "^1.0.0", +        "css-what": "^3.2.1", +        "domutils": "^1.7.0", +        "nth-check": "^1.0.2" +      } +    }, +    "css-select-base-adapter": { +      "version": "0.1.1", +      "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", +      "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" +    }, +    "css-tree": { +      "version": "1.0.0-alpha.37", +      "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", +      "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", +      "requires": { +        "mdn-data": "2.0.4", +        "source-map": "^0.6.1" +      }, +      "dependencies": { +        "source-map": { +          "version": "0.6.1", +          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", +          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" +        } +      } +    }, +    "css-unit-converter": { +      "version": "1.1.1", +      "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.1.tgz", +      "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=" +    }, +    "css-vendor": { +      "version": "2.0.7", +      "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-2.0.7.tgz", +      "integrity": "sha512-VS9Rjt79+p7M0WkPqcAza4Yq1ZHrsHrwf7hPL/bjQB+c1lwmAI+1FXxYTYt818D/50fFVflw0XKleiBN5RITkg==", +      "requires": { +        "@babel/runtime": "^7.6.2", +        "is-in-browser": "^1.0.2" +      }, +      "dependencies": { +        "@babel/runtime": { +          "version": "7.7.4", +          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.4.tgz", +          "integrity": "sha512-r24eVUUr0QqNZa+qrImUk8fn5SPhHq+IfYvIoIMg0do3GdK9sMdiLKP3GYVVaxpPKORgm8KRKaNTEhAjgIpLMw==", +          "requires": { +            "regenerator-runtime": "^0.13.2" +          } +        } +      } +    }, +    "css-what": { +      "version": "3.2.1", +      "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.2.1.tgz", +      "integrity": "sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw==" +    }, +    "cssdb": { +      "version": "4.4.0", +      "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz", +      "integrity": "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ==" +    }, +    "cssesc": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", +      "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" +    }, +    "cssnano": { +      "version": "4.1.10", +      "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", +      "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", +      "requires": { +        "cosmiconfig": "^5.0.0", +        "cssnano-preset-default": "^4.0.7", +        "is-resolvable": "^1.0.0", +        "postcss": "^7.0.0" +      } +    }, +    "cssnano-preset-default": { +      "version": "4.0.7", +      "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", +      "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", +      "requires": { +        "css-declaration-sorter": "^4.0.1", +        "cssnano-util-raw-cache": "^4.0.1", +        "postcss": "^7.0.0", +        "postcss-calc": "^7.0.1", +        "postcss-colormin": "^4.0.3", +        "postcss-convert-values": "^4.0.1", +        "postcss-discard-comments": "^4.0.2", +        "postcss-discard-duplicates": "^4.0.2", +        "postcss-discard-empty": "^4.0.1", +        "postcss-discard-overridden": "^4.0.1", +        "postcss-merge-longhand": "^4.0.11", +        "postcss-merge-rules": "^4.0.3", +        "postcss-minify-font-values": "^4.0.2", +        "postcss-minify-gradients": "^4.0.2", +        "postcss-minify-params": "^4.0.2", +        "postcss-minify-selectors": "^4.0.2", +        "postcss-normalize-charset": "^4.0.1", +        "postcss-normalize-display-values": "^4.0.2", +        "postcss-normalize-positions": "^4.0.2", +        "postcss-normalize-repeat-style": "^4.0.2", +        "postcss-normalize-string": "^4.0.2", +        "postcss-normalize-timing-functions": "^4.0.2", +        "postcss-normalize-unicode": "^4.0.1", +        "postcss-normalize-url": "^4.0.1", +        "postcss-normalize-whitespace": "^4.0.2", +        "postcss-ordered-values": "^4.1.2", +        "postcss-reduce-initial": "^4.0.3", +        "postcss-reduce-transforms": "^4.0.2", +        "postcss-svgo": "^4.0.2", +        "postcss-unique-selectors": "^4.0.1" +      } +    }, +    "cssnano-util-get-arguments": { +      "version": "4.0.0", +      "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", +      "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=" +    }, +    "cssnano-util-get-match": { +      "version": "4.0.0", +      "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", +      "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=" +    }, +    "cssnano-util-raw-cache": { +      "version": "4.0.1", +      "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", +      "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", +      "requires": { +        "postcss": "^7.0.0" +      } +    }, +    "cssnano-util-same-parent": { +      "version": "4.0.1", +      "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", +      "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==" +    }, +    "csso": { +      "version": "4.0.2", +      "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.2.tgz", +      "integrity": "sha512-kS7/oeNVXkHWxby5tHVxlhjizRCSv8QdU7hB2FpdAibDU8FjTAolhNjKNTiLzXtUrKT6HwClE81yXwEk1309wg==", +      "requires": { +        "css-tree": "1.0.0-alpha.37" +      } +    }, +    "cssom": { +      "version": "0.3.8", +      "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", +      "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" +    }, +    "cssstyle": { +      "version": "1.4.0", +      "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", +      "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", +      "requires": { +        "cssom": "0.3.x" +      } +    }, +    "csstype": { +      "version": "2.6.7", +      "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.7.tgz", +      "integrity": "sha512-9Mcn9sFbGBAdmimWb2gLVDtFJzeKtDGIr76TUqmjZrw9LFXBMSU70lcs+C0/7fyCd6iBDqmksUcCOUIkisPHsQ==" +    }, +    "cyclist": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", +      "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=" +    }, +    "d": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", +      "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", +      "requires": { +        "es5-ext": "^0.10.50", +        "type": "^1.0.1" +      } +    }, +    "damerau-levenshtein": { +      "version": "1.0.5", +      "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.5.tgz", +      "integrity": "sha512-CBCRqFnpu715iPmw1KrdOrzRqbdFwQTwAWyyyYS42+iAgHCuXZ+/TdMgQkUENPomxEz9z1BEzuQU2Xw0kUuAgA==" +    }, +    "dashdash": { +      "version": "1.14.1", +      "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", +      "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", +      "requires": { +        "assert-plus": "^1.0.0" +      } +    }, +    "data-urls": { +      "version": "1.1.0", +      "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", +      "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", +      "requires": { +        "abab": "^2.0.0", +        "whatwg-mimetype": "^2.2.0", +        "whatwg-url": "^7.0.0" +      }, +      "dependencies": { +        "whatwg-url": { +          "version": "7.1.0", +          "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", +          "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", +          "requires": { +            "lodash.sortby": "^4.7.0", +            "tr46": "^1.0.1", +            "webidl-conversions": "^4.0.2" +          } +        } +      } +    }, +    "debug": { +      "version": "4.1.1", +      "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", +      "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", +      "requires": { +        "ms": "^2.1.1" +      } +    }, +    "decamelize": { +      "version": "1.2.0", +      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", +      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" +    }, +    "decode-uri-component": { +      "version": "0.2.0", +      "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", +      "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" +    }, +    "deep-equal": { +      "version": "1.1.1", +      "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", +      "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", +      "requires": { +        "is-arguments": "^1.0.4", +        "is-date-object": "^1.0.1", +        "is-regex": "^1.0.4", +        "object-is": "^1.0.1", +        "object-keys": "^1.1.1", +        "regexp.prototype.flags": "^1.2.0" +      } +    }, +    "deep-is": { +      "version": "0.1.3", +      "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", +      "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" +    }, +    "default-gateway": { +      "version": "4.2.0", +      "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", +      "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", +      "requires": { +        "execa": "^1.0.0", +        "ip-regex": "^2.1.0" +      } +    }, +    "define-properties": { +      "version": "1.1.3", +      "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", +      "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", +      "requires": { +        "object-keys": "^1.0.12" +      } +    }, +    "define-property": { +      "version": "2.0.2", +      "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", +      "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", +      "requires": { +        "is-descriptor": "^1.0.2", +        "isobject": "^3.0.1" +      }, +      "dependencies": { +        "is-accessor-descriptor": { +          "version": "1.0.0", +          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", +          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", +          "requires": { +            "kind-of": "^6.0.0" +          } +        }, +        "is-data-descriptor": { +          "version": "1.0.0", +          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", +          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", +          "requires": { +            "kind-of": "^6.0.0" +          } +        }, +        "is-descriptor": { +          "version": "1.0.2", +          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", +          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", +          "requires": { +            "is-accessor-descriptor": "^1.0.0", +            "is-data-descriptor": "^1.0.0", +            "kind-of": "^6.0.2" +          } +        }, +        "kind-of": { +          "version": "6.0.2", +          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", +          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" +        } +      } +    }, +    "del": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", +      "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", +      "requires": { +        "globby": "^6.1.0", +        "is-path-cwd": "^1.0.0", +        "is-path-in-cwd": "^1.0.0", +        "p-map": "^1.1.1", +        "pify": "^3.0.0", +        "rimraf": "^2.2.8" +      }, +      "dependencies": { +        "globby": { +          "version": "6.1.0", +          "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", +          "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", +          "requires": { +            "array-union": "^1.0.1", +            "glob": "^7.0.3", +            "object-assign": "^4.0.1", +            "pify": "^2.0.0", +            "pinkie-promise": "^2.0.0" +          }, +          "dependencies": { +            "pify": { +              "version": "2.3.0", +              "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", +              "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" +            } +          } +        } +      } +    }, +    "delayed-stream": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", +      "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" +    }, +    "depd": { +      "version": "1.1.2", +      "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", +      "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" +    }, +    "des.js": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", +      "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", +      "requires": { +        "inherits": "^2.0.1", +        "minimalistic-assert": "^1.0.0" +      } +    }, +    "destroy": { +      "version": "1.0.4", +      "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", +      "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" +    }, +    "detect-newline": { +      "version": "2.1.0", +      "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", +      "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=" +    }, +    "detect-node": { +      "version": "2.0.4", +      "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", +      "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==" +    }, +    "detect-port-alt": { +      "version": "1.1.6", +      "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", +      "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", +      "requires": { +        "address": "^1.0.1", +        "debug": "^2.6.0" +      }, +      "dependencies": { +        "debug": { +          "version": "2.6.9", +          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", +          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", +          "requires": { +            "ms": "2.0.0" +          } +        }, +        "ms": { +          "version": "2.0.0", +          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", +          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" +        } +      } +    }, +    "diff-sequences": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", +      "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==" +    }, +    "diffie-hellman": { +      "version": "5.0.3", +      "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", +      "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", +      "requires": { +        "bn.js": "^4.1.0", +        "miller-rabin": "^4.0.0", +        "randombytes": "^2.0.0" +      } +    }, +    "dir-glob": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", +      "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", +      "requires": { +        "arrify": "^1.0.1", +        "path-type": "^3.0.0" +      } +    }, +    "dns-equal": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", +      "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" +    }, +    "dns-packet": { +      "version": "1.3.1", +      "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", +      "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", +      "requires": { +        "ip": "^1.1.0", +        "safe-buffer": "^5.0.1" +      } +    }, +    "dns-txt": { +      "version": "2.0.2", +      "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", +      "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", +      "requires": { +        "buffer-indexof": "^1.0.0" +      } +    }, +    "doctrine": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", +      "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", +      "requires": { +        "esutils": "^2.0.2" +      } +    }, +    "dom-converter": { +      "version": "0.2.0", +      "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", +      "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", +      "requires": { +        "utila": "~0.4" +      } +    }, +    "dom-helpers": { +      "version": "5.1.3", +      "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.1.3.tgz", +      "integrity": "sha512-nZD1OtwfWGRBWlpANxacBEZrEuLa16o1nh7YopFWeoF68Zt8GGEmzHu6Xv4F3XaFIC+YXtTLrzgqKxFgLEe4jw==", +      "requires": { +        "@babel/runtime": "^7.6.3", +        "csstype": "^2.6.7" +      }, +      "dependencies": { +        "@babel/runtime": { +          "version": "7.7.4", +          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.4.tgz", +          "integrity": "sha512-r24eVUUr0QqNZa+qrImUk8fn5SPhHq+IfYvIoIMg0do3GdK9sMdiLKP3GYVVaxpPKORgm8KRKaNTEhAjgIpLMw==", +          "requires": { +            "regenerator-runtime": "^0.13.2" +          } +        } +      } +    }, +    "dom-serializer": { +      "version": "0.2.2", +      "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", +      "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", +      "requires": { +        "domelementtype": "^2.0.1", +        "entities": "^2.0.0" +      }, +      "dependencies": { +        "domelementtype": { +          "version": "2.0.1", +          "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", +          "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==" +        } +      } +    }, +    "domain-browser": { +      "version": "1.2.0", +      "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", +      "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" +    }, +    "domelementtype": { +      "version": "1.3.1", +      "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", +      "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" +    }, +    "domexception": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", +      "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", +      "requires": { +        "webidl-conversions": "^4.0.2" +      } +    }, +    "domhandler": { +      "version": "2.4.2", +      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", +      "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", +      "requires": { +        "domelementtype": "1" +      } +    }, +    "domutils": { +      "version": "1.7.0", +      "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", +      "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", +      "requires": { +        "dom-serializer": "0", +        "domelementtype": "1" +      } +    }, +    "dot-prop": { +      "version": "4.2.0", +      "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", +      "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", +      "requires": { +        "is-obj": "^1.0.0" +      } +    }, +    "dotenv": { +      "version": "6.2.0", +      "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz", +      "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==" +    }, +    "dotenv-expand": { +      "version": "5.1.0", +      "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", +      "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" +    }, +    "duplexer": { +      "version": "0.1.1", +      "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", +      "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" +    }, +    "duplexify": { +      "version": "3.7.1", +      "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", +      "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", +      "requires": { +        "end-of-stream": "^1.0.0", +        "inherits": "^2.0.1", +        "readable-stream": "^2.0.0", +        "stream-shift": "^1.0.0" +      }, +      "dependencies": { +        "readable-stream": { +          "version": "2.3.6", +          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", +          "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", +          "requires": { +            "core-util-is": "~1.0.0", +            "inherits": "~2.0.3", +            "isarray": "~1.0.0", +            "process-nextick-args": "~2.0.0", +            "safe-buffer": "~5.1.1", +            "string_decoder": "~1.1.1", +            "util-deprecate": "~1.0.1" +          } +        }, +        "string_decoder": { +          "version": "1.1.1", +          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", +          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", +          "requires": { +            "safe-buffer": "~5.1.0" +          } +        } +      } +    }, +    "ecc-jsbn": { +      "version": "0.1.2", +      "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", +      "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", +      "requires": { +        "jsbn": "~0.1.0", +        "safer-buffer": "^2.1.0" +      } +    }, +    "ee-first": { +      "version": "1.1.1", +      "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", +      "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" +    }, +    "electron-to-chromium": { +      "version": "1.3.306", +      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.306.tgz", +      "integrity": "sha512-frDqXvrIROoYvikSKTIKbHbzO6M3/qC6kCIt/1FOa9kALe++c4VAJnwjSFvf1tYLEUsP2n9XZ4XSCyqc3l7A/A==" +    }, +    "elliptic": { +      "version": "6.5.1", +      "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.1.tgz", +      "integrity": "sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg==", +      "requires": { +        "bn.js": "^4.4.0", +        "brorand": "^1.0.1", +        "hash.js": "^1.0.0", +        "hmac-drbg": "^1.0.0", +        "inherits": "^2.0.1", +        "minimalistic-assert": "^1.0.0", +        "minimalistic-crypto-utils": "^1.0.0" +      } +    }, +    "emoji-regex": { +      "version": "8.0.0", +      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", +      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" +    }, +    "emojis-list": { +      "version": "2.1.0", +      "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", +      "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" +    }, +    "encodeurl": { +      "version": "1.0.2", +      "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", +      "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" +    }, +    "end-of-stream": { +      "version": "1.4.4", +      "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", +      "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", +      "requires": { +        "once": "^1.4.0" +      } +    }, +    "enhanced-resolve": { +      "version": "4.1.1", +      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz", +      "integrity": "sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==", +      "requires": { +        "graceful-fs": "^4.1.2", +        "memory-fs": "^0.5.0", +        "tapable": "^1.0.0" +      }, +      "dependencies": { +        "memory-fs": { +          "version": "0.5.0", +          "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", +          "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", +          "requires": { +            "errno": "^0.1.3", +            "readable-stream": "^2.0.1" +          } +        }, +        "readable-stream": { +          "version": "2.3.6", +          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", +          "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", +          "requires": { +            "core-util-is": "~1.0.0", +            "inherits": "~2.0.3", +            "isarray": "~1.0.0", +            "process-nextick-args": "~2.0.0", +            "safe-buffer": "~5.1.1", +            "string_decoder": "~1.1.1", +            "util-deprecate": "~1.0.1" +          } +        }, +        "string_decoder": { +          "version": "1.1.1", +          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", +          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", +          "requires": { +            "safe-buffer": "~5.1.0" +          } +        } +      } +    }, +    "entities": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", +      "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==" +    }, +    "errno": { +      "version": "0.1.7", +      "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", +      "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", +      "requires": { +        "prr": "~1.0.1" +      } +    }, +    "error-ex": { +      "version": "1.3.2", +      "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", +      "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", +      "requires": { +        "is-arrayish": "^0.2.1" +      } +    }, +    "es-abstract": { +      "version": "1.16.0", +      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.0.tgz", +      "integrity": "sha512-xdQnfykZ9JMEiasTAJZJdMWCQ1Vm00NBw79/AWi7ELfZuuPCSOMDZbT9mkOfSctVtfhb+sAAzrm+j//GjjLHLg==", +      "requires": { +        "es-to-primitive": "^1.2.0", +        "function-bind": "^1.1.1", +        "has": "^1.0.3", +        "has-symbols": "^1.0.0", +        "is-callable": "^1.1.4", +        "is-regex": "^1.0.4", +        "object-inspect": "^1.6.0", +        "object-keys": "^1.1.1", +        "string.prototype.trimleft": "^2.1.0", +        "string.prototype.trimright": "^2.1.0" +      } +    }, +    "es-to-primitive": { +      "version": "1.2.1", +      "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", +      "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", +      "requires": { +        "is-callable": "^1.1.4", +        "is-date-object": "^1.0.1", +        "is-symbol": "^1.0.2" +      } +    }, +    "es5-ext": { +      "version": "0.10.52", +      "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.52.tgz", +      "integrity": "sha512-bWCbE9fbpYQY4CU6hJbJ1vSz70EClMlDgJ7BmwI+zEJhxrwjesZRPglGJlsZhu0334U3hI+gaspwksH9IGD6ag==", +      "requires": { +        "es6-iterator": "~2.0.3", +        "es6-symbol": "~3.1.2", +        "next-tick": "~1.0.0" +      } +    }, +    "es6-iterator": { +      "version": "2.0.3", +      "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", +      "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", +      "requires": { +        "d": "1", +        "es5-ext": "^0.10.35", +        "es6-symbol": "^3.1.1" +      } +    }, +    "es6-symbol": { +      "version": "3.1.3", +      "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", +      "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", +      "requires": { +        "d": "^1.0.1", +        "ext": "^1.1.2" +      } +    }, +    "escape-html": { +      "version": "1.0.3", +      "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", +      "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" +    }, +    "escape-string-regexp": { +      "version": "1.0.5", +      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", +      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" +    }, +    "escodegen": { +      "version": "1.12.0", +      "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.12.0.tgz", +      "integrity": "sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg==", +      "requires": { +        "esprima": "^3.1.3", +        "estraverse": "^4.2.0", +        "esutils": "^2.0.2", +        "optionator": "^0.8.1", +        "source-map": "~0.6.1" +      }, +      "dependencies": { +        "esprima": { +          "version": "3.1.3", +          "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", +          "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" +        }, +        "source-map": { +          "version": "0.6.1", +          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", +          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", +          "optional": true +        } +      } +    }, +    "eslint": { +      "version": "6.6.0", +      "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.6.0.tgz", +      "integrity": "sha512-PpEBq7b6qY/qrOmpYQ/jTMDYfuQMELR4g4WI1M/NaSDDD/bdcMb+dj4Hgks7p41kW2caXsPsEZAEAyAgjVVC0g==", +      "requires": { +        "@babel/code-frame": "^7.0.0", +        "ajv": "^6.10.0", +        "chalk": "^2.1.0", +        "cross-spawn": "^6.0.5", +        "debug": "^4.0.1", +        "doctrine": "^3.0.0", +        "eslint-scope": "^5.0.0", +        "eslint-utils": "^1.4.3", +        "eslint-visitor-keys": "^1.1.0", +        "espree": "^6.1.2", +        "esquery": "^1.0.1", +        "esutils": "^2.0.2", +        "file-entry-cache": "^5.0.1", +        "functional-red-black-tree": "^1.0.1", +        "glob-parent": "^5.0.0", +        "globals": "^11.7.0", +        "ignore": "^4.0.6", +        "import-fresh": "^3.0.0", +        "imurmurhash": "^0.1.4", +        "inquirer": "^7.0.0", +        "is-glob": "^4.0.0", +        "js-yaml": "^3.13.1", +        "json-stable-stringify-without-jsonify": "^1.0.1", +        "levn": "^0.3.0", +        "lodash": "^4.17.14", +        "minimatch": "^3.0.4", +        "mkdirp": "^0.5.1", +        "natural-compare": "^1.4.0", +        "optionator": "^0.8.2", +        "progress": "^2.0.0", +        "regexpp": "^2.0.1", +        "semver": "^6.1.2", +        "strip-ansi": "^5.2.0", +        "strip-json-comments": "^3.0.1", +        "table": "^5.2.3", +        "text-table": "^0.2.0", +        "v8-compile-cache": "^2.0.3" +      }, +      "dependencies": { +        "import-fresh": { +          "version": "3.2.1", +          "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", +          "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", +          "requires": { +            "parent-module": "^1.0.0", +            "resolve-from": "^4.0.0" +          } +        }, +        "resolve-from": { +          "version": "4.0.0", +          "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", +          "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" +        } +      } +    }, +    "eslint-config-react-app": { +      "version": "5.0.2", +      "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-5.0.2.tgz", +      "integrity": "sha512-VhlESAQM83uULJ9jsvcKxx2Ab0yrmjUt8kDz5DyhTQufqWE0ssAnejlWri5LXv25xoXfdqOyeDPdfJS9dXKagQ==", +      "requires": { +        "confusing-browser-globals": "^1.0.9" +      } +    }, +    "eslint-import-resolver-node": { +      "version": "0.3.2", +      "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", +      "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", +      "requires": { +        "debug": "^2.6.9", +        "resolve": "^1.5.0" +      }, +      "dependencies": { +        "debug": { +          "version": "2.6.9", +          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", +          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", +          "requires": { +            "ms": "2.0.0" +          } +        }, +        "ms": { +          "version": "2.0.0", +          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", +          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" +        } +      } +    }, +    "eslint-loader": { +      "version": "3.0.2", +      "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-3.0.2.tgz", +      "integrity": "sha512-S5VnD+UpVY1PyYRqeBd/4pgsmkvSokbHqTXAQMpvCyRr3XN2tvSLo9spm2nEpqQqh9dezw3os/0zWihLeOg2Rw==", +      "requires": { +        "fs-extra": "^8.1.0", +        "loader-fs-cache": "^1.0.2", +        "loader-utils": "^1.2.3", +        "object-hash": "^1.3.1", +        "schema-utils": "^2.2.0" +      }, +      "dependencies": { +        "fs-extra": { +          "version": "8.1.0", +          "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", +          "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", +          "requires": { +            "graceful-fs": "^4.2.0", +            "jsonfile": "^4.0.0", +            "universalify": "^0.1.0" +          } +        }, +        "schema-utils": { +          "version": "2.5.0", +          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.5.0.tgz", +          "integrity": "sha512-32ISrwW2scPXHUSusP8qMg5dLUawKkyV+/qIEV9JdXKx+rsM6mi8vZY8khg2M69Qom16rtroWXD3Ybtiws38gQ==", +          "requires": { +            "ajv": "^6.10.2", +            "ajv-keywords": "^3.4.1" +          } +        } +      } +    }, +    "eslint-module-utils": { +      "version": "2.4.1", +      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.1.tgz", +      "integrity": "sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw==", +      "requires": { +        "debug": "^2.6.8", +        "pkg-dir": "^2.0.0" +      }, +      "dependencies": { +        "debug": { +          "version": "2.6.9", +          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", +          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", +          "requires": { +            "ms": "2.0.0" +          } +        }, +        "find-up": { +          "version": "2.1.0", +          "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", +          "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", +          "requires": { +            "locate-path": "^2.0.0" +          } +        }, +        "locate-path": { +          "version": "2.0.0", +          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", +          "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", +          "requires": { +            "p-locate": "^2.0.0", +            "path-exists": "^3.0.0" +          } +        }, +        "ms": { +          "version": "2.0.0", +          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", +          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" +        }, +        "p-limit": { +          "version": "1.3.0", +          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", +          "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", +          "requires": { +            "p-try": "^1.0.0" +          } +        }, +        "p-locate": { +          "version": "2.0.0", +          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", +          "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", +          "requires": { +            "p-limit": "^1.1.0" +          } +        }, +        "p-try": { +          "version": "1.0.0", +          "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", +          "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" +        }, +        "pkg-dir": { +          "version": "2.0.0", +          "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", +          "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", +          "requires": { +            "find-up": "^2.1.0" +          } +        } +      } +    }, +    "eslint-plugin-flowtype": { +      "version": "3.13.0", +      "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-3.13.0.tgz", +      "integrity": "sha512-bhewp36P+t7cEV0b6OdmoRWJCBYRiHFlqPZAG1oS3SF+Y0LQkeDvFSM4oxoxvczD1OdONCXMlJfQFiWLcV9urw==", +      "requires": { +        "lodash": "^4.17.15" +      } +    }, +    "eslint-plugin-import": { +      "version": "2.18.2", +      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz", +      "integrity": "sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ==", +      "requires": { +        "array-includes": "^3.0.3", +        "contains-path": "^0.1.0", +        "debug": "^2.6.9", +        "doctrine": "1.5.0", +        "eslint-import-resolver-node": "^0.3.2", +        "eslint-module-utils": "^2.4.0", +        "has": "^1.0.3", +        "minimatch": "^3.0.4", +        "object.values": "^1.1.0", +        "read-pkg-up": "^2.0.0", +        "resolve": "^1.11.0" +      }, +      "dependencies": { +        "debug": { +          "version": "2.6.9", +          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", +          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", +          "requires": { +            "ms": "2.0.0" +          } +        }, +        "doctrine": { +          "version": "1.5.0", +          "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", +          "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", +          "requires": { +            "esutils": "^2.0.2", +            "isarray": "^1.0.0" +          } +        }, +        "find-up": { +          "version": "2.1.0", +          "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", +          "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", +          "requires": { +            "locate-path": "^2.0.0" +          } +        }, +        "load-json-file": { +          "version": "2.0.0", +          "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", +          "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", +          "requires": { +            "graceful-fs": "^4.1.2", +            "parse-json": "^2.2.0", +            "pify": "^2.0.0", +            "strip-bom": "^3.0.0" +          } +        }, +        "locate-path": { +          "version": "2.0.0", +          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", +          "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", +          "requires": { +            "p-locate": "^2.0.0", +            "path-exists": "^3.0.0" +          } +        }, +        "ms": { +          "version": "2.0.0", +          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", +          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" +        }, +        "p-limit": { +          "version": "1.3.0", +          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", +          "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", +          "requires": { +            "p-try": "^1.0.0" +          } +        }, +        "p-locate": { +          "version": "2.0.0", +          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", +          "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", +          "requires": { +            "p-limit": "^1.1.0" +          } +        }, +        "p-try": { +          "version": "1.0.0", +          "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", +          "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" +        }, +        "parse-json": { +          "version": "2.2.0", +          "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", +          "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", +          "requires": { +            "error-ex": "^1.2.0" +          } +        }, +        "path-type": { +          "version": "2.0.0", +          "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", +          "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", +          "requires": { +            "pify": "^2.0.0" +          } +        }, +        "pify": { +          "version": "2.3.0", +          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", +          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" +        }, +        "read-pkg": { +          "version": "2.0.0", +          "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", +          "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", +          "requires": { +            "load-json-file": "^2.0.0", +            "normalize-package-data": "^2.3.2", +            "path-type": "^2.0.0" +          } +        }, +        "read-pkg-up": { +          "version": "2.0.0", +          "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", +          "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", +          "requires": { +            "find-up": "^2.0.0", +            "read-pkg": "^2.0.0" +          } +        } +      } +    }, +    "eslint-plugin-jsx-a11y": { +      "version": "6.2.3", +      "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz", +      "integrity": "sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg==", +      "requires": { +        "@babel/runtime": "^7.4.5", +        "aria-query": "^3.0.0", +        "array-includes": "^3.0.3", +        "ast-types-flow": "^0.0.7", +        "axobject-query": "^2.0.2", +        "damerau-levenshtein": "^1.0.4", +        "emoji-regex": "^7.0.2", +        "has": "^1.0.3", +        "jsx-ast-utils": "^2.2.1" +      }, +      "dependencies": { +        "emoji-regex": { +          "version": "7.0.3", +          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", +          "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" +        } +      } +    }, +    "eslint-plugin-react": { +      "version": "7.14.3", +      "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.14.3.tgz", +      "integrity": "sha512-EzdyyBWC4Uz2hPYBiEJrKCUi2Fn+BJ9B/pJQcjw5X+x/H2Nm59S4MJIvL4O5NEE0+WbnQwEBxWY03oUk+Bc3FA==", +      "requires": { +        "array-includes": "^3.0.3", +        "doctrine": "^2.1.0", +        "has": "^1.0.3", +        "jsx-ast-utils": "^2.1.0", +        "object.entries": "^1.1.0", +        "object.fromentries": "^2.0.0", +        "object.values": "^1.1.0", +        "prop-types": "^15.7.2", +        "resolve": "^1.10.1" +      }, +      "dependencies": { +        "doctrine": { +          "version": "2.1.0", +          "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", +          "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", +          "requires": { +            "esutils": "^2.0.2" +          } +        } +      } +    }, +    "eslint-plugin-react-hooks": { +      "version": "1.7.0", +      "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz", +      "integrity": "sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA==" +    }, +    "eslint-scope": { +      "version": "5.0.0", +      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", +      "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", +      "requires": { +        "esrecurse": "^4.1.0", +        "estraverse": "^4.1.1" +      } +    }, +    "eslint-utils": { +      "version": "1.4.3", +      "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", +      "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", +      "requires": { +        "eslint-visitor-keys": "^1.1.0" +      } +    }, +    "eslint-visitor-keys": { +      "version": "1.1.0", +      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", +      "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==" +    }, +    "espree": { +      "version": "6.1.2", +      "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.2.tgz", +      "integrity": "sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA==", +      "requires": { +        "acorn": "^7.1.0", +        "acorn-jsx": "^5.1.0", +        "eslint-visitor-keys": "^1.1.0" +      } +    }, +    "esprima": { +      "version": "4.0.1", +      "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", +      "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" +    }, +    "esquery": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", +      "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", +      "requires": { +        "estraverse": "^4.0.0" +      } +    }, +    "esrecurse": { +      "version": "4.2.1", +      "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", +      "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", +      "requires": { +        "estraverse": "^4.1.0" +      } +    }, +    "estraverse": { +      "version": "4.3.0", +      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", +      "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" +    }, +    "esutils": { +      "version": "2.0.3", +      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", +      "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" +    }, +    "etag": { +      "version": "1.8.1", +      "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", +      "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" +    }, +    "eventemitter3": { +      "version": "4.0.0", +      "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz", +      "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==" +    }, +    "events": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", +      "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==" +    }, +    "eventsource": { +      "version": "1.0.7", +      "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", +      "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", +      "requires": { +        "original": "^1.0.0" +      } +    }, +    "evp_bytestokey": { +      "version": "1.0.3", +      "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", +      "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", +      "requires": { +        "md5.js": "^1.3.4", +        "safe-buffer": "^5.1.1" +      } +    }, +    "exec-sh": { +      "version": "0.3.4", +      "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", +      "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==" +    }, +    "execa": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", +      "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", +      "requires": { +        "cross-spawn": "^6.0.0", +        "get-stream": "^4.0.0", +        "is-stream": "^1.1.0", +        "npm-run-path": "^2.0.0", +        "p-finally": "^1.0.0", +        "signal-exit": "^3.0.0", +        "strip-eof": "^1.0.0" +      } +    }, +    "exit": { +      "version": "0.1.2", +      "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", +      "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=" +    }, +    "expand-brackets": { +      "version": "2.1.4", +      "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", +      "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", +      "requires": { +        "debug": "^2.3.3", +        "define-property": "^0.2.5", +        "extend-shallow": "^2.0.1", +        "posix-character-classes": "^0.1.0", +        "regex-not": "^1.0.0", +        "snapdragon": "^0.8.1", +        "to-regex": "^3.0.1" +      }, +      "dependencies": { +        "debug": { +          "version": "2.6.9", +          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", +          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", +          "requires": { +            "ms": "2.0.0" +          } +        }, +        "define-property": { +          "version": "0.2.5", +          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", +          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", +          "requires": { +            "is-descriptor": "^0.1.0" +          } +        }, +        "extend-shallow": { +          "version": "2.0.1", +          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", +          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", +          "requires": { +            "is-extendable": "^0.1.0" +          } +        }, +        "ms": { +          "version": "2.0.0", +          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", +          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" +        } +      } +    }, +    "expect": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/expect/-/expect-24.9.0.tgz", +      "integrity": "sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==", +      "requires": { +        "@jest/types": "^24.9.0", +        "ansi-styles": "^3.2.0", +        "jest-get-type": "^24.9.0", +        "jest-matcher-utils": "^24.9.0", +        "jest-message-util": "^24.9.0", +        "jest-regex-util": "^24.9.0" +      } +    }, +    "express": { +      "version": "4.17.1", +      "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", +      "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", +      "requires": { +        "accepts": "~1.3.7", +        "array-flatten": "1.1.1", +        "body-parser": "1.19.0", +        "content-disposition": "0.5.3", +        "content-type": "~1.0.4", +        "cookie": "0.4.0", +        "cookie-signature": "1.0.6", +        "debug": "2.6.9", +        "depd": "~1.1.2", +        "encodeurl": "~1.0.2", +        "escape-html": "~1.0.3", +        "etag": "~1.8.1", +        "finalhandler": "~1.1.2", +        "fresh": "0.5.2", +        "merge-descriptors": "1.0.1", +        "methods": "~1.1.2", +        "on-finished": "~2.3.0", +        "parseurl": "~1.3.3", +        "path-to-regexp": "0.1.7", +        "proxy-addr": "~2.0.5", +        "qs": "6.7.0", +        "range-parser": "~1.2.1", +        "safe-buffer": "5.1.2", +        "send": "0.17.1", +        "serve-static": "1.14.1", +        "setprototypeof": "1.1.1", +        "statuses": "~1.5.0", +        "type-is": "~1.6.18", +        "utils-merge": "1.0.1", +        "vary": "~1.1.2" +      }, +      "dependencies": { +        "array-flatten": { +          "version": "1.1.1", +          "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", +          "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" +        }, +        "debug": { +          "version": "2.6.9", +          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", +          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", +          "requires": { +            "ms": "2.0.0" +          } +        }, +        "ms": { +          "version": "2.0.0", +          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", +          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" +        }, +        "qs": { +          "version": "6.7.0", +          "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", +          "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" +        } +      } +    }, +    "ext": { +      "version": "1.2.0", +      "resolved": "https://registry.npmjs.org/ext/-/ext-1.2.0.tgz", +      "integrity": "sha512-0ccUQK/9e3NreLFg6K6np8aPyRgwycx+oFGtfx1dSp7Wj00Ozw9r05FgBRlzjf2XBM7LAzwgLyDscRrtSU91hA==", +      "requires": { +        "type": "^2.0.0" +      }, +      "dependencies": { +        "type": { +          "version": "2.0.0", +          "resolved": "https://registry.npmjs.org/type/-/type-2.0.0.tgz", +          "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==" +        } +      } +    }, +    "extend": { +      "version": "3.0.2", +      "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", +      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" +    }, +    "extend-shallow": { +      "version": "3.0.2", +      "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", +      "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", +      "requires": { +        "assign-symbols": "^1.0.0", +        "is-extendable": "^1.0.1" +      }, +      "dependencies": { +        "is-extendable": { +          "version": "1.0.1", +          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", +          "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", +          "requires": { +            "is-plain-object": "^2.0.4" +          } +        } +      } +    }, +    "external-editor": { +      "version": "3.1.0", +      "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", +      "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", +      "requires": { +        "chardet": "^0.7.0", +        "iconv-lite": "^0.4.24", +        "tmp": "^0.0.33" +      } +    }, +    "extglob": { +      "version": "2.0.4", +      "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", +      "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", +      "requires": { +        "array-unique": "^0.3.2", +        "define-property": "^1.0.0", +        "expand-brackets": "^2.1.4", +        "extend-shallow": "^2.0.1", +        "fragment-cache": "^0.2.1", +        "regex-not": "^1.0.0", +        "snapdragon": "^0.8.1", +        "to-regex": "^3.0.1" +      }, +      "dependencies": { +        "define-property": { +          "version": "1.0.0", +          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", +          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", +          "requires": { +            "is-descriptor": "^1.0.0" +          } +        }, +        "extend-shallow": { +          "version": "2.0.1", +          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", +          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", +          "requires": { +            "is-extendable": "^0.1.0" +          } +        }, +        "is-accessor-descriptor": { +          "version": "1.0.0", +          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", +          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", +          "requires": { +            "kind-of": "^6.0.0" +          } +        }, +        "is-data-descriptor": { +          "version": "1.0.0", +          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", +          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", +          "requires": { +            "kind-of": "^6.0.0" +          } +        }, +        "is-descriptor": { +          "version": "1.0.2", +          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", +          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", +          "requires": { +            "is-accessor-descriptor": "^1.0.0", +            "is-data-descriptor": "^1.0.0", +            "kind-of": "^6.0.2" +          } +        }, +        "kind-of": { +          "version": "6.0.2", +          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", +          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" +        } +      } +    }, +    "extsprintf": { +      "version": "1.3.0", +      "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", +      "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" +    }, +    "fast-deep-equal": { +      "version": "2.0.1", +      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", +      "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" +    }, +    "fast-glob": { +      "version": "2.2.7", +      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", +      "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", +      "requires": { +        "@mrmlnc/readdir-enhanced": "^2.2.1", +        "@nodelib/fs.stat": "^1.1.2", +        "glob-parent": "^3.1.0", +        "is-glob": "^4.0.0", +        "merge2": "^1.2.3", +        "micromatch": "^3.1.10" +      }, +      "dependencies": { +        "glob-parent": { +          "version": "3.1.0", +          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", +          "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", +          "requires": { +            "is-glob": "^3.1.0", +            "path-dirname": "^1.0.0" +          }, +          "dependencies": { +            "is-glob": { +              "version": "3.1.0", +              "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", +              "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", +              "requires": { +                "is-extglob": "^2.1.0" +              } +            } +          } +        } +      } +    }, +    "fast-json-stable-stringify": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", +      "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" +    }, +    "fast-levenshtein": { +      "version": "2.0.6", +      "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", +      "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" +    }, +    "faye-websocket": { +      "version": "0.11.3", +      "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", +      "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", +      "requires": { +        "websocket-driver": ">=0.5.1" +      } +    }, +    "fb-watchman": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", +      "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", +      "requires": { +        "bser": "^2.0.0" +      } +    }, +    "figgy-pudding": { +      "version": "3.5.1", +      "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", +      "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==" +    }, +    "figures": { +      "version": "3.1.0", +      "resolved": "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz", +      "integrity": "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==", +      "requires": { +        "escape-string-regexp": "^1.0.5" +      } +    }, +    "file-entry-cache": { +      "version": "5.0.1", +      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", +      "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", +      "requires": { +        "flat-cache": "^2.0.1" +      } +    }, +    "file-loader": { +      "version": "3.0.1", +      "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-3.0.1.tgz", +      "integrity": "sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw==", +      "requires": { +        "loader-utils": "^1.0.2", +        "schema-utils": "^1.0.0" +      } +    }, +    "filesize": { +      "version": "3.6.1", +      "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", +      "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==" +    }, +    "fill-range": { +      "version": "4.0.0", +      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", +      "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", +      "requires": { +        "extend-shallow": "^2.0.1", +        "is-number": "^3.0.0", +        "repeat-string": "^1.6.1", +        "to-regex-range": "^2.1.0" +      }, +      "dependencies": { +        "extend-shallow": { +          "version": "2.0.1", +          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", +          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", +          "requires": { +            "is-extendable": "^0.1.0" +          } +        } +      } +    }, +    "finalhandler": { +      "version": "1.1.2", +      "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", +      "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", +      "requires": { +        "debug": "2.6.9", +        "encodeurl": "~1.0.2", +        "escape-html": "~1.0.3", +        "on-finished": "~2.3.0", +        "parseurl": "~1.3.3", +        "statuses": "~1.5.0", +        "unpipe": "~1.0.0" +      }, +      "dependencies": { +        "debug": { +          "version": "2.6.9", +          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", +          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", +          "requires": { +            "ms": "2.0.0" +          } +        }, +        "ms": { +          "version": "2.0.0", +          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", +          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" +        } +      } +    }, +    "find-cache-dir": { +      "version": "2.1.0", +      "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", +      "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", +      "requires": { +        "commondir": "^1.0.1", +        "make-dir": "^2.0.0", +        "pkg-dir": "^3.0.0" +      } +    }, +    "find-up": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", +      "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", +      "requires": { +        "locate-path": "^3.0.0" +      } +    }, +    "flat-cache": { +      "version": "2.0.1", +      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", +      "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", +      "requires": { +        "flatted": "^2.0.0", +        "rimraf": "2.6.3", +        "write": "1.0.3" +      } +    }, +    "flatted": { +      "version": "2.0.1", +      "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", +      "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==" +    }, +    "flatten": { +      "version": "1.0.3", +      "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", +      "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==" +    }, +    "flush-write-stream": { +      "version": "1.1.1", +      "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", +      "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", +      "requires": { +        "inherits": "^2.0.3", +        "readable-stream": "^2.3.6" +      }, +      "dependencies": { +        "readable-stream": { +          "version": "2.3.6", +          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", +          "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", +          "requires": { +            "core-util-is": "~1.0.0", +            "inherits": "~2.0.3", +            "isarray": "~1.0.0", +            "process-nextick-args": "~2.0.0", +            "safe-buffer": "~5.1.1", +            "string_decoder": "~1.1.1", +            "util-deprecate": "~1.0.1" +          } +        }, +        "string_decoder": { +          "version": "1.1.1", +          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", +          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", +          "requires": { +            "safe-buffer": "~5.1.0" +          } +        } +      } +    }, +    "follow-redirects": { +      "version": "1.9.0", +      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.9.0.tgz", +      "integrity": "sha512-CRcPzsSIbXyVDl0QI01muNDu69S8trU4jArW9LpOt2WtC6LyUJetcIrmfHsRBx7/Jb6GHJUiuqyYxPooFfNt6A==", +      "requires": { +        "debug": "^3.0.0" +      }, +      "dependencies": { +        "debug": { +          "version": "3.2.6", +          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", +          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", +          "requires": { +            "ms": "^2.1.1" +          } +        } +      } +    }, +    "for-in": { +      "version": "1.0.2", +      "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", +      "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" +    }, +    "for-own": { +      "version": "0.1.5", +      "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", +      "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", +      "requires": { +        "for-in": "^1.0.1" +      } +    }, +    "forever-agent": { +      "version": "0.6.1", +      "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", +      "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" +    }, +    "fork-ts-checker-webpack-plugin": { +      "version": "1.5.0", +      "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-1.5.0.tgz", +      "integrity": "sha512-zEhg7Hz+KhZlBhILYpXy+Beu96gwvkROWJiTXOCyOOMMrdBIRPvsBpBqgTI4jfJGrJXcqGwJR8zsBGDmzY0jsA==", +      "requires": { +        "babel-code-frame": "^6.22.0", +        "chalk": "^2.4.1", +        "chokidar": "^2.0.4", +        "micromatch": "^3.1.10", +        "minimatch": "^3.0.4", +        "semver": "^5.6.0", +        "tapable": "^1.0.0", +        "worker-rpc": "^0.1.0" +      }, +      "dependencies": { +        "semver": { +          "version": "5.7.1", +          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", +          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" +        } +      } +    }, +    "form-data": { +      "version": "2.3.3", +      "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", +      "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", +      "requires": { +        "asynckit": "^0.4.0", +        "combined-stream": "^1.0.6", +        "mime-types": "^2.1.12" +      } +    }, +    "forwarded": { +      "version": "0.1.2", +      "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", +      "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" +    }, +    "fragment-cache": { +      "version": "0.2.1", +      "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", +      "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", +      "requires": { +        "map-cache": "^0.2.2" +      } +    }, +    "fresh": { +      "version": "0.5.2", +      "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", +      "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" +    }, +    "from2": { +      "version": "2.3.0", +      "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", +      "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", +      "requires": { +        "inherits": "^2.0.1", +        "readable-stream": "^2.0.0" +      }, +      "dependencies": { +        "readable-stream": { +          "version": "2.3.6", +          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", +          "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", +          "requires": { +            "core-util-is": "~1.0.0", +            "inherits": "~2.0.3", +            "isarray": "~1.0.0", +            "process-nextick-args": "~2.0.0", +            "safe-buffer": "~5.1.1", +            "string_decoder": "~1.1.1", +            "util-deprecate": "~1.0.1" +          } +        }, +        "string_decoder": { +          "version": "1.1.1", +          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", +          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", +          "requires": { +            "safe-buffer": "~5.1.0" +          } +        } +      } +    }, +    "fs-extra": { +      "version": "7.0.1", +      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", +      "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", +      "requires": { +        "graceful-fs": "^4.1.2", +        "jsonfile": "^4.0.0", +        "universalify": "^0.1.0" +      } +    }, +    "fs-write-stream-atomic": { +      "version": "1.0.10", +      "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", +      "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", +      "requires": { +        "graceful-fs": "^4.1.2", +        "iferr": "^0.1.5", +        "imurmurhash": "^0.1.4", +        "readable-stream": "1 || 2" +      }, +      "dependencies": { +        "readable-stream": { +          "version": "2.3.6", +          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", +          "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", +          "requires": { +            "core-util-is": "~1.0.0", +            "inherits": "~2.0.3", +            "isarray": "~1.0.0", +            "process-nextick-args": "~2.0.0", +            "safe-buffer": "~5.1.1", +            "string_decoder": "~1.1.1", +            "util-deprecate": "~1.0.1" +          } +        }, +        "string_decoder": { +          "version": "1.1.1", +          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", +          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", +          "requires": { +            "safe-buffer": "~5.1.0" +          } +        } +      } +    }, +    "fs.realpath": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", +      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" +    }, +    "fsevents": { +      "version": "2.0.7", +      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.0.7.tgz", +      "integrity": "sha512-a7YT0SV3RB+DjYcppwVDLtn13UQnmg0SWZS7ezZD0UjnLwXmy8Zm21GMVGLaFGimIqcvyMQaOJBrop8MyOp1kQ==", +      "optional": true +    }, +    "function-bind": { +      "version": "1.1.1", +      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", +      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" +    }, +    "functional-red-black-tree": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", +      "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" +    }, +    "get-caller-file": { +      "version": "2.0.5", +      "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", +      "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" +    }, +    "get-own-enumerable-property-symbols": { +      "version": "3.0.1", +      "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.1.tgz", +      "integrity": "sha512-09/VS4iek66Dh2bctjRkowueRJbY1JDGR1L/zRxO1Qk8Uxs6PnqaNSqalpizPT+CDjre3hnEsuzvhgomz9qYrA==" +    }, +    "get-stream": { +      "version": "4.1.0", +      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", +      "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", +      "requires": { +        "pump": "^3.0.0" +      } +    }, +    "get-value": { +      "version": "2.0.6", +      "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", +      "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" +    }, +    "getpass": { +      "version": "0.1.7", +      "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", +      "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", +      "requires": { +        "assert-plus": "^1.0.0" +      } +    }, +    "glob": { +      "version": "7.1.6", +      "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", +      "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", +      "requires": { +        "fs.realpath": "^1.0.0", +        "inflight": "^1.0.4", +        "inherits": "2", +        "minimatch": "^3.0.4", +        "once": "^1.3.0", +        "path-is-absolute": "^1.0.0" +      } +    }, +    "glob-parent": { +      "version": "5.1.0", +      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", +      "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", +      "requires": { +        "is-glob": "^4.0.1" +      } +    }, +    "glob-to-regexp": { +      "version": "0.3.0", +      "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", +      "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=" +    }, +    "global-modules": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", +      "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", +      "requires": { +        "global-prefix": "^3.0.0" +      } +    }, +    "global-prefix": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", +      "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", +      "requires": { +        "ini": "^1.3.5", +        "kind-of": "^6.0.2", +        "which": "^1.3.1" +      }, +      "dependencies": { +        "kind-of": { +          "version": "6.0.2", +          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", +          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" +        } +      } +    }, +    "globals": { +      "version": "11.12.0", +      "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", +      "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" +    }, +    "globby": { +      "version": "8.0.2", +      "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", +      "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", +      "requires": { +        "array-union": "^1.0.1", +        "dir-glob": "2.0.0", +        "fast-glob": "^2.0.2", +        "glob": "^7.1.2", +        "ignore": "^3.3.5", +        "pify": "^3.0.0", +        "slash": "^1.0.0" +      }, +      "dependencies": { +        "ignore": { +          "version": "3.3.10", +          "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", +          "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" +        }, +        "slash": { +          "version": "1.0.0", +          "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", +          "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" +        } +      } +    }, +    "graceful-fs": { +      "version": "4.2.3", +      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", +      "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" +    }, +    "growly": { +      "version": "1.3.0", +      "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", +      "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=" +    }, +    "gud": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz", +      "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==" +    }, +    "gzip-size": { +      "version": "5.1.1", +      "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", +      "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", +      "requires": { +        "duplexer": "^0.1.1", +        "pify": "^4.0.1" +      }, +      "dependencies": { +        "pify": { +          "version": "4.0.1", +          "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", +          "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" +        } +      } +    }, +    "handle-thing": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", +      "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==" +    }, +    "handlebars": { +      "version": "4.5.3", +      "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.5.3.tgz", +      "integrity": "sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA==", +      "requires": { +        "neo-async": "^2.6.0", +        "optimist": "^0.6.1", +        "source-map": "^0.6.1", +        "uglify-js": "^3.1.4" +      }, +      "dependencies": { +        "source-map": { +          "version": "0.6.1", +          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", +          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" +        } +      } +    }, +    "har-schema": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", +      "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" +    }, +    "har-validator": { +      "version": "5.1.3", +      "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", +      "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", +      "requires": { +        "ajv": "^6.5.5", +        "har-schema": "^2.0.0" +      } +    }, +    "harmony-reflect": { +      "version": "1.6.1", +      "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.1.tgz", +      "integrity": "sha512-WJTeyp0JzGtHcuMsi7rw2VwtkvLa+JyfEKJCFyfcS0+CDkjQ5lHPu7zEhFZP+PDSRrEgXa5Ah0l1MbgbE41XjA==" +    }, +    "has": { +      "version": "1.0.3", +      "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", +      "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", +      "requires": { +        "function-bind": "^1.1.1" +      } +    }, +    "has-ansi": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", +      "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", +      "requires": { +        "ansi-regex": "^2.0.0" +      }, +      "dependencies": { +        "ansi-regex": { +          "version": "2.1.1", +          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", +          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" +        } +      } +    }, +    "has-flag": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", +      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" +    }, +    "has-symbols": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", +      "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" +    }, +    "has-value": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", +      "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", +      "requires": { +        "get-value": "^2.0.6", +        "has-values": "^1.0.0", +        "isobject": "^3.0.0" +      } +    }, +    "has-values": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", +      "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", +      "requires": { +        "is-number": "^3.0.0", +        "kind-of": "^4.0.0" +      }, +      "dependencies": { +        "kind-of": { +          "version": "4.0.0", +          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", +          "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", +          "requires": { +            "is-buffer": "^1.1.5" +          } +        } +      } +    }, +    "hash-base": { +      "version": "3.0.4", +      "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", +      "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", +      "requires": { +        "inherits": "^2.0.1", +        "safe-buffer": "^5.0.1" +      } +    }, +    "hash.js": { +      "version": "1.1.7", +      "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", +      "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", +      "requires": { +        "inherits": "^2.0.3", +        "minimalistic-assert": "^1.0.1" +      } +    }, +    "he": { +      "version": "1.2.0", +      "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", +      "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" +    }, +    "hex-color-regex": { +      "version": "1.1.0", +      "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", +      "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" +    }, +    "history": { +      "version": "4.10.1", +      "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", +      "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", +      "requires": { +        "@babel/runtime": "^7.1.2", +        "loose-envify": "^1.2.0", +        "resolve-pathname": "^3.0.0", +        "tiny-invariant": "^1.0.2", +        "tiny-warning": "^1.0.0", +        "value-equal": "^1.0.1" +      } +    }, +    "hmac-drbg": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", +      "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", +      "requires": { +        "hash.js": "^1.0.3", +        "minimalistic-assert": "^1.0.0", +        "minimalistic-crypto-utils": "^1.0.1" +      } +    }, +    "hoist-non-react-statics": { +      "version": "3.3.1", +      "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", +      "integrity": "sha512-wbg3bpgA/ZqWrZuMOeJi8+SKMhr7X9TesL/rXMjTzh0p0JUBo3II8DHboYbuIXWRlttrUFxwcu/5kygrCw8fJw==", +      "requires": { +        "react-is": "^16.7.0" +      } +    }, +    "hosted-git-info": { +      "version": "2.8.5", +      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", +      "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==" +    }, +    "hpack.js": { +      "version": "2.1.6", +      "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", +      "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", +      "requires": { +        "inherits": "^2.0.1", +        "obuf": "^1.0.0", +        "readable-stream": "^2.0.1", +        "wbuf": "^1.1.0" +      }, +      "dependencies": { +        "readable-stream": { +          "version": "2.3.6", +          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", +          "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", +          "requires": { +            "core-util-is": "~1.0.0", +            "inherits": "~2.0.3", +            "isarray": "~1.0.0", +            "process-nextick-args": "~2.0.0", +            "safe-buffer": "~5.1.1", +            "string_decoder": "~1.1.1", +            "util-deprecate": "~1.0.1" +          } +        }, +        "string_decoder": { +          "version": "1.1.1", +          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", +          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", +          "requires": { +            "safe-buffer": "~5.1.0" +          } +        } +      } +    }, +    "hsl-regex": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", +      "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=" +    }, +    "hsla-regex": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", +      "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=" +    }, +    "html-comment-regex": { +      "version": "1.1.2", +      "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", +      "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==" +    }, +    "html-encoding-sniffer": { +      "version": "1.0.2", +      "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", +      "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", +      "requires": { +        "whatwg-encoding": "^1.0.1" +      } +    }, +    "html-entities": { +      "version": "1.2.1", +      "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", +      "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=" +    }, +    "html-minifier": { +      "version": "3.5.21", +      "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", +      "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", +      "requires": { +        "camel-case": "3.0.x", +        "clean-css": "4.2.x", +        "commander": "2.17.x", +        "he": "1.2.x", +        "param-case": "2.1.x", +        "relateurl": "0.2.x", +        "uglify-js": "3.4.x" +      }, +      "dependencies": { +        "commander": { +          "version": "2.17.1", +          "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", +          "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" +        } +      } +    }, +    "html-webpack-plugin": { +      "version": "4.0.0-beta.5", +      "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.0.0-beta.5.tgz", +      "integrity": "sha512-y5l4lGxOW3pz3xBTFdfB9rnnrWRPVxlAhX6nrBYIcW+2k2zC3mSp/3DxlWVCMBfnO6UAnoF8OcFn0IMy6kaKAQ==", +      "requires": { +        "html-minifier": "^3.5.20", +        "loader-utils": "^1.1.0", +        "lodash": "^4.17.11", +        "pretty-error": "^2.1.1", +        "tapable": "^1.1.0", +        "util.promisify": "1.0.0" +      } +    }, +    "htmlparser2": { +      "version": "3.10.1", +      "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", +      "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", +      "requires": { +        "domelementtype": "^1.3.1", +        "domhandler": "^2.3.0", +        "domutils": "^1.5.1", +        "entities": "^1.1.1", +        "inherits": "^2.0.1", +        "readable-stream": "^3.1.1" +      }, +      "dependencies": { +        "entities": { +          "version": "1.1.2", +          "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", +          "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" +        } +      } +    }, +    "http-deceiver": { +      "version": "1.2.7", +      "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", +      "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" +    }, +    "http-errors": { +      "version": "1.7.2", +      "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", +      "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", +      "requires": { +        "depd": "~1.1.2", +        "inherits": "2.0.3", +        "setprototypeof": "1.1.1", +        "statuses": ">= 1.5.0 < 2", +        "toidentifier": "1.0.0" +      }, +      "dependencies": { +        "inherits": { +          "version": "2.0.3", +          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", +          "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" +        } +      } +    }, +    "http-parser-js": { +      "version": "0.4.10", +      "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz", +      "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=" +    }, +    "http-proxy": { +      "version": "1.18.0", +      "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.0.tgz", +      "integrity": "sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==", +      "requires": { +        "eventemitter3": "^4.0.0", +        "follow-redirects": "^1.0.0", +        "requires-port": "^1.0.0" +      } +    }, +    "http-proxy-middleware": { +      "version": "0.19.1", +      "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", +      "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", +      "requires": { +        "http-proxy": "^1.17.0", +        "is-glob": "^4.0.0", +        "lodash": "^4.17.11", +        "micromatch": "^3.1.10" +      } +    }, +    "http-signature": { +      "version": "1.2.0", +      "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", +      "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", +      "requires": { +        "assert-plus": "^1.0.0", +        "jsprim": "^1.2.2", +        "sshpk": "^1.7.0" +      } +    }, +    "https-browserify": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", +      "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" +    }, +    "hyphenate-style-name": { +      "version": "1.0.3", +      "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz", +      "integrity": "sha512-EcuixamT82oplpoJ2XU4pDtKGWQ7b00CD9f1ug9IaQ3p1bkHMiKCZ9ut9QDI6qsa6cpUuB+A/I+zLtdNK4n2DQ==" +    }, +    "iconv-lite": { +      "version": "0.4.24", +      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", +      "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", +      "requires": { +        "safer-buffer": ">= 2.1.2 < 3" +      } +    }, +    "icss-replace-symbols": { +      "version": "1.1.0", +      "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", +      "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=" +    }, +    "icss-utils": { +      "version": "4.1.1", +      "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", +      "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", +      "requires": { +        "postcss": "^7.0.14" +      } +    }, +    "identity-obj-proxy": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", +      "integrity": "sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ=", +      "requires": { +        "harmony-reflect": "^1.4.6" +      } +    }, +    "ieee754": { +      "version": "1.1.13", +      "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", +      "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" +    }, +    "iferr": { +      "version": "0.1.5", +      "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", +      "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" +    }, +    "ignore": { +      "version": "4.0.6", +      "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", +      "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" +    }, +    "immer": { +      "version": "1.10.0", +      "resolved": "https://registry.npmjs.org/immer/-/immer-1.10.0.tgz", +      "integrity": "sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg==" +    }, +    "import-cwd": { +      "version": "2.1.0", +      "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", +      "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", +      "requires": { +        "import-from": "^2.1.0" +      } +    }, +    "import-fresh": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", +      "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", +      "requires": { +        "caller-path": "^2.0.0", +        "resolve-from": "^3.0.0" +      } +    }, +    "import-from": { +      "version": "2.1.0", +      "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", +      "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", +      "requires": { +        "resolve-from": "^3.0.0" +      } +    }, +    "import-local": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", +      "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", +      "requires": { +        "pkg-dir": "^3.0.0", +        "resolve-cwd": "^2.0.0" +      } +    }, +    "imurmurhash": { +      "version": "0.1.4", +      "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", +      "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" +    }, +    "indexes-of": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", +      "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" +    }, +    "infer-owner": { +      "version": "1.0.4", +      "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", +      "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" +    }, +    "inflight": { +      "version": "1.0.6", +      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", +      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", +      "requires": { +        "once": "^1.3.0", +        "wrappy": "1" +      } +    }, +    "inherits": { +      "version": "2.0.4", +      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", +      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" +    }, +    "ini": { +      "version": "1.3.5", +      "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", +      "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" +    }, +    "inquirer": { +      "version": "7.0.0", +      "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.0.tgz", +      "integrity": "sha512-rSdC7zelHdRQFkWnhsMu2+2SO41mpv2oF2zy4tMhmiLWkcKbOAs87fWAJhVXttKVwhdZvymvnuM95EyEXg2/tQ==", +      "requires": { +        "ansi-escapes": "^4.2.1", +        "chalk": "^2.4.2", +        "cli-cursor": "^3.1.0", +        "cli-width": "^2.0.0", +        "external-editor": "^3.0.3", +        "figures": "^3.0.0", +        "lodash": "^4.17.15", +        "mute-stream": "0.0.8", +        "run-async": "^2.2.0", +        "rxjs": "^6.4.0", +        "string-width": "^4.1.0", +        "strip-ansi": "^5.1.0", +        "through": "^2.3.6" +      } +    }, +    "internal-ip": { +      "version": "4.3.0", +      "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", +      "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", +      "requires": { +        "default-gateway": "^4.2.0", +        "ipaddr.js": "^1.9.0" +      } +    }, +    "invariant": { +      "version": "2.2.4", +      "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", +      "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", +      "requires": { +        "loose-envify": "^1.0.0" +      } +    }, +    "invert-kv": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", +      "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" +    }, +    "ip": { +      "version": "1.1.5", +      "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", +      "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" +    }, +    "ip-regex": { +      "version": "2.1.0", +      "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", +      "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" +    }, +    "ipaddr.js": { +      "version": "1.9.0", +      "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", +      "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==" +    }, +    "is-absolute-url": { +      "version": "2.1.0", +      "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", +      "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=" +    }, +    "is-accessor-descriptor": { +      "version": "0.1.6", +      "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", +      "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", +      "requires": { +        "kind-of": "^3.0.2" +      } +    }, +    "is-arguments": { +      "version": "1.0.4", +      "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", +      "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==" +    }, +    "is-arrayish": { +      "version": "0.2.1", +      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", +      "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" +    }, +    "is-binary-path": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", +      "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", +      "requires": { +        "binary-extensions": "^1.0.0" +      } +    }, +    "is-buffer": { +      "version": "1.1.6", +      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", +      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" +    }, +    "is-callable": { +      "version": "1.1.4", +      "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", +      "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" +    }, +    "is-ci": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", +      "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", +      "requires": { +        "ci-info": "^2.0.0" +      } +    }, +    "is-color-stop": { +      "version": "1.1.0", +      "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", +      "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", +      "requires": { +        "css-color-names": "^0.0.4", +        "hex-color-regex": "^1.1.0", +        "hsl-regex": "^1.0.0", +        "hsla-regex": "^1.0.0", +        "rgb-regex": "^1.0.1", +        "rgba-regex": "^1.0.0" +      } +    }, +    "is-data-descriptor": { +      "version": "0.1.4", +      "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", +      "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", +      "requires": { +        "kind-of": "^3.0.2" +      } +    }, +    "is-date-object": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", +      "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" +    }, +    "is-descriptor": { +      "version": "0.1.6", +      "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", +      "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", +      "requires": { +        "is-accessor-descriptor": "^0.1.6", +        "is-data-descriptor": "^0.1.4", +        "kind-of": "^5.0.0" +      }, +      "dependencies": { +        "kind-of": { +          "version": "5.1.0", +          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", +          "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" +        } +      } +    }, +    "is-directory": { +      "version": "0.3.1", +      "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", +      "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" +    }, +    "is-extendable": { +      "version": "0.1.1", +      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", +      "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" +    }, +    "is-extglob": { +      "version": "2.1.1", +      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", +      "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" +    }, +    "is-fullwidth-code-point": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", +      "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" +    }, +    "is-generator-fn": { +      "version": "2.1.0", +      "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", +      "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" +    }, +    "is-glob": { +      "version": "4.0.1", +      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", +      "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", +      "requires": { +        "is-extglob": "^2.1.1" +      } +    }, +    "is-in-browser": { +      "version": "1.1.3", +      "resolved": "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz", +      "integrity": "sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU=" +    }, +    "is-number": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", +      "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", +      "requires": { +        "kind-of": "^3.0.2" +      } +    }, +    "is-obj": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", +      "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" +    }, +    "is-path-cwd": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", +      "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=" +    }, +    "is-path-in-cwd": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", +      "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", +      "requires": { +        "is-path-inside": "^1.0.0" +      } +    }, +    "is-path-inside": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", +      "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", +      "requires": { +        "path-is-inside": "^1.0.1" +      } +    }, +    "is-plain-obj": { +      "version": "1.1.0", +      "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", +      "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" +    }, +    "is-plain-object": { +      "version": "2.0.4", +      "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", +      "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", +      "requires": { +        "isobject": "^3.0.1" +      } +    }, +    "is-promise": { +      "version": "2.1.0", +      "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", +      "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" +    }, +    "is-regex": { +      "version": "1.0.4", +      "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", +      "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", +      "requires": { +        "has": "^1.0.1" +      } +    }, +    "is-regexp": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", +      "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=" +    }, +    "is-resolvable": { +      "version": "1.1.0", +      "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", +      "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" +    }, +    "is-root": { +      "version": "2.1.0", +      "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", +      "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==" +    }, +    "is-stream": { +      "version": "1.1.0", +      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", +      "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" +    }, +    "is-svg": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", +      "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", +      "requires": { +        "html-comment-regex": "^1.1.0" +      } +    }, +    "is-symbol": { +      "version": "1.0.2", +      "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", +      "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", +      "requires": { +        "has-symbols": "^1.0.0" +      } +    }, +    "is-typedarray": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", +      "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" +    }, +    "is-windows": { +      "version": "1.0.2", +      "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", +      "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" +    }, +    "is-wsl": { +      "version": "1.1.0", +      "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", +      "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" +    }, +    "isarray": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", +      "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" +    }, +    "isexe": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", +      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" +    }, +    "isobject": { +      "version": "3.0.1", +      "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", +      "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" +    }, +    "isstream": { +      "version": "0.1.2", +      "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", +      "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" +    }, +    "istanbul-lib-coverage": { +      "version": "2.0.5", +      "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", +      "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==" +    }, +    "istanbul-lib-instrument": { +      "version": "3.3.0", +      "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", +      "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", +      "requires": { +        "@babel/generator": "^7.4.0", +        "@babel/parser": "^7.4.3", +        "@babel/template": "^7.4.0", +        "@babel/traverse": "^7.4.3", +        "@babel/types": "^7.4.0", +        "istanbul-lib-coverage": "^2.0.5", +        "semver": "^6.0.0" +      } +    }, +    "istanbul-lib-report": { +      "version": "2.0.8", +      "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", +      "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", +      "requires": { +        "istanbul-lib-coverage": "^2.0.5", +        "make-dir": "^2.1.0", +        "supports-color": "^6.1.0" +      }, +      "dependencies": { +        "supports-color": { +          "version": "6.1.0", +          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", +          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", +          "requires": { +            "has-flag": "^3.0.0" +          } +        } +      } +    }, +    "istanbul-lib-source-maps": { +      "version": "3.0.6", +      "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", +      "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", +      "requires": { +        "debug": "^4.1.1", +        "istanbul-lib-coverage": "^2.0.5", +        "make-dir": "^2.1.0", +        "rimraf": "^2.6.3", +        "source-map": "^0.6.1" +      }, +      "dependencies": { +        "source-map": { +          "version": "0.6.1", +          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", +          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" +        } +      } +    }, +    "istanbul-reports": { +      "version": "2.2.6", +      "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz", +      "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==", +      "requires": { +        "handlebars": "^4.1.2" +      } +    }, +    "jest": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/jest/-/jest-24.9.0.tgz", +      "integrity": "sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==", +      "requires": { +        "import-local": "^2.0.0", +        "jest-cli": "^24.9.0" +      }, +      "dependencies": { +        "jest-cli": { +          "version": "24.9.0", +          "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.9.0.tgz", +          "integrity": "sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==", +          "requires": { +            "@jest/core": "^24.9.0", +            "@jest/test-result": "^24.9.0", +            "@jest/types": "^24.9.0", +            "chalk": "^2.0.1", +            "exit": "^0.1.2", +            "import-local": "^2.0.0", +            "is-ci": "^2.0.0", +            "jest-config": "^24.9.0", +            "jest-util": "^24.9.0", +            "jest-validate": "^24.9.0", +            "prompts": "^2.0.1", +            "realpath-native": "^1.1.0", +            "yargs": "^13.3.0" +          } +        } +      } +    }, +    "jest-changed-files": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.9.0.tgz", +      "integrity": "sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==", +      "requires": { +        "@jest/types": "^24.9.0", +        "execa": "^1.0.0", +        "throat": "^4.0.0" +      } +    }, +    "jest-config": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.9.0.tgz", +      "integrity": "sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==", +      "requires": { +        "@babel/core": "^7.1.0", +        "@jest/test-sequencer": "^24.9.0", +        "@jest/types": "^24.9.0", +        "babel-jest": "^24.9.0", +        "chalk": "^2.0.1", +        "glob": "^7.1.1", +        "jest-environment-jsdom": "^24.9.0", +        "jest-environment-node": "^24.9.0", +        "jest-get-type": "^24.9.0", +        "jest-jasmine2": "^24.9.0", +        "jest-regex-util": "^24.3.0", +        "jest-resolve": "^24.9.0", +        "jest-util": "^24.9.0", +        "jest-validate": "^24.9.0", +        "micromatch": "^3.1.10", +        "pretty-format": "^24.9.0", +        "realpath-native": "^1.1.0" +      } +    }, +    "jest-diff": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz", +      "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==", +      "requires": { +        "chalk": "^2.0.1", +        "diff-sequences": "^24.9.0", +        "jest-get-type": "^24.9.0", +        "pretty-format": "^24.9.0" +      } +    }, +    "jest-docblock": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.9.0.tgz", +      "integrity": "sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==", +      "requires": { +        "detect-newline": "^2.1.0" +      } +    }, +    "jest-each": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.9.0.tgz", +      "integrity": "sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==", +      "requires": { +        "@jest/types": "^24.9.0", +        "chalk": "^2.0.1", +        "jest-get-type": "^24.9.0", +        "jest-util": "^24.9.0", +        "pretty-format": "^24.9.0" +      } +    }, +    "jest-environment-jsdom": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz", +      "integrity": "sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==", +      "requires": { +        "@jest/environment": "^24.9.0", +        "@jest/fake-timers": "^24.9.0", +        "@jest/types": "^24.9.0", +        "jest-mock": "^24.9.0", +        "jest-util": "^24.9.0", +        "jsdom": "^11.5.1" +      } +    }, +    "jest-environment-jsdom-fourteen": { +      "version": "0.1.0", +      "resolved": "https://registry.npmjs.org/jest-environment-jsdom-fourteen/-/jest-environment-jsdom-fourteen-0.1.0.tgz", +      "integrity": "sha512-4vtoRMg7jAstitRzL4nbw83VmGH8Rs13wrND3Ud2o1fczDhMUF32iIrNKwYGgeOPUdfvZU4oy8Bbv+ni1fgVCA==", +      "requires": { +        "jest-mock": "^24.5.0", +        "jest-util": "^24.5.0", +        "jsdom": "^14.0.0" +      }, +      "dependencies": { +        "acorn": { +          "version": "6.3.0", +          "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", +          "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==" +        }, +        "jsdom": { +          "version": "14.1.0", +          "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-14.1.0.tgz", +          "integrity": "sha512-O901mfJSuTdwU2w3Sn+74T+RnDVP+FuV5fH8tcPWyqrseRAb0s5xOtPgCFiPOtLcyK7CLIJwPyD83ZqQWvA5ng==", +          "requires": { +            "abab": "^2.0.0", +            "acorn": "^6.0.4", +            "acorn-globals": "^4.3.0", +            "array-equal": "^1.0.0", +            "cssom": "^0.3.4", +            "cssstyle": "^1.1.1", +            "data-urls": "^1.1.0", +            "domexception": "^1.0.1", +            "escodegen": "^1.11.0", +            "html-encoding-sniffer": "^1.0.2", +            "nwsapi": "^2.1.3", +            "parse5": "5.1.0", +            "pn": "^1.1.0", +            "request": "^2.88.0", +            "request-promise-native": "^1.0.5", +            "saxes": "^3.1.9", +            "symbol-tree": "^3.2.2", +            "tough-cookie": "^2.5.0", +            "w3c-hr-time": "^1.0.1", +            "w3c-xmlserializer": "^1.1.2", +            "webidl-conversions": "^4.0.2", +            "whatwg-encoding": "^1.0.5", +            "whatwg-mimetype": "^2.3.0", +            "whatwg-url": "^7.0.0", +            "ws": "^6.1.2", +            "xml-name-validator": "^3.0.0" +          } +        }, +        "parse5": { +          "version": "5.1.0", +          "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", +          "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==" +        }, +        "whatwg-url": { +          "version": "7.1.0", +          "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", +          "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", +          "requires": { +            "lodash.sortby": "^4.7.0", +            "tr46": "^1.0.1", +            "webidl-conversions": "^4.0.2" +          } +        }, +        "ws": { +          "version": "6.2.1", +          "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", +          "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", +          "requires": { +            "async-limiter": "~1.0.0" +          } +        } +      } +    }, +    "jest-environment-node": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.9.0.tgz", +      "integrity": "sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==", +      "requires": { +        "@jest/environment": "^24.9.0", +        "@jest/fake-timers": "^24.9.0", +        "@jest/types": "^24.9.0", +        "jest-mock": "^24.9.0", +        "jest-util": "^24.9.0" +      } +    }, +    "jest-get-type": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", +      "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==" +    }, +    "jest-haste-map": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", +      "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", +      "requires": { +        "@jest/types": "^24.9.0", +        "anymatch": "^2.0.0", +        "fb-watchman": "^2.0.0", +        "fsevents": "^1.2.7", +        "graceful-fs": "^4.1.15", +        "invariant": "^2.2.4", +        "jest-serializer": "^24.9.0", +        "jest-util": "^24.9.0", +        "jest-worker": "^24.9.0", +        "micromatch": "^3.1.10", +        "sane": "^4.0.3", +        "walker": "^1.0.7" +      }, +      "dependencies": { +        "fsevents": { +          "version": "1.2.9", +          "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", +          "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", +          "optional": true, +          "requires": { +            "nan": "^2.12.1", +            "node-pre-gyp": "^0.12.0" +          }, +          "dependencies": { +            "abbrev": { +              "version": "1.1.1", +              "bundled": true, +              "optional": true +            }, +            "ansi-regex": { +              "version": "2.1.1", +              "bundled": true, +              "optional": true +            }, +            "aproba": { +              "version": "1.2.0", +              "bundled": true, +              "optional": true +            }, +            "are-we-there-yet": { +              "version": "1.1.5", +              "bundled": true, +              "optional": true, +              "requires": { +                "delegates": "^1.0.0", +                "readable-stream": "^2.0.6" +              } +            }, +            "balanced-match": { +              "version": "1.0.0", +              "bundled": true, +              "optional": true +            }, +            "brace-expansion": { +              "version": "1.1.11", +              "bundled": true, +              "optional": true, +              "requires": { +                "balanced-match": "^1.0.0", +                "concat-map": "0.0.1" +              } +            }, +            "chownr": { +              "version": "1.1.1", +              "bundled": true, +              "optional": true +            }, +            "code-point-at": { +              "version": "1.1.0", +              "bundled": true, +              "optional": true +            }, +            "concat-map": { +              "version": "0.0.1", +              "bundled": true, +              "optional": true +            }, +            "console-control-strings": { +              "version": "1.1.0", +              "bundled": true, +              "optional": true +            }, +            "core-util-is": { +              "version": "1.0.2", +              "bundled": true, +              "optional": true +            }, +            "debug": { +              "version": "4.1.1", +              "bundled": true, +              "optional": true, +              "requires": { +                "ms": "^2.1.1" +              } +            }, +            "deep-extend": { +              "version": "0.6.0", +              "bundled": true, +              "optional": true +            }, +            "delegates": { +              "version": "1.0.0", +              "bundled": true, +              "optional": true +            }, +            "detect-libc": { +              "version": "1.0.3", +              "bundled": true, +              "optional": true +            }, +            "fs-minipass": { +              "version": "1.2.5", +              "bundled": true, +              "optional": true, +              "requires": { +                "minipass": "^2.2.1" +              } +            }, +            "fs.realpath": { +              "version": "1.0.0", +              "bundled": true, +              "optional": true +            }, +            "gauge": { +              "version": "2.7.4", +              "bundled": true, +              "optional": true, +              "requires": { +                "aproba": "^1.0.3", +                "console-control-strings": "^1.0.0", +                "has-unicode": "^2.0.0", +                "object-assign": "^4.1.0", +                "signal-exit": "^3.0.0", +                "string-width": "^1.0.1", +                "strip-ansi": "^3.0.1", +                "wide-align": "^1.1.0" +              } +            }, +            "glob": { +              "version": "7.1.3", +              "bundled": true, +              "optional": true, +              "requires": { +                "fs.realpath": "^1.0.0", +                "inflight": "^1.0.4", +                "inherits": "2", +                "minimatch": "^3.0.4", +                "once": "^1.3.0", +                "path-is-absolute": "^1.0.0" +              } +            }, +            "has-unicode": { +              "version": "2.0.1", +              "bundled": true, +              "optional": true +            }, +            "iconv-lite": { +              "version": "0.4.24", +              "bundled": true, +              "optional": true, +              "requires": { +                "safer-buffer": ">= 2.1.2 < 3" +              } +            }, +            "ignore-walk": { +              "version": "3.0.1", +              "bundled": true, +              "optional": true, +              "requires": { +                "minimatch": "^3.0.4" +              } +            }, +            "inflight": { +              "version": "1.0.6", +              "bundled": true, +              "optional": true, +              "requires": { +                "once": "^1.3.0", +                "wrappy": "1" +              } +            }, +            "inherits": { +              "version": "2.0.3", +              "bundled": true, +              "optional": true +            }, +            "ini": { +              "version": "1.3.5", +              "bundled": true, +              "optional": true +            }, +            "is-fullwidth-code-point": { +              "version": "1.0.0", +              "bundled": true, +              "optional": true, +              "requires": { +                "number-is-nan": "^1.0.0" +              } +            }, +            "isarray": { +              "version": "1.0.0", +              "bundled": true, +              "optional": true +            }, +            "minimatch": { +              "version": "3.0.4", +              "bundled": true, +              "optional": true, +              "requires": { +                "brace-expansion": "^1.1.7" +              } +            }, +            "minimist": { +              "version": "0.0.8", +              "bundled": true, +              "optional": true +            }, +            "minipass": { +              "version": "2.3.5", +              "bundled": true, +              "optional": true, +              "requires": { +                "safe-buffer": "^5.1.2", +                "yallist": "^3.0.0" +              } +            }, +            "minizlib": { +              "version": "1.2.1", +              "bundled": true, +              "optional": true, +              "requires": { +                "minipass": "^2.2.1" +              } +            }, +            "mkdirp": { +              "version": "0.5.1", +              "bundled": true, +              "optional": true, +              "requires": { +                "minimist": "0.0.8" +              } +            }, +            "ms": { +              "version": "2.1.1", +              "bundled": true, +              "optional": true +            }, +            "needle": { +              "version": "2.3.0", +              "bundled": true, +              "optional": true, +              "requires": { +                "debug": "^4.1.0", +                "iconv-lite": "^0.4.4", +                "sax": "^1.2.4" +              } +            }, +            "node-pre-gyp": { +              "version": "0.12.0", +              "bundled": true, +              "optional": true, +              "requires": { +                "detect-libc": "^1.0.2", +                "mkdirp": "^0.5.1", +                "needle": "^2.2.1", +                "nopt": "^4.0.1", +                "npm-packlist": "^1.1.6", +                "npmlog": "^4.0.2", +                "rc": "^1.2.7", +                "rimraf": "^2.6.1", +                "semver": "^5.3.0", +                "tar": "^4" +              } +            }, +            "nopt": { +              "version": "4.0.1", +              "bundled": true, +              "optional": true, +              "requires": { +                "abbrev": "1", +                "osenv": "^0.1.4" +              } +            }, +            "npm-bundled": { +              "version": "1.0.6", +              "bundled": true, +              "optional": true +            }, +            "npm-packlist": { +              "version": "1.4.1", +              "bundled": true, +              "optional": true, +              "requires": { +                "ignore-walk": "^3.0.1", +                "npm-bundled": "^1.0.1" +              } +            }, +            "npmlog": { +              "version": "4.1.2", +              "bundled": true, +              "optional": true, +              "requires": { +                "are-we-there-yet": "~1.1.2", +                "console-control-strings": "~1.1.0", +                "gauge": "~2.7.3", +                "set-blocking": "~2.0.0" +              } +            }, +            "number-is-nan": { +              "version": "1.0.1", +              "bundled": true, +              "optional": true +            }, +            "object-assign": { +              "version": "4.1.1", +              "bundled": true, +              "optional": true +            }, +            "once": { +              "version": "1.4.0", +              "bundled": true, +              "optional": true, +              "requires": { +                "wrappy": "1" +              } +            }, +            "os-homedir": { +              "version": "1.0.2", +              "bundled": true, +              "optional": true +            }, +            "os-tmpdir": { +              "version": "1.0.2", +              "bundled": true, +              "optional": true +            }, +            "osenv": { +              "version": "0.1.5", +              "bundled": true, +              "optional": true, +              "requires": { +                "os-homedir": "^1.0.0", +                "os-tmpdir": "^1.0.0" +              } +            }, +            "path-is-absolute": { +              "version": "1.0.1", +              "bundled": true, +              "optional": true +            }, +            "process-nextick-args": { +              "version": "2.0.0", +              "bundled": true, +              "optional": true +            }, +            "rc": { +              "version": "1.2.8", +              "bundled": true, +              "optional": true, +              "requires": { +                "deep-extend": "^0.6.0", +                "ini": "~1.3.0", +                "minimist": "^1.2.0", +                "strip-json-comments": "~2.0.1" +              }, +              "dependencies": { +                "minimist": { +                  "version": "1.2.0", +                  "bundled": true, +                  "optional": true +                } +              } +            }, +            "readable-stream": { +              "version": "2.3.6", +              "bundled": true, +              "optional": true, +              "requires": { +                "core-util-is": "~1.0.0", +                "inherits": "~2.0.3", +                "isarray": "~1.0.0", +                "process-nextick-args": "~2.0.0", +                "safe-buffer": "~5.1.1", +                "string_decoder": "~1.1.1", +                "util-deprecate": "~1.0.1" +              } +            }, +            "rimraf": { +              "version": "2.6.3", +              "bundled": true, +              "optional": true, +              "requires": { +                "glob": "^7.1.3" +              } +            }, +            "safe-buffer": { +              "version": "5.1.2", +              "bundled": true, +              "optional": true +            }, +            "safer-buffer": { +              "version": "2.1.2", +              "bundled": true, +              "optional": true +            }, +            "sax": { +              "version": "1.2.4", +              "bundled": true, +              "optional": true +            }, +            "semver": { +              "version": "5.7.0", +              "bundled": true, +              "optional": true +            }, +            "set-blocking": { +              "version": "2.0.0", +              "bundled": true, +              "optional": true +            }, +            "signal-exit": { +              "version": "3.0.2", +              "bundled": true, +              "optional": true +            }, +            "string-width": { +              "version": "1.0.2", +              "bundled": true, +              "optional": true, +              "requires": { +                "code-point-at": "^1.0.0", +                "is-fullwidth-code-point": "^1.0.0", +                "strip-ansi": "^3.0.0" +              } +            }, +            "string_decoder": { +              "version": "1.1.1", +              "bundled": true, +              "optional": true, +              "requires": { +                "safe-buffer": "~5.1.0" +              } +            }, +            "strip-ansi": { +              "version": "3.0.1", +              "bundled": true, +              "optional": true, +              "requires": { +                "ansi-regex": "^2.0.0" +              } +            }, +            "strip-json-comments": { +              "version": "2.0.1", +              "bundled": true, +              "optional": true +            }, +            "tar": { +              "version": "4.4.8", +              "bundled": true, +              "optional": true, +              "requires": { +                "chownr": "^1.1.1", +                "fs-minipass": "^1.2.5", +                "minipass": "^2.3.4", +                "minizlib": "^1.1.1", +                "mkdirp": "^0.5.0", +                "safe-buffer": "^5.1.2", +                "yallist": "^3.0.2" +              } +            }, +            "util-deprecate": { +              "version": "1.0.2", +              "bundled": true, +              "optional": true +            }, +            "wide-align": { +              "version": "1.1.3", +              "bundled": true, +              "optional": true, +              "requires": { +                "string-width": "^1.0.2 || 2" +              } +            }, +            "wrappy": { +              "version": "1.0.2", +              "bundled": true, +              "optional": true +            }, +            "yallist": { +              "version": "3.0.3", +              "bundled": true, +              "optional": true +            } +          } +        } +      } +    }, +    "jest-jasmine2": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz", +      "integrity": "sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==", +      "requires": { +        "@babel/traverse": "^7.1.0", +        "@jest/environment": "^24.9.0", +        "@jest/test-result": "^24.9.0", +        "@jest/types": "^24.9.0", +        "chalk": "^2.0.1", +        "co": "^4.6.0", +        "expect": "^24.9.0", +        "is-generator-fn": "^2.0.0", +        "jest-each": "^24.9.0", +        "jest-matcher-utils": "^24.9.0", +        "jest-message-util": "^24.9.0", +        "jest-runtime": "^24.9.0", +        "jest-snapshot": "^24.9.0", +        "jest-util": "^24.9.0", +        "pretty-format": "^24.9.0", +        "throat": "^4.0.0" +      } +    }, +    "jest-leak-detector": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz", +      "integrity": "sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==", +      "requires": { +        "jest-get-type": "^24.9.0", +        "pretty-format": "^24.9.0" +      } +    }, +    "jest-matcher-utils": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz", +      "integrity": "sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==", +      "requires": { +        "chalk": "^2.0.1", +        "jest-diff": "^24.9.0", +        "jest-get-type": "^24.9.0", +        "pretty-format": "^24.9.0" +      } +    }, +    "jest-message-util": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", +      "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", +      "requires": { +        "@babel/code-frame": "^7.0.0", +        "@jest/test-result": "^24.9.0", +        "@jest/types": "^24.9.0", +        "@types/stack-utils": "^1.0.1", +        "chalk": "^2.0.1", +        "micromatch": "^3.1.10", +        "slash": "^2.0.0", +        "stack-utils": "^1.0.1" +      } +    }, +    "jest-mock": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", +      "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", +      "requires": { +        "@jest/types": "^24.9.0" +      } +    }, +    "jest-pnp-resolver": { +      "version": "1.2.1", +      "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz", +      "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==" +    }, +    "jest-regex-util": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz", +      "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==" +    }, +    "jest-resolve": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", +      "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", +      "requires": { +        "@jest/types": "^24.9.0", +        "browser-resolve": "^1.11.3", +        "chalk": "^2.0.1", +        "jest-pnp-resolver": "^1.2.1", +        "realpath-native": "^1.1.0" +      } +    }, +    "jest-resolve-dependencies": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz", +      "integrity": "sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==", +      "requires": { +        "@jest/types": "^24.9.0", +        "jest-regex-util": "^24.3.0", +        "jest-snapshot": "^24.9.0" +      } +    }, +    "jest-runner": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.9.0.tgz", +      "integrity": "sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==", +      "requires": { +        "@jest/console": "^24.7.1", +        "@jest/environment": "^24.9.0", +        "@jest/test-result": "^24.9.0", +        "@jest/types": "^24.9.0", +        "chalk": "^2.4.2", +        "exit": "^0.1.2", +        "graceful-fs": "^4.1.15", +        "jest-config": "^24.9.0", +        "jest-docblock": "^24.3.0", +        "jest-haste-map": "^24.9.0", +        "jest-jasmine2": "^24.9.0", +        "jest-leak-detector": "^24.9.0", +        "jest-message-util": "^24.9.0", +        "jest-resolve": "^24.9.0", +        "jest-runtime": "^24.9.0", +        "jest-util": "^24.9.0", +        "jest-worker": "^24.6.0", +        "source-map-support": "^0.5.6", +        "throat": "^4.0.0" +      } +    }, +    "jest-runtime": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.9.0.tgz", +      "integrity": "sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==", +      "requires": { +        "@jest/console": "^24.7.1", +        "@jest/environment": "^24.9.0", +        "@jest/source-map": "^24.3.0", +        "@jest/transform": "^24.9.0", +        "@jest/types": "^24.9.0", +        "@types/yargs": "^13.0.0", +        "chalk": "^2.0.1", +        "exit": "^0.1.2", +        "glob": "^7.1.3", +        "graceful-fs": "^4.1.15", +        "jest-config": "^24.9.0", +        "jest-haste-map": "^24.9.0", +        "jest-message-util": "^24.9.0", +        "jest-mock": "^24.9.0", +        "jest-regex-util": "^24.3.0", +        "jest-resolve": "^24.9.0", +        "jest-snapshot": "^24.9.0", +        "jest-util": "^24.9.0", +        "jest-validate": "^24.9.0", +        "realpath-native": "^1.1.0", +        "slash": "^2.0.0", +        "strip-bom": "^3.0.0", +        "yargs": "^13.3.0" +      } +    }, +    "jest-serializer": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", +      "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==" +    }, +    "jest-snapshot": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.9.0.tgz", +      "integrity": "sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==", +      "requires": { +        "@babel/types": "^7.0.0", +        "@jest/types": "^24.9.0", +        "chalk": "^2.0.1", +        "expect": "^24.9.0", +        "jest-diff": "^24.9.0", +        "jest-get-type": "^24.9.0", +        "jest-matcher-utils": "^24.9.0", +        "jest-message-util": "^24.9.0", +        "jest-resolve": "^24.9.0", +        "mkdirp": "^0.5.1", +        "natural-compare": "^1.4.0", +        "pretty-format": "^24.9.0", +        "semver": "^6.2.0" +      } +    }, +    "jest-util": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", +      "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", +      "requires": { +        "@jest/console": "^24.9.0", +        "@jest/fake-timers": "^24.9.0", +        "@jest/source-map": "^24.9.0", +        "@jest/test-result": "^24.9.0", +        "@jest/types": "^24.9.0", +        "callsites": "^3.0.0", +        "chalk": "^2.0.1", +        "graceful-fs": "^4.1.15", +        "is-ci": "^2.0.0", +        "mkdirp": "^0.5.1", +        "slash": "^2.0.0", +        "source-map": "^0.6.0" +      }, +      "dependencies": { +        "callsites": { +          "version": "3.1.0", +          "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", +          "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" +        }, +        "source-map": { +          "version": "0.6.1", +          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", +          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" +        } +      } +    }, +    "jest-validate": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz", +      "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==", +      "requires": { +        "@jest/types": "^24.9.0", +        "camelcase": "^5.3.1", +        "chalk": "^2.0.1", +        "jest-get-type": "^24.9.0", +        "leven": "^3.1.0", +        "pretty-format": "^24.9.0" +      } +    }, +    "jest-watch-typeahead": { +      "version": "0.4.0", +      "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.4.0.tgz", +      "integrity": "sha512-bJR/HPNgOQnkmttg1OkBIrYFAYuxFxExtgQh67N2qPvaWGVC8TCkedRNPKBfmZfVXFD3u2sCH+9OuS5ApBfCgA==", +      "requires": { +        "ansi-escapes": "^4.2.1", +        "chalk": "^2.4.1", +        "jest-watcher": "^24.3.0", +        "slash": "^3.0.0", +        "string-length": "^3.1.0", +        "strip-ansi": "^5.0.0" +      }, +      "dependencies": { +        "slash": { +          "version": "3.0.0", +          "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", +          "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" +        }, +        "string-length": { +          "version": "3.1.0", +          "resolved": "https://registry.npmjs.org/string-length/-/string-length-3.1.0.tgz", +          "integrity": "sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==", +          "requires": { +            "astral-regex": "^1.0.0", +            "strip-ansi": "^5.2.0" +          } +        } +      } +    }, +    "jest-watcher": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.9.0.tgz", +      "integrity": "sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==", +      "requires": { +        "@jest/test-result": "^24.9.0", +        "@jest/types": "^24.9.0", +        "@types/yargs": "^13.0.0", +        "ansi-escapes": "^3.0.0", +        "chalk": "^2.0.1", +        "jest-util": "^24.9.0", +        "string-length": "^2.0.0" +      }, +      "dependencies": { +        "ansi-escapes": { +          "version": "3.2.0", +          "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", +          "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" +        } +      } +    }, +    "jest-worker": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", +      "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", +      "requires": { +        "merge-stream": "^2.0.0", +        "supports-color": "^6.1.0" +      }, +      "dependencies": { +        "supports-color": { +          "version": "6.1.0", +          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", +          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", +          "requires": { +            "has-flag": "^3.0.0" +          } +        } +      } +    }, +    "js-levenshtein": { +      "version": "1.1.6", +      "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", +      "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==" +    }, +    "js-tokens": { +      "version": "4.0.0", +      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", +      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" +    }, +    "js-yaml": { +      "version": "3.13.1", +      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", +      "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", +      "requires": { +        "argparse": "^1.0.7", +        "esprima": "^4.0.0" +      } +    }, +    "jsbn": { +      "version": "0.1.1", +      "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", +      "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" +    }, +    "jsdom": { +      "version": "11.12.0", +      "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", +      "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", +      "requires": { +        "abab": "^2.0.0", +        "acorn": "^5.5.3", +        "acorn-globals": "^4.1.0", +        "array-equal": "^1.0.0", +        "cssom": ">= 0.3.2 < 0.4.0", +        "cssstyle": "^1.0.0", +        "data-urls": "^1.0.0", +        "domexception": "^1.0.1", +        "escodegen": "^1.9.1", +        "html-encoding-sniffer": "^1.0.2", +        "left-pad": "^1.3.0", +        "nwsapi": "^2.0.7", +        "parse5": "4.0.0", +        "pn": "^1.1.0", +        "request": "^2.87.0", +        "request-promise-native": "^1.0.5", +        "sax": "^1.2.4", +        "symbol-tree": "^3.2.2", +        "tough-cookie": "^2.3.4", +        "w3c-hr-time": "^1.0.1", +        "webidl-conversions": "^4.0.2", +        "whatwg-encoding": "^1.0.3", +        "whatwg-mimetype": "^2.1.0", +        "whatwg-url": "^6.4.1", +        "ws": "^5.2.0", +        "xml-name-validator": "^3.0.0" +      }, +      "dependencies": { +        "acorn": { +          "version": "5.7.3", +          "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", +          "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==" +        } +      } +    }, +    "jsesc": { +      "version": "2.5.2", +      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", +      "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" +    }, +    "json-parse-better-errors": { +      "version": "1.0.2", +      "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", +      "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" +    }, +    "json-schema": { +      "version": "0.2.3", +      "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", +      "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" +    }, +    "json-schema-traverse": { +      "version": "0.4.1", +      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", +      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" +    }, +    "json-stable-stringify": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", +      "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", +      "requires": { +        "jsonify": "~0.0.0" +      } +    }, +    "json-stable-stringify-without-jsonify": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", +      "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" +    }, +    "json-stringify-safe": { +      "version": "5.0.1", +      "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", +      "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" +    }, +    "json3": { +      "version": "3.3.3", +      "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", +      "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==" +    }, +    "json5": { +      "version": "2.1.1", +      "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz", +      "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==", +      "requires": { +        "minimist": "^1.2.0" +      } +    }, +    "jsonfile": { +      "version": "4.0.0", +      "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", +      "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", +      "requires": { +        "graceful-fs": "^4.1.6" +      } +    }, +    "jsonify": { +      "version": "0.0.0", +      "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", +      "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" +    }, +    "jsprim": { +      "version": "1.4.1", +      "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", +      "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", +      "requires": { +        "assert-plus": "1.0.0", +        "extsprintf": "1.3.0", +        "json-schema": "0.2.3", +        "verror": "1.10.0" +      } +    }, +    "jss": { +      "version": "10.0.0", +      "resolved": "https://registry.npmjs.org/jss/-/jss-10.0.0.tgz", +      "integrity": "sha512-TPpDFsiBjuERiL+dFDq8QCdiF9oDasPcNqCKLGCo/qED3fNYOQ8PX2lZhknyTiAt3tZrfOFbb0lbQ9lTjPZxsQ==", +      "requires": { +        "@babel/runtime": "^7.3.1", +        "csstype": "^2.6.5", +        "is-in-browser": "^1.1.3", +        "tiny-warning": "^1.0.2" +      } +    }, +    "jss-plugin-camel-case": { +      "version": "10.0.0", +      "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.0.0.tgz", +      "integrity": "sha512-yALDL00+pPR4FJh+k07A8FeDvfoPPuXU48HLy63enAubcVd3DnS+2rgqPXglHDGixIDVkCSXecl/l5GAMjzIbA==", +      "requires": { +        "@babel/runtime": "^7.3.1", +        "hyphenate-style-name": "^1.0.3", +        "jss": "10.0.0" +      } +    }, +    "jss-plugin-default-unit": { +      "version": "10.0.0", +      "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.0.0.tgz", +      "integrity": "sha512-sURozIOdCtGg9ap18erQ+ijndAfEGtTaetxfU3H4qwC18Bi+fdvjlY/ahKbuu0ASs7R/+WKCP7UaRZOjUDMcdQ==", +      "requires": { +        "@babel/runtime": "^7.3.1", +        "jss": "10.0.0" +      } +    }, +    "jss-plugin-global": { +      "version": "10.0.0", +      "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.0.0.tgz", +      "integrity": "sha512-80ofWKSQUo62bxLtRoTNe0kFPtHgUbAJeOeR36WEGgWIBEsXLyXOnD5KNnjPqG4heuEkz9eSLccjYST50JnI7Q==", +      "requires": { +        "@babel/runtime": "^7.3.1", +        "jss": "10.0.0" +      } +    }, +    "jss-plugin-nested": { +      "version": "10.0.0", +      "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.0.0.tgz", +      "integrity": "sha512-waxxwl/po1hN3azTyixKnr8ReEqUv5WK7WsO+5AWB0bFndML5Yqnt8ARZ90HEg8/P6WlqE/AB2413TkCRZE8bA==", +      "requires": { +        "@babel/runtime": "^7.3.1", +        "jss": "10.0.0", +        "tiny-warning": "^1.0.2" +      } +    }, +    "jss-plugin-props-sort": { +      "version": "10.0.0", +      "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.0.0.tgz", +      "integrity": "sha512-41mf22CImjwNdtOG3r+cdC8+RhwNm616sjHx5YlqTwtSJLyLFinbQC/a4PIFk8xqf1qpFH1kEAIw+yx9HaqZ3g==", +      "requires": { +        "@babel/runtime": "^7.3.1", +        "jss": "10.0.0" +      } +    }, +    "jss-plugin-rule-value-function": { +      "version": "10.0.0", +      "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.0.0.tgz", +      "integrity": "sha512-Jw+BZ8JIw1f12V0SERqGlBT1JEPWax3vuZpMym54NAXpPb7R1LYHiCTIlaJUyqvIfEy3kiHMtgI+r2whGgRIxQ==", +      "requires": { +        "@babel/runtime": "^7.3.1", +        "jss": "10.0.0" +      } +    }, +    "jss-plugin-vendor-prefixer": { +      "version": "10.0.0", +      "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.0.0.tgz", +      "integrity": "sha512-qslqvL0MUbWuzXJWdUxpj6mdNUX8jr4FFTo3aZnAT65nmzWL7g8oTr9ZxmTXXgdp7ANhS1QWE7036/Q2isFBpw==", +      "requires": { +        "@babel/runtime": "^7.3.1", +        "css-vendor": "^2.0.6", +        "jss": "10.0.0" +      } +    }, +    "jsx-ast-utils": { +      "version": "2.2.3", +      "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz", +      "integrity": "sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA==", +      "requires": { +        "array-includes": "^3.0.3", +        "object.assign": "^4.1.0" +      } +    }, +    "killable": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", +      "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==" +    }, +    "kind-of": { +      "version": "3.2.2", +      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", +      "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", +      "requires": { +        "is-buffer": "^1.1.5" +      } +    }, +    "kleur": { +      "version": "3.0.3", +      "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", +      "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" +    }, +    "last-call-webpack-plugin": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", +      "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", +      "requires": { +        "lodash": "^4.17.5", +        "webpack-sources": "^1.1.0" +      } +    }, +    "lazy-cache": { +      "version": "1.0.4", +      "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", +      "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" +    }, +    "lcid": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", +      "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", +      "requires": { +        "invert-kv": "^2.0.0" +      } +    }, +    "left-pad": { +      "version": "1.3.0", +      "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", +      "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==" +    }, +    "leven": { +      "version": "3.1.0", +      "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", +      "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" +    }, +    "levn": { +      "version": "0.3.0", +      "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", +      "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", +      "requires": { +        "prelude-ls": "~1.1.2", +        "type-check": "~0.3.2" +      } +    }, +    "load-json-file": { +      "version": "4.0.0", +      "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", +      "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", +      "requires": { +        "graceful-fs": "^4.1.2", +        "parse-json": "^4.0.0", +        "pify": "^3.0.0", +        "strip-bom": "^3.0.0" +      } +    }, +    "loader-fs-cache": { +      "version": "1.0.2", +      "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.2.tgz", +      "integrity": "sha512-70IzT/0/L+M20jUlEqZhZyArTU6VKLRTYRDAYN26g4jfzpJqjipLL3/hgYpySqI9PwsVRHHFja0LfEmsx9X2Cw==", +      "requires": { +        "find-cache-dir": "^0.1.1", +        "mkdirp": "0.5.1" +      }, +      "dependencies": { +        "find-cache-dir": { +          "version": "0.1.1", +          "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", +          "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", +          "requires": { +            "commondir": "^1.0.1", +            "mkdirp": "^0.5.1", +            "pkg-dir": "^1.0.0" +          } +        }, +        "find-up": { +          "version": "1.1.2", +          "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", +          "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", +          "requires": { +            "path-exists": "^2.0.0", +            "pinkie-promise": "^2.0.0" +          } +        }, +        "path-exists": { +          "version": "2.1.0", +          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", +          "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", +          "requires": { +            "pinkie-promise": "^2.0.0" +          } +        }, +        "pkg-dir": { +          "version": "1.0.0", +          "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", +          "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", +          "requires": { +            "find-up": "^1.0.0" +          } +        } +      } +    }, +    "loader-runner": { +      "version": "2.4.0", +      "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", +      "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==" +    }, +    "loader-utils": { +      "version": "1.2.3", +      "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", +      "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", +      "requires": { +        "big.js": "^5.2.2", +        "emojis-list": "^2.0.0", +        "json5": "^1.0.1" +      }, +      "dependencies": { +        "json5": { +          "version": "1.0.1", +          "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", +          "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", +          "requires": { +            "minimist": "^1.2.0" +          } +        } +      } +    }, +    "locate-path": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", +      "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", +      "requires": { +        "p-locate": "^3.0.0", +        "path-exists": "^3.0.0" +      } +    }, +    "lodash": { +      "version": "4.17.15", +      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", +      "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" +    }, +    "lodash._reinterpolate": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", +      "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" +    }, +    "lodash.memoize": { +      "version": "4.1.2", +      "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", +      "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" +    }, +    "lodash.sortby": { +      "version": "4.7.0", +      "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", +      "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" +    }, +    "lodash.template": { +      "version": "4.5.0", +      "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", +      "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", +      "requires": { +        "lodash._reinterpolate": "^3.0.0", +        "lodash.templatesettings": "^4.0.0" +      } +    }, +    "lodash.templatesettings": { +      "version": "4.2.0", +      "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", +      "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", +      "requires": { +        "lodash._reinterpolate": "^3.0.0" +      } +    }, +    "lodash.unescape": { +      "version": "4.0.1", +      "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", +      "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=" +    }, +    "lodash.uniq": { +      "version": "4.5.0", +      "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", +      "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" +    }, +    "loglevel": { +      "version": "1.6.6", +      "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.6.tgz", +      "integrity": "sha512-Sgr5lbboAUBo3eXCSPL4/KoVz3ROKquOjcctxmHIt+vol2DrqTQe3SwkKKuYhEiWB5kYa13YyopJ69deJ1irzQ==" +    }, +    "loose-envify": { +      "version": "1.4.0", +      "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", +      "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", +      "requires": { +        "js-tokens": "^3.0.0 || ^4.0.0" +      } +    }, +    "lower-case": { +      "version": "1.1.4", +      "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", +      "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=" +    }, +    "lru-cache": { +      "version": "5.1.1", +      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", +      "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", +      "requires": { +        "yallist": "^3.0.2" +      } +    }, +    "make-dir": { +      "version": "2.1.0", +      "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", +      "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", +      "requires": { +        "pify": "^4.0.1", +        "semver": "^5.6.0" +      }, +      "dependencies": { +        "pify": { +          "version": "4.0.1", +          "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", +          "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" +        }, +        "semver": { +          "version": "5.7.1", +          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", +          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" +        } +      } +    }, +    "makeerror": { +      "version": "1.0.11", +      "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", +      "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", +      "requires": { +        "tmpl": "1.0.x" +      } +    }, +    "mamacro": { +      "version": "0.0.3", +      "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", +      "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==" +    }, +    "map-age-cleaner": { +      "version": "0.1.3", +      "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", +      "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", +      "requires": { +        "p-defer": "^1.0.0" +      } +    }, +    "map-cache": { +      "version": "0.2.2", +      "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", +      "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" +    }, +    "map-visit": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", +      "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", +      "requires": { +        "object-visit": "^1.0.0" +      } +    }, +    "md5.js": { +      "version": "1.3.5", +      "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", +      "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", +      "requires": { +        "hash-base": "^3.0.0", +        "inherits": "^2.0.1", +        "safe-buffer": "^5.1.2" +      } +    }, +    "mdn-data": { +      "version": "2.0.4", +      "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", +      "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" +    }, +    "media-typer": { +      "version": "0.3.0", +      "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", +      "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" +    }, +    "mem": { +      "version": "4.3.0", +      "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", +      "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", +      "requires": { +        "map-age-cleaner": "^0.1.1", +        "mimic-fn": "^2.0.0", +        "p-is-promise": "^2.0.0" +      } +    }, +    "memory-fs": { +      "version": "0.4.1", +      "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", +      "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", +      "requires": { +        "errno": "^0.1.3", +        "readable-stream": "^2.0.1" +      }, +      "dependencies": { +        "readable-stream": { +          "version": "2.3.6", +          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", +          "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", +          "requires": { +            "core-util-is": "~1.0.0", +            "inherits": "~2.0.3", +            "isarray": "~1.0.0", +            "process-nextick-args": "~2.0.0", +            "safe-buffer": "~5.1.1", +            "string_decoder": "~1.1.1", +            "util-deprecate": "~1.0.1" +          } +        }, +        "string_decoder": { +          "version": "1.1.1", +          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", +          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", +          "requires": { +            "safe-buffer": "~5.1.0" +          } +        } +      } +    }, +    "merge-deep": { +      "version": "3.0.2", +      "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.2.tgz", +      "integrity": "sha512-T7qC8kg4Zoti1cFd8Cr0M+qaZfOwjlPDEdZIIPPB2JZctjaPM4fX+i7HOId69tAti2fvO6X5ldfYUONDODsrkA==", +      "requires": { +        "arr-union": "^3.1.0", +        "clone-deep": "^0.2.4", +        "kind-of": "^3.0.2" +      } +    }, +    "merge-descriptors": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", +      "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" +    }, +    "merge-stream": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", +      "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" +    }, +    "merge2": { +      "version": "1.3.0", +      "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz", +      "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==" +    }, +    "methods": { +      "version": "1.1.2", +      "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", +      "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" +    }, +    "microevent.ts": { +      "version": "0.1.1", +      "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", +      "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==" +    }, +    "micromatch": { +      "version": "3.1.10", +      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", +      "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", +      "requires": { +        "arr-diff": "^4.0.0", +        "array-unique": "^0.3.2", +        "braces": "^2.3.1", +        "define-property": "^2.0.2", +        "extend-shallow": "^3.0.2", +        "extglob": "^2.0.4", +        "fragment-cache": "^0.2.1", +        "kind-of": "^6.0.2", +        "nanomatch": "^1.2.9", +        "object.pick": "^1.3.0", +        "regex-not": "^1.0.0", +        "snapdragon": "^0.8.1", +        "to-regex": "^3.0.2" +      }, +      "dependencies": { +        "kind-of": { +          "version": "6.0.2", +          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", +          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" +        } +      } +    }, +    "miller-rabin": { +      "version": "4.0.1", +      "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", +      "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", +      "requires": { +        "bn.js": "^4.0.0", +        "brorand": "^1.0.1" +      } +    }, +    "mime": { +      "version": "2.4.4", +      "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", +      "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==" +    }, +    "mime-db": { +      "version": "1.42.0", +      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", +      "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==" +    }, +    "mime-types": { +      "version": "2.1.25", +      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz", +      "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==", +      "requires": { +        "mime-db": "1.42.0" +      } +    }, +    "mimic-fn": { +      "version": "2.1.0", +      "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", +      "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" +    }, +    "mini-create-react-context": { +      "version": "0.3.2", +      "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.3.2.tgz", +      "integrity": "sha512-2v+OeetEyliMt5VHMXsBhABoJ0/M4RCe7fatd/fBy6SMiKazUSEt3gxxypfnk2SHMkdBYvorHRoQxuGoiwbzAw==", +      "requires": { +        "@babel/runtime": "^7.4.0", +        "gud": "^1.0.0", +        "tiny-warning": "^1.0.2" +      } +    }, +    "mini-css-extract-plugin": { +      "version": "0.8.0", +      "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.0.tgz", +      "integrity": "sha512-MNpRGbNA52q6U92i0qbVpQNsgk7LExy41MdAlG84FeytfDOtRIf/mCHdEgG8rpTKOaNKiqUnZdlptF469hxqOw==", +      "requires": { +        "loader-utils": "^1.1.0", +        "normalize-url": "1.9.1", +        "schema-utils": "^1.0.0", +        "webpack-sources": "^1.1.0" +      } +    }, +    "minimalistic-assert": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", +      "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" +    }, +    "minimalistic-crypto-utils": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", +      "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" +    }, +    "minimatch": { +      "version": "3.0.4", +      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", +      "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", +      "requires": { +        "brace-expansion": "^1.1.7" +      } +    }, +    "minimist": { +      "version": "1.2.0", +      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", +      "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" +    }, +    "mississippi": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", +      "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", +      "requires": { +        "concat-stream": "^1.5.0", +        "duplexify": "^3.4.2", +        "end-of-stream": "^1.1.0", +        "flush-write-stream": "^1.0.0", +        "from2": "^2.1.0", +        "parallel-transform": "^1.1.0", +        "pump": "^3.0.0", +        "pumpify": "^1.3.3", +        "stream-each": "^1.1.0", +        "through2": "^2.0.0" +      } +    }, +    "mixin-deep": { +      "version": "1.3.2", +      "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", +      "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", +      "requires": { +        "for-in": "^1.0.2", +        "is-extendable": "^1.0.1" +      }, +      "dependencies": { +        "is-extendable": { +          "version": "1.0.1", +          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", +          "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", +          "requires": { +            "is-plain-object": "^2.0.4" +          } +        } +      } +    }, +    "mixin-object": { +      "version": "2.0.1", +      "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", +      "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", +      "requires": { +        "for-in": "^0.1.3", +        "is-extendable": "^0.1.1" +      }, +      "dependencies": { +        "for-in": { +          "version": "0.1.8", +          "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", +          "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=" +        } +      } +    }, +    "mkdirp": { +      "version": "0.5.1", +      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", +      "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", +      "requires": { +        "minimist": "0.0.8" +      }, +      "dependencies": { +        "minimist": { +          "version": "0.0.8", +          "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", +          "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" +        } +      } +    }, +    "move-concurrently": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", +      "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", +      "requires": { +        "aproba": "^1.1.1", +        "copy-concurrently": "^1.0.0", +        "fs-write-stream-atomic": "^1.0.8", +        "mkdirp": "^0.5.1", +        "rimraf": "^2.5.4", +        "run-queue": "^1.0.3" +      } +    }, +    "ms": { +      "version": "2.1.2", +      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", +      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" +    }, +    "multicast-dns": { +      "version": "6.2.3", +      "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", +      "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", +      "requires": { +        "dns-packet": "^1.3.1", +        "thunky": "^1.0.2" +      } +    }, +    "multicast-dns-service-types": { +      "version": "1.1.0", +      "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", +      "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" +    }, +    "mute-stream": { +      "version": "0.0.8", +      "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", +      "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" +    }, +    "nan": { +      "version": "2.14.0", +      "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", +      "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", +      "optional": true +    }, +    "nanomatch": { +      "version": "1.2.13", +      "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", +      "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", +      "requires": { +        "arr-diff": "^4.0.0", +        "array-unique": "^0.3.2", +        "define-property": "^2.0.2", +        "extend-shallow": "^3.0.2", +        "fragment-cache": "^0.2.1", +        "is-windows": "^1.0.2", +        "kind-of": "^6.0.2", +        "object.pick": "^1.3.0", +        "regex-not": "^1.0.0", +        "snapdragon": "^0.8.1", +        "to-regex": "^3.0.1" +      }, +      "dependencies": { +        "kind-of": { +          "version": "6.0.2", +          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", +          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" +        } +      } +    }, +    "natural-compare": { +      "version": "1.4.0", +      "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", +      "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" +    }, +    "negotiator": { +      "version": "0.6.2", +      "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", +      "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" +    }, +    "neo-async": { +      "version": "2.6.1", +      "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", +      "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==" +    }, +    "next-tick": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", +      "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" +    }, +    "nice-try": { +      "version": "1.0.5", +      "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", +      "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" +    }, +    "no-case": { +      "version": "2.3.2", +      "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", +      "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", +      "requires": { +        "lower-case": "^1.1.1" +      } +    }, +    "node-forge": { +      "version": "0.9.0", +      "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz", +      "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==" +    }, +    "node-int64": { +      "version": "0.4.0", +      "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", +      "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" +    }, +    "node-libs-browser": { +      "version": "2.2.1", +      "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", +      "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", +      "requires": { +        "assert": "^1.1.1", +        "browserify-zlib": "^0.2.0", +        "buffer": "^4.3.0", +        "console-browserify": "^1.1.0", +        "constants-browserify": "^1.0.0", +        "crypto-browserify": "^3.11.0", +        "domain-browser": "^1.1.1", +        "events": "^3.0.0", +        "https-browserify": "^1.0.0", +        "os-browserify": "^0.3.0", +        "path-browserify": "0.0.1", +        "process": "^0.11.10", +        "punycode": "^1.2.4", +        "querystring-es3": "^0.2.0", +        "readable-stream": "^2.3.3", +        "stream-browserify": "^2.0.1", +        "stream-http": "^2.7.2", +        "string_decoder": "^1.0.0", +        "timers-browserify": "^2.0.4", +        "tty-browserify": "0.0.0", +        "url": "^0.11.0", +        "util": "^0.11.0", +        "vm-browserify": "^1.0.1" +      }, +      "dependencies": { +        "punycode": { +          "version": "1.4.1", +          "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", +          "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" +        }, +        "readable-stream": { +          "version": "2.3.6", +          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", +          "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", +          "requires": { +            "core-util-is": "~1.0.0", +            "inherits": "~2.0.3", +            "isarray": "~1.0.0", +            "process-nextick-args": "~2.0.0", +            "safe-buffer": "~5.1.1", +            "string_decoder": "~1.1.1", +            "util-deprecate": "~1.0.1" +          }, +          "dependencies": { +            "string_decoder": { +              "version": "1.1.1", +              "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", +              "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", +              "requires": { +                "safe-buffer": "~5.1.0" +              } +            } +          } +        }, +        "util": { +          "version": "0.11.1", +          "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", +          "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", +          "requires": { +            "inherits": "2.0.3" +          }, +          "dependencies": { +            "inherits": { +              "version": "2.0.3", +              "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", +              "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" +            } +          } +        } +      } +    }, +    "node-modules-regexp": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", +      "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=" +    }, +    "node-notifier": { +      "version": "5.4.3", +      "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", +      "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==", +      "requires": { +        "growly": "^1.3.0", +        "is-wsl": "^1.1.0", +        "semver": "^5.5.0", +        "shellwords": "^0.1.1", +        "which": "^1.3.0" +      }, +      "dependencies": { +        "semver": { +          "version": "5.7.1", +          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", +          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" +        } +      } +    }, +    "node-releases": { +      "version": "1.1.40", +      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.40.tgz", +      "integrity": "sha512-r4LPcC5b/bS8BdtWH1fbeK88ib/wg9aqmg6/s3ngNLn2Ewkn/8J6Iw3P9RTlfIAdSdvYvQl2thCY5Y+qTAQ2iQ==", +      "requires": { +        "semver": "^6.3.0" +      } +    }, +    "normalize-package-data": { +      "version": "2.5.0", +      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", +      "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", +      "requires": { +        "hosted-git-info": "^2.1.4", +        "resolve": "^1.10.0", +        "semver": "2 || 3 || 4 || 5", +        "validate-npm-package-license": "^3.0.1" +      }, +      "dependencies": { +        "semver": { +          "version": "5.7.1", +          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", +          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" +        } +      } +    }, +    "normalize-path": { +      "version": "2.1.1", +      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", +      "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", +      "requires": { +        "remove-trailing-separator": "^1.0.1" +      } +    }, +    "normalize-range": { +      "version": "0.1.2", +      "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", +      "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" +    }, +    "normalize-scroll-left": { +      "version": "0.2.0", +      "resolved": "https://registry.npmjs.org/normalize-scroll-left/-/normalize-scroll-left-0.2.0.tgz", +      "integrity": "sha512-t5oCENZJl8TGusJKoCJm7+asaSsPuNmK6+iEjrZ5TyBj2f02brCRsd4c83hwtu+e5d4LCSBZ0uoDlMjBo+A8yA==" +    }, +    "normalize-url": { +      "version": "1.9.1", +      "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", +      "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", +      "requires": { +        "object-assign": "^4.0.1", +        "prepend-http": "^1.0.0", +        "query-string": "^4.1.0", +        "sort-keys": "^1.0.0" +      }, +      "dependencies": { +        "query-string": { +          "version": "4.3.4", +          "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", +          "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", +          "requires": { +            "object-assign": "^4.1.0", +            "strict-uri-encode": "^1.0.0" +          } +        }, +        "strict-uri-encode": { +          "version": "1.1.0", +          "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", +          "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" +        } +      } +    }, +    "npm-run-path": { +      "version": "2.0.2", +      "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", +      "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", +      "requires": { +        "path-key": "^2.0.0" +      } +    }, +    "nth-check": { +      "version": "1.0.2", +      "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", +      "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", +      "requires": { +        "boolbase": "~1.0.0" +      } +    }, +    "num2fraction": { +      "version": "1.2.2", +      "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", +      "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=" +    }, +    "number-is-nan": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", +      "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" +    }, +    "nwsapi": { +      "version": "2.2.0", +      "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", +      "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==" +    }, +    "oauth-sign": { +      "version": "0.9.0", +      "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", +      "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" +    }, +    "object-assign": { +      "version": "4.1.1", +      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", +      "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" +    }, +    "object-copy": { +      "version": "0.1.0", +      "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", +      "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", +      "requires": { +        "copy-descriptor": "^0.1.0", +        "define-property": "^0.2.5", +        "kind-of": "^3.0.3" +      }, +      "dependencies": { +        "define-property": { +          "version": "0.2.5", +          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", +          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", +          "requires": { +            "is-descriptor": "^0.1.0" +          } +        } +      } +    }, +    "object-hash": { +      "version": "1.3.1", +      "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz", +      "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==" +    }, +    "object-inspect": { +      "version": "1.7.0", +      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", +      "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==" +    }, +    "object-is": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz", +      "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=" +    }, +    "object-keys": { +      "version": "1.1.1", +      "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", +      "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" +    }, +    "object-path": { +      "version": "0.11.4", +      "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz", +      "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=" +    }, +    "object-visit": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", +      "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", +      "requires": { +        "isobject": "^3.0.0" +      } +    }, +    "object.assign": { +      "version": "4.1.0", +      "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", +      "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", +      "requires": { +        "define-properties": "^1.1.2", +        "function-bind": "^1.1.1", +        "has-symbols": "^1.0.0", +        "object-keys": "^1.0.11" +      } +    }, +    "object.entries": { +      "version": "1.1.0", +      "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.0.tgz", +      "integrity": "sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA==", +      "requires": { +        "define-properties": "^1.1.3", +        "es-abstract": "^1.12.0", +        "function-bind": "^1.1.1", +        "has": "^1.0.3" +      } +    }, +    "object.fromentries": { +      "version": "2.0.1", +      "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.1.tgz", +      "integrity": "sha512-PUQv8Hbg3j2QX0IQYv3iAGCbGcu4yY4KQ92/dhA4sFSixBmSmp13UpDLs6jGK8rBtbmhNNIK99LD2k293jpiGA==", +      "requires": { +        "define-properties": "^1.1.3", +        "es-abstract": "^1.15.0", +        "function-bind": "^1.1.1", +        "has": "^1.0.3" +      } +    }, +    "object.getownpropertydescriptors": { +      "version": "2.0.3", +      "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", +      "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", +      "requires": { +        "define-properties": "^1.1.2", +        "es-abstract": "^1.5.1" +      } +    }, +    "object.pick": { +      "version": "1.3.0", +      "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", +      "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", +      "requires": { +        "isobject": "^3.0.1" +      } +    }, +    "object.values": { +      "version": "1.1.0", +      "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", +      "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==", +      "requires": { +        "define-properties": "^1.1.3", +        "es-abstract": "^1.12.0", +        "function-bind": "^1.1.1", +        "has": "^1.0.3" +      } +    }, +    "obuf": { +      "version": "1.1.2", +      "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", +      "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" +    }, +    "on-finished": { +      "version": "2.3.0", +      "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", +      "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", +      "requires": { +        "ee-first": "1.1.1" +      } +    }, +    "on-headers": { +      "version": "1.0.2", +      "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", +      "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" +    }, +    "once": { +      "version": "1.4.0", +      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", +      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", +      "requires": { +        "wrappy": "1" +      } +    }, +    "onetime": { +      "version": "5.1.0", +      "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", +      "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", +      "requires": { +        "mimic-fn": "^2.1.0" +      } +    }, +    "open": { +      "version": "6.4.0", +      "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", +      "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", +      "requires": { +        "is-wsl": "^1.1.0" +      } +    }, +    "opn": { +      "version": "5.5.0", +      "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", +      "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", +      "requires": { +        "is-wsl": "^1.1.0" +      } +    }, +    "optimist": { +      "version": "0.6.1", +      "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", +      "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", +      "requires": { +        "minimist": "~0.0.1", +        "wordwrap": "~0.0.2" +      }, +      "dependencies": { +        "minimist": { +          "version": "0.0.10", +          "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", +          "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" +        } +      } +    }, +    "optimize-css-assets-webpack-plugin": { +      "version": "5.0.3", +      "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.3.tgz", +      "integrity": "sha512-q9fbvCRS6EYtUKKSwI87qm2IxlyJK5b4dygW1rKUBT6mMDhdG5e5bZT63v6tnJR9F9FB/H5a0HTmtw+laUBxKA==", +      "requires": { +        "cssnano": "^4.1.10", +        "last-call-webpack-plugin": "^3.0.0" +      } +    }, +    "optionator": { +      "version": "0.8.3", +      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", +      "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", +      "requires": { +        "deep-is": "~0.1.3", +        "fast-levenshtein": "~2.0.6", +        "levn": "~0.3.0", +        "prelude-ls": "~1.1.2", +        "type-check": "~0.3.2", +        "word-wrap": "~1.2.3" +      } +    }, +    "original": { +      "version": "1.0.2", +      "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", +      "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", +      "requires": { +        "url-parse": "^1.4.3" +      } +    }, +    "os-browserify": { +      "version": "0.3.0", +      "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", +      "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" +    }, +    "os-locale": { +      "version": "3.1.0", +      "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", +      "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", +      "requires": { +        "execa": "^1.0.0", +        "lcid": "^2.0.0", +        "mem": "^4.0.0" +      } +    }, +    "os-tmpdir": { +      "version": "1.0.2", +      "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", +      "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" +    }, +    "p-defer": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", +      "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" +    }, +    "p-each-series": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", +      "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", +      "requires": { +        "p-reduce": "^1.0.0" +      } +    }, +    "p-finally": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", +      "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" +    }, +    "p-is-promise": { +      "version": "2.1.0", +      "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", +      "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" +    }, +    "p-limit": { +      "version": "2.2.1", +      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", +      "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", +      "requires": { +        "p-try": "^2.0.0" +      } +    }, +    "p-locate": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", +      "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", +      "requires": { +        "p-limit": "^2.0.0" +      } +    }, +    "p-map": { +      "version": "1.2.0", +      "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", +      "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==" +    }, +    "p-reduce": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", +      "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=" +    }, +    "p-try": { +      "version": "2.2.0", +      "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", +      "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" +    }, +    "pako": { +      "version": "1.0.10", +      "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", +      "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==" +    }, +    "parallel-transform": { +      "version": "1.2.0", +      "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", +      "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", +      "requires": { +        "cyclist": "^1.0.1", +        "inherits": "^2.0.3", +        "readable-stream": "^2.1.5" +      }, +      "dependencies": { +        "readable-stream": { +          "version": "2.3.6", +          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", +          "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", +          "requires": { +            "core-util-is": "~1.0.0", +            "inherits": "~2.0.3", +            "isarray": "~1.0.0", +            "process-nextick-args": "~2.0.0", +            "safe-buffer": "~5.1.1", +            "string_decoder": "~1.1.1", +            "util-deprecate": "~1.0.1" +          } +        }, +        "string_decoder": { +          "version": "1.1.1", +          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", +          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", +          "requires": { +            "safe-buffer": "~5.1.0" +          } +        } +      } +    }, +    "param-case": { +      "version": "2.1.1", +      "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", +      "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", +      "requires": { +        "no-case": "^2.2.0" +      } +    }, +    "parent-module": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", +      "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", +      "requires": { +        "callsites": "^3.0.0" +      }, +      "dependencies": { +        "callsites": { +          "version": "3.1.0", +          "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", +          "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" +        } +      } +    }, +    "parse-asn1": { +      "version": "5.1.5", +      "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", +      "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", +      "requires": { +        "asn1.js": "^4.0.0", +        "browserify-aes": "^1.0.0", +        "create-hash": "^1.1.0", +        "evp_bytestokey": "^1.0.0", +        "pbkdf2": "^3.0.3", +        "safe-buffer": "^5.1.1" +      } +    }, +    "parse-json": { +      "version": "4.0.0", +      "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", +      "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", +      "requires": { +        "error-ex": "^1.3.1", +        "json-parse-better-errors": "^1.0.1" +      } +    }, +    "parse5": { +      "version": "4.0.0", +      "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", +      "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==" +    }, +    "parseurl": { +      "version": "1.3.3", +      "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", +      "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" +    }, +    "pascalcase": { +      "version": "0.1.1", +      "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", +      "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" +    }, +    "path-browserify": { +      "version": "0.0.1", +      "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", +      "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" +    }, +    "path-dirname": { +      "version": "1.0.2", +      "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", +      "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" +    }, +    "path-exists": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", +      "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" +    }, +    "path-is-absolute": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", +      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" +    }, +    "path-is-inside": { +      "version": "1.0.2", +      "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", +      "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" +    }, +    "path-key": { +      "version": "2.0.1", +      "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", +      "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" +    }, +    "path-parse": { +      "version": "1.0.6", +      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", +      "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" +    }, +    "path-to-regexp": { +      "version": "0.1.7", +      "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", +      "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" +    }, +    "path-type": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", +      "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", +      "requires": { +        "pify": "^3.0.0" +      } +    }, +    "pbkdf2": { +      "version": "3.0.17", +      "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", +      "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", +      "requires": { +        "create-hash": "^1.1.2", +        "create-hmac": "^1.1.4", +        "ripemd160": "^2.0.1", +        "safe-buffer": "^5.0.1", +        "sha.js": "^2.4.8" +      } +    }, +    "performance-now": { +      "version": "2.1.0", +      "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", +      "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" +    }, +    "pify": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", +      "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" +    }, +    "pinkie": { +      "version": "2.0.4", +      "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", +      "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" +    }, +    "pinkie-promise": { +      "version": "2.0.1", +      "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", +      "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", +      "requires": { +        "pinkie": "^2.0.0" +      } +    }, +    "pirates": { +      "version": "4.0.1", +      "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", +      "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", +      "requires": { +        "node-modules-regexp": "^1.0.0" +      } +    }, +    "pkg-dir": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", +      "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", +      "requires": { +        "find-up": "^3.0.0" +      } +    }, +    "pkg-up": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", +      "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", +      "requires": { +        "find-up": "^2.1.0" +      }, +      "dependencies": { +        "find-up": { +          "version": "2.1.0", +          "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", +          "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", +          "requires": { +            "locate-path": "^2.0.0" +          } +        }, +        "locate-path": { +          "version": "2.0.0", +          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", +          "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", +          "requires": { +            "p-locate": "^2.0.0", +            "path-exists": "^3.0.0" +          } +        }, +        "p-limit": { +          "version": "1.3.0", +          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", +          "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", +          "requires": { +            "p-try": "^1.0.0" +          } +        }, +        "p-locate": { +          "version": "2.0.0", +          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", +          "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", +          "requires": { +            "p-limit": "^1.1.0" +          } +        }, +        "p-try": { +          "version": "1.0.0", +          "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", +          "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" +        } +      } +    }, +    "pn": { +      "version": "1.1.0", +      "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", +      "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==" +    }, +    "pnp-webpack-plugin": { +      "version": "1.5.0", +      "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.5.0.tgz", +      "integrity": "sha512-jd9olUr9D7do+RN8Wspzhpxhgp1n6Vd0NtQ4SFkmIACZoEL1nkyAdW9Ygrinjec0vgDcWjscFQQ1gDW8rsfKTg==", +      "requires": { +        "ts-pnp": "^1.1.2" +      } +    }, +    "popper.js": { +      "version": "1.16.0", +      "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.0.tgz", +      "integrity": "sha512-+G+EkOPoE5S/zChTpmBSSDYmhXJ5PsW8eMhH8cP/CQHMFPBG/kC9Y5IIw6qNYgdJ+/COf0ddY2li28iHaZRSjw==" +    }, +    "portfinder": { +      "version": "1.0.25", +      "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.25.tgz", +      "integrity": "sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg==", +      "requires": { +        "async": "^2.6.2", +        "debug": "^3.1.1", +        "mkdirp": "^0.5.1" +      }, +      "dependencies": { +        "debug": { +          "version": "3.2.6", +          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", +          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", +          "requires": { +            "ms": "^2.1.1" +          } +        } +      } +    }, +    "posix-character-classes": { +      "version": "0.1.1", +      "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", +      "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" +    }, +    "postcss": { +      "version": "7.0.21", +      "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz", +      "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==", +      "requires": { +        "chalk": "^2.4.2", +        "source-map": "^0.6.1", +        "supports-color": "^6.1.0" +      }, +      "dependencies": { +        "source-map": { +          "version": "0.6.1", +          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", +          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" +        }, +        "supports-color": { +          "version": "6.1.0", +          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", +          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", +          "requires": { +            "has-flag": "^3.0.0" +          } +        } +      } +    }, +    "postcss-attribute-case-insensitive": { +      "version": "4.0.1", +      "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.1.tgz", +      "integrity": "sha512-L2YKB3vF4PetdTIthQVeT+7YiSzMoNMLLYxPXXppOOP7NoazEAy45sh2LvJ8leCQjfBcfkYQs8TtCcQjeZTp8A==", +      "requires": { +        "postcss": "^7.0.2", +        "postcss-selector-parser": "^5.0.0" +      }, +      "dependencies": { +        "cssesc": { +          "version": "2.0.0", +          "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", +          "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" +        }, +        "postcss-selector-parser": { +          "version": "5.0.0", +          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", +          "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", +          "requires": { +            "cssesc": "^2.0.0", +            "indexes-of": "^1.0.1", +            "uniq": "^1.0.1" +          } +        } +      } +    }, +    "postcss-browser-comments": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-2.0.0.tgz", +      "integrity": "sha512-xGG0UvoxwBc4Yx4JX3gc0RuDl1kc4bVihCzzk6UC72YPfq5fu3c717Nu8Un3nvnq1BJ31gBnFXIG/OaUTnpHgA==", +      "requires": { +        "postcss": "^7.0.2" +      } +    }, +    "postcss-calc": { +      "version": "7.0.1", +      "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.1.tgz", +      "integrity": "sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ==", +      "requires": { +        "css-unit-converter": "^1.1.1", +        "postcss": "^7.0.5", +        "postcss-selector-parser": "^5.0.0-rc.4", +        "postcss-value-parser": "^3.3.1" +      }, +      "dependencies": { +        "cssesc": { +          "version": "2.0.0", +          "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", +          "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" +        }, +        "postcss-selector-parser": { +          "version": "5.0.0", +          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", +          "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", +          "requires": { +            "cssesc": "^2.0.0", +            "indexes-of": "^1.0.1", +            "uniq": "^1.0.1" +          } +        } +      } +    }, +    "postcss-color-functional-notation": { +      "version": "2.0.1", +      "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz", +      "integrity": "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==", +      "requires": { +        "postcss": "^7.0.2", +        "postcss-values-parser": "^2.0.0" +      } +    }, +    "postcss-color-gray": { +      "version": "5.0.0", +      "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz", +      "integrity": "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==", +      "requires": { +        "@csstools/convert-colors": "^1.4.0", +        "postcss": "^7.0.5", +        "postcss-values-parser": "^2.0.0" +      } +    }, +    "postcss-color-hex-alpha": { +      "version": "5.0.3", +      "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz", +      "integrity": "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==", +      "requires": { +        "postcss": "^7.0.14", +        "postcss-values-parser": "^2.0.1" +      } +    }, +    "postcss-color-mod-function": { +      "version": "3.0.3", +      "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz", +      "integrity": "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==", +      "requires": { +        "@csstools/convert-colors": "^1.4.0", +        "postcss": "^7.0.2", +        "postcss-values-parser": "^2.0.0" +      } +    }, +    "postcss-color-rebeccapurple": { +      "version": "4.0.1", +      "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz", +      "integrity": "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==", +      "requires": { +        "postcss": "^7.0.2", +        "postcss-values-parser": "^2.0.0" +      } +    }, +    "postcss-colormin": { +      "version": "4.0.3", +      "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", +      "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", +      "requires": { +        "browserslist": "^4.0.0", +        "color": "^3.0.0", +        "has": "^1.0.0", +        "postcss": "^7.0.0", +        "postcss-value-parser": "^3.0.0" +      } +    }, +    "postcss-convert-values": { +      "version": "4.0.1", +      "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", +      "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", +      "requires": { +        "postcss": "^7.0.0", +        "postcss-value-parser": "^3.0.0" +      } +    }, +    "postcss-custom-media": { +      "version": "7.0.8", +      "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz", +      "integrity": "sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==", +      "requires": { +        "postcss": "^7.0.14" +      } +    }, +    "postcss-custom-properties": { +      "version": "8.0.11", +      "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz", +      "integrity": "sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==", +      "requires": { +        "postcss": "^7.0.17", +        "postcss-values-parser": "^2.0.1" +      } +    }, +    "postcss-custom-selectors": { +      "version": "5.1.2", +      "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz", +      "integrity": "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==", +      "requires": { +        "postcss": "^7.0.2", +        "postcss-selector-parser": "^5.0.0-rc.3" +      }, +      "dependencies": { +        "cssesc": { +          "version": "2.0.0", +          "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", +          "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" +        }, +        "postcss-selector-parser": { +          "version": "5.0.0", +          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", +          "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", +          "requires": { +            "cssesc": "^2.0.0", +            "indexes-of": "^1.0.1", +            "uniq": "^1.0.1" +          } +        } +      } +    }, +    "postcss-dir-pseudo-class": { +      "version": "5.0.0", +      "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz", +      "integrity": "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==", +      "requires": { +        "postcss": "^7.0.2", +        "postcss-selector-parser": "^5.0.0-rc.3" +      }, +      "dependencies": { +        "cssesc": { +          "version": "2.0.0", +          "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", +          "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" +        }, +        "postcss-selector-parser": { +          "version": "5.0.0", +          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", +          "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", +          "requires": { +            "cssesc": "^2.0.0", +            "indexes-of": "^1.0.1", +            "uniq": "^1.0.1" +          } +        } +      } +    }, +    "postcss-discard-comments": { +      "version": "4.0.2", +      "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", +      "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", +      "requires": { +        "postcss": "^7.0.0" +      } +    }, +    "postcss-discard-duplicates": { +      "version": "4.0.2", +      "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", +      "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", +      "requires": { +        "postcss": "^7.0.0" +      } +    }, +    "postcss-discard-empty": { +      "version": "4.0.1", +      "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", +      "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", +      "requires": { +        "postcss": "^7.0.0" +      } +    }, +    "postcss-discard-overridden": { +      "version": "4.0.1", +      "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", +      "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", +      "requires": { +        "postcss": "^7.0.0" +      } +    }, +    "postcss-double-position-gradients": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz", +      "integrity": "sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==", +      "requires": { +        "postcss": "^7.0.5", +        "postcss-values-parser": "^2.0.0" +      } +    }, +    "postcss-env-function": { +      "version": "2.0.2", +      "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz", +      "integrity": "sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==", +      "requires": { +        "postcss": "^7.0.2", +        "postcss-values-parser": "^2.0.0" +      } +    }, +    "postcss-flexbugs-fixes": { +      "version": "4.1.0", +      "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.1.0.tgz", +      "integrity": "sha512-jr1LHxQvStNNAHlgco6PzY308zvLklh7SJVYuWUwyUQncofaAlD2l+P/gxKHOdqWKe7xJSkVLFF/2Tp+JqMSZA==", +      "requires": { +        "postcss": "^7.0.0" +      } +    }, +    "postcss-focus-visible": { +      "version": "4.0.0", +      "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz", +      "integrity": "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==", +      "requires": { +        "postcss": "^7.0.2" +      } +    }, +    "postcss-focus-within": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz", +      "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==", +      "requires": { +        "postcss": "^7.0.2" +      } +    }, +    "postcss-font-variant": { +      "version": "4.0.0", +      "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.0.tgz", +      "integrity": "sha512-M8BFYKOvCrI2aITzDad7kWuXXTm0YhGdP9Q8HanmN4EF1Hmcgs1KK5rSHylt/lUJe8yLxiSwWAHdScoEiIxztg==", +      "requires": { +        "postcss": "^7.0.2" +      } +    }, +    "postcss-gap-properties": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz", +      "integrity": "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==", +      "requires": { +        "postcss": "^7.0.2" +      } +    }, +    "postcss-image-set-function": { +      "version": "3.0.1", +      "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz", +      "integrity": "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==", +      "requires": { +        "postcss": "^7.0.2", +        "postcss-values-parser": "^2.0.0" +      } +    }, +    "postcss-initial": { +      "version": "3.0.2", +      "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.2.tgz", +      "integrity": "sha512-ugA2wKonC0xeNHgirR4D3VWHs2JcU08WAi1KFLVcnb7IN89phID6Qtg2RIctWbnvp1TM2BOmDtX8GGLCKdR8YA==", +      "requires": { +        "lodash.template": "^4.5.0", +        "postcss": "^7.0.2" +      } +    }, +    "postcss-lab-function": { +      "version": "2.0.1", +      "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz", +      "integrity": "sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==", +      "requires": { +        "@csstools/convert-colors": "^1.4.0", +        "postcss": "^7.0.2", +        "postcss-values-parser": "^2.0.0" +      } +    }, +    "postcss-load-config": { +      "version": "2.1.0", +      "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.0.tgz", +      "integrity": "sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==", +      "requires": { +        "cosmiconfig": "^5.0.0", +        "import-cwd": "^2.0.0" +      } +    }, +    "postcss-loader": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", +      "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", +      "requires": { +        "loader-utils": "^1.1.0", +        "postcss": "^7.0.0", +        "postcss-load-config": "^2.0.0", +        "schema-utils": "^1.0.0" +      } +    }, +    "postcss-logical": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz", +      "integrity": "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==", +      "requires": { +        "postcss": "^7.0.2" +      } +    }, +    "postcss-media-minmax": { +      "version": "4.0.0", +      "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz", +      "integrity": "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==", +      "requires": { +        "postcss": "^7.0.2" +      } +    }, +    "postcss-merge-longhand": { +      "version": "4.0.11", +      "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", +      "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", +      "requires": { +        "css-color-names": "0.0.4", +        "postcss": "^7.0.0", +        "postcss-value-parser": "^3.0.0", +        "stylehacks": "^4.0.0" +      } +    }, +    "postcss-merge-rules": { +      "version": "4.0.3", +      "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", +      "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", +      "requires": { +        "browserslist": "^4.0.0", +        "caniuse-api": "^3.0.0", +        "cssnano-util-same-parent": "^4.0.0", +        "postcss": "^7.0.0", +        "postcss-selector-parser": "^3.0.0", +        "vendors": "^1.0.0" +      }, +      "dependencies": { +        "postcss-selector-parser": { +          "version": "3.1.1", +          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", +          "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", +          "requires": { +            "dot-prop": "^4.1.1", +            "indexes-of": "^1.0.1", +            "uniq": "^1.0.1" +          } +        } +      } +    }, +    "postcss-minify-font-values": { +      "version": "4.0.2", +      "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", +      "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", +      "requires": { +        "postcss": "^7.0.0", +        "postcss-value-parser": "^3.0.0" +      } +    }, +    "postcss-minify-gradients": { +      "version": "4.0.2", +      "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", +      "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", +      "requires": { +        "cssnano-util-get-arguments": "^4.0.0", +        "is-color-stop": "^1.0.0", +        "postcss": "^7.0.0", +        "postcss-value-parser": "^3.0.0" +      } +    }, +    "postcss-minify-params": { +      "version": "4.0.2", +      "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", +      "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", +      "requires": { +        "alphanum-sort": "^1.0.0", +        "browserslist": "^4.0.0", +        "cssnano-util-get-arguments": "^4.0.0", +        "postcss": "^7.0.0", +        "postcss-value-parser": "^3.0.0", +        "uniqs": "^2.0.0" +      } +    }, +    "postcss-minify-selectors": { +      "version": "4.0.2", +      "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", +      "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", +      "requires": { +        "alphanum-sort": "^1.0.0", +        "has": "^1.0.0", +        "postcss": "^7.0.0", +        "postcss-selector-parser": "^3.0.0" +      }, +      "dependencies": { +        "postcss-selector-parser": { +          "version": "3.1.1", +          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", +          "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", +          "requires": { +            "dot-prop": "^4.1.1", +            "indexes-of": "^1.0.1", +            "uniq": "^1.0.1" +          } +        } +      } +    }, +    "postcss-modules-extract-imports": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", +      "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", +      "requires": { +        "postcss": "^7.0.5" +      } +    }, +    "postcss-modules-local-by-default": { +      "version": "2.0.6", +      "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-2.0.6.tgz", +      "integrity": "sha512-oLUV5YNkeIBa0yQl7EYnxMgy4N6noxmiwZStaEJUSe2xPMcdNc8WmBQuQCx18H5psYbVxz8zoHk0RAAYZXP9gA==", +      "requires": { +        "postcss": "^7.0.6", +        "postcss-selector-parser": "^6.0.0", +        "postcss-value-parser": "^3.3.1" +      } +    }, +    "postcss-modules-scope": { +      "version": "2.1.0", +      "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.1.0.tgz", +      "integrity": "sha512-91Rjps0JnmtUB0cujlc8KIKCsJXWjzuxGeT/+Q2i2HXKZ7nBUeF9YQTZZTNvHVoNYj1AthsjnGLtqDUE0Op79A==", +      "requires": { +        "postcss": "^7.0.6", +        "postcss-selector-parser": "^6.0.0" +      } +    }, +    "postcss-modules-values": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-2.0.0.tgz", +      "integrity": "sha512-Ki7JZa7ff1N3EIMlPnGTZfUMe69FFwiQPnVSXC9mnn3jozCRBYIxiZd44yJOV2AmabOo4qFf8s0dC/+lweG7+w==", +      "requires": { +        "icss-replace-symbols": "^1.1.0", +        "postcss": "^7.0.6" +      } +    }, +    "postcss-nesting": { +      "version": "7.0.1", +      "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz", +      "integrity": "sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==", +      "requires": { +        "postcss": "^7.0.2" +      } +    }, +    "postcss-normalize": { +      "version": "7.0.1", +      "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-7.0.1.tgz", +      "integrity": "sha512-NOp1fwrG+6kVXWo7P9SizCHX6QvioxFD/hZcI2MLxPmVnFJFC0j0DDpIuNw2tUDeCFMni59gCVgeJ1/hYhj2OQ==", +      "requires": { +        "@csstools/normalize.css": "^9.0.1", +        "browserslist": "^4.1.1", +        "postcss": "^7.0.2", +        "postcss-browser-comments": "^2.0.0" +      } +    }, +    "postcss-normalize-charset": { +      "version": "4.0.1", +      "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", +      "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", +      "requires": { +        "postcss": "^7.0.0" +      } +    }, +    "postcss-normalize-display-values": { +      "version": "4.0.2", +      "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", +      "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", +      "requires": { +        "cssnano-util-get-match": "^4.0.0", +        "postcss": "^7.0.0", +        "postcss-value-parser": "^3.0.0" +      } +    }, +    "postcss-normalize-positions": { +      "version": "4.0.2", +      "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", +      "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", +      "requires": { +        "cssnano-util-get-arguments": "^4.0.0", +        "has": "^1.0.0", +        "postcss": "^7.0.0", +        "postcss-value-parser": "^3.0.0" +      } +    }, +    "postcss-normalize-repeat-style": { +      "version": "4.0.2", +      "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", +      "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", +      "requires": { +        "cssnano-util-get-arguments": "^4.0.0", +        "cssnano-util-get-match": "^4.0.0", +        "postcss": "^7.0.0", +        "postcss-value-parser": "^3.0.0" +      } +    }, +    "postcss-normalize-string": { +      "version": "4.0.2", +      "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", +      "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", +      "requires": { +        "has": "^1.0.0", +        "postcss": "^7.0.0", +        "postcss-value-parser": "^3.0.0" +      } +    }, +    "postcss-normalize-timing-functions": { +      "version": "4.0.2", +      "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", +      "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", +      "requires": { +        "cssnano-util-get-match": "^4.0.0", +        "postcss": "^7.0.0", +        "postcss-value-parser": "^3.0.0" +      } +    }, +    "postcss-normalize-unicode": { +      "version": "4.0.1", +      "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", +      "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", +      "requires": { +        "browserslist": "^4.0.0", +        "postcss": "^7.0.0", +        "postcss-value-parser": "^3.0.0" +      } +    }, +    "postcss-normalize-url": { +      "version": "4.0.1", +      "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", +      "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", +      "requires": { +        "is-absolute-url": "^2.0.0", +        "normalize-url": "^3.0.0", +        "postcss": "^7.0.0", +        "postcss-value-parser": "^3.0.0" +      }, +      "dependencies": { +        "normalize-url": { +          "version": "3.3.0", +          "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", +          "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==" +        } +      } +    }, +    "postcss-normalize-whitespace": { +      "version": "4.0.2", +      "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", +      "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", +      "requires": { +        "postcss": "^7.0.0", +        "postcss-value-parser": "^3.0.0" +      } +    }, +    "postcss-ordered-values": { +      "version": "4.1.2", +      "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", +      "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", +      "requires": { +        "cssnano-util-get-arguments": "^4.0.0", +        "postcss": "^7.0.0", +        "postcss-value-parser": "^3.0.0" +      } +    }, +    "postcss-overflow-shorthand": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz", +      "integrity": "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==", +      "requires": { +        "postcss": "^7.0.2" +      } +    }, +    "postcss-page-break": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz", +      "integrity": "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==", +      "requires": { +        "postcss": "^7.0.2" +      } +    }, +    "postcss-place": { +      "version": "4.0.1", +      "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz", +      "integrity": "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==", +      "requires": { +        "postcss": "^7.0.2", +        "postcss-values-parser": "^2.0.0" +      } +    }, +    "postcss-preset-env": { +      "version": "6.7.0", +      "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz", +      "integrity": "sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==", +      "requires": { +        "autoprefixer": "^9.6.1", +        "browserslist": "^4.6.4", +        "caniuse-lite": "^1.0.30000981", +        "css-blank-pseudo": "^0.1.4", +        "css-has-pseudo": "^0.10.0", +        "css-prefers-color-scheme": "^3.1.1", +        "cssdb": "^4.4.0", +        "postcss": "^7.0.17", +        "postcss-attribute-case-insensitive": "^4.0.1", +        "postcss-color-functional-notation": "^2.0.1", +        "postcss-color-gray": "^5.0.0", +        "postcss-color-hex-alpha": "^5.0.3", +        "postcss-color-mod-function": "^3.0.3", +        "postcss-color-rebeccapurple": "^4.0.1", +        "postcss-custom-media": "^7.0.8", +        "postcss-custom-properties": "^8.0.11", +        "postcss-custom-selectors": "^5.1.2", +        "postcss-dir-pseudo-class": "^5.0.0", +        "postcss-double-position-gradients": "^1.0.0", +        "postcss-env-function": "^2.0.2", +        "postcss-focus-visible": "^4.0.0", +        "postcss-focus-within": "^3.0.0", +        "postcss-font-variant": "^4.0.0", +        "postcss-gap-properties": "^2.0.0", +        "postcss-image-set-function": "^3.0.1", +        "postcss-initial": "^3.0.0", +        "postcss-lab-function": "^2.0.1", +        "postcss-logical": "^3.0.0", +        "postcss-media-minmax": "^4.0.0", +        "postcss-nesting": "^7.0.0", +        "postcss-overflow-shorthand": "^2.0.0", +        "postcss-page-break": "^2.0.0", +        "postcss-place": "^4.0.1", +        "postcss-pseudo-class-any-link": "^6.0.0", +        "postcss-replace-overflow-wrap": "^3.0.0", +        "postcss-selector-matches": "^4.0.0", +        "postcss-selector-not": "^4.0.0" +      } +    }, +    "postcss-pseudo-class-any-link": { +      "version": "6.0.0", +      "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz", +      "integrity": "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==", +      "requires": { +        "postcss": "^7.0.2", +        "postcss-selector-parser": "^5.0.0-rc.3" +      }, +      "dependencies": { +        "cssesc": { +          "version": "2.0.0", +          "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", +          "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" +        }, +        "postcss-selector-parser": { +          "version": "5.0.0", +          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", +          "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", +          "requires": { +            "cssesc": "^2.0.0", +            "indexes-of": "^1.0.1", +            "uniq": "^1.0.1" +          } +        } +      } +    }, +    "postcss-reduce-initial": { +      "version": "4.0.3", +      "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", +      "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", +      "requires": { +        "browserslist": "^4.0.0", +        "caniuse-api": "^3.0.0", +        "has": "^1.0.0", +        "postcss": "^7.0.0" +      } +    }, +    "postcss-reduce-transforms": { +      "version": "4.0.2", +      "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", +      "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", +      "requires": { +        "cssnano-util-get-match": "^4.0.0", +        "has": "^1.0.0", +        "postcss": "^7.0.0", +        "postcss-value-parser": "^3.0.0" +      } +    }, +    "postcss-replace-overflow-wrap": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz", +      "integrity": "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==", +      "requires": { +        "postcss": "^7.0.2" +      } +    }, +    "postcss-safe-parser": { +      "version": "4.0.1", +      "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz", +      "integrity": "sha512-xZsFA3uX8MO3yAda03QrG3/Eg1LN3EPfjjf07vke/46HERLZyHrTsQ9E1r1w1W//fWEhtYNndo2hQplN2cVpCQ==", +      "requires": { +        "postcss": "^7.0.0" +      } +    }, +    "postcss-selector-matches": { +      "version": "4.0.0", +      "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz", +      "integrity": "sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==", +      "requires": { +        "balanced-match": "^1.0.0", +        "postcss": "^7.0.2" +      } +    }, +    "postcss-selector-not": { +      "version": "4.0.0", +      "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.0.tgz", +      "integrity": "sha512-W+bkBZRhqJaYN8XAnbbZPLWMvZD1wKTu0UxtFKdhtGjWYmxhkUneoeOhRJKdAE5V7ZTlnbHfCR+6bNwK9e1dTQ==", +      "requires": { +        "balanced-match": "^1.0.0", +        "postcss": "^7.0.2" +      } +    }, +    "postcss-selector-parser": { +      "version": "6.0.2", +      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", +      "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", +      "requires": { +        "cssesc": "^3.0.0", +        "indexes-of": "^1.0.1", +        "uniq": "^1.0.1" +      } +    }, +    "postcss-svgo": { +      "version": "4.0.2", +      "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", +      "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", +      "requires": { +        "is-svg": "^3.0.0", +        "postcss": "^7.0.0", +        "postcss-value-parser": "^3.0.0", +        "svgo": "^1.0.0" +      } +    }, +    "postcss-unique-selectors": { +      "version": "4.0.1", +      "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", +      "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", +      "requires": { +        "alphanum-sort": "^1.0.0", +        "postcss": "^7.0.0", +        "uniqs": "^2.0.0" +      } +    }, +    "postcss-value-parser": { +      "version": "3.3.1", +      "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", +      "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" +    }, +    "postcss-values-parser": { +      "version": "2.0.1", +      "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", +      "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==", +      "requires": { +        "flatten": "^1.0.2", +        "indexes-of": "^1.0.1", +        "uniq": "^1.0.1" +      } +    }, +    "prelude-ls": { +      "version": "1.1.2", +      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", +      "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" +    }, +    "prepend-http": { +      "version": "1.0.4", +      "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", +      "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" +    }, +    "pretty-bytes": { +      "version": "5.3.0", +      "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.3.0.tgz", +      "integrity": "sha512-hjGrh+P926p4R4WbaB6OckyRtO0F0/lQBiT+0gnxjV+5kjPBrfVBFCsCLbMqVQeydvIoouYTCmmEURiH3R1Bdg==" +    }, +    "pretty-error": { +      "version": "2.1.1", +      "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", +      "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", +      "requires": { +        "renderkid": "^2.0.1", +        "utila": "~0.4" +      } +    }, +    "pretty-format": { +      "version": "24.9.0", +      "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", +      "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", +      "requires": { +        "@jest/types": "^24.9.0", +        "ansi-regex": "^4.0.0", +        "ansi-styles": "^3.2.0", +        "react-is": "^16.8.4" +      } +    }, +    "private": { +      "version": "0.1.8", +      "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", +      "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" +    }, +    "process": { +      "version": "0.11.10", +      "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", +      "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" +    }, +    "process-nextick-args": { +      "version": "2.0.1", +      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", +      "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" +    }, +    "progress": { +      "version": "2.0.3", +      "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", +      "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" +    }, +    "promise": { +      "version": "8.0.3", +      "resolved": "https://registry.npmjs.org/promise/-/promise-8.0.3.tgz", +      "integrity": "sha512-HeRDUL1RJiLhyA0/grn+PTShlBAcLuh/1BJGtrvjwbvRDCTLLMEz9rOGCV+R3vHY4MixIuoMEd9Yq/XvsTPcjw==", +      "requires": { +        "asap": "~2.0.6" +      } +    }, +    "promise-inflight": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", +      "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" +    }, +    "prompts": { +      "version": "2.3.0", +      "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.0.tgz", +      "integrity": "sha512-NfbbPPg/74fT7wk2XYQ7hAIp9zJyZp5Fu19iRbORqqy1BhtrkZ0fPafBU+7bmn8ie69DpT0R6QpJIN2oisYjJg==", +      "requires": { +        "kleur": "^3.0.3", +        "sisteransi": "^1.0.3" +      } +    }, +    "prop-types": { +      "version": "15.7.2", +      "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", +      "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", +      "requires": { +        "loose-envify": "^1.4.0", +        "object-assign": "^4.1.1", +        "react-is": "^16.8.1" +      } +    }, +    "proxy-addr": { +      "version": "2.0.5", +      "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", +      "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", +      "requires": { +        "forwarded": "~0.1.2", +        "ipaddr.js": "1.9.0" +      } +    }, +    "prr": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", +      "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" +    }, +    "psl": { +      "version": "1.4.0", +      "resolved": "https://registry.npmjs.org/psl/-/psl-1.4.0.tgz", +      "integrity": "sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw==" +    }, +    "public-encrypt": { +      "version": "4.0.3", +      "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", +      "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", +      "requires": { +        "bn.js": "^4.1.0", +        "browserify-rsa": "^4.0.0", +        "create-hash": "^1.1.0", +        "parse-asn1": "^5.0.0", +        "randombytes": "^2.0.1", +        "safe-buffer": "^5.1.2" +      } +    }, +    "pump": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", +      "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", +      "requires": { +        "end-of-stream": "^1.1.0", +        "once": "^1.3.1" +      } +    }, +    "pumpify": { +      "version": "1.5.1", +      "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", +      "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", +      "requires": { +        "duplexify": "^3.6.0", +        "inherits": "^2.0.3", +        "pump": "^2.0.0" +      }, +      "dependencies": { +        "pump": { +          "version": "2.0.1", +          "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", +          "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", +          "requires": { +            "end-of-stream": "^1.1.0", +            "once": "^1.3.1" +          } +        } +      } +    }, +    "punycode": { +      "version": "2.1.1", +      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", +      "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" +    }, +    "q": { +      "version": "1.5.1", +      "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", +      "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" +    }, +    "qr.js": { +      "version": "0.0.0", +      "resolved": "https://registry.npmjs.org/qr.js/-/qr.js-0.0.0.tgz", +      "integrity": "sha1-ys6GOG9ZoNuAUPqQ2baw6IoeNk8=" +    }, +    "qrcode.react": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/qrcode.react/-/qrcode.react-1.0.0.tgz", +      "integrity": "sha512-jBXleohRTwvGBe1ngV+62QvEZ/9IZqQivdwzo9pJM4LQMoCM2VnvNBnKdjvGnKyDZ/l0nCDgsPod19RzlPvm/Q==", +      "requires": { +        "loose-envify": "^1.4.0", +        "prop-types": "^15.6.0", +        "qr.js": "0.0.0" +      } +    }, +    "qs": { +      "version": "6.5.2", +      "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", +      "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" +    }, +    "query-string": { +      "version": "6.9.0", +      "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.9.0.tgz", +      "integrity": "sha512-KG4bhCFYapExLsUHrFt+kQVEegF2agm4cpF/VNc6pZVthIfCc/GK8t8VyNIE3nyXG9DK3Tf2EGkxjR6/uRdYsA==", +      "requires": { +        "decode-uri-component": "^0.2.0", +        "split-on-first": "^1.0.0", +        "strict-uri-encode": "^2.0.0" +      } +    }, +    "querystring": { +      "version": "0.2.0", +      "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", +      "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" +    }, +    "querystring-es3": { +      "version": "0.2.1", +      "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", +      "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" +    }, +    "querystringify": { +      "version": "2.1.1", +      "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", +      "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==" +    }, +    "raf": { +      "version": "3.4.1", +      "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", +      "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", +      "requires": { +        "performance-now": "^2.1.0" +      } +    }, +    "randombytes": { +      "version": "2.1.0", +      "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", +      "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", +      "requires": { +        "safe-buffer": "^5.1.0" +      } +    }, +    "randomfill": { +      "version": "1.0.4", +      "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", +      "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", +      "requires": { +        "randombytes": "^2.0.5", +        "safe-buffer": "^5.1.0" +      } +    }, +    "range-parser": { +      "version": "1.2.1", +      "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", +      "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" +    }, +    "raw-body": { +      "version": "2.4.0", +      "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", +      "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", +      "requires": { +        "bytes": "3.1.0", +        "http-errors": "1.7.2", +        "iconv-lite": "0.4.24", +        "unpipe": "1.0.0" +      }, +      "dependencies": { +        "bytes": { +          "version": "3.1.0", +          "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", +          "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" +        } +      } +    }, +    "react": { +      "version": "16.12.0", +      "resolved": "https://registry.npmjs.org/react/-/react-16.12.0.tgz", +      "integrity": "sha512-fglqy3k5E+81pA8s+7K0/T3DBCF0ZDOher1elBFzF7O6arXJgzyu/FW+COxFvAWXJoJN9KIZbT2LXlukwphYTA==", +      "requires": { +        "loose-envify": "^1.1.0", +        "object-assign": "^4.1.1", +        "prop-types": "^15.6.2" +      } +    }, +    "react-app-polyfill": { +      "version": "1.0.4", +      "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-1.0.4.tgz", +      "integrity": "sha512-5Vte6ki7jpNsNCUKaboyofAhmURmCn2Y6Hu7ydJ6Iu4dct1CIGoh/1FT7gUZKAbowVX2lxVPlijvp1nKxfAl4w==", +      "requires": { +        "core-js": "3.2.1", +        "object-assign": "4.1.1", +        "promise": "8.0.3", +        "raf": "3.4.1", +        "regenerator-runtime": "0.13.3", +        "whatwg-fetch": "3.0.0" +      } +    }, +    "react-dev-utils": { +      "version": "9.1.0", +      "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-9.1.0.tgz", +      "integrity": "sha512-X2KYF/lIGyGwP/F/oXgGDF24nxDA2KC4b7AFto+eqzc/t838gpSGiaU8trTqHXOohuLxxc5qi1eDzsl9ucPDpg==", +      "requires": { +        "@babel/code-frame": "7.5.5", +        "address": "1.1.2", +        "browserslist": "4.7.0", +        "chalk": "2.4.2", +        "cross-spawn": "6.0.5", +        "detect-port-alt": "1.1.6", +        "escape-string-regexp": "1.0.5", +        "filesize": "3.6.1", +        "find-up": "3.0.0", +        "fork-ts-checker-webpack-plugin": "1.5.0", +        "global-modules": "2.0.0", +        "globby": "8.0.2", +        "gzip-size": "5.1.1", +        "immer": "1.10.0", +        "inquirer": "6.5.0", +        "is-root": "2.1.0", +        "loader-utils": "1.2.3", +        "open": "^6.3.0", +        "pkg-up": "2.0.0", +        "react-error-overlay": "^6.0.3", +        "recursive-readdir": "2.2.2", +        "shell-quote": "1.7.2", +        "sockjs-client": "1.4.0", +        "strip-ansi": "5.2.0", +        "text-table": "0.2.0" +      }, +      "dependencies": { +        "ansi-escapes": { +          "version": "3.2.0", +          "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", +          "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" +        }, +        "ansi-regex": { +          "version": "3.0.0", +          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", +          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" +        }, +        "browserslist": { +          "version": "4.7.0", +          "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.7.0.tgz", +          "integrity": "sha512-9rGNDtnj+HaahxiVV38Gn8n8Lr8REKsel68v1sPFfIGEK6uSXTY3h9acgiT1dZVtOOUtifo/Dn8daDQ5dUgVsA==", +          "requires": { +            "caniuse-lite": "^1.0.30000989", +            "electron-to-chromium": "^1.3.247", +            "node-releases": "^1.1.29" +          } +        }, +        "cli-cursor": { +          "version": "2.1.0", +          "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", +          "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", +          "requires": { +            "restore-cursor": "^2.0.0" +          } +        }, +        "figures": { +          "version": "2.0.0", +          "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", +          "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", +          "requires": { +            "escape-string-regexp": "^1.0.5" +          } +        }, +        "inquirer": { +          "version": "6.5.0", +          "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.0.tgz", +          "integrity": "sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA==", +          "requires": { +            "ansi-escapes": "^3.2.0", +            "chalk": "^2.4.2", +            "cli-cursor": "^2.1.0", +            "cli-width": "^2.0.0", +            "external-editor": "^3.0.3", +            "figures": "^2.0.0", +            "lodash": "^4.17.12", +            "mute-stream": "0.0.7", +            "run-async": "^2.2.0", +            "rxjs": "^6.4.0", +            "string-width": "^2.1.0", +            "strip-ansi": "^5.1.0", +            "through": "^2.3.6" +          } +        }, +        "is-fullwidth-code-point": { +          "version": "2.0.0", +          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", +          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" +        }, +        "mimic-fn": { +          "version": "1.2.0", +          "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", +          "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" +        }, +        "mute-stream": { +          "version": "0.0.7", +          "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", +          "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" +        }, +        "onetime": { +          "version": "2.0.1", +          "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", +          "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", +          "requires": { +            "mimic-fn": "^1.0.0" +          } +        }, +        "restore-cursor": { +          "version": "2.0.0", +          "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", +          "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", +          "requires": { +            "onetime": "^2.0.0", +            "signal-exit": "^3.0.2" +          } +        }, +        "string-width": { +          "version": "2.1.1", +          "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", +          "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", +          "requires": { +            "is-fullwidth-code-point": "^2.0.0", +            "strip-ansi": "^4.0.0" +          }, +          "dependencies": { +            "strip-ansi": { +              "version": "4.0.0", +              "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", +              "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", +              "requires": { +                "ansi-regex": "^3.0.0" +              } +            } +          } +        } +      } +    }, +    "react-dom": { +      "version": "16.12.0", +      "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.12.0.tgz", +      "integrity": "sha512-LMxFfAGrcS3kETtQaCkTKjMiifahaMySFDn71fZUNpPHZQEzmk/GiAeIT8JSOrHB23fnuCOMruL2a8NYlw+8Gw==", +      "requires": { +        "loose-envify": "^1.1.0", +        "object-assign": "^4.1.1", +        "prop-types": "^15.6.2", +        "scheduler": "^0.18.0" +      } +    }, +    "react-error-overlay": { +      "version": "6.0.3", +      "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.3.tgz", +      "integrity": "sha512-bOUvMWFQVk5oz8Ded9Xb7WVdEi3QGLC8tH7HmYP0Fdp4Bn3qw0tRFmr5TW6mvahzvmrK4a6bqWGfCevBflP+Xw==" +    }, +    "react-is": { +      "version": "16.12.0", +      "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.12.0.tgz", +      "integrity": "sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==" +    }, +    "react-loading": { +      "version": "2.0.3", +      "resolved": "https://registry.npmjs.org/react-loading/-/react-loading-2.0.3.tgz", +      "integrity": "sha512-Vdqy79zq+bpeWJqC+xjltUjuGApyoItPgL0vgVfcJHhqwU7bAMKzysfGW/ADu6i0z0JiOCRJjo+IkFNkRNbA3A==" +    }, +    "react-otp-input": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/react-otp-input/-/react-otp-input-1.0.1.tgz", +      "integrity": "sha512-N57qZ+kQVgU7W1x/urL5zu6N0+nVqJxWn74ueaKaXl5rF6Pqe05q3WybPFxDg9CRQRisfEUjXyT8Q+1Uzwb8ng==" +    }, +    "react-router": { +      "version": "5.1.2", +      "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.1.2.tgz", +      "integrity": "sha512-yjEuMFy1ONK246B+rsa0cUam5OeAQ8pyclRDgpxuSCrAlJ1qN9uZ5IgyKC7gQg0w8OM50NXHEegPh/ks9YuR2A==", +      "requires": { +        "@babel/runtime": "^7.1.2", +        "history": "^4.9.0", +        "hoist-non-react-statics": "^3.1.0", +        "loose-envify": "^1.3.1", +        "mini-create-react-context": "^0.3.0", +        "path-to-regexp": "^1.7.0", +        "prop-types": "^15.6.2", +        "react-is": "^16.6.0", +        "tiny-invariant": "^1.0.2", +        "tiny-warning": "^1.0.0" +      }, +      "dependencies": { +        "isarray": { +          "version": "0.0.1", +          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", +          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" +        }, +        "path-to-regexp": { +          "version": "1.8.0", +          "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", +          "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", +          "requires": { +            "isarray": "0.0.1" +          } +        } +      } +    }, +    "react-router-dom": { +      "version": "5.1.2", +      "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.1.2.tgz", +      "integrity": "sha512-7BPHAaIwWpZS074UKaw1FjVdZBSVWEk8IuDXdB+OkLb8vd/WRQIpA4ag9WQk61aEfQs47wHyjWUoUGGZxpQXew==", +      "requires": { +        "@babel/runtime": "^7.1.2", +        "history": "^4.9.0", +        "loose-envify": "^1.3.1", +        "prop-types": "^15.6.2", +        "react-router": "5.1.2", +        "tiny-invariant": "^1.0.2", +        "tiny-warning": "^1.0.0" +      } +    }, +    "react-scripts": { +      "version": "3.2.0", +      "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-3.2.0.tgz", +      "integrity": "sha512-6LzuKbE2B4eFQG6i1FnTScn9HDcWBfXXnOwW9xKFPJ/E3rK8i1ufbOZ0ocKyRPxJAKdN7iqg3i7lt0+oxkSVOA==", +      "requires": { +        "@babel/core": "7.6.0", +        "@svgr/webpack": "4.3.2", +        "@typescript-eslint/eslint-plugin": "^2.2.0", +        "@typescript-eslint/parser": "^2.2.0", +        "babel-eslint": "10.0.3", +        "babel-jest": "^24.9.0", +        "babel-loader": "8.0.6", +        "babel-plugin-named-asset-import": "^0.3.4", +        "babel-preset-react-app": "^9.0.2", +        "camelcase": "^5.2.0", +        "case-sensitive-paths-webpack-plugin": "2.2.0", +        "css-loader": "2.1.1", +        "dotenv": "6.2.0", +        "dotenv-expand": "5.1.0", +        "eslint": "^6.1.0", +        "eslint-config-react-app": "^5.0.2", +        "eslint-loader": "3.0.2", +        "eslint-plugin-flowtype": "3.13.0", +        "eslint-plugin-import": "2.18.2", +        "eslint-plugin-jsx-a11y": "6.2.3", +        "eslint-plugin-react": "7.14.3", +        "eslint-plugin-react-hooks": "^1.6.1", +        "file-loader": "3.0.1", +        "fs-extra": "7.0.1", +        "fsevents": "2.0.7", +        "html-webpack-plugin": "4.0.0-beta.5", +        "identity-obj-proxy": "3.0.0", +        "is-wsl": "^1.1.0", +        "jest": "24.9.0", +        "jest-environment-jsdom-fourteen": "0.1.0", +        "jest-resolve": "24.9.0", +        "jest-watch-typeahead": "0.4.0", +        "mini-css-extract-plugin": "0.8.0", +        "optimize-css-assets-webpack-plugin": "5.0.3", +        "pnp-webpack-plugin": "1.5.0", +        "postcss-flexbugs-fixes": "4.1.0", +        "postcss-loader": "3.0.0", +        "postcss-normalize": "7.0.1", +        "postcss-preset-env": "6.7.0", +        "postcss-safe-parser": "4.0.1", +        "react-app-polyfill": "^1.0.4", +        "react-dev-utils": "^9.1.0", +        "resolve": "1.12.0", +        "resolve-url-loader": "3.1.0", +        "sass-loader": "7.2.0", +        "semver": "6.3.0", +        "style-loader": "1.0.0", +        "terser-webpack-plugin": "1.4.1", +        "ts-pnp": "1.1.4", +        "url-loader": "2.1.0", +        "webpack": "4.41.0", +        "webpack-dev-server": "3.2.1", +        "webpack-manifest-plugin": "2.1.1", +        "workbox-webpack-plugin": "4.3.1" +      } +    }, +    "react-transition-group": { +      "version": "4.3.0", +      "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.3.0.tgz", +      "integrity": "sha512-1qRV1ZuVSdxPlPf4O8t7inxUGpdyO5zG9IoNfJxSO0ImU2A1YWkEQvFPuIPZmMLkg5hYs7vv5mMOyfgSkvAwvw==", +      "requires": { +        "@babel/runtime": "^7.5.5", +        "dom-helpers": "^5.0.1", +        "loose-envify": "^1.4.0", +        "prop-types": "^15.6.2" +      } +    }, +    "read-pkg": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", +      "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", +      "requires": { +        "load-json-file": "^4.0.0", +        "normalize-package-data": "^2.3.2", +        "path-type": "^3.0.0" +      } +    }, +    "read-pkg-up": { +      "version": "4.0.0", +      "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", +      "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", +      "requires": { +        "find-up": "^3.0.0", +        "read-pkg": "^3.0.0" +      } +    }, +    "readable-stream": { +      "version": "3.4.0", +      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", +      "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", +      "requires": { +        "inherits": "^2.0.3", +        "string_decoder": "^1.1.1", +        "util-deprecate": "^1.0.1" +      } +    }, +    "readdirp": { +      "version": "2.2.1", +      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", +      "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", +      "requires": { +        "graceful-fs": "^4.1.11", +        "micromatch": "^3.1.10", +        "readable-stream": "^2.0.2" +      }, +      "dependencies": { +        "readable-stream": { +          "version": "2.3.6", +          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", +          "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", +          "requires": { +            "core-util-is": "~1.0.0", +            "inherits": "~2.0.3", +            "isarray": "~1.0.0", +            "process-nextick-args": "~2.0.0", +            "safe-buffer": "~5.1.1", +            "string_decoder": "~1.1.1", +            "util-deprecate": "~1.0.1" +          } +        }, +        "string_decoder": { +          "version": "1.1.1", +          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", +          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", +          "requires": { +            "safe-buffer": "~5.1.0" +          } +        } +      } +    }, +    "realpath-native": { +      "version": "1.1.0", +      "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", +      "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", +      "requires": { +        "util.promisify": "^1.0.0" +      } +    }, +    "recursive-readdir": { +      "version": "2.2.2", +      "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", +      "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", +      "requires": { +        "minimatch": "3.0.4" +      } +    }, +    "regenerate": { +      "version": "1.4.0", +      "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", +      "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==" +    }, +    "regenerate-unicode-properties": { +      "version": "8.1.0", +      "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", +      "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", +      "requires": { +        "regenerate": "^1.4.0" +      } +    }, +    "regenerator-runtime": { +      "version": "0.13.3", +      "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", +      "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==" +    }, +    "regenerator-transform": { +      "version": "0.14.1", +      "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz", +      "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==", +      "requires": { +        "private": "^0.1.6" +      } +    }, +    "regex-not": { +      "version": "1.0.2", +      "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", +      "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", +      "requires": { +        "extend-shallow": "^3.0.2", +        "safe-regex": "^1.1.0" +      } +    }, +    "regex-parser": { +      "version": "2.2.10", +      "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.10.tgz", +      "integrity": "sha512-8t6074A68gHfU8Neftl0Le6KTDwfGAj7IyjPIMSfikI2wJUTHDMaIq42bUsfVnj8mhx0R+45rdUXHGpN164avA==" +    }, +    "regexp.prototype.flags": { +      "version": "1.2.0", +      "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz", +      "integrity": "sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA==", +      "requires": { +        "define-properties": "^1.1.2" +      } +    }, +    "regexpp": { +      "version": "2.0.1", +      "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", +      "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==" +    }, +    "regexpu-core": { +      "version": "4.6.0", +      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz", +      "integrity": "sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==", +      "requires": { +        "regenerate": "^1.4.0", +        "regenerate-unicode-properties": "^8.1.0", +        "regjsgen": "^0.5.0", +        "regjsparser": "^0.6.0", +        "unicode-match-property-ecmascript": "^1.0.4", +        "unicode-match-property-value-ecmascript": "^1.1.0" +      } +    }, +    "regjsgen": { +      "version": "0.5.1", +      "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz", +      "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==" +    }, +    "regjsparser": { +      "version": "0.6.0", +      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", +      "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", +      "requires": { +        "jsesc": "~0.5.0" +      }, +      "dependencies": { +        "jsesc": { +          "version": "0.5.0", +          "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", +          "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" +        } +      } +    }, +    "relateurl": { +      "version": "0.2.7", +      "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", +      "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" +    }, +    "remove-trailing-separator": { +      "version": "1.1.0", +      "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", +      "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" +    }, +    "renderkid": { +      "version": "2.0.3", +      "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz", +      "integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==", +      "requires": { +        "css-select": "^1.1.0", +        "dom-converter": "^0.2", +        "htmlparser2": "^3.3.0", +        "strip-ansi": "^3.0.0", +        "utila": "^0.4.0" +      }, +      "dependencies": { +        "ansi-regex": { +          "version": "2.1.1", +          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", +          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" +        }, +        "css-select": { +          "version": "1.2.0", +          "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", +          "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", +          "requires": { +            "boolbase": "~1.0.0", +            "css-what": "2.1", +            "domutils": "1.5.1", +            "nth-check": "~1.0.1" +          } +        }, +        "css-what": { +          "version": "2.1.3", +          "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", +          "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" +        }, +        "domutils": { +          "version": "1.5.1", +          "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", +          "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", +          "requires": { +            "dom-serializer": "0", +            "domelementtype": "1" +          } +        }, +        "strip-ansi": { +          "version": "3.0.1", +          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", +          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", +          "requires": { +            "ansi-regex": "^2.0.0" +          } +        } +      } +    }, +    "repeat-element": { +      "version": "1.1.3", +      "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", +      "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" +    }, +    "repeat-string": { +      "version": "1.6.1", +      "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", +      "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" +    }, +    "request": { +      "version": "2.88.0", +      "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", +      "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", +      "requires": { +        "aws-sign2": "~0.7.0", +        "aws4": "^1.8.0", +        "caseless": "~0.12.0", +        "combined-stream": "~1.0.6", +        "extend": "~3.0.2", +        "forever-agent": "~0.6.1", +        "form-data": "~2.3.2", +        "har-validator": "~5.1.0", +        "http-signature": "~1.2.0", +        "is-typedarray": "~1.0.0", +        "isstream": "~0.1.2", +        "json-stringify-safe": "~5.0.1", +        "mime-types": "~2.1.19", +        "oauth-sign": "~0.9.0", +        "performance-now": "^2.1.0", +        "qs": "~6.5.2", +        "safe-buffer": "^5.1.2", +        "tough-cookie": "~2.4.3", +        "tunnel-agent": "^0.6.0", +        "uuid": "^3.3.2" +      }, +      "dependencies": { +        "punycode": { +          "version": "1.4.1", +          "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", +          "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" +        }, +        "tough-cookie": { +          "version": "2.4.3", +          "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", +          "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", +          "requires": { +            "psl": "^1.1.24", +            "punycode": "^1.4.1" +          } +        } +      } +    }, +    "request-promise-core": { +      "version": "1.1.3", +      "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz", +      "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==", +      "requires": { +        "lodash": "^4.17.15" +      } +    }, +    "request-promise-native": { +      "version": "1.0.8", +      "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz", +      "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==", +      "requires": { +        "request-promise-core": "1.1.3", +        "stealthy-require": "^1.1.1", +        "tough-cookie": "^2.3.3" +      } +    }, +    "require-directory": { +      "version": "2.1.1", +      "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", +      "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" +    }, +    "require-main-filename": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", +      "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" +    }, +    "requires-port": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", +      "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" +    }, +    "resolve": { +      "version": "1.12.0", +      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", +      "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", +      "requires": { +        "path-parse": "^1.0.6" +      } +    }, +    "resolve-cwd": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", +      "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", +      "requires": { +        "resolve-from": "^3.0.0" +      } +    }, +    "resolve-from": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", +      "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" +    }, +    "resolve-pathname": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", +      "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" +    }, +    "resolve-url": { +      "version": "0.2.1", +      "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", +      "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" +    }, +    "resolve-url-loader": { +      "version": "3.1.0", +      "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.0.tgz", +      "integrity": "sha512-2QcrA+2QgVqsMJ1Hn5NnJXIGCX1clQ1F6QJTqOeiaDw9ACo1G2k+8/shq3mtqne03HOFyskAClqfxKyFBriXZg==", +      "requires": { +        "adjust-sourcemap-loader": "2.0.0", +        "camelcase": "5.0.0", +        "compose-function": "3.0.3", +        "convert-source-map": "1.6.0", +        "es6-iterator": "2.0.3", +        "loader-utils": "1.2.3", +        "postcss": "7.0.14", +        "rework": "1.0.1", +        "rework-visit": "1.0.0", +        "source-map": "0.6.1" +      }, +      "dependencies": { +        "camelcase": { +          "version": "5.0.0", +          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", +          "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==" +        }, +        "convert-source-map": { +          "version": "1.6.0", +          "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", +          "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", +          "requires": { +            "safe-buffer": "~5.1.1" +          } +        }, +        "postcss": { +          "version": "7.0.14", +          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", +          "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", +          "requires": { +            "chalk": "^2.4.2", +            "source-map": "^0.6.1", +            "supports-color": "^6.1.0" +          } +        }, +        "source-map": { +          "version": "0.6.1", +          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", +          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" +        }, +        "supports-color": { +          "version": "6.1.0", +          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", +          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", +          "requires": { +            "has-flag": "^3.0.0" +          } +        } +      } +    }, +    "restore-cursor": { +      "version": "3.1.0", +      "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", +      "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", +      "requires": { +        "onetime": "^5.1.0", +        "signal-exit": "^3.0.2" +      } +    }, +    "ret": { +      "version": "0.1.15", +      "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", +      "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" +    }, +    "rework": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", +      "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=", +      "requires": { +        "convert-source-map": "^0.3.3", +        "css": "^2.0.0" +      }, +      "dependencies": { +        "convert-source-map": { +          "version": "0.3.5", +          "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", +          "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=" +        } +      } +    }, +    "rework-visit": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz", +      "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=" +    }, +    "rgb-regex": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", +      "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=" +    }, +    "rgba-regex": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", +      "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=" +    }, +    "rimraf": { +      "version": "2.6.3", +      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", +      "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", +      "requires": { +        "glob": "^7.1.3" +      } +    }, +    "ripemd160": { +      "version": "2.0.2", +      "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", +      "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", +      "requires": { +        "hash-base": "^3.0.0", +        "inherits": "^2.0.1" +      } +    }, +    "rsvp": { +      "version": "4.8.5", +      "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", +      "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==" +    }, +    "run-async": { +      "version": "2.3.0", +      "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", +      "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", +      "requires": { +        "is-promise": "^2.1.0" +      } +    }, +    "run-queue": { +      "version": "1.0.3", +      "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", +      "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", +      "requires": { +        "aproba": "^1.1.1" +      } +    }, +    "rxjs": { +      "version": "6.5.3", +      "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz", +      "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==", +      "requires": { +        "tslib": "^1.9.0" +      } +    }, +    "safe-buffer": { +      "version": "5.1.2", +      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", +      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" +    }, +    "safe-regex": { +      "version": "1.1.0", +      "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", +      "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", +      "requires": { +        "ret": "~0.1.10" +      } +    }, +    "safer-buffer": { +      "version": "2.1.2", +      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", +      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" +    }, +    "sane": { +      "version": "4.1.0", +      "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", +      "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", +      "requires": { +        "@cnakazawa/watch": "^1.0.3", +        "anymatch": "^2.0.0", +        "capture-exit": "^2.0.0", +        "exec-sh": "^0.3.2", +        "execa": "^1.0.0", +        "fb-watchman": "^2.0.0", +        "micromatch": "^3.1.4", +        "minimist": "^1.1.1", +        "walker": "~1.0.5" +      } +    }, +    "sass-loader": { +      "version": "7.2.0", +      "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.2.0.tgz", +      "integrity": "sha512-h8yUWaWtsbuIiOCgR9fd9c2lRXZ2uG+h8Dzg/AGNj+Hg/3TO8+BBAW9mEP+mh8ei+qBKqSJ0F1FLlYjNBc61OA==", +      "requires": { +        "clone-deep": "^4.0.1", +        "loader-utils": "^1.0.1", +        "neo-async": "^2.5.0", +        "pify": "^4.0.1", +        "semver": "^5.5.0" +      }, +      "dependencies": { +        "clone-deep": { +          "version": "4.0.1", +          "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", +          "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", +          "requires": { +            "is-plain-object": "^2.0.4", +            "kind-of": "^6.0.2", +            "shallow-clone": "^3.0.0" +          } +        }, +        "kind-of": { +          "version": "6.0.2", +          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", +          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" +        }, +        "pify": { +          "version": "4.0.1", +          "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", +          "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" +        }, +        "semver": { +          "version": "5.7.1", +          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", +          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" +        }, +        "shallow-clone": { +          "version": "3.0.1", +          "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", +          "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", +          "requires": { +            "kind-of": "^6.0.2" +          } +        } +      } +    }, +    "sax": { +      "version": "1.2.4", +      "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", +      "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" +    }, +    "saxes": { +      "version": "3.1.11", +      "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz", +      "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==", +      "requires": { +        "xmlchars": "^2.1.1" +      } +    }, +    "scheduler": { +      "version": "0.18.0", +      "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.18.0.tgz", +      "integrity": "sha512-agTSHR1Nbfi6ulI0kYNK0203joW2Y5W4po4l+v03tOoiJKpTBbxpNhWDvqc/4IcOw+KLmSiQLTasZ4cab2/UWQ==", +      "requires": { +        "loose-envify": "^1.1.0", +        "object-assign": "^4.1.1" +      } +    }, +    "schema-utils": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", +      "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", +      "requires": { +        "ajv": "^6.1.0", +        "ajv-errors": "^1.0.0", +        "ajv-keywords": "^3.1.0" +      } +    }, +    "select-hose": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", +      "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" +    }, +    "selfsigned": { +      "version": "1.10.7", +      "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz", +      "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==", +      "requires": { +        "node-forge": "0.9.0" +      } +    }, +    "semver": { +      "version": "6.3.0", +      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", +      "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" +    }, +    "send": { +      "version": "0.17.1", +      "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", +      "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", +      "requires": { +        "debug": "2.6.9", +        "depd": "~1.1.2", +        "destroy": "~1.0.4", +        "encodeurl": "~1.0.2", +        "escape-html": "~1.0.3", +        "etag": "~1.8.1", +        "fresh": "0.5.2", +        "http-errors": "~1.7.2", +        "mime": "1.6.0", +        "ms": "2.1.1", +        "on-finished": "~2.3.0", +        "range-parser": "~1.2.1", +        "statuses": "~1.5.0" +      }, +      "dependencies": { +        "debug": { +          "version": "2.6.9", +          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", +          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", +          "requires": { +            "ms": "2.0.0" +          }, +          "dependencies": { +            "ms": { +              "version": "2.0.0", +              "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", +              "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" +            } +          } +        }, +        "mime": { +          "version": "1.6.0", +          "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", +          "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" +        }, +        "ms": { +          "version": "2.1.1", +          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", +          "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" +        } +      } +    }, +    "serialize-javascript": { +      "version": "1.9.1", +      "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz", +      "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==" +    }, +    "serve-index": { +      "version": "1.9.1", +      "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", +      "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", +      "requires": { +        "accepts": "~1.3.4", +        "batch": "0.6.1", +        "debug": "2.6.9", +        "escape-html": "~1.0.3", +        "http-errors": "~1.6.2", +        "mime-types": "~2.1.17", +        "parseurl": "~1.3.2" +      }, +      "dependencies": { +        "debug": { +          "version": "2.6.9", +          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", +          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", +          "requires": { +            "ms": "2.0.0" +          } +        }, +        "http-errors": { +          "version": "1.6.3", +          "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", +          "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", +          "requires": { +            "depd": "~1.1.2", +            "inherits": "2.0.3", +            "setprototypeof": "1.1.0", +            "statuses": ">= 1.4.0 < 2" +          } +        }, +        "inherits": { +          "version": "2.0.3", +          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", +          "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" +        }, +        "ms": { +          "version": "2.0.0", +          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", +          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" +        }, +        "setprototypeof": { +          "version": "1.1.0", +          "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", +          "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" +        } +      } +    }, +    "serve-static": { +      "version": "1.14.1", +      "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", +      "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", +      "requires": { +        "encodeurl": "~1.0.2", +        "escape-html": "~1.0.3", +        "parseurl": "~1.3.3", +        "send": "0.17.1" +      } +    }, +    "set-blocking": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", +      "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" +    }, +    "set-value": { +      "version": "2.0.1", +      "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", +      "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", +      "requires": { +        "extend-shallow": "^2.0.1", +        "is-extendable": "^0.1.1", +        "is-plain-object": "^2.0.3", +        "split-string": "^3.0.1" +      }, +      "dependencies": { +        "extend-shallow": { +          "version": "2.0.1", +          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", +          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", +          "requires": { +            "is-extendable": "^0.1.0" +          } +        } +      } +    }, +    "setimmediate": { +      "version": "1.0.5", +      "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", +      "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" +    }, +    "setprototypeof": { +      "version": "1.1.1", +      "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", +      "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" +    }, +    "sha.js": { +      "version": "2.4.11", +      "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", +      "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", +      "requires": { +        "inherits": "^2.0.1", +        "safe-buffer": "^5.0.1" +      } +    }, +    "shallow-clone": { +      "version": "0.1.2", +      "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", +      "integrity": "sha1-WQnodLp3EG1zrEFM/sH/yofZcGA=", +      "requires": { +        "is-extendable": "^0.1.1", +        "kind-of": "^2.0.1", +        "lazy-cache": "^0.2.3", +        "mixin-object": "^2.0.1" +      }, +      "dependencies": { +        "kind-of": { +          "version": "2.0.1", +          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", +          "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=", +          "requires": { +            "is-buffer": "^1.0.2" +          } +        }, +        "lazy-cache": { +          "version": "0.2.7", +          "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", +          "integrity": "sha1-f+3fLctu23fRHvHRF6tf/fCrG2U=" +        } +      } +    }, +    "shebang-command": { +      "version": "1.2.0", +      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", +      "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", +      "requires": { +        "shebang-regex": "^1.0.0" +      } +    }, +    "shebang-regex": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", +      "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" +    }, +    "shell-quote": { +      "version": "1.7.2", +      "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", +      "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" +    }, +    "shellwords": { +      "version": "0.1.1", +      "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", +      "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==" +    }, +    "signal-exit": { +      "version": "3.0.2", +      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", +      "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" +    }, +    "simple-swizzle": { +      "version": "0.2.2", +      "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", +      "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", +      "requires": { +        "is-arrayish": "^0.3.1" +      }, +      "dependencies": { +        "is-arrayish": { +          "version": "0.3.2", +          "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", +          "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" +        } +      } +    }, +    "sisteransi": { +      "version": "1.0.4", +      "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.4.tgz", +      "integrity": "sha512-/ekMoM4NJ59ivGSfKapeG+FWtrmWvA1p6FBZwXrqojw90vJu8lBmrTxCMuBCydKtkaUe2zt4PlxeTKpjwMbyig==" +    }, +    "slash": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", +      "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==" +    }, +    "slice-ansi": { +      "version": "2.1.0", +      "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", +      "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", +      "requires": { +        "ansi-styles": "^3.2.0", +        "astral-regex": "^1.0.0", +        "is-fullwidth-code-point": "^2.0.0" +      }, +      "dependencies": { +        "is-fullwidth-code-point": { +          "version": "2.0.0", +          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", +          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" +        } +      } +    }, +    "snapdragon": { +      "version": "0.8.2", +      "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", +      "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", +      "requires": { +        "base": "^0.11.1", +        "debug": "^2.2.0", +        "define-property": "^0.2.5", +        "extend-shallow": "^2.0.1", +        "map-cache": "^0.2.2", +        "source-map": "^0.5.6", +        "source-map-resolve": "^0.5.0", +        "use": "^3.1.0" +      }, +      "dependencies": { +        "debug": { +          "version": "2.6.9", +          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", +          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", +          "requires": { +            "ms": "2.0.0" +          } +        }, +        "define-property": { +          "version": "0.2.5", +          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", +          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", +          "requires": { +            "is-descriptor": "^0.1.0" +          } +        }, +        "extend-shallow": { +          "version": "2.0.1", +          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", +          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", +          "requires": { +            "is-extendable": "^0.1.0" +          } +        }, +        "ms": { +          "version": "2.0.0", +          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", +          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" +        } +      } +    }, +    "snapdragon-node": { +      "version": "2.1.1", +      "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", +      "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", +      "requires": { +        "define-property": "^1.0.0", +        "isobject": "^3.0.0", +        "snapdragon-util": "^3.0.1" +      }, +      "dependencies": { +        "define-property": { +          "version": "1.0.0", +          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", +          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", +          "requires": { +            "is-descriptor": "^1.0.0" +          } +        }, +        "is-accessor-descriptor": { +          "version": "1.0.0", +          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", +          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", +          "requires": { +            "kind-of": "^6.0.0" +          } +        }, +        "is-data-descriptor": { +          "version": "1.0.0", +          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", +          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", +          "requires": { +            "kind-of": "^6.0.0" +          } +        }, +        "is-descriptor": { +          "version": "1.0.2", +          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", +          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", +          "requires": { +            "is-accessor-descriptor": "^1.0.0", +            "is-data-descriptor": "^1.0.0", +            "kind-of": "^6.0.2" +          } +        }, +        "kind-of": { +          "version": "6.0.2", +          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", +          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" +        } +      } +    }, +    "snapdragon-util": { +      "version": "3.0.1", +      "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", +      "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", +      "requires": { +        "kind-of": "^3.2.0" +      } +    }, +    "sockjs": { +      "version": "0.3.19", +      "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", +      "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", +      "requires": { +        "faye-websocket": "^0.10.0", +        "uuid": "^3.0.1" +      }, +      "dependencies": { +        "faye-websocket": { +          "version": "0.10.0", +          "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", +          "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", +          "requires": { +            "websocket-driver": ">=0.5.1" +          } +        } +      } +    }, +    "sockjs-client": { +      "version": "1.4.0", +      "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", +      "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", +      "requires": { +        "debug": "^3.2.5", +        "eventsource": "^1.0.7", +        "faye-websocket": "~0.11.1", +        "inherits": "^2.0.3", +        "json3": "^3.3.2", +        "url-parse": "^1.4.3" +      }, +      "dependencies": { +        "debug": { +          "version": "3.2.6", +          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", +          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", +          "requires": { +            "ms": "^2.1.1" +          } +        } +      } +    }, +    "sort-keys": { +      "version": "1.1.2", +      "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", +      "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", +      "requires": { +        "is-plain-obj": "^1.0.0" +      } +    }, +    "source-list-map": { +      "version": "2.0.1", +      "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", +      "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" +    }, +    "source-map": { +      "version": "0.5.7", +      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", +      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" +    }, +    "source-map-resolve": { +      "version": "0.5.2", +      "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", +      "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", +      "requires": { +        "atob": "^2.1.1", +        "decode-uri-component": "^0.2.0", +        "resolve-url": "^0.2.1", +        "source-map-url": "^0.4.0", +        "urix": "^0.1.0" +      } +    }, +    "source-map-support": { +      "version": "0.5.16", +      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", +      "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", +      "requires": { +        "buffer-from": "^1.0.0", +        "source-map": "^0.6.0" +      }, +      "dependencies": { +        "source-map": { +          "version": "0.6.1", +          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", +          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" +        } +      } +    }, +    "source-map-url": { +      "version": "0.4.0", +      "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", +      "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" +    }, +    "spdx-correct": { +      "version": "3.1.0", +      "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", +      "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", +      "requires": { +        "spdx-expression-parse": "^3.0.0", +        "spdx-license-ids": "^3.0.0" +      } +    }, +    "spdx-exceptions": { +      "version": "2.2.0", +      "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", +      "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==" +    }, +    "spdx-expression-parse": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", +      "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", +      "requires": { +        "spdx-exceptions": "^2.1.0", +        "spdx-license-ids": "^3.0.0" +      } +    }, +    "spdx-license-ids": { +      "version": "3.0.5", +      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", +      "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==" +    }, +    "spdy": { +      "version": "4.0.1", +      "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz", +      "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==", +      "requires": { +        "debug": "^4.1.0", +        "handle-thing": "^2.0.0", +        "http-deceiver": "^1.2.7", +        "select-hose": "^2.0.0", +        "spdy-transport": "^3.0.0" +      } +    }, +    "spdy-transport": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", +      "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", +      "requires": { +        "debug": "^4.1.0", +        "detect-node": "^2.0.4", +        "hpack.js": "^2.1.6", +        "obuf": "^1.1.2", +        "readable-stream": "^3.0.6", +        "wbuf": "^1.7.3" +      } +    }, +    "split-on-first": { +      "version": "1.1.0", +      "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", +      "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==" +    }, +    "split-string": { +      "version": "3.1.0", +      "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", +      "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", +      "requires": { +        "extend-shallow": "^3.0.0" +      } +    }, +    "sprintf-js": { +      "version": "1.0.3", +      "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", +      "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" +    }, +    "sshpk": { +      "version": "1.16.1", +      "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", +      "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", +      "requires": { +        "asn1": "~0.2.3", +        "assert-plus": "^1.0.0", +        "bcrypt-pbkdf": "^1.0.0", +        "dashdash": "^1.12.0", +        "ecc-jsbn": "~0.1.1", +        "getpass": "^0.1.1", +        "jsbn": "~0.1.0", +        "safer-buffer": "^2.0.2", +        "tweetnacl": "~0.14.0" +      } +    }, +    "ssri": { +      "version": "6.0.1", +      "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", +      "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", +      "requires": { +        "figgy-pudding": "^3.5.1" +      } +    }, +    "stable": { +      "version": "0.1.8", +      "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", +      "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" +    }, +    "stack-utils": { +      "version": "1.0.2", +      "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", +      "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==" +    }, +    "static-extend": { +      "version": "0.1.2", +      "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", +      "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", +      "requires": { +        "define-property": "^0.2.5", +        "object-copy": "^0.1.0" +      }, +      "dependencies": { +        "define-property": { +          "version": "0.2.5", +          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", +          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", +          "requires": { +            "is-descriptor": "^0.1.0" +          } +        } +      } +    }, +    "statuses": { +      "version": "1.5.0", +      "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", +      "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" +    }, +    "stealthy-require": { +      "version": "1.1.1", +      "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", +      "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" +    }, +    "stream-browserify": { +      "version": "2.0.2", +      "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", +      "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", +      "requires": { +        "inherits": "~2.0.1", +        "readable-stream": "^2.0.2" +      }, +      "dependencies": { +        "readable-stream": { +          "version": "2.3.6", +          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", +          "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", +          "requires": { +            "core-util-is": "~1.0.0", +            "inherits": "~2.0.3", +            "isarray": "~1.0.0", +            "process-nextick-args": "~2.0.0", +            "safe-buffer": "~5.1.1", +            "string_decoder": "~1.1.1", +            "util-deprecate": "~1.0.1" +          } +        }, +        "string_decoder": { +          "version": "1.1.1", +          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", +          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", +          "requires": { +            "safe-buffer": "~5.1.0" +          } +        } +      } +    }, +    "stream-each": { +      "version": "1.2.3", +      "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", +      "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", +      "requires": { +        "end-of-stream": "^1.1.0", +        "stream-shift": "^1.0.0" +      } +    }, +    "stream-http": { +      "version": "2.8.3", +      "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", +      "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", +      "requires": { +        "builtin-status-codes": "^3.0.0", +        "inherits": "^2.0.1", +        "readable-stream": "^2.3.6", +        "to-arraybuffer": "^1.0.0", +        "xtend": "^4.0.0" +      }, +      "dependencies": { +        "readable-stream": { +          "version": "2.3.6", +          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", +          "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", +          "requires": { +            "core-util-is": "~1.0.0", +            "inherits": "~2.0.3", +            "isarray": "~1.0.0", +            "process-nextick-args": "~2.0.0", +            "safe-buffer": "~5.1.1", +            "string_decoder": "~1.1.1", +            "util-deprecate": "~1.0.1" +          } +        }, +        "string_decoder": { +          "version": "1.1.1", +          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", +          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", +          "requires": { +            "safe-buffer": "~5.1.0" +          } +        } +      } +    }, +    "stream-shift": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", +      "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" +    }, +    "strict-uri-encode": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", +      "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=" +    }, +    "string-length": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", +      "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", +      "requires": { +        "astral-regex": "^1.0.0", +        "strip-ansi": "^4.0.0" +      }, +      "dependencies": { +        "ansi-regex": { +          "version": "3.0.0", +          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", +          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" +        }, +        "strip-ansi": { +          "version": "4.0.0", +          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", +          "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", +          "requires": { +            "ansi-regex": "^3.0.0" +          } +        } +      } +    }, +    "string-width": { +      "version": "4.2.0", +      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", +      "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", +      "requires": { +        "emoji-regex": "^8.0.0", +        "is-fullwidth-code-point": "^3.0.0", +        "strip-ansi": "^6.0.0" +      }, +      "dependencies": { +        "ansi-regex": { +          "version": "5.0.0", +          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", +          "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" +        }, +        "strip-ansi": { +          "version": "6.0.0", +          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", +          "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", +          "requires": { +            "ansi-regex": "^5.0.0" +          } +        } +      } +    }, +    "string.prototype.trimleft": { +      "version": "2.1.0", +      "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", +      "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", +      "requires": { +        "define-properties": "^1.1.3", +        "function-bind": "^1.1.1" +      } +    }, +    "string.prototype.trimright": { +      "version": "2.1.0", +      "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", +      "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", +      "requires": { +        "define-properties": "^1.1.3", +        "function-bind": "^1.1.1" +      } +    }, +    "string_decoder": { +      "version": "1.3.0", +      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", +      "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", +      "requires": { +        "safe-buffer": "~5.2.0" +      }, +      "dependencies": { +        "safe-buffer": { +          "version": "5.2.0", +          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", +          "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" +        } +      } +    }, +    "stringify-object": { +      "version": "3.3.0", +      "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", +      "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", +      "requires": { +        "get-own-enumerable-property-symbols": "^3.0.0", +        "is-obj": "^1.0.1", +        "is-regexp": "^1.0.0" +      } +    }, +    "strip-ansi": { +      "version": "5.2.0", +      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", +      "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", +      "requires": { +        "ansi-regex": "^4.1.0" +      } +    }, +    "strip-bom": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", +      "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" +    }, +    "strip-comments": { +      "version": "1.0.2", +      "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-1.0.2.tgz", +      "integrity": "sha512-kL97alc47hoyIQSV165tTt9rG5dn4w1dNnBhOQ3bOU1Nc1hel09jnXANaHJ7vzHLd4Ju8kseDGzlev96pghLFw==", +      "requires": { +        "babel-extract-comments": "^1.0.0", +        "babel-plugin-transform-object-rest-spread": "^6.26.0" +      } +    }, +    "strip-eof": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", +      "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" +    }, +    "strip-json-comments": { +      "version": "3.0.1", +      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", +      "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==" +    }, +    "style-loader": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.0.0.tgz", +      "integrity": "sha512-B0dOCFwv7/eY31a5PCieNwMgMhVGFe9w+rh7s/Bx8kfFkrth9zfTZquoYvdw8URgiqxObQKcpW51Ugz1HjfdZw==", +      "requires": { +        "loader-utils": "^1.2.3", +        "schema-utils": "^2.0.1" +      }, +      "dependencies": { +        "schema-utils": { +          "version": "2.5.0", +          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.5.0.tgz", +          "integrity": "sha512-32ISrwW2scPXHUSusP8qMg5dLUawKkyV+/qIEV9JdXKx+rsM6mi8vZY8khg2M69Qom16rtroWXD3Ybtiws38gQ==", +          "requires": { +            "ajv": "^6.10.2", +            "ajv-keywords": "^3.4.1" +          } +        } +      } +    }, +    "stylehacks": { +      "version": "4.0.3", +      "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", +      "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", +      "requires": { +        "browserslist": "^4.0.0", +        "postcss": "^7.0.0", +        "postcss-selector-parser": "^3.0.0" +      }, +      "dependencies": { +        "postcss-selector-parser": { +          "version": "3.1.1", +          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", +          "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", +          "requires": { +            "dot-prop": "^4.1.1", +            "indexes-of": "^1.0.1", +            "uniq": "^1.0.1" +          } +        } +      } +    }, +    "supports-color": { +      "version": "5.5.0", +      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", +      "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", +      "requires": { +        "has-flag": "^3.0.0" +      } +    }, +    "svg-parser": { +      "version": "2.0.2", +      "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.2.tgz", +      "integrity": "sha512-1gtApepKFweigFZj3sGO8KT8LvVZK8io146EzXrpVuWCDAbISz/yMucco3hWTkpZNoPabM+dnMOpy6Swue68Zg==" +    }, +    "svgo": { +      "version": "1.3.2", +      "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", +      "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", +      "requires": { +        "chalk": "^2.4.1", +        "coa": "^2.0.2", +        "css-select": "^2.0.0", +        "css-select-base-adapter": "^0.1.1", +        "css-tree": "1.0.0-alpha.37", +        "csso": "^4.0.2", +        "js-yaml": "^3.13.1", +        "mkdirp": "~0.5.1", +        "object.values": "^1.1.0", +        "sax": "~1.2.4", +        "stable": "^0.1.8", +        "unquote": "~1.1.1", +        "util.promisify": "~1.0.0" +      } +    }, +    "symbol-tree": { +      "version": "3.2.4", +      "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", +      "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" +    }, +    "table": { +      "version": "5.4.6", +      "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", +      "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", +      "requires": { +        "ajv": "^6.10.2", +        "lodash": "^4.17.14", +        "slice-ansi": "^2.1.0", +        "string-width": "^3.0.0" +      }, +      "dependencies": { +        "emoji-regex": { +          "version": "7.0.3", +          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", +          "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" +        }, +        "is-fullwidth-code-point": { +          "version": "2.0.0", +          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", +          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" +        }, +        "string-width": { +          "version": "3.1.0", +          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", +          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", +          "requires": { +            "emoji-regex": "^7.0.1", +            "is-fullwidth-code-point": "^2.0.0", +            "strip-ansi": "^5.1.0" +          } +        } +      } +    }, +    "tapable": { +      "version": "1.1.3", +      "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", +      "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" +    }, +    "terser": { +      "version": "4.4.0", +      "resolved": "https://registry.npmjs.org/terser/-/terser-4.4.0.tgz", +      "integrity": "sha512-oDG16n2WKm27JO8h4y/w3iqBGAOSCtq7k8dRmrn4Wf9NouL0b2WpMHGChFGZq4nFAQy1FsNJrVQHfurXOSTmOA==", +      "requires": { +        "commander": "^2.20.0", +        "source-map": "~0.6.1", +        "source-map-support": "~0.5.12" +      }, +      "dependencies": { +        "source-map": { +          "version": "0.6.1", +          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", +          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" +        } +      } +    }, +    "terser-webpack-plugin": { +      "version": "1.4.1", +      "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz", +      "integrity": "sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg==", +      "requires": { +        "cacache": "^12.0.2", +        "find-cache-dir": "^2.1.0", +        "is-wsl": "^1.1.0", +        "schema-utils": "^1.0.0", +        "serialize-javascript": "^1.7.0", +        "source-map": "^0.6.1", +        "terser": "^4.1.2", +        "webpack-sources": "^1.4.0", +        "worker-farm": "^1.7.0" +      }, +      "dependencies": { +        "source-map": { +          "version": "0.6.1", +          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", +          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" +        } +      } +    }, +    "test-exclude": { +      "version": "5.2.3", +      "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", +      "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", +      "requires": { +        "glob": "^7.1.3", +        "minimatch": "^3.0.4", +        "read-pkg-up": "^4.0.0", +        "require-main-filename": "^2.0.0" +      } +    }, +    "text-table": { +      "version": "0.2.0", +      "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", +      "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" +    }, +    "throat": { +      "version": "4.1.0", +      "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", +      "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=" +    }, +    "through": { +      "version": "2.3.8", +      "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", +      "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" +    }, +    "through2": { +      "version": "2.0.5", +      "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", +      "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", +      "requires": { +        "readable-stream": "~2.3.6", +        "xtend": "~4.0.1" +      }, +      "dependencies": { +        "readable-stream": { +          "version": "2.3.6", +          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", +          "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", +          "requires": { +            "core-util-is": "~1.0.0", +            "inherits": "~2.0.3", +            "isarray": "~1.0.0", +            "process-nextick-args": "~2.0.0", +            "safe-buffer": "~5.1.1", +            "string_decoder": "~1.1.1", +            "util-deprecate": "~1.0.1" +          } +        }, +        "string_decoder": { +          "version": "1.1.1", +          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", +          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", +          "requires": { +            "safe-buffer": "~5.1.0" +          } +        } +      } +    }, +    "thunky": { +      "version": "1.1.0", +      "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", +      "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" +    }, +    "timers-browserify": { +      "version": "2.0.11", +      "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", +      "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", +      "requires": { +        "setimmediate": "^1.0.4" +      } +    }, +    "timsort": { +      "version": "0.3.0", +      "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", +      "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" +    }, +    "tiny-invariant": { +      "version": "1.0.6", +      "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.0.6.tgz", +      "integrity": "sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA==" +    }, +    "tiny-warning": { +      "version": "1.0.3", +      "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", +      "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" +    }, +    "tmp": { +      "version": "0.0.33", +      "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", +      "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", +      "requires": { +        "os-tmpdir": "~1.0.2" +      } +    }, +    "tmpl": { +      "version": "1.0.4", +      "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", +      "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=" +    }, +    "to-arraybuffer": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", +      "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" +    }, +    "to-fast-properties": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", +      "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" +    }, +    "to-object-path": { +      "version": "0.3.0", +      "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", +      "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", +      "requires": { +        "kind-of": "^3.0.2" +      } +    }, +    "to-regex": { +      "version": "3.0.2", +      "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", +      "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", +      "requires": { +        "define-property": "^2.0.2", +        "extend-shallow": "^3.0.2", +        "regex-not": "^1.0.2", +        "safe-regex": "^1.1.0" +      } +    }, +    "to-regex-range": { +      "version": "2.1.1", +      "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", +      "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", +      "requires": { +        "is-number": "^3.0.0", +        "repeat-string": "^1.6.1" +      } +    }, +    "toidentifier": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", +      "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" +    }, +    "tough-cookie": { +      "version": "2.5.0", +      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", +      "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", +      "requires": { +        "psl": "^1.1.28", +        "punycode": "^2.1.1" +      } +    }, +    "tr46": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", +      "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", +      "requires": { +        "punycode": "^2.1.0" +      } +    }, +    "ts-pnp": { +      "version": "1.1.4", +      "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.1.4.tgz", +      "integrity": "sha512-1J/vefLC+BWSo+qe8OnJQfWTYRS6ingxjwqmHMqaMxXMj7kFtKLgAaYW3JeX3mktjgUL+etlU8/B4VUAUI9QGw==" +    }, +    "tslib": { +      "version": "1.10.0", +      "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", +      "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" +    }, +    "tsutils": { +      "version": "3.17.1", +      "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", +      "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", +      "requires": { +        "tslib": "^1.8.1" +      } +    }, +    "tty-browserify": { +      "version": "0.0.0", +      "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", +      "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" +    }, +    "tunnel-agent": { +      "version": "0.6.0", +      "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", +      "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", +      "requires": { +        "safe-buffer": "^5.0.1" +      } +    }, +    "tweetnacl": { +      "version": "0.14.5", +      "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", +      "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" +    }, +    "type": { +      "version": "1.2.0", +      "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", +      "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" +    }, +    "type-check": { +      "version": "0.3.2", +      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", +      "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", +      "requires": { +        "prelude-ls": "~1.1.2" +      } +    }, +    "type-fest": { +      "version": "0.8.1", +      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", +      "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" +    }, +    "type-is": { +      "version": "1.6.18", +      "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", +      "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", +      "requires": { +        "media-typer": "0.3.0", +        "mime-types": "~2.1.24" +      } +    }, +    "typedarray": { +      "version": "0.0.6", +      "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", +      "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" +    }, +    "typescript": { +      "version": "3.7.2", +      "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.2.tgz", +      "integrity": "sha512-ml7V7JfiN2Xwvcer+XAf2csGO1bPBdRbFCkYBczNZggrBZ9c7G3riSUeJmqEU5uOtXNPMhE3n+R4FA/3YOAWOQ==" +    }, +    "u2f-api": { +      "version": "1.1.1", +      "resolved": "https://registry.npmjs.org/u2f-api/-/u2f-api-1.1.1.tgz", +      "integrity": "sha512-tbmMBmg9eaFv+cdcBwja/hbpdXwcvBV0YSQh674nmP3HI0hNWcNAp9LRJ0jl9HGWLF7gF/3UKHzIxlXCW8j7kw==" +    }, +    "uglify-js": { +      "version": "3.4.10", +      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", +      "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", +      "requires": { +        "commander": "~2.19.0", +        "source-map": "~0.6.1" +      }, +      "dependencies": { +        "commander": { +          "version": "2.19.0", +          "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", +          "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==" +        }, +        "source-map": { +          "version": "0.6.1", +          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", +          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" +        } +      } +    }, +    "unicode-canonical-property-names-ecmascript": { +      "version": "1.0.4", +      "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", +      "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" +    }, +    "unicode-match-property-ecmascript": { +      "version": "1.0.4", +      "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", +      "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", +      "requires": { +        "unicode-canonical-property-names-ecmascript": "^1.0.4", +        "unicode-property-aliases-ecmascript": "^1.0.4" +      } +    }, +    "unicode-match-property-value-ecmascript": { +      "version": "1.1.0", +      "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", +      "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==" +    }, +    "unicode-property-aliases-ecmascript": { +      "version": "1.0.5", +      "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", +      "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==" +    }, +    "union-value": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", +      "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", +      "requires": { +        "arr-union": "^3.1.0", +        "get-value": "^2.0.6", +        "is-extendable": "^0.1.1", +        "set-value": "^2.0.1" +      } +    }, +    "uniq": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", +      "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" +    }, +    "uniqs": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", +      "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" +    }, +    "unique-filename": { +      "version": "1.1.1", +      "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", +      "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", +      "requires": { +        "unique-slug": "^2.0.0" +      } +    }, +    "unique-slug": { +      "version": "2.0.2", +      "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", +      "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", +      "requires": { +        "imurmurhash": "^0.1.4" +      } +    }, +    "universalify": { +      "version": "0.1.2", +      "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", +      "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" +    }, +    "unpipe": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", +      "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" +    }, +    "unquote": { +      "version": "1.1.1", +      "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", +      "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" +    }, +    "unset-value": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", +      "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", +      "requires": { +        "has-value": "^0.3.1", +        "isobject": "^3.0.0" +      }, +      "dependencies": { +        "has-value": { +          "version": "0.3.1", +          "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", +          "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", +          "requires": { +            "get-value": "^2.0.3", +            "has-values": "^0.1.4", +            "isobject": "^2.0.0" +          }, +          "dependencies": { +            "isobject": { +              "version": "2.1.0", +              "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", +              "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", +              "requires": { +                "isarray": "1.0.0" +              } +            } +          } +        }, +        "has-values": { +          "version": "0.1.4", +          "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", +          "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" +        } +      } +    }, +    "upath": { +      "version": "1.2.0", +      "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", +      "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" +    }, +    "upper-case": { +      "version": "1.1.3", +      "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", +      "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=" +    }, +    "uri-js": { +      "version": "4.2.2", +      "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", +      "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", +      "requires": { +        "punycode": "^2.1.0" +      } +    }, +    "urix": { +      "version": "0.1.0", +      "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", +      "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" +    }, +    "url": { +      "version": "0.11.0", +      "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", +      "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", +      "requires": { +        "punycode": "1.3.2", +        "querystring": "0.2.0" +      }, +      "dependencies": { +        "punycode": { +          "version": "1.3.2", +          "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", +          "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" +        } +      } +    }, +    "url-loader": { +      "version": "2.1.0", +      "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-2.1.0.tgz", +      "integrity": "sha512-kVrp/8VfEm5fUt+fl2E0FQyrpmOYgMEkBsv8+UDP1wFhszECq5JyGF33I7cajlVY90zRZ6MyfgKXngLvHYZX8A==", +      "requires": { +        "loader-utils": "^1.2.3", +        "mime": "^2.4.4", +        "schema-utils": "^2.0.0" +      }, +      "dependencies": { +        "schema-utils": { +          "version": "2.5.0", +          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.5.0.tgz", +          "integrity": "sha512-32ISrwW2scPXHUSusP8qMg5dLUawKkyV+/qIEV9JdXKx+rsM6mi8vZY8khg2M69Qom16rtroWXD3Ybtiws38gQ==", +          "requires": { +            "ajv": "^6.10.2", +            "ajv-keywords": "^3.4.1" +          } +        } +      } +    }, +    "url-parse": { +      "version": "1.4.7", +      "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", +      "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", +      "requires": { +        "querystringify": "^2.1.1", +        "requires-port": "^1.0.0" +      } +    }, +    "use": { +      "version": "3.1.1", +      "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", +      "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" +    }, +    "util": { +      "version": "0.10.3", +      "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", +      "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", +      "requires": { +        "inherits": "2.0.1" +      }, +      "dependencies": { +        "inherits": { +          "version": "2.0.1", +          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", +          "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" +        } +      } +    }, +    "util-deprecate": { +      "version": "1.0.2", +      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", +      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" +    }, +    "util.promisify": { +      "version": "1.0.0", +      "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", +      "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", +      "requires": { +        "define-properties": "^1.1.2", +        "object.getownpropertydescriptors": "^2.0.3" +      } +    }, +    "utila": { +      "version": "0.4.0", +      "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", +      "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=" +    }, +    "utils-merge": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", +      "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" +    }, +    "uuid": { +      "version": "3.3.3", +      "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", +      "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==" +    }, +    "v8-compile-cache": { +      "version": "2.1.0", +      "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", +      "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==" +    }, +    "validate-npm-package-license": { +      "version": "3.0.4", +      "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", +      "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", +      "requires": { +        "spdx-correct": "^3.0.0", +        "spdx-expression-parse": "^3.0.0" +      } +    }, +    "value-equal": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", +      "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" +    }, +    "vary": { +      "version": "1.1.2", +      "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", +      "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" +    }, +    "vendors": { +      "version": "1.0.3", +      "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.3.tgz", +      "integrity": "sha512-fOi47nsJP5Wqefa43kyWSg80qF+Q3XA6MUkgi7Hp1HQaKDQW4cQrK2D0P7mmbFtsV1N89am55Yru/nyEwRubcw==" +    }, +    "verror": { +      "version": "1.10.0", +      "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", +      "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", +      "requires": { +        "assert-plus": "^1.0.0", +        "core-util-is": "1.0.2", +        "extsprintf": "^1.2.0" +      } +    }, +    "vm-browserify": { +      "version": "1.1.2", +      "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", +      "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" +    }, +    "w3c-hr-time": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", +      "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", +      "requires": { +        "browser-process-hrtime": "^0.1.2" +      } +    }, +    "w3c-xmlserializer": { +      "version": "1.1.2", +      "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz", +      "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==", +      "requires": { +        "domexception": "^1.0.1", +        "webidl-conversions": "^4.0.2", +        "xml-name-validator": "^3.0.0" +      } +    }, +    "walker": { +      "version": "1.0.7", +      "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", +      "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", +      "requires": { +        "makeerror": "1.0.x" +      } +    }, +    "watchpack": { +      "version": "1.6.0", +      "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", +      "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", +      "requires": { +        "chokidar": "^2.0.2", +        "graceful-fs": "^4.1.2", +        "neo-async": "^2.5.0" +      } +    }, +    "wbuf": { +      "version": "1.7.3", +      "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", +      "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", +      "requires": { +        "minimalistic-assert": "^1.0.0" +      } +    }, +    "webidl-conversions": { +      "version": "4.0.2", +      "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", +      "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" +    }, +    "webpack": { +      "version": "4.41.0", +      "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.0.tgz", +      "integrity": "sha512-yNV98U4r7wX1VJAj5kyMsu36T8RPPQntcb5fJLOsMz/pt/WrKC0Vp1bAlqPLkA1LegSwQwf6P+kAbyhRKVQ72g==", +      "requires": { +        "@webassemblyjs/ast": "1.8.5", +        "@webassemblyjs/helper-module-context": "1.8.5", +        "@webassemblyjs/wasm-edit": "1.8.5", +        "@webassemblyjs/wasm-parser": "1.8.5", +        "acorn": "^6.2.1", +        "ajv": "^6.10.2", +        "ajv-keywords": "^3.4.1", +        "chrome-trace-event": "^1.0.2", +        "enhanced-resolve": "^4.1.0", +        "eslint-scope": "^4.0.3", +        "json-parse-better-errors": "^1.0.2", +        "loader-runner": "^2.4.0", +        "loader-utils": "^1.2.3", +        "memory-fs": "^0.4.1", +        "micromatch": "^3.1.10", +        "mkdirp": "^0.5.1", +        "neo-async": "^2.6.1", +        "node-libs-browser": "^2.2.1", +        "schema-utils": "^1.0.0", +        "tapable": "^1.1.3", +        "terser-webpack-plugin": "^1.4.1", +        "watchpack": "^1.6.0", +        "webpack-sources": "^1.4.1" +      }, +      "dependencies": { +        "acorn": { +          "version": "6.3.0", +          "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", +          "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==" +        }, +        "eslint-scope": { +          "version": "4.0.3", +          "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", +          "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", +          "requires": { +            "esrecurse": "^4.1.0", +            "estraverse": "^4.1.1" +          } +        } +      } +    }, +    "webpack-dev-middleware": { +      "version": "3.7.2", +      "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", +      "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", +      "requires": { +        "memory-fs": "^0.4.1", +        "mime": "^2.4.4", +        "mkdirp": "^0.5.1", +        "range-parser": "^1.2.1", +        "webpack-log": "^2.0.0" +      } +    }, +    "webpack-dev-server": { +      "version": "3.2.1", +      "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.2.1.tgz", +      "integrity": "sha512-sjuE4mnmx6JOh9kvSbPYw3u/6uxCLHNWfhWaIPwcXWsvWOPN+nc5baq4i9jui3oOBRXGonK9+OI0jVkaz6/rCw==", +      "requires": { +        "ansi-html": "0.0.7", +        "bonjour": "^3.5.0", +        "chokidar": "^2.0.0", +        "compression": "^1.5.2", +        "connect-history-api-fallback": "^1.3.0", +        "debug": "^4.1.1", +        "del": "^3.0.0", +        "express": "^4.16.2", +        "html-entities": "^1.2.0", +        "http-proxy-middleware": "^0.19.1", +        "import-local": "^2.0.0", +        "internal-ip": "^4.2.0", +        "ip": "^1.1.5", +        "killable": "^1.0.0", +        "loglevel": "^1.4.1", +        "opn": "^5.1.0", +        "portfinder": "^1.0.9", +        "schema-utils": "^1.0.0", +        "selfsigned": "^1.9.1", +        "semver": "^5.6.0", +        "serve-index": "^1.7.2", +        "sockjs": "0.3.19", +        "sockjs-client": "1.3.0", +        "spdy": "^4.0.0", +        "strip-ansi": "^3.0.0", +        "supports-color": "^6.1.0", +        "url": "^0.11.0", +        "webpack-dev-middleware": "^3.5.1", +        "webpack-log": "^2.0.0", +        "yargs": "12.0.2" +      }, +      "dependencies": { +        "ansi-regex": { +          "version": "2.1.1", +          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", +          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" +        }, +        "camelcase": { +          "version": "4.1.0", +          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", +          "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" +        }, +        "cliui": { +          "version": "4.1.0", +          "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", +          "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", +          "requires": { +            "string-width": "^2.1.1", +            "strip-ansi": "^4.0.0", +            "wrap-ansi": "^2.0.0" +          }, +          "dependencies": { +            "ansi-regex": { +              "version": "3.0.0", +              "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", +              "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" +            }, +            "strip-ansi": { +              "version": "4.0.0", +              "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", +              "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", +              "requires": { +                "ansi-regex": "^3.0.0" +              } +            } +          } +        }, +        "decamelize": { +          "version": "2.0.0", +          "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", +          "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", +          "requires": { +            "xregexp": "4.0.0" +          } +        }, +        "get-caller-file": { +          "version": "1.0.3", +          "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", +          "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" +        }, +        "is-fullwidth-code-point": { +          "version": "2.0.0", +          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", +          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" +        }, +        "require-main-filename": { +          "version": "1.0.1", +          "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", +          "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" +        }, +        "semver": { +          "version": "5.7.1", +          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", +          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" +        }, +        "sockjs-client": { +          "version": "1.3.0", +          "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.3.0.tgz", +          "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==", +          "requires": { +            "debug": "^3.2.5", +            "eventsource": "^1.0.7", +            "faye-websocket": "~0.11.1", +            "inherits": "^2.0.3", +            "json3": "^3.3.2", +            "url-parse": "^1.4.3" +          }, +          "dependencies": { +            "debug": { +              "version": "3.2.6", +              "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", +              "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", +              "requires": { +                "ms": "^2.1.1" +              } +            } +          } +        }, +        "string-width": { +          "version": "2.1.1", +          "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", +          "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", +          "requires": { +            "is-fullwidth-code-point": "^2.0.0", +            "strip-ansi": "^4.0.0" +          }, +          "dependencies": { +            "ansi-regex": { +              "version": "3.0.0", +              "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", +              "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" +            }, +            "strip-ansi": { +              "version": "4.0.0", +              "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", +              "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", +              "requires": { +                "ansi-regex": "^3.0.0" +              } +            } +          } +        }, +        "strip-ansi": { +          "version": "3.0.1", +          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", +          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", +          "requires": { +            "ansi-regex": "^2.0.0" +          } +        }, +        "supports-color": { +          "version": "6.1.0", +          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", +          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", +          "requires": { +            "has-flag": "^3.0.0" +          } +        }, +        "wrap-ansi": { +          "version": "2.1.0", +          "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", +          "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", +          "requires": { +            "string-width": "^1.0.1", +            "strip-ansi": "^3.0.1" +          }, +          "dependencies": { +            "is-fullwidth-code-point": { +              "version": "1.0.0", +              "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", +              "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", +              "requires": { +                "number-is-nan": "^1.0.0" +              } +            }, +            "string-width": { +              "version": "1.0.2", +              "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", +              "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", +              "requires": { +                "code-point-at": "^1.0.0", +                "is-fullwidth-code-point": "^1.0.0", +                "strip-ansi": "^3.0.0" +              } +            } +          } +        }, +        "yargs": { +          "version": "12.0.2", +          "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.2.tgz", +          "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==", +          "requires": { +            "cliui": "^4.0.0", +            "decamelize": "^2.0.0", +            "find-up": "^3.0.0", +            "get-caller-file": "^1.0.1", +            "os-locale": "^3.0.0", +            "require-directory": "^2.1.1", +            "require-main-filename": "^1.0.1", +            "set-blocking": "^2.0.0", +            "string-width": "^2.0.0", +            "which-module": "^2.0.0", +            "y18n": "^3.2.1 || ^4.0.0", +            "yargs-parser": "^10.1.0" +          } +        }, +        "yargs-parser": { +          "version": "10.1.0", +          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", +          "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", +          "requires": { +            "camelcase": "^4.1.0" +          } +        } +      } +    }, +    "webpack-log": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", +      "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", +      "requires": { +        "ansi-colors": "^3.0.0", +        "uuid": "^3.3.2" +      } +    }, +    "webpack-manifest-plugin": { +      "version": "2.1.1", +      "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-2.1.1.tgz", +      "integrity": "sha512-2zqJ6mvc3yoiqfDjghAIpljhLSDh/G7vqGrzYcYqqRCd/ZZZCAuc/YPE5xG0LGpLgDJRhUNV1H+znyyhIxahzA==", +      "requires": { +        "fs-extra": "^7.0.0", +        "lodash": ">=3.5 <5", +        "object.entries": "^1.1.0", +        "tapable": "^1.0.0" +      } +    }, +    "webpack-sources": { +      "version": "1.4.3", +      "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", +      "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", +      "requires": { +        "source-list-map": "^2.0.0", +        "source-map": "~0.6.1" +      }, +      "dependencies": { +        "source-map": { +          "version": "0.6.1", +          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", +          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" +        } +      } +    }, +    "websocket-driver": { +      "version": "0.7.3", +      "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", +      "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==", +      "requires": { +        "http-parser-js": ">=0.4.0 <0.4.11", +        "safe-buffer": ">=5.1.0", +        "websocket-extensions": ">=0.1.1" +      } +    }, +    "websocket-extensions": { +      "version": "0.1.3", +      "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", +      "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==" +    }, +    "whatwg-encoding": { +      "version": "1.0.5", +      "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", +      "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", +      "requires": { +        "iconv-lite": "0.4.24" +      } +    }, +    "whatwg-fetch": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", +      "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==" +    }, +    "whatwg-mimetype": { +      "version": "2.3.0", +      "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", +      "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" +    }, +    "whatwg-url": { +      "version": "6.5.0", +      "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", +      "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", +      "requires": { +        "lodash.sortby": "^4.7.0", +        "tr46": "^1.0.1", +        "webidl-conversions": "^4.0.2" +      } +    }, +    "which": { +      "version": "1.3.1", +      "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", +      "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", +      "requires": { +        "isexe": "^2.0.0" +      } +    }, +    "which-module": { +      "version": "2.0.0", +      "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", +      "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" +    }, +    "word-wrap": { +      "version": "1.2.3", +      "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", +      "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" +    }, +    "wordwrap": { +      "version": "0.0.3", +      "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", +      "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" +    }, +    "workbox-background-sync": { +      "version": "4.3.1", +      "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-4.3.1.tgz", +      "integrity": "sha512-1uFkvU8JXi7L7fCHVBEEnc3asPpiAL33kO495UMcD5+arew9IbKW2rV5lpzhoWcm/qhGB89YfO4PmB/0hQwPRg==", +      "requires": { +        "workbox-core": "^4.3.1" +      } +    }, +    "workbox-broadcast-update": { +      "version": "4.3.1", +      "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-4.3.1.tgz", +      "integrity": "sha512-MTSfgzIljpKLTBPROo4IpKjESD86pPFlZwlvVG32Kb70hW+aob4Jxpblud8EhNb1/L5m43DUM4q7C+W6eQMMbA==", +      "requires": { +        "workbox-core": "^4.3.1" +      } +    }, +    "workbox-build": { +      "version": "4.3.1", +      "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-4.3.1.tgz", +      "integrity": "sha512-UHdwrN3FrDvicM3AqJS/J07X0KXj67R8Cg0waq1MKEOqzo89ap6zh6LmaLnRAjpB+bDIz+7OlPye9iii9KBnxw==", +      "requires": { +        "@babel/runtime": "^7.3.4", +        "@hapi/joi": "^15.0.0", +        "common-tags": "^1.8.0", +        "fs-extra": "^4.0.2", +        "glob": "^7.1.3", +        "lodash.template": "^4.4.0", +        "pretty-bytes": "^5.1.0", +        "stringify-object": "^3.3.0", +        "strip-comments": "^1.0.2", +        "workbox-background-sync": "^4.3.1", +        "workbox-broadcast-update": "^4.3.1", +        "workbox-cacheable-response": "^4.3.1", +        "workbox-core": "^4.3.1", +        "workbox-expiration": "^4.3.1", +        "workbox-google-analytics": "^4.3.1", +        "workbox-navigation-preload": "^4.3.1", +        "workbox-precaching": "^4.3.1", +        "workbox-range-requests": "^4.3.1", +        "workbox-routing": "^4.3.1", +        "workbox-strategies": "^4.3.1", +        "workbox-streams": "^4.3.1", +        "workbox-sw": "^4.3.1", +        "workbox-window": "^4.3.1" +      }, +      "dependencies": { +        "fs-extra": { +          "version": "4.0.3", +          "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", +          "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", +          "requires": { +            "graceful-fs": "^4.1.2", +            "jsonfile": "^4.0.0", +            "universalify": "^0.1.0" +          } +        } +      } +    }, +    "workbox-cacheable-response": { +      "version": "4.3.1", +      "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-4.3.1.tgz", +      "integrity": "sha512-Rp5qlzm6z8IOvnQNkCdO9qrDgDpoPNguovs0H8C+wswLuPgSzSp9p2afb5maUt9R1uTIwOXrVQMmPfPypv+npw==", +      "requires": { +        "workbox-core": "^4.3.1" +      } +    }, +    "workbox-core": { +      "version": "4.3.1", +      "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-4.3.1.tgz", +      "integrity": "sha512-I3C9jlLmMKPxAC1t0ExCq+QoAMd0vAAHULEgRZ7kieCdUd919n53WC0AfvokHNwqRhGn+tIIj7vcb5duCjs2Kg==" +    }, +    "workbox-expiration": { +      "version": "4.3.1", +      "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-4.3.1.tgz", +      "integrity": "sha512-vsJLhgQsQouv9m0rpbXubT5jw0jMQdjpkum0uT+d9tTwhXcEZks7qLfQ9dGSaufTD2eimxbUOJfWLbNQpIDMPw==", +      "requires": { +        "workbox-core": "^4.3.1" +      } +    }, +    "workbox-google-analytics": { +      "version": "4.3.1", +      "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-4.3.1.tgz", +      "integrity": "sha512-xzCjAoKuOb55CBSwQrbyWBKqp35yg1vw9ohIlU2wTy06ZrYfJ8rKochb1MSGlnoBfXGWss3UPzxR5QL5guIFdg==", +      "requires": { +        "workbox-background-sync": "^4.3.1", +        "workbox-core": "^4.3.1", +        "workbox-routing": "^4.3.1", +        "workbox-strategies": "^4.3.1" +      } +    }, +    "workbox-navigation-preload": { +      "version": "4.3.1", +      "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-4.3.1.tgz", +      "integrity": "sha512-K076n3oFHYp16/C+F8CwrRqD25GitA6Rkd6+qAmLmMv1QHPI2jfDwYqrytOfKfYq42bYtW8Pr21ejZX7GvALOw==", +      "requires": { +        "workbox-core": "^4.3.1" +      } +    }, +    "workbox-precaching": { +      "version": "4.3.1", +      "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-4.3.1.tgz", +      "integrity": "sha512-piSg/2csPoIi/vPpp48t1q5JLYjMkmg5gsXBQkh/QYapCdVwwmKlU9mHdmy52KsDGIjVaqEUMFvEzn2LRaigqQ==", +      "requires": { +        "workbox-core": "^4.3.1" +      } +    }, +    "workbox-range-requests": { +      "version": "4.3.1", +      "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-4.3.1.tgz", +      "integrity": "sha512-S+HhL9+iTFypJZ/yQSl/x2Bf5pWnbXdd3j57xnb0V60FW1LVn9LRZkPtneODklzYuFZv7qK6riZ5BNyc0R0jZA==", +      "requires": { +        "workbox-core": "^4.3.1" +      } +    }, +    "workbox-routing": { +      "version": "4.3.1", +      "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-4.3.1.tgz", +      "integrity": "sha512-FkbtrODA4Imsi0p7TW9u9MXuQ5P4pVs1sWHK4dJMMChVROsbEltuE79fBoIk/BCztvOJ7yUpErMKa4z3uQLX+g==", +      "requires": { +        "workbox-core": "^4.3.1" +      } +    }, +    "workbox-strategies": { +      "version": "4.3.1", +      "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-4.3.1.tgz", +      "integrity": "sha512-F/+E57BmVG8dX6dCCopBlkDvvhg/zj6VDs0PigYwSN23L8hseSRwljrceU2WzTvk/+BSYICsWmRq5qHS2UYzhw==", +      "requires": { +        "workbox-core": "^4.3.1" +      } +    }, +    "workbox-streams": { +      "version": "4.3.1", +      "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-4.3.1.tgz", +      "integrity": "sha512-4Kisis1f/y0ihf4l3u/+ndMkJkIT4/6UOacU3A4BwZSAC9pQ9vSvJpIi/WFGQRH/uPXvuVjF5c2RfIPQFSS2uA==", +      "requires": { +        "workbox-core": "^4.3.1" +      } +    }, +    "workbox-sw": { +      "version": "4.3.1", +      "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-4.3.1.tgz", +      "integrity": "sha512-0jXdusCL2uC5gM3yYFT6QMBzKfBr2XTk0g5TPAV4y8IZDyVNDyj1a8uSXy3/XrvkVTmQvLN4O5k3JawGReXr9w==" +    }, +    "workbox-webpack-plugin": { +      "version": "4.3.1", +      "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-4.3.1.tgz", +      "integrity": "sha512-gJ9jd8Mb8wHLbRz9ZvGN57IAmknOipD3W4XNE/Lk/4lqs5Htw4WOQgakQy/o/4CoXQlMCYldaqUg+EJ35l9MEQ==", +      "requires": { +        "@babel/runtime": "^7.0.0", +        "json-stable-stringify": "^1.0.1", +        "workbox-build": "^4.3.1" +      } +    }, +    "workbox-window": { +      "version": "4.3.1", +      "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-4.3.1.tgz", +      "integrity": "sha512-C5gWKh6I58w3GeSc0wp2Ne+rqVw8qwcmZnQGpjiek8A2wpbxSJb1FdCoQVO+jDJs35bFgo/WETgl1fqgsxN0Hg==", +      "requires": { +        "workbox-core": "^4.3.1" +      } +    }, +    "worker-farm": { +      "version": "1.7.0", +      "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", +      "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", +      "requires": { +        "errno": "~0.1.7" +      } +    }, +    "worker-rpc": { +      "version": "0.1.1", +      "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz", +      "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==", +      "requires": { +        "microevent.ts": "~0.1.1" +      } +    }, +    "wrap-ansi": { +      "version": "5.1.0", +      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", +      "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", +      "requires": { +        "ansi-styles": "^3.2.0", +        "string-width": "^3.0.0", +        "strip-ansi": "^5.0.0" +      }, +      "dependencies": { +        "emoji-regex": { +          "version": "7.0.3", +          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", +          "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" +        }, +        "is-fullwidth-code-point": { +          "version": "2.0.0", +          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", +          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" +        }, +        "string-width": { +          "version": "3.1.0", +          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", +          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", +          "requires": { +            "emoji-regex": "^7.0.1", +            "is-fullwidth-code-point": "^2.0.0", +            "strip-ansi": "^5.1.0" +          } +        } +      } +    }, +    "wrappy": { +      "version": "1.0.2", +      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", +      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" +    }, +    "write": { +      "version": "1.0.3", +      "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", +      "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", +      "requires": { +        "mkdirp": "^0.5.1" +      } +    }, +    "write-file-atomic": { +      "version": "2.4.1", +      "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", +      "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", +      "requires": { +        "graceful-fs": "^4.1.11", +        "imurmurhash": "^0.1.4", +        "signal-exit": "^3.0.2" +      } +    }, +    "ws": { +      "version": "5.2.2", +      "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", +      "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", +      "requires": { +        "async-limiter": "~1.0.0" +      } +    }, +    "xml-name-validator": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", +      "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" +    }, +    "xmlchars": { +      "version": "2.2.0", +      "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", +      "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" +    }, +    "xregexp": { +      "version": "4.0.0", +      "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz", +      "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==" +    }, +    "xtend": { +      "version": "4.0.2", +      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", +      "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" +    }, +    "y18n": { +      "version": "4.0.0", +      "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", +      "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" +    }, +    "yallist": { +      "version": "3.1.1", +      "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", +      "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" +    }, +    "yargs": { +      "version": "13.3.0", +      "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", +      "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", +      "requires": { +        "cliui": "^5.0.0", +        "find-up": "^3.0.0", +        "get-caller-file": "^2.0.1", +        "require-directory": "^2.1.1", +        "require-main-filename": "^2.0.0", +        "set-blocking": "^2.0.0", +        "string-width": "^3.0.0", +        "which-module": "^2.0.0", +        "y18n": "^4.0.0", +        "yargs-parser": "^13.1.1" +      }, +      "dependencies": { +        "emoji-regex": { +          "version": "7.0.3", +          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", +          "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" +        }, +        "is-fullwidth-code-point": { +          "version": "2.0.0", +          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", +          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" +        }, +        "string-width": { +          "version": "3.1.0", +          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", +          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", +          "requires": { +            "emoji-regex": "^7.0.1", +            "is-fullwidth-code-point": "^2.0.0", +            "strip-ansi": "^5.1.0" +          } +        } +      } +    }, +    "yargs-parser": { +      "version": "13.1.1", +      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", +      "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", +      "requires": { +        "camelcase": "^5.0.0", +        "decamelize": "^1.2.0" +      } +    } +  } +} diff --git a/web/package.json b/web/package.json new file mode 100644 index 000000000..8e46f0791 --- /dev/null +++ b/web/package.json @@ -0,0 +1,54 @@ +{ +  "name": "web", +  "version": "0.1.0", +  "private": true, +  "dependencies": { +    "@fortawesome/fontawesome-svg-core": "^1.2.25", +    "@fortawesome/free-regular-svg-icons": "^5.11.2", +    "@fortawesome/free-solid-svg-icons": "^5.11.2", +    "@fortawesome/react-fontawesome": "^0.1.7", +    "@material-ui/core": "^4.7.0", +    "@material-ui/icons": "^4.5.1", +    "@types/classnames": "^2.2.9", +    "@types/jest": "24.0.23", +    "@types/node": "12.12.12", +    "@types/qrcode.react": "^1.0.0", +    "@types/query-string": "^6.3.0", +    "@types/react": "16.9.12", +    "@types/react-dom": "16.9.4", +    "@types/react-router-dom": "^5.1.2", +    "axios": "^0.19.0", +    "classnames": "^2.2.6", +    "qrcode.react": "^1.0.0", +    "query-string": "^6.9.0", +    "react": "^16.12.0", +    "react-dom": "^16.12.0", +    "react-loading": "^2.0.3", +    "react-otp-input": "^1.0.1", +    "react-router-dom": "^5.1.2", +    "react-scripts": "3.2.0", +    "typescript": "3.7.2", +    "u2f-api": "^1.1.1" +  }, +  "scripts": { +    "start": "react-scripts start", +    "build": "react-scripts build", +    "test": "react-scripts test", +    "eject": "react-scripts eject" +  }, +  "eslintConfig": { +    "extends": "react-app" +  }, +  "browserslist": { +    "production": [ +      ">0.2%", +      "not dead", +      "not op_mini all" +    ], +    "development": [ +      "last 1 chrome version", +      "last 1 firefox version", +      "last 1 safari version" +    ] +  } +} diff --git a/web/public/favicon.ico b/web/public/favicon.ico Binary files differnew file mode 100644 index 000000000..83f645c6f --- /dev/null +++ b/web/public/favicon.ico diff --git a/web/public/index.html b/web/public/index.html new file mode 100644 index 000000000..489973147 --- /dev/null +++ b/web/public/index.html @@ -0,0 +1,42 @@ +<!DOCTYPE html> +<html lang="en"> +  <head> +    <meta charset="utf-8" /> +    <link rel="icon" href="%PUBLIC_URL%/favicon.ico" /> +    <meta name="viewport" content="width=device-width, initial-scale=1" /> +    <meta name="theme-color" content="#000000" /> +    <meta +      name="description" +      content="Authelia login portal for your apps" +    /> +    <!-- +      manifest.json provides metadata used when your web app is installed on a +      user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/ +    --> +    <link rel="manifest" href="%PUBLIC_URL%/manifest.json" /> +    <!-- +      Notice the use of %PUBLIC_URL% in the tags above. +      It will be replaced with the URL of the `public` folder during the build. +      Only files inside the `public` folder can be referenced from the HTML. + +      Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will +      work correctly both with client-side routing and a non-root public URL. +      Learn how to configure a non-root public URL by running `npm run build`. +    --> +    <title>Login - Authelia</title> +  </head> +  <body> +    <noscript>You need to enable JavaScript to run this app.</noscript> +    <div id="root"></div> +    <!-- +      This HTML file is a template. +      If you open it directly in the browser, you will see an empty page. + +      You can add webfonts, meta tags, or analytics to this file. +      The build step will place the bundled scripts into the <body> tag. + +      To begin the development, run `npm start` or `yarn start`. +      To create a production bundle, use `npm run build` or `yarn build`. +    --> +  </body> +</html> diff --git a/web/public/manifest.json b/web/public/manifest.json new file mode 100644 index 000000000..c709fc0f8 --- /dev/null +++ b/web/public/manifest.json @@ -0,0 +1,15 @@ +{ +  "short_name": "Authelia WebApp", +  "name": "Authelia Web Application", +  "icons": [ +    { +      "src": "favicon.ico", +      "sizes": "64x64 32x32 24x24 16x16", +      "type": "image/x-icon" +    } +  ], +  "start_url": ".", +  "display": "standalone", +  "theme_color": "#000000", +  "background_color": "#ffffff" +} diff --git a/web/public/robots.txt b/web/public/robots.txt new file mode 100644 index 000000000..01b0f9a10 --- /dev/null +++ b/web/public/robots.txt @@ -0,0 +1,2 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * diff --git a/web/src/App.test.tsx b/web/src/App.test.tsx new file mode 100644 index 000000000..a754b201b --- /dev/null +++ b/web/src/App.test.tsx @@ -0,0 +1,9 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import App from './App'; + +it('renders without crashing', () => { +  const div = document.createElement('div'); +  ReactDOM.render(<App />, div); +  ReactDOM.unmountComponentAtNode(div); +}); diff --git a/web/src/App.tsx b/web/src/App.tsx new file mode 100644 index 000000000..b9d78862d --- /dev/null +++ b/web/src/App.tsx @@ -0,0 +1,55 @@ +import React, { useState } from 'react'; +import { +    BrowserRouter as Router, Route, Switch, Redirect +} from "react-router-dom"; +import ResetPasswordStep1 from './views/ResetPassword/ResetPasswordStep1'; +import ResetPasswordStep2 from './views/ResetPassword/ResetPasswordStep2'; +import RegisterSecurityKey from './views/DeviceRegistration/RegisterSecurityKey'; +import RegisterOneTimePassword from './views/DeviceRegistration/RegisterOneTimePassword'; +import { +    FirstFactorRoute, ResetPasswordStep2Route, +    ResetPasswordStep1Route, RegisterSecurityKeyRoute, +    RegisterOneTimePasswordRoute, +    LogoutRoute, +} from "./Routes"; +import LoginPortal from './views/LoginPortal/LoginPortal'; +import NotificationsContext from './hooks/NotificationsContext'; +import { Notification } from './models/Notifications'; +import NotificationBar from './components/NotificationBar'; +import SignOut from './views/LoginPortal/SignOut/SignOut'; + +const App: React.FC = () => { +    const [notification, setNotification] = useState(null as Notification | null); +    return ( +        <NotificationsContext.Provider value={{ notification, setNotification }} > +            <NotificationBar onClose={() => setNotification(null)} /> +            <Router> +                <Switch> +                    <Route path={ResetPasswordStep1Route} exact> +                        <ResetPasswordStep1 /> +                    </Route> +                    <Route path={ResetPasswordStep2Route} exact> +                        <ResetPasswordStep2 /> +                    </Route> +                    <Route path={RegisterSecurityKeyRoute} exact> +                        <RegisterSecurityKey /> +                    </Route> +                    <Route path={RegisterOneTimePasswordRoute} exact> +                        <RegisterOneTimePassword /> +                    </Route> +                    <Route path={LogoutRoute} exact> +                        <SignOut /> +                    </Route> +                    <Route path={FirstFactorRoute}> +                        <LoginPortal /> +                    </Route> +                    <Route path="/"> +                        <Redirect to={FirstFactorRoute}></Redirect> +                    </Route> +                </Switch> +            </Router> +        </NotificationsContext.Provider> +    ); +} + +export default App; diff --git a/web/src/Routes.ts b/web/src/Routes.ts new file mode 100644 index 000000000..40cb3ecf9 --- /dev/null +++ b/web/src/Routes.ts @@ -0,0 +1,13 @@ + +export const FirstFactorRoute = "/"; + +export const SecondFactorRoute = "/2fa"; +export const SecondFactorU2FRoute = "/2fa/security-key"; +export const SecondFactorTOTPRoute = "/2fa/one-time-password"; +export const SecondFactorPushRoute = "/2fa/push-notification"; + +export const ResetPasswordStep1Route = "/reset-password/step1"; +export const ResetPasswordStep2Route = "/reset-password/step2"; +export const RegisterSecurityKeyRoute = "/security-key/register"; +export const RegisterOneTimePasswordRoute = "/one-time-password/register"; +export const LogoutRoute = "/logout";
\ No newline at end of file diff --git a/web/src/assets/images/applestore-badge.svg b/web/src/assets/images/applestore-badge.svg new file mode 100644 index 000000000..ac111e597 --- /dev/null +++ b/web/src/assets/images/applestore-badge.svg @@ -0,0 +1,129 @@ +<?xml version="1.0" encoding="utf-8"?>
 +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
 +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 +<svg version="1.1" id="US_UK_Download_on_the" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
 +	 x="0px" y="0px" width="135px" height="40px" viewBox="0 0 135 40" enable-background="new 0 0 135 40" xml:space="preserve">
 +<g>
 +	<path fill="#A6A6A6" d="M130.197,40H4.729C2.122,40,0,37.872,0,35.267V4.726C0,2.12,2.122,0,4.729,0h125.468
 +		C132.803,0,135,2.12,135,4.726v30.541C135,37.872,132.803,40,130.197,40L130.197,40z"/>
 +	<path d="M134.032,35.268c0,2.116-1.714,3.83-3.834,3.83H4.729c-2.119,0-3.839-1.714-3.839-3.83V4.725
 +		c0-2.115,1.72-3.835,3.839-3.835h125.468c2.121,0,3.834,1.72,3.834,3.835L134.032,35.268L134.032,35.268z"/>
 +	<g>
 +		<g>
 +			<path fill="#FFFFFF" d="M30.128,19.784c-0.029-3.223,2.639-4.791,2.761-4.864c-1.511-2.203-3.853-2.504-4.676-2.528
 +				c-1.967-0.207-3.875,1.177-4.877,1.177c-1.022,0-2.565-1.157-4.228-1.123c-2.14,0.033-4.142,1.272-5.24,3.196
 +				c-2.266,3.923-0.576,9.688,1.595,12.859c1.086,1.553,2.355,3.287,4.016,3.226c1.625-0.067,2.232-1.036,4.193-1.036
 +				c1.943,0,2.513,1.036,4.207,0.997c1.744-0.028,2.842-1.56,3.89-3.127c1.255-1.78,1.759-3.533,1.779-3.623
 +				C33.507,24.924,30.161,23.647,30.128,19.784z"/>
 +			<path fill="#FFFFFF" d="M26.928,10.306c0.874-1.093,1.472-2.58,1.306-4.089c-1.265,0.056-2.847,0.875-3.758,1.944
 +				c-0.806,0.942-1.526,2.486-1.34,3.938C24.557,12.205,26.016,11.382,26.928,10.306z"/>
 +		</g>
 +	</g>
 +	<g>
 +		<path fill="#FFFFFF" d="M53.645,31.504h-2.271l-1.244-3.909h-4.324l-1.185,3.909h-2.211l4.284-13.308h2.646L53.645,31.504z
 +			 M49.755,25.955L48.63,22.48c-0.119-0.355-0.342-1.191-0.671-2.507h-0.04c-0.131,0.566-0.342,1.402-0.632,2.507l-1.105,3.475
 +			H49.755z"/>
 +		<path fill="#FFFFFF" d="M64.662,26.588c0,1.632-0.441,2.922-1.323,3.869c-0.79,0.843-1.771,1.264-2.942,1.264
 +			c-1.264,0-2.172-0.454-2.725-1.362h-0.04v5.055h-2.132V25.067c0-1.026-0.027-2.079-0.079-3.159h1.875l0.119,1.521h0.04
 +			c0.711-1.146,1.79-1.718,3.238-1.718c1.132,0,2.077,0.447,2.833,1.342C64.284,23.949,64.662,25.127,64.662,26.588z M62.49,26.666
 +			c0-0.934-0.21-1.704-0.632-2.31c-0.461-0.632-1.08-0.948-1.856-0.948c-0.526,0-1.004,0.176-1.431,0.523
 +			c-0.428,0.35-0.708,0.807-0.839,1.373c-0.066,0.264-0.099,0.48-0.099,0.65v1.6c0,0.698,0.214,1.287,0.642,1.768
 +			s0.984,0.721,1.668,0.721c0.803,0,1.428-0.31,1.875-0.928C62.266,28.496,62.49,27.68,62.49,26.666z"/>
 +		<path fill="#FFFFFF" d="M75.699,26.588c0,1.632-0.441,2.922-1.324,3.869c-0.789,0.843-1.77,1.264-2.941,1.264
 +			c-1.264,0-2.172-0.454-2.724-1.362H68.67v5.055h-2.132V25.067c0-1.026-0.027-2.079-0.079-3.159h1.875l0.119,1.521h0.04
 +			c0.71-1.146,1.789-1.718,3.238-1.718c1.131,0,2.076,0.447,2.834,1.342C75.32,23.949,75.699,25.127,75.699,26.588z M73.527,26.666
 +			c0-0.934-0.211-1.704-0.633-2.31c-0.461-0.632-1.078-0.948-1.855-0.948c-0.527,0-1.004,0.176-1.432,0.523
 +			c-0.428,0.35-0.707,0.807-0.838,1.373c-0.065,0.264-0.099,0.48-0.099,0.65v1.6c0,0.698,0.214,1.287,0.64,1.768
 +			c0.428,0.48,0.984,0.721,1.67,0.721c0.803,0,1.428-0.31,1.875-0.928C73.303,28.496,73.527,27.68,73.527,26.666z"/>
 +		<path fill="#FFFFFF" d="M88.039,27.772c0,1.132-0.393,2.053-1.182,2.764c-0.867,0.777-2.074,1.165-3.625,1.165
 +			c-1.432,0-2.58-0.276-3.449-0.829l0.494-1.777c0.936,0.566,1.963,0.85,3.082,0.85c0.803,0,1.428-0.182,1.877-0.544
 +			c0.447-0.362,0.67-0.848,0.67-1.454c0-0.54-0.184-0.995-0.553-1.364c-0.367-0.369-0.98-0.712-1.836-1.029
 +			c-2.33-0.869-3.494-2.142-3.494-3.816c0-1.094,0.408-1.991,1.225-2.689c0.814-0.699,1.9-1.048,3.258-1.048
 +			c1.211,0,2.217,0.211,3.02,0.632l-0.533,1.738c-0.75-0.408-1.598-0.612-2.547-0.612c-0.75,0-1.336,0.185-1.756,0.553
 +			c-0.355,0.329-0.533,0.73-0.533,1.205c0,0.526,0.203,0.961,0.611,1.303c0.355,0.316,1,0.658,1.936,1.027
 +			c1.145,0.461,1.986,1,2.527,1.618C87.77,26.081,88.039,26.852,88.039,27.772z"/>
 +		<path fill="#FFFFFF" d="M95.088,23.508h-2.35v4.659c0,1.185,0.414,1.777,1.244,1.777c0.381,0,0.697-0.033,0.947-0.099l0.059,1.619
 +			c-0.42,0.157-0.973,0.236-1.658,0.236c-0.842,0-1.5-0.257-1.975-0.77c-0.473-0.514-0.711-1.376-0.711-2.587v-4.837h-1.4v-1.6h1.4
 +			v-1.757l2.094-0.632v2.389h2.35V23.508z"/>
 +		<path fill="#FFFFFF" d="M105.691,26.627c0,1.475-0.422,2.686-1.264,3.633c-0.883,0.975-2.055,1.461-3.516,1.461
 +			c-1.408,0-2.529-0.467-3.365-1.401s-1.254-2.113-1.254-3.534c0-1.487,0.43-2.705,1.293-3.652c0.861-0.948,2.023-1.422,3.484-1.422
 +			c1.408,0,2.541,0.467,3.396,1.402C105.283,24.021,105.691,25.192,105.691,26.627z M103.479,26.696
 +			c0-0.885-0.189-1.644-0.572-2.277c-0.447-0.766-1.086-1.148-1.914-1.148c-0.857,0-1.508,0.383-1.955,1.148
 +			c-0.383,0.634-0.572,1.405-0.572,2.317c0,0.885,0.189,1.644,0.572,2.276c0.461,0.766,1.105,1.148,1.936,1.148
 +			c0.814,0,1.453-0.39,1.914-1.168C103.281,28.347,103.479,27.58,103.479,26.696z"/>
 +		<path fill="#FFFFFF" d="M112.621,23.783c-0.211-0.039-0.436-0.059-0.672-0.059c-0.75,0-1.33,0.283-1.738,0.85
 +			c-0.355,0.5-0.533,1.132-0.533,1.895v5.035h-2.131l0.02-6.574c0-1.106-0.027-2.113-0.08-3.021h1.857l0.078,1.836h0.059
 +			c0.225-0.631,0.58-1.139,1.066-1.52c0.475-0.343,0.988-0.514,1.541-0.514c0.197,0,0.375,0.014,0.533,0.039V23.783z"/>
 +		<path fill="#FFFFFF" d="M122.156,26.252c0,0.382-0.025,0.704-0.078,0.967h-6.396c0.025,0.948,0.334,1.673,0.928,2.173
 +			c0.539,0.447,1.236,0.671,2.092,0.671c0.947,0,1.811-0.151,2.588-0.454l0.334,1.48c-0.908,0.396-1.98,0.593-3.217,0.593
 +			c-1.488,0-2.656-0.438-3.506-1.313c-0.848-0.875-1.273-2.05-1.273-3.524c0-1.447,0.395-2.652,1.186-3.613
 +			c0.828-1.026,1.947-1.539,3.355-1.539c1.383,0,2.43,0.513,3.141,1.539C121.873,24.047,122.156,25.055,122.156,26.252z
 +			 M120.123,25.699c0.014-0.632-0.125-1.178-0.414-1.639c-0.369-0.593-0.936-0.889-1.699-0.889c-0.697,0-1.264,0.289-1.697,0.869
 +			c-0.355,0.461-0.566,1.014-0.631,1.658H120.123z"/>
 +	</g>
 +	<g>
 +		<g>
 +			<path fill="#FFFFFF" d="M49.05,10.009c0,1.177-0.353,2.063-1.058,2.658c-0.653,0.549-1.581,0.824-2.783,0.824
 +				c-0.596,0-1.106-0.026-1.533-0.078V6.982c0.557-0.09,1.157-0.136,1.805-0.136c1.145,0,2.008,0.249,2.59,0.747
 +				C48.723,8.156,49.05,8.961,49.05,10.009z M47.945,10.038c0-0.763-0.202-1.348-0.606-1.756c-0.404-0.407-0.994-0.611-1.771-0.611
 +				c-0.33,0-0.611,0.022-0.844,0.068v4.889c0.129,0.02,0.365,0.029,0.708,0.029c0.802,0,1.421-0.223,1.857-0.669
 +				S47.945,10.892,47.945,10.038z"/>
 +			<path fill="#FFFFFF" d="M54.909,11.037c0,0.725-0.207,1.319-0.621,1.785c-0.434,0.479-1.009,0.718-1.727,0.718
 +				c-0.692,0-1.243-0.229-1.654-0.689c-0.41-0.459-0.615-1.038-0.615-1.736c0-0.73,0.211-1.329,0.635-1.794s0.994-0.698,1.712-0.698
 +				c0.692,0,1.248,0.229,1.669,0.688C54.708,9.757,54.909,10.333,54.909,11.037z M53.822,11.071c0-0.435-0.094-0.808-0.281-1.119
 +				c-0.22-0.376-0.533-0.564-0.94-0.564c-0.421,0-0.741,0.188-0.961,0.564c-0.188,0.311-0.281,0.69-0.281,1.138
 +				c0,0.435,0.094,0.808,0.281,1.119c0.227,0.376,0.543,0.564,0.951,0.564c0.4,0,0.714-0.191,0.94-0.574
 +				C53.725,11.882,53.822,11.506,53.822,11.071z"/>
 +			<path fill="#FFFFFF" d="M62.765,8.719l-1.475,4.714h-0.96l-0.611-2.047c-0.155-0.511-0.281-1.019-0.379-1.523h-0.019
 +				c-0.091,0.518-0.217,1.025-0.379,1.523l-0.649,2.047h-0.971l-1.387-4.714h1.077l0.533,2.241c0.129,0.53,0.235,1.035,0.32,1.513
 +				h0.019c0.078-0.394,0.207-0.896,0.389-1.503l0.669-2.25h0.854l0.641,2.202c0.155,0.537,0.281,1.054,0.378,1.552h0.029
 +				c0.071-0.485,0.178-1.002,0.32-1.552l0.572-2.202H62.765z"/>
 +			<path fill="#FFFFFF" d="M68.198,13.433H67.15v-2.7c0-0.832-0.316-1.248-0.95-1.248c-0.311,0-0.562,0.114-0.757,0.343
 +				c-0.193,0.229-0.291,0.499-0.291,0.808v2.796h-1.048v-3.366c0-0.414-0.013-0.863-0.038-1.349h0.921l0.049,0.737h0.029
 +				c0.122-0.229,0.304-0.418,0.543-0.569c0.284-0.176,0.602-0.265,0.95-0.265c0.44,0,0.806,0.142,1.097,0.427
 +				c0.362,0.349,0.543,0.87,0.543,1.562V13.433z"/>
 +			<path fill="#FFFFFF" d="M71.088,13.433h-1.047V6.556h1.047V13.433z"/>
 +			<path fill="#FFFFFF" d="M77.258,11.037c0,0.725-0.207,1.319-0.621,1.785c-0.434,0.479-1.01,0.718-1.727,0.718
 +				c-0.693,0-1.244-0.229-1.654-0.689c-0.41-0.459-0.615-1.038-0.615-1.736c0-0.73,0.211-1.329,0.635-1.794s0.994-0.698,1.711-0.698
 +				c0.693,0,1.248,0.229,1.67,0.688C77.057,9.757,77.258,10.333,77.258,11.037z M76.17,11.071c0-0.435-0.094-0.808-0.281-1.119
 +				c-0.219-0.376-0.533-0.564-0.939-0.564c-0.422,0-0.742,0.188-0.961,0.564c-0.188,0.311-0.281,0.69-0.281,1.138
 +				c0,0.435,0.094,0.808,0.281,1.119c0.227,0.376,0.543,0.564,0.951,0.564c0.4,0,0.713-0.191,0.939-0.574
 +				C76.074,11.882,76.17,11.506,76.17,11.071z"/>
 +			<path fill="#FFFFFF" d="M82.33,13.433h-0.941l-0.078-0.543h-0.029c-0.322,0.433-0.781,0.65-1.377,0.65
 +				c-0.445,0-0.805-0.143-1.076-0.427c-0.246-0.258-0.369-0.579-0.369-0.96c0-0.576,0.24-1.015,0.723-1.319
 +				c0.482-0.304,1.16-0.453,2.033-0.446V10.3c0-0.621-0.326-0.931-0.979-0.931c-0.465,0-0.875,0.117-1.229,0.349l-0.213-0.688
 +				c0.438-0.271,0.979-0.407,1.617-0.407c1.232,0,1.85,0.65,1.85,1.95v1.736C82.262,12.78,82.285,13.155,82.33,13.433z
 +				 M81.242,11.813v-0.727c-1.156-0.02-1.734,0.297-1.734,0.95c0,0.246,0.066,0.43,0.201,0.553c0.135,0.123,0.307,0.184,0.512,0.184
 +				c0.23,0,0.445-0.073,0.641-0.218c0.197-0.146,0.318-0.331,0.363-0.558C81.236,11.946,81.242,11.884,81.242,11.813z"/>
 +			<path fill="#FFFFFF" d="M88.285,13.433h-0.93l-0.049-0.757h-0.029c-0.297,0.576-0.803,0.864-1.514,0.864
 +				c-0.568,0-1.041-0.223-1.416-0.669s-0.562-1.025-0.562-1.736c0-0.763,0.203-1.381,0.611-1.853c0.395-0.44,0.879-0.66,1.455-0.66
 +				c0.633,0,1.076,0.213,1.328,0.64h0.02V6.556h1.049v5.607C88.248,12.622,88.26,13.045,88.285,13.433z M87.199,11.445v-0.786
 +				c0-0.136-0.01-0.246-0.029-0.33c-0.059-0.252-0.186-0.464-0.379-0.635c-0.195-0.171-0.43-0.257-0.701-0.257
 +				c-0.391,0-0.697,0.155-0.922,0.466c-0.223,0.311-0.336,0.708-0.336,1.193c0,0.466,0.107,0.844,0.322,1.135
 +				c0.227,0.31,0.533,0.465,0.916,0.465c0.344,0,0.619-0.129,0.828-0.388C87.1,12.069,87.199,11.781,87.199,11.445z"/>
 +			<path fill="#FFFFFF" d="M97.248,11.037c0,0.725-0.207,1.319-0.621,1.785c-0.434,0.479-1.008,0.718-1.727,0.718
 +				c-0.691,0-1.242-0.229-1.654-0.689c-0.41-0.459-0.615-1.038-0.615-1.736c0-0.73,0.211-1.329,0.635-1.794s0.994-0.698,1.713-0.698
 +				c0.691,0,1.248,0.229,1.668,0.688C97.047,9.757,97.248,10.333,97.248,11.037z M96.162,11.071c0-0.435-0.094-0.808-0.281-1.119
 +				c-0.221-0.376-0.533-0.564-0.941-0.564c-0.42,0-0.74,0.188-0.961,0.564c-0.188,0.311-0.281,0.69-0.281,1.138
 +				c0,0.435,0.094,0.808,0.281,1.119c0.227,0.376,0.543,0.564,0.951,0.564c0.4,0,0.715-0.191,0.941-0.574
 +				C96.064,11.882,96.162,11.506,96.162,11.071z"/>
 +			<path fill="#FFFFFF" d="M102.883,13.433h-1.047v-2.7c0-0.832-0.316-1.248-0.951-1.248c-0.311,0-0.562,0.114-0.756,0.343
 +				s-0.291,0.499-0.291,0.808v2.796h-1.049v-3.366c0-0.414-0.012-0.863-0.037-1.349h0.92l0.049,0.737h0.029
 +				c0.123-0.229,0.305-0.418,0.543-0.569c0.285-0.176,0.602-0.265,0.951-0.265c0.439,0,0.805,0.142,1.096,0.427
 +				c0.363,0.349,0.543,0.87,0.543,1.562V13.433z"/>
 +			<path fill="#FFFFFF" d="M109.936,9.504h-1.154v2.29c0,0.582,0.205,0.873,0.611,0.873c0.188,0,0.344-0.016,0.467-0.049
 +				l0.027,0.795c-0.207,0.078-0.479,0.117-0.814,0.117c-0.414,0-0.736-0.126-0.969-0.378c-0.234-0.252-0.35-0.676-0.35-1.271V9.504
 +				h-0.689V8.719h0.689V7.855l1.027-0.31v1.173h1.154V9.504z"/>
 +			<path fill="#FFFFFF" d="M115.484,13.433h-1.049v-2.68c0-0.845-0.316-1.268-0.949-1.268c-0.486,0-0.818,0.245-1,0.735
 +				c-0.031,0.103-0.049,0.229-0.049,0.377v2.835h-1.047V6.556h1.047v2.841h0.02c0.33-0.517,0.803-0.775,1.416-0.775
 +				c0.434,0,0.793,0.142,1.078,0.427c0.355,0.355,0.533,0.883,0.533,1.581V13.433z"/>
 +			<path fill="#FFFFFF" d="M121.207,10.853c0,0.188-0.014,0.346-0.039,0.475h-3.143c0.014,0.466,0.164,0.821,0.455,1.067
 +				c0.266,0.22,0.609,0.33,1.029,0.33c0.465,0,0.889-0.074,1.271-0.223l0.164,0.728c-0.447,0.194-0.973,0.291-1.582,0.291
 +				c-0.73,0-1.305-0.215-1.721-0.645c-0.418-0.43-0.625-1.007-0.625-1.731c0-0.711,0.193-1.303,0.582-1.775
 +				c0.406-0.504,0.955-0.756,1.648-0.756c0.678,0,1.193,0.252,1.541,0.756C121.068,9.77,121.207,10.265,121.207,10.853z
 +				 M120.207,10.582c0.008-0.311-0.061-0.579-0.203-0.805c-0.182-0.291-0.459-0.437-0.834-0.437c-0.342,0-0.621,0.142-0.834,0.427
 +				c-0.174,0.227-0.277,0.498-0.311,0.815H120.207z"/>
 +		</g>
 +	</g>
 +</g>
 +</svg>
 diff --git a/web/src/assets/images/googleplay-badge.svg b/web/src/assets/images/googleplay-badge.svg new file mode 100644 index 000000000..9e33e3aa2 --- /dev/null +++ b/web/src/assets/images/googleplay-badge.svg @@ -0,0 +1,429 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg +   xmlns:dc="http://purl.org/dc/elements/1.1/" +   xmlns:cc="http://creativecommons.org/ns#" +   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" +   xmlns:svg="http://www.w3.org/2000/svg" +   xmlns="http://www.w3.org/2000/svg" +   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" +   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" +   id="svg2" +   version="1.1" +   inkscape:version="0.91 r13725" +   xml:space="preserve" +   width="135.71649" +   height="40.018951" +   viewBox="0 0 135.71649 40.018951" +   sodipodi:docname="google-play-badge.svg"><metadata +     id="metadata8"><rdf:RDF><cc:Work +         rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type +           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs +     id="defs6"><linearGradient +       x1="31.7997" +       y1="183.2903" +       x2="15.0173" +       y2="166.5079" +       gradientUnits="userSpaceOnUse" +       gradientTransform="matrix(0.8,0,0,-0.8,0,161.6)" +       spreadMethod="pad" +       id="linearGradient50"><stop +         style="stop-opacity:1;stop-color:#00a0ff" +         offset="0" +         id="stop52" /><stop +         style="stop-opacity:1;stop-color:#00a1ff" +         offset="0.0066" +         id="stop54" /><stop +         style="stop-opacity:1;stop-color:#00beff" +         offset="0.2601" +         id="stop56" /><stop +         style="stop-opacity:1;stop-color:#00d2ff" +         offset="0.5122" +         id="stop58" /><stop +         style="stop-opacity:1;stop-color:#00dfff" +         offset="0.7604" +         id="stop60" /><stop +         style="stop-opacity:1;stop-color:#00e3ff" +         offset="1" +         id="stop62" /></linearGradient><linearGradient +       x1="43.8344" +       y1="171.9986" +       x2="19.637501" +       y2="171.9986" +       gradientUnits="userSpaceOnUse" +       gradientTransform="matrix(0.8,0,0,-0.8,0,161.6)" +       spreadMethod="pad" +       id="linearGradient68"><stop +         style="stop-opacity:1;stop-color:#ffe000" +         offset="0" +         id="stop70" /><stop +         style="stop-opacity:1;stop-color:#ffbd00" +         offset="0.4087" +         id="stop72" /><stop +         style="stop-opacity:1;stop-color:#ffa500" +         offset="0.7754" +         id="stop74" /><stop +         style="stop-opacity:1;stop-color:#ff9c00" +         offset="1" +         id="stop76" /></linearGradient><linearGradient +       x1="34.827" +       y1="169.7039" +       x2="12.0687" +       y2="146.9456" +       gradientUnits="userSpaceOnUse" +       gradientTransform="matrix(0.8,0,0,-0.8,0,161.6)" +       spreadMethod="pad" +       id="linearGradient82"><stop +         style="stop-opacity:1;stop-color:#ff3a44" +         offset="0" +         id="stop84" /><stop +         style="stop-opacity:1;stop-color:#c31162" +         offset="1" +         id="stop86" /></linearGradient><linearGradient +       x1="17.2973" +       y1="191.82381" +       x2="27.4599" +       y2="181.6613" +       gradientUnits="userSpaceOnUse" +       gradientTransform="matrix(0.8,0,0,-0.8,0,161.6)" +       spreadMethod="pad" +       id="linearGradient92"><stop +         style="stop-opacity:1;stop-color:#32a071" +         offset="0" +         id="stop94" /><stop +         style="stop-opacity:1;stop-color:#2da771" +         offset="0.0685" +         id="stop96" /><stop +         style="stop-opacity:1;stop-color:#15cf74" +         offset="0.4762" +         id="stop98" /><stop +         style="stop-opacity:1;stop-color:#06e775" +         offset="0.8009" +         id="stop100" /><stop +         style="stop-opacity:1;stop-color:#00f076" +         offset="1" +         id="stop102" /></linearGradient><clipPath +       clipPathUnits="userSpaceOnUse" +       id="clipPath110"><path +         d="M 0,0 124,0 124,48 0,48 0,0 Z" +         id="path112" +         inkscape:connector-curvature="0" /></clipPath><mask +       maskUnits="userSpaceOnUse" +       x="0" +       y="0" +       width="1" +       height="1" +       id="mask114"><g +         id="g116"><g +           clip-path="url(#clipPath110)" +           id="g118"><path +             d="M 0,0 124,0 124,48 0,48 0,0 Z" +             style="fill:#000000;fill-opacity:0.2;fill-rule:nonzero;stroke:none" +             id="path120" +             inkscape:connector-curvature="0" /></g></g></mask><clipPath +       clipPathUnits="userSpaceOnUse" +       id="clipPath126"><path +         d="M 0,0 124,0 124,48 0,48 0,0 Z" +         id="path128" +         inkscape:connector-curvature="0" /></clipPath><clipPath +       clipPathUnits="userSpaceOnUse" +       id="clipPath130"><path +         d="M 0,0 124,0 124,48 0,48 0,0 Z" +         id="path132" +         inkscape:connector-curvature="0" /></clipPath><pattern +       patternTransform="matrix(1,0,0,-1,0,48)" +       patternUnits="userSpaceOnUse" +       x="0" +       y="0" +       width="124" +       height="48" +       id="pattern134"><g +         id="g136" /><g +         id="g138"><g +           clip-path="url(#clipPath130)" +           id="g140"><g +             id="g142"><path +               d="M 29.625,20.695 18.012,14.098 C 17.363,13.727 16.781,13.754 16.406,14.09 l -0.058,-0.063 0.058,-0.058 c 0.375,-0.336 0.957,-0.36 1.606,0.011 l 11.687,6.641 -0.074,0.074 z" +               style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" +               id="path144" /></g></g></g></pattern><clipPath +       clipPathUnits="userSpaceOnUse" +       id="clipPath158"><path +         d="M 0,0 124,0 124,48 0,48 0,0 Z" +         id="path160" +         inkscape:connector-curvature="0" /></clipPath><mask +       maskUnits="userSpaceOnUse" +       x="0" +       y="0" +       width="1" +       height="1" +       id="mask162"><g +         id="g164"><g +           clip-path="url(#clipPath158)" +           id="g166"><path +             d="M 0,0 124,0 124,48 0,48 0,0 Z" +             style="fill:#000000;fill-opacity:0.12000002;fill-rule:nonzero;stroke:none" +             id="path168" +             inkscape:connector-curvature="0" /></g></g></mask><clipPath +       clipPathUnits="userSpaceOnUse" +       id="clipPath174"><path +         d="M 0,0 124,0 124,48 0,48 0,0 Z" +         id="path176" +         inkscape:connector-curvature="0" /></clipPath><clipPath +       clipPathUnits="userSpaceOnUse" +       id="clipPath178"><path +         d="M 0,0 124,0 124,48 0,48 0,0 Z" +         id="path180" +         inkscape:connector-curvature="0" /></clipPath><pattern +       patternTransform="matrix(1,0,0,-1,0,48)" +       patternUnits="userSpaceOnUse" +       x="0" +       y="0" +       width="124" +       height="48" +       id="pattern182"><g +         id="g184" /><g +         id="g186"><g +           clip-path="url(#clipPath178)" +           id="g188"><g +             id="g190"><path +               d="m 16.348,14.145 c -0.235,0.246 -0.371,0.628 -0.371,1.125 l 0,-0.118 c 0,-0.496 0.136,-0.879 0.371,-1.125 l 0.058,0.063 -0.058,0.055 z" +               style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" +               id="path192" /></g></g></g></pattern><clipPath +       clipPathUnits="userSpaceOnUse" +       id="clipPath206"><path +         d="M 0,0 124,0 124,48 0,48 0,0 Z" +         id="path208" +         inkscape:connector-curvature="0" /></clipPath><mask +       maskUnits="userSpaceOnUse" +       x="0" +       y="0" +       width="1" +       height="1" +       id="mask210"><g +         id="g212"><g +           clip-path="url(#clipPath206)" +           id="g214"><path +             d="M 0,0 124,0 124,48 0,48 0,0 Z" +             style="fill:#000000;fill-opacity:0.12000002;fill-rule:nonzero;stroke:none" +             id="path216" +             inkscape:connector-curvature="0" /></g></g></mask><clipPath +       clipPathUnits="userSpaceOnUse" +       id="clipPath222"><path +         d="M 0,0 124,0 124,48 0,48 0,0 Z" +         id="path224" +         inkscape:connector-curvature="0" /></clipPath><clipPath +       clipPathUnits="userSpaceOnUse" +       id="clipPath226"><path +         d="M 0,0 124,0 124,48 0,48 0,0 Z" +         id="path228" +         inkscape:connector-curvature="0" /></clipPath><pattern +       patternTransform="matrix(1,0,0,-1,0,48)" +       patternUnits="userSpaceOnUse" +       x="0" +       y="0" +       width="124" +       height="48" +       id="pattern230"><g +         id="g232" /><g +         id="g234"><g +           clip-path="url(#clipPath226)" +           id="g236"><g +             id="g238"><path +               d="m 33.613,22.961 -3.988,-2.266 0.074,-0.074 3.914,2.223 c 0.559,0.316 0.836,0.734 0.836,1.156 -0.047,-0.379 -0.332,-0.75 -0.836,-1.039 z" +               style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" +               id="path240" /></g></g></g></pattern><clipPath +       clipPathUnits="userSpaceOnUse" +       id="clipPath254"><path +         d="M 0,0 124,0 124,48 0,48 0,0 Z" +         id="path256" +         inkscape:connector-curvature="0" /></clipPath><mask +       maskUnits="userSpaceOnUse" +       x="0" +       y="0" +       width="1" +       height="1" +       id="mask258"><g +         id="g260"><g +           clip-path="url(#clipPath254)" +           id="g262"><path +             d="M 0,0 124,0 124,48 0,48 0,0 Z" +             style="fill:#000000;fill-opacity:0.25;fill-rule:nonzero;stroke:none" +             id="path264" +             inkscape:connector-curvature="0" /></g></g></mask><clipPath +       clipPathUnits="userSpaceOnUse" +       id="clipPath270"><path +         d="M 0,0 124,0 124,48 0,48 0,0 Z" +         id="path272" +         inkscape:connector-curvature="0" /></clipPath><clipPath +       clipPathUnits="userSpaceOnUse" +       id="clipPath274"><path +         d="M 0,0 124,0 124,48 0,48 0,0 Z" +         id="path276" +         inkscape:connector-curvature="0" /></clipPath><pattern +       patternTransform="matrix(1,0,0,-1,0,48)" +       patternUnits="userSpaceOnUse" +       x="0" +       y="0" +       width="124" +       height="48" +       id="pattern278"><g +         id="g280" /><g +         id="g282"><g +           clip-path="url(#clipPath274)" +           id="g284"><g +             id="g286"><path +               d="m 18.012,33.902 15.601,-8.863 c 0.508,-0.289 0.789,-0.66 0.836,-1.039 0,0.418 -0.277,0.836 -0.836,1.156 L 18.012,34.02 c -1.117,0.632 -2.035,0.105 -2.035,-1.176 l 0,-0.114 c 0,1.278 0.918,1.805 2.035,1.172 z" +               style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" +               id="path288" /></g></g></g></pattern></defs><sodipodi:namedview +     pagecolor="#ffffff" +     bordercolor="#666666" +     borderopacity="1" +     objecttolerance="10" +     gridtolerance="10" +     guidetolerance="10" +     inkscape:pageopacity="0" +     inkscape:pageshadow="2" +     inkscape:window-width="1366" +     inkscape:window-height="705" +     id="namedview4" +     showgrid="false" +     inkscape:zoom="7.6276974" +     inkscape:cx="93.965168" +     inkscape:cy="29.61582" +     inkscape:window-x="-8" +     inkscape:window-y="-8" +     inkscape:window-maximized="1" +     inkscape:current-layer="g10" /><g +     id="g10" +     inkscape:groupmode="layer" +     inkscape:label="google-play-badge" +     transform="matrix(1.25,0,0,-1.25,-9.4247625,49.85025)"><g +       id="g12" +       transform="matrix(1.0023923,0,0,0.99072975,-0.29664807,0)"><path +         d="M 112,8 12,8 C 9.801,8 8,9.801 8,12 l 0,24 c 0,2.199 1.801,4 4,4 l 100,0 c 2.199,0 4,-1.801 4,-4 l 0,-24 c 0,-2.199 -1.801,-4 -4,-4 z" +         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" +         id="path14" +         inkscape:connector-curvature="0" /><path +         d="m 112,39.359 c 1.852,0 3.359,-1.507 3.359,-3.359 l 0,-24 c 0,-1.852 -1.507,-3.359 -3.359,-3.359 l -100,0 c -1.852,0 -3.359,1.507 -3.359,3.359 l 0,24 c 0,1.852 1.507,3.359 3.359,3.359 l 100,0 M 112,40 12,40 C 9.801,40 8,38.199 8,36 L 8,12 C 8,9.801 9.801,8 12,8 l 100,0 c 2.199,0 4,1.801 4,4 l 0,24 c 0,2.199 -1.801,4 -4,4 z" +         style="fill:#a6a6a6;fill-opacity:1;fill-rule:nonzero;stroke:none" +         id="path16" +         inkscape:connector-curvature="0" /><g +         id="g18" +         transform="matrix(1,0,0,-1,0,48)"><path +           d="m 45.934,16.195 c 0,0.668 -0.2,1.203 -0.594,1.602 -0.453,0.473 -1.043,0.711 -1.766,0.711 -0.691,0 -1.281,-0.242 -1.765,-0.719 -0.485,-0.484 -0.727,-1.078 -0.727,-1.789 0,-0.711 0.242,-1.305 0.727,-1.785 0.484,-0.481 1.074,-0.723 1.765,-0.723 0.344,0 0.672,0.071 0.985,0.203 0.312,0.133 0.566,0.313 0.75,0.535 l -0.418,0.422 c -0.321,-0.379 -0.758,-0.566 -1.317,-0.566 -0.504,0 -0.941,0.176 -1.312,0.531 -0.367,0.356 -0.551,0.817 -0.551,1.383 0,0.566 0.184,1.031 0.551,1.387 0.371,0.351 0.808,0.531 1.312,0.531 0.535,0 0.985,-0.18 1.34,-0.535 0.234,-0.235 0.367,-0.559 0.402,-0.973 l -1.742,0 0,-0.578 2.324,0 c 0.028,0.125 0.036,0.246 0.036,0.363 z" +           style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.16;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" +           id="path20" +           inkscape:connector-curvature="0" /></g><g +         id="g22" +         transform="matrix(1,0,0,-1,0,48)"><path +           d="m 49.621,14.191 -2.183,0 0,1.52 1.968,0 0,0.578 -1.968,0 0,1.52 2.183,0 0,0.589 -2.801,0 0,-4.796 2.801,0 0,0.589 z" +           style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.16;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" +           id="path24" +           inkscape:connector-curvature="0" /></g><g +         id="g26" +         transform="matrix(1,0,0,-1,0,48)"><path +           d="m 52.223,18.398 -0.618,0 0,-4.207 -1.339,0 0,-0.589 3.297,0 0,0.589 -1.34,0 0,4.207 z" +           style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.16;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" +           id="path28" +           inkscape:connector-curvature="0" /></g><g +         id="g30" +         transform="matrix(1,0,0,-1,0,48)"><path +           d="m 55.949,18.398 0,-4.796 0.617,0 0,4.796 -0.617,0 z" +           style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.16;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" +           id="path32" +           inkscape:connector-curvature="0" /></g><g +         id="g34" +         transform="matrix(1,0,0,-1,0,48)"><path +           d="m 59.301,18.398 -0.613,0 0,-4.207 -1.344,0 0,-0.589 3.301,0 0,0.589 -1.344,0 0,4.207 z" +           style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.16;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" +           id="path36" +           inkscape:connector-curvature="0" /></g><g +         id="g38" +         transform="matrix(1,0,0,-1,0,48)"><path +           d="m 66.887,17.781 c -0.473,0.485 -1.059,0.727 -1.758,0.727 -0.703,0 -1.289,-0.242 -1.762,-0.727 C 62.895,17.297 62.66,16.703 62.66,16 c 0,-0.703 0.235,-1.297 0.707,-1.781 0.473,-0.485 1.059,-0.727 1.762,-0.727 0.695,0 1.281,0.242 1.754,0.731 0.476,0.488 0.711,1.078 0.711,1.777 0,0.703 -0.235,1.297 -0.707,1.781 z m -3.063,-0.402 c 0.356,0.359 0.789,0.539 1.305,0.539 0.512,0 0.949,-0.18 1.301,-0.539 0.355,-0.359 0.535,-0.82 0.535,-1.379 0,-0.559 -0.18,-1.02 -0.535,-1.379 -0.352,-0.359 -0.789,-0.539 -1.301,-0.539 -0.516,0 -0.949,0.18 -1.305,0.539 -0.355,0.359 -0.535,0.82 -0.535,1.379 0,0.559 0.18,1.02 0.535,1.379 z" +           style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.16;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" +           id="path40" +           inkscape:connector-curvature="0" /></g><g +         id="g42" +         transform="matrix(1,0,0,-1,0,48)"><path +           d="m 68.461,18.398 0,-4.796 0.75,0 2.332,3.73 0.027,0 -0.027,-0.922 0,-2.808 0.617,0 0,4.796 -0.644,0 -2.442,-3.914 -0.027,0 0.027,0.926 0,2.988 -0.613,0 z" +           style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.16;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" +           id="path44" +           inkscape:connector-curvature="0" /></g><path +         d="m 62.508,22.598 c -1.879,0 -3.414,-1.43 -3.414,-3.403 0,-1.957 1.535,-3.402 3.414,-3.402 1.883,0 3.418,1.445 3.418,3.402 0,1.973 -1.535,3.403 -3.418,3.403 z m 0,-5.465 c -1.031,0 -1.918,0.851 -1.918,2.062 0,1.227 0.887,2.063 1.918,2.063 1.031,0 1.922,-0.836 1.922,-2.063 0,-1.211 -0.891,-2.062 -1.922,-2.062 z m -7.449,5.465 c -1.883,0 -3.414,-1.43 -3.414,-3.403 0,-1.957 1.531,-3.402 3.414,-3.402 1.882,0 3.414,1.445 3.414,3.402 0,1.973 -1.532,3.403 -3.414,3.403 z m 0,-5.465 c -1.032,0 -1.922,0.851 -1.922,2.062 0,1.227 0.89,2.063 1.922,2.063 1.031,0 1.918,-0.836 1.918,-2.063 0,-1.211 -0.887,-2.062 -1.918,-2.062 z m -8.864,4.422 0,-1.446 3.453,0 c -0.101,-0.808 -0.371,-1.402 -0.785,-1.816 -0.504,-0.5 -1.289,-1.055 -2.668,-1.055 -2.125,0 -3.789,1.715 -3.789,3.84 0,2.125 1.664,3.84 3.789,3.84 1.149,0 1.985,-0.449 2.602,-1.031 l 1.019,1.019 c -0.863,0.824 -2.011,1.457 -3.621,1.457 -2.914,0 -5.363,-2.371 -5.363,-5.285 0,-2.914 2.449,-5.285 5.363,-5.285 1.575,0 2.758,0.516 3.688,1.484 0.953,0.953 1.25,2.293 1.25,3.375 0,0.336 -0.028,0.645 -0.078,0.903 l -4.86,0 z m 36.246,-1.121 c -0.281,0.761 -1.148,2.164 -2.914,2.164 -1.75,0 -3.207,-1.379 -3.207,-3.403 0,-1.906 1.442,-3.402 3.375,-3.402 1.563,0 2.465,0.953 2.836,1.508 l -1.16,0.773 c -0.387,-0.566 -0.914,-0.941 -1.676,-0.941 -0.757,0 -1.3,0.347 -1.648,1.031 l 4.551,1.883 -0.157,0.387 z m -4.64,-1.133 c -0.039,1.312 1.019,1.984 1.777,1.984 0.594,0 1.098,-0.297 1.266,-0.722 L 77.801,19.301 Z M 74.102,16 l 1.496,0 0,10 -1.496,0 0,-10 z m -2.45,5.84 -0.05,0 c -0.336,0.398 -0.977,0.758 -1.789,0.758 -1.704,0 -3.262,-1.496 -3.262,-3.414 0,-1.907 1.558,-3.391 3.262,-3.391 0.812,0 1.453,0.363 1.789,0.773 l 0.05,0 0,-0.488 c 0,-1.301 -0.695,-2 -1.816,-2 -0.914,0 -1.481,0.66 -1.715,1.215 L 66.82,14.75 c 0.375,-0.902 1.368,-2.012 3.016,-2.012 1.754,0 3.234,1.032 3.234,3.543 l 0,6.11 -1.418,0 0,-0.551 z m -1.711,-4.707 c -1.031,0 -1.894,0.863 -1.894,2.051 0,1.199 0.863,2.074 1.894,2.074 1.016,0 1.817,-0.875 1.817,-2.074 0,-1.188 -0.801,-2.051 -1.817,-2.051 z M 89.445,26 l -3.578,0 0,-10 1.492,0 0,3.789 2.086,0 c 1.657,0 3.282,1.199 3.282,3.106 0,1.906 -1.629,3.105 -3.282,3.105 z m 0.039,-4.82 -2.125,0 0,3.429 2.125,0 c 1.114,0 1.75,-0.925 1.75,-1.714 0,-0.774 -0.636,-1.715 -1.75,-1.715 z m 9.223,1.437 c -1.078,0 -2.199,-0.476 -2.66,-1.531 l 1.324,-0.555 c 0.285,0.555 0.809,0.735 1.363,0.735 0.774,0 1.559,-0.465 1.571,-1.286 l 0,-0.105 c -0.27,0.156 -0.848,0.387 -1.559,0.387 -1.426,0 -2.879,-0.785 -2.879,-2.25 0,-1.34 1.168,-2.203 2.481,-2.203 1.004,0 1.558,0.453 1.906,0.98 l 0.051,0 0,-0.773 1.441,0 0,3.836 c 0,1.773 -1.324,2.765 -3.039,2.765 z m -0.18,-5.48 c -0.488,0 -1.168,0.242 -1.168,0.847 0,0.774 0.848,1.071 1.582,1.071 0.657,0 0.965,-0.145 1.364,-0.336 -0.117,-0.926 -0.914,-1.582 -1.778,-1.582 z m 8.469,5.261 -1.715,-4.335 -0.051,0 -1.773,4.335 -1.609,0 2.664,-6.058 -1.52,-3.371 1.559,0 4.105,9.429 -1.66,0 z M 93.547,16 l 1.496,0 0,10 -1.496,0 0,-10 z" +         style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" +         id="path46" +         inkscape:connector-curvature="0" /><g +         id="g48"><path +           d="M 16.348,33.969 C 16.113,33.723 15.977,33.34 15.977,32.844 l 0,-17.692 c 0,-0.496 0.136,-0.879 0.371,-1.125 l 0.058,-0.054 9.914,9.91 0,0.234 -9.914,9.91 -0.058,-0.058 z" +           style="fill:url(#linearGradient50);fill-opacity:1;fill-rule:nonzero;stroke:none" +           id="path64" +           inkscape:connector-curvature="0" /></g><g +         id="g66"><path +           d="m 29.621,20.578 -3.301,3.305 0,0.234 3.305,3.305 0.074,-0.043 3.914,-2.227 c 1.117,-0.632 1.117,-1.672 0,-2.308 l -3.914,-2.223 -0.078,-0.043 z" +           style="fill:url(#linearGradient68);fill-opacity:1;fill-rule:nonzero;stroke:none" +           id="path78" +           inkscape:connector-curvature="0" /></g><g +         id="g80"><path +           d="M 29.699,20.621 26.32,24 16.348,14.027 c 0.371,-0.39 0.976,-0.437 1.664,-0.047 l 11.687,6.641" +           style="fill:url(#linearGradient82);fill-opacity:1;fill-rule:nonzero;stroke:none" +           id="path88" +           inkscape:connector-curvature="0" /></g><g +         id="g90"><path +           d="M 29.699,27.379 18.012,34.02 c -0.688,0.386 -1.293,0.339 -1.664,-0.051 L 26.32,24 l 3.379,3.379 z" +           style="fill:url(#linearGradient92);fill-opacity:1;fill-rule:nonzero;stroke:none" +           id="path104" +           inkscape:connector-curvature="0" /></g><g +         id="g106"><g +           id="g108" /><g +           id="g122" +           mask="url(#mask114)"><g +             id="g124" /><g +             id="g146"><g +               clip-path="url(#clipPath126)" +               id="g148"><g +                 id="g150"><path +                   d="M 0,0 124,0 124,48 0,48 0,0 Z" +                   style="fill:url(#pattern134);fill-opacity:1;fill-rule:nonzero;stroke:none" +                   id="path152" +                   inkscape:connector-curvature="0" /></g></g></g></g></g><g +         id="g154"><g +           id="g156" /><g +           id="g170" +           mask="url(#mask162)"><g +             id="g172" /><g +             id="g194"><g +               clip-path="url(#clipPath174)" +               id="g196"><g +                 id="g198"><path +                   d="M 0,0 124,0 124,48 0,48 0,0 Z" +                   style="fill:url(#pattern182);fill-opacity:1;fill-rule:nonzero;stroke:none" +                   id="path200" +                   inkscape:connector-curvature="0" /></g></g></g></g></g><g +         id="g202"><g +           id="g204" /><g +           id="g218" +           mask="url(#mask210)"><g +             id="g220" /><g +             id="g242"><g +               clip-path="url(#clipPath222)" +               id="g244"><g +                 id="g246"><path +                   d="M 0,0 124,0 124,48 0,48 0,0 Z" +                   style="fill:url(#pattern230);fill-opacity:1;fill-rule:nonzero;stroke:none" +                   id="path248" +                   inkscape:connector-curvature="0" /></g></g></g></g></g><g +         id="g250"><g +           id="g252" /><g +           id="g266" +           mask="url(#mask258)"><g +             id="g268" /><g +             id="g290"><g +               clip-path="url(#clipPath270)" +               id="g292"><g +                 id="g294"><path +                   d="M 0,0 124,0 124,48 0,48 0,0 Z" +                   style="fill:url(#pattern278);fill-opacity:1;fill-rule:nonzero;stroke:none" +                   id="path296" +                   inkscape:connector-curvature="0" /></g></g></g></g></g></g></g></svg>
\ No newline at end of file diff --git a/web/src/assets/images/user.svg b/web/src/assets/images/user.svg new file mode 100644 index 000000000..db78e7d94 --- /dev/null +++ b/web/src/assets/images/user.svg @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="iso-8859-1"?>
 +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
 +<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 +	 viewBox="0 0 55 55" style="enable-background:new 0 0 55 55;" xml:space="preserve">
 +<path d="M55,27.5C55,12.337,42.663,0,27.5,0S0,12.337,0,27.5c0,8.009,3.444,15.228,8.926,20.258l-0.026,0.023l0.892,0.752
 +	c0.058,0.049,0.121,0.089,0.179,0.137c0.474,0.393,0.965,0.766,1.465,1.127c0.162,0.117,0.324,0.234,0.489,0.348
 +	c0.534,0.368,1.082,0.717,1.642,1.048c0.122,0.072,0.245,0.142,0.368,0.212c0.613,0.349,1.239,0.678,1.88,0.98
 +	c0.047,0.022,0.095,0.042,0.142,0.064c2.089,0.971,4.319,1.684,6.651,2.105c0.061,0.011,0.122,0.022,0.184,0.033
 +	c0.724,0.125,1.456,0.225,2.197,0.292c0.09,0.008,0.18,0.013,0.271,0.021C25.998,54.961,26.744,55,27.5,55
 +	c0.749,0,1.488-0.039,2.222-0.098c0.093-0.008,0.186-0.013,0.279-0.021c0.735-0.067,1.461-0.164,2.178-0.287
 +	c0.062-0.011,0.125-0.022,0.187-0.034c2.297-0.412,4.495-1.109,6.557-2.055c0.076-0.035,0.153-0.068,0.229-0.104
 +	c0.617-0.29,1.22-0.603,1.811-0.936c0.147-0.083,0.293-0.167,0.439-0.253c0.538-0.317,1.067-0.648,1.581-1
 +	c0.185-0.126,0.366-0.259,0.549-0.391c0.439-0.316,0.87-0.642,1.289-0.983c0.093-0.075,0.193-0.14,0.284-0.217l0.915-0.764
 +	l-0.027-0.023C51.523,42.802,55,35.55,55,27.5z M2,27.5C2,13.439,13.439,2,27.5,2S53,13.439,53,27.5
 +	c0,7.577-3.325,14.389-8.589,19.063c-0.294-0.203-0.59-0.385-0.893-0.537l-8.467-4.233c-0.76-0.38-1.232-1.144-1.232-1.993v-2.957
 +	c0.196-0.242,0.403-0.516,0.617-0.817c1.096-1.548,1.975-3.27,2.616-5.123c1.267-0.602,2.085-1.864,2.085-3.289v-3.545
 +	c0-0.867-0.318-1.708-0.887-2.369v-4.667c0.052-0.52,0.236-3.448-1.883-5.864C34.524,9.065,31.541,8,27.5,8
 +	s-7.024,1.065-8.867,3.168c-2.119,2.416-1.935,5.346-1.883,5.864v4.667c-0.568,0.661-0.887,1.502-0.887,2.369v3.545
 +	c0,1.101,0.494,2.128,1.34,2.821c0.81,3.173,2.477,5.575,3.093,6.389v2.894c0,0.816-0.445,1.566-1.162,1.958l-7.907,4.313
 +	c-0.252,0.137-0.502,0.297-0.752,0.476C5.276,41.792,2,35.022,2,27.5z"/>
 +<g>
 +</g>
 +<g>
 +</g>
 +<g>
 +</g>
 +<g>
 +</g>
 +<g>
 +</g>
 +<g>
 +</g>
 +<g>
 +</g>
 +<g>
 +</g>
 +<g>
 +</g>
 +<g>
 +</g>
 +<g>
 +</g>
 +<g>
 +</g>
 +<g>
 +</g>
 +<g>
 +</g>
 +<g>
 +</g>
 +</svg>
 diff --git a/web/src/components/AppStoreBadges.tsx b/web/src/components/AppStoreBadges.tsx new file mode 100644 index 000000000..1d52cac4c --- /dev/null +++ b/web/src/components/AppStoreBadges.tsx @@ -0,0 +1,31 @@ +import React from "react"; +import GooglePlay from "../assets/images/googleplay-badge.svg"; +import AppleStore from "../assets/images/applestore-badge.svg"; +import { Link } from "@material-ui/core"; + +export interface Props { +    iconSize: number; +    googlePlayLink: string; +    appleStoreLink: string; + +    targetBlank?: boolean; + +    className?: string; +} + +export default function (props: Props) { +    const target = props.targetBlank ? "_blank" : undefined; + +    const width = props.iconSize; + +    return ( +        <div className={props.className}> +            <Link href={props.googlePlayLink} target={target}> +                <img src={GooglePlay} alt="google play" style={{ width }} /> +            </Link> +            <Link href={props.appleStoreLink} target={target}> +                <img src={AppleStore} alt="apple store" style={{ width }} /> +            </Link> +        </div > +    ) +}
\ No newline at end of file diff --git a/web/src/components/ColoredSnackbarContent.tsx b/web/src/components/ColoredSnackbarContent.tsx new file mode 100644 index 000000000..1d260ce81 --- /dev/null +++ b/web/src/components/ColoredSnackbarContent.tsx @@ -0,0 +1,70 @@ +import React from "react"; + +import CheckCircleIcon from '@material-ui/icons/CheckCircle'; +import ErrorIcon from '@material-ui/icons/Error'; +import InfoIcon from '@material-ui/icons/Info'; +import WarningIcon from '@material-ui/icons/Warning'; +import { makeStyles, SnackbarContent } from "@material-ui/core"; +import { amber, green } from '@material-ui/core/colors'; +import classnames from "classnames"; +import { SnackbarContentProps } from "@material-ui/core/SnackbarContent"; + +const variantIcon = { +    success: CheckCircleIcon, +    warning: WarningIcon, +    error: ErrorIcon, +    info: InfoIcon, +}; + +export type Level = keyof typeof variantIcon; + +export interface Props extends SnackbarContentProps { +    className?: string; +    variant: Level; +    message: string; +} + +export default function (props: Props) { +    const classes = useStyles(); +    const Icon = variantIcon[props.variant]; + +    const { className, variant, message, ...others } = props; + +    return ( +        <SnackbarContent +            className={classnames(classes[props.variant], className)} +            message={ +                <span className={classes.message}> +                    <Icon className={classnames(classes.icon, classes.iconVariant)} /> +                    {message} +                </span> +            } +            {...others} /> +    ) +} + +const useStyles = makeStyles(theme => ({ +    success: { +        backgroundColor: green[600], +    }, +    error: { +        backgroundColor: theme.palette.error.dark, +    }, +    info: { +        backgroundColor: theme.palette.primary.main, +    }, +    warning: { +        backgroundColor: amber[700], +    }, +    icon: { +        fontSize: 20, +    }, +    iconVariant: { +        opacity: 0.9, +        marginRight: theme.spacing(1), +    }, +    message: { +        display: 'flex', +        alignItems: 'center', +    }, +}))
\ No newline at end of file diff --git a/web/src/components/FailureIcon.tsx b/web/src/components/FailureIcon.tsx new file mode 100644 index 000000000..4cb8f50ff --- /dev/null +++ b/web/src/components/FailureIcon.tsx @@ -0,0 +1,11 @@ +import React from "react"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { faTimesCircle } from "@fortawesome/free-regular-svg-icons"; + +export interface Props { } + +export default function (props: Props) { +    return ( +        <FontAwesomeIcon icon={faTimesCircle} size="4x" color="red" /> +    ) +}
\ No newline at end of file diff --git a/web/src/components/FingerTouchIcon.module.css b/web/src/components/FingerTouchIcon.module.css new file mode 100644 index 000000000..63f59ae2c --- /dev/null +++ b/web/src/components/FingerTouchIcon.module.css @@ -0,0 +1,20 @@ + +.hand { +    transform: rotate(20deg); +} + +.strong.hand path { +    stroke: black; +    stroke-width: 10; +} + +.shaking { +    animation: shaking 1s; +    animation-iteration-count:infinite; +} + +@keyframes shaking { +    0% {transform: translateX(20px) translateY(20px)} +    50% {transform: translateX(0px) translateY(0px)} +    100% {transform: translateX(20px) translateY(20px)} +}
\ No newline at end of file diff --git a/web/src/components/FingerTouchIcon.tsx b/web/src/components/FingerTouchIcon.tsx new file mode 100644 index 000000000..a389b0c67 --- /dev/null +++ b/web/src/components/FingerTouchIcon.tsx @@ -0,0 +1,42 @@ +import React from "react"; +import style from "./FingerTouchIcon.module.css"; +import classnames from "classnames"; + +export interface Props { +	size: number; + +	animated?: boolean; +	strong?: boolean; +} + +export default function (props: Props) { +	const shakingClass = (props.animated) ? style.shaking : undefined; +	const strong = (props.strong) ? style.strong : undefined; + +    return ( +        <svg x="0px" y="0px" viewBox="0 0 500 500" width={props.size} height={props.size} className={classnames(style.hand, strong)}> +			<path className={shakingClass} d="M438.827,186.347l-80.213-88.149c-15.872-15.872-41.728-15.893-57.749,0.128c-5.077,5.077-8.533,11.157-10.325,17.643 +				c-15.957-12.224-38.976-11.008-53.675,3.691c-5.056,5.077-8.512,11.157-10.347,17.621c-15.957-12.181-38.976-10.987-53.653,3.712 +				c-4.971,4.971-8.384,10.901-10.24,17.216l-37.803-37.803c-15.872-15.872-41.728-15.893-57.749,0.128 +				c-15.893,15.872-15.893,41.728,0,57.621l145.237,145.237l-86.144,13.525c-23.275,3.328-40.832,23.552-40.832,47.083 +				c0,17.643,14.357,32,32,32h201.152c31.339,0,60.8-12.203,82.965-34.368l33.557-33.557c22.144-22.123,34.325-51.563,34.325-82.859 +				C469.333,235.989,458.496,207.979,438.827,186.347z M419.925,332.992l-33.557,33.557c-18.133,18.133-42.24,28.117-67.883,28.117 +				H117.333c-5.888,0-10.667-4.779-10.667-10.667c0-12.971,9.685-24.128,22.677-25.984l106.987-16.811 +				c3.968-0.619,7.232-3.413,8.491-7.232c1.237-3.797,0.235-8-2.603-10.837L82.155,163.072c-7.573-7.573-7.573-19.904,0.107-27.605 +				c3.797-3.776,8.768-5.675,13.739-5.675c4.971,0,9.941,1.899,13.739,5.696l106.731,106.731c4.16,4.16,10.923,4.16,15.083,0 +				c2.069-2.091,3.115-4.821,3.115-7.552s-1.045-5.461-3.136-7.552l-43.584-43.584c-7.573-7.573-7.573-19.883,0.128-27.584 +				c7.552-7.552,19.904-7.552,27.456,0l43.605,43.605c4.16,4.16,10.923,4.16,15.083,0c2.069-2.091,3.115-4.821,3.115-7.552 +				c0-2.731-1.045-5.461-3.136-7.552l-22.251-22.251c-7.573-7.573-7.573-19.883,0.128-27.584c7.552-7.552,19.904-7.552,27.456,0 +				l22.357,22.357c0.043,0.021,0.021,0.021,0.021,0.021l0.021,0.021c0.021,0.021,0.021,0.021,0.021,0.021 +				c0.021,0.021,0.021,0.021,0.021,0.021h0.021c0.021,0,0.021,0.021,0.021,0.021c4.181,3.968,10.795,3.883,14.869-0.213 +				c4.16-4.16,4.16-10.923,0-15.083l-0.917-0.917c-3.669-3.669-5.696-8.555-5.696-13.739s2.005-10.048,5.803-13.845 +				c7.595-7.552,19.883-7.531,27.115-0.363l79.872,87.787C439.125,218.389,448,241.301,448,265.216 +				C448,290.816,438.037,314.88,419.925,332.992z"/> +			<path className={style.wave} d="M183.381,109.931C167.851,75.563,133.547,53.333,96,53.333c-52.928,0-96,43.072-96,96 +				c0,37.547,22.229,71.851,56.597,87.403c1.429,0.64,2.923,0.939,4.395,0.939c4.053,0,7.936-2.347,9.728-6.272 +				c2.411-5.376,0.021-11.691-5.333-14.123c-26.752-12.096-44.053-38.763-44.053-67.947c0-41.173,33.493-74.667,74.667-74.667 +				c29.184,0,55.851,17.301,67.947,44.053c2.411,5.376,8.747,7.787,14.101,5.333C183.424,121.621,185.813,115.307,183.381,109.931z" +				/> +        </svg> +    ) +}
\ No newline at end of file diff --git a/web/src/components/FixedTextField.tsx b/web/src/components/FixedTextField.tsx new file mode 100644 index 000000000..583b85d2f --- /dev/null +++ b/web/src/components/FixedTextField.tsx @@ -0,0 +1,31 @@ +import React from "react"; +import TextField, { TextFieldProps } from "@material-ui/core/TextField"; +import { makeStyles } from "@material-ui/core"; + +/** + * This component fixes outlined TextField + * https://github.com/mui-org/material-ui/issues/14530#issuecomment-463576879 + *  + * @param props the TextField props + */ +export default function (props: TextFieldProps) { +    const style = useStyles(); +    return ( +        <TextField {...props} +            InputLabelProps={{ +                classes: { +                    root: style.label +                } +            }}> +            {props.children} +        </TextField> +    ); +} + +const useStyles = makeStyles(theme => ({ +    label: { +        backgroundColor: theme.palette.background.default, +        paddingLeft: theme.spacing(0.1), +        paddingRight: theme.spacing(0.1), +    } +}));
\ No newline at end of file diff --git a/web/src/components/LinearProgressBar.tsx b/web/src/components/LinearProgressBar.tsx new file mode 100644 index 000000000..a90140ca7 --- /dev/null +++ b/web/src/components/LinearProgressBar.tsx @@ -0,0 +1,32 @@ +import React from "react"; +import { makeStyles, LinearProgress } from "@material-ui/core"; +import { CSSProperties } from "@material-ui/styles"; + +export interface Props { +    value: number; +    height?: number; +    className?: string; +    style?: CSSProperties; +} + +export default function (props: Props) { +    const style = makeStyles(theme => ({ +        progressRoot: { +            height: props.height ? props.height : theme.spacing(), +        }, +        transition: { +            transition: "transform .2s linear", +        } +    }))(); +    return ( +        <LinearProgress +            style={props.style} +            variant="determinate" +            classes={{ +                root: style.progressRoot, +                bar1Determinate: style.transition +            }} +            value={props.value} +            className={props.className} /> +    ) +} diff --git a/web/src/components/NotificationBar.tsx b/web/src/components/NotificationBar.tsx new file mode 100644 index 000000000..315a6f1cb --- /dev/null +++ b/web/src/components/NotificationBar.tsx @@ -0,0 +1,35 @@ +import React, { useState, useEffect } from "react"; +import { Snackbar } from "@material-ui/core"; +import ColoredSnackbarContent from "./ColoredSnackbarContent"; +import { useNotifications } from "../hooks/NotificationsContext"; +import { Notification } from "../models/Notifications"; + +export interface Props { +    onClose: () => void; +} + +export default function (props: Props) { +    const [tmpNotification, setTmpNotification] = useState(null as Notification | null); +    const { notification } = useNotifications(); + +    useEffect(() => { +        if (notification && notification !== null) { +            setTmpNotification(notification); +        } +    }, [notification]); + +    const shouldSnackbarBeOpen = notification !== undefined && notification !== null; + +    return ( +        <Snackbar +            open={shouldSnackbarBeOpen} +            anchorOrigin={{ vertical: "top", horizontal: "right" }} +            autoHideDuration={tmpNotification ? tmpNotification.timeout * 1000 : 10000} +            onClose={props.onClose} +            onExited={() => setTmpNotification(null)}> +            <ColoredSnackbarContent +                variant={tmpNotification ? tmpNotification.level : "info"} +                message={tmpNotification ? tmpNotification.message : ""} /> +        </Snackbar> +    ) +}
\ No newline at end of file diff --git a/web/src/components/PieChartIcon.tsx b/web/src/components/PieChartIcon.tsx new file mode 100644 index 000000000..3316d3f22 --- /dev/null +++ b/web/src/components/PieChartIcon.tsx @@ -0,0 +1,33 @@ +import React from "react"; + +export interface Props { +    maxProgress?: number; +    progress: number; + +    width?: number; +    height?: number; + +    color?: string; +    backgroundColor?: string; +} + +export default function (props: Props) { +    const maxProgress = props.maxProgress ? props.maxProgress : 100; +    const width = props.width ? props.width : 20; +    const height = props.height ? props.height : 20; + +    const color = props.color ? props.color : "black"; +    const backgroundColor = props.backgroundColor ? props.backgroundColor : "white"; + +    return ( +        <svg height={`${width}`} width={`${height}`} viewBox="0 0 26 26"> +            <circle r="12" cx="13" cy="13" fill="none" stroke={backgroundColor} strokeWidth="2" /> +            <circle r="9" cx="13" cy="13" fill={backgroundColor} stroke="transparent" /> +            <circle r="5" cx="13" cy="13" fill="none" +                stroke={color} +                strokeWidth="10" +                strokeDasharray={`calc(${props.progress} * 31.6 / ${maxProgress}) 31.6`} +                transform="rotate(-90) translate(-26)" /> +        </svg> +    ) +}
\ No newline at end of file diff --git a/web/src/components/PushNotificationIcon.module.css b/web/src/components/PushNotificationIcon.module.css new file mode 100644 index 000000000..b7cc2b937 --- /dev/null +++ b/web/src/components/PushNotificationIcon.module.css @@ -0,0 +1,15 @@ + +.wiggle { +    animation: wiggle 0.5s; +    animation-iteration-count: infinite; +} + +@keyframes wiggle { +    0% {transform: rotate(0deg);} +    15% {transform: rotate(3deg);} +    30% {transform: rotate(0deg);} +    45% {transform: rotate(3deg);} +    60% {transform: rotate(0deg);} +    80% {transform: rotate(3deg);} +    100% {transform: rotate(0deg);} +}
\ No newline at end of file diff --git a/web/src/components/PushNotificationIcon.tsx b/web/src/components/PushNotificationIcon.tsx new file mode 100644 index 000000000..a725c75c3 --- /dev/null +++ b/web/src/components/PushNotificationIcon.tsx @@ -0,0 +1,44 @@ +import React from "react"; +import style from "./PushNotificationIcon.module.css"; +import {useIntermittentClass} from "../hooks/IntermittentClass"; + +export interface Props { +    width: number; +    height: number; + +    animated?: boolean; +} + +export default function (props: Props) { +    const idleMilliseconds = 2500; +    const wiggleMilliseconds = 500; +    const startMilliseconds = 500; +    const wiggleClass = (props.animated) ? useIntermittentClass(style.wiggle, wiggleMilliseconds, idleMilliseconds, startMilliseconds) : ""; + +    return ( +        <svg x="0px" y="0px" viewBox="0 0 60 60" width={props.width} height={props.height} className={wiggleClass}> +            <g> +                <path className="case" d="M42.595,0H17.405C14.977,0,13,1.977,13,4.405v51.189C13,58.023,14.977,60,17.405,60h25.189C45.023,60,47,58.023,47,55.595 +                    V4.405C47,1.977,45.023,0,42.595,0z M15,8h30v38H15V8z M17.405,2h25.189C43.921,2,45,3.079,45,4.405V6H15V4.405 +                    C15,3.079,16.079,2,17.405,2z M42.595,58H17.405C16.079,58,15,56.921,15,55.595V48h30v7.595C45,56.921,43.921,58,42.595,58z"/> +                <path className="button" d="M30,49c-2.206,0-4,1.794-4,4s1.794,4,4,4s4-1.794,4-4S32.206,49,30,49z M30,55c-1.103,0-2-0.897-2-2s0.897-2,2-2 +                    s2,0.897,2,2S31.103,55,30,55z"/> +                <path className="speaker" d="M26,5h4c0.553,0,1-0.447,1-1s-0.447-1-1-1h-4c-0.553,0-1,0.447-1,1S25.447,5,26,5z"/> +                <path className="camera" d="M33,5h1c0.553,0,1-0.447,1-1s-0.447-1-1-1h-1c-0.553,0-1,0.447-1,1S32.447,5,33,5z"/> +            </g> +                 +            <path d="M56.612,4.569c-0.391-0.391-1.023-0.391-1.414,0s-0.391,1.023,0,1.414c3.736,3.736,3.736,9.815,0,13.552 +                c-0.391,0.391-0.391,1.023,0,1.414c0.195,0.195,0.451,0.293,0.707,0.293s0.512-0.098,0.707-0.293 +                C61.128,16.434,61.128,9.085,56.612,4.569z"/> +            <path d="M52.401,6.845c-0.391-0.391-1.023-0.391-1.414,0s-0.391,1.023,0,1.414c1.237,1.237,1.918,2.885,1.918,4.639 +                s-0.681,3.401-1.918,4.638c-0.391,0.391-0.391,1.023,0,1.414c0.195,0.195,0.451,0.293,0.707,0.293s0.512-0.098,0.707-0.293 +                c1.615-1.614,2.504-3.764,2.504-6.052S54.017,8.459,52.401,6.845z"/> +            <path d="M4.802,5.983c0.391-0.391,0.391-1.023,0-1.414s-1.023-0.391-1.414,0c-4.516,4.516-4.516,11.864,0,16.38 +                c0.195,0.195,0.451,0.293,0.707,0.293s0.512-0.098,0.707-0.293c0.391-0.391,0.391-1.023,0-1.414 +                C1.065,15.799,1.065,9.72,4.802,5.983z"/> +            <path d="M9.013,6.569c-0.391-0.391-1.023-0.391-1.414,0c-1.615,1.614-2.504,3.764-2.504,6.052s0.889,4.438,2.504,6.053 +                c0.195,0.195,0.451,0.293,0.707,0.293s0.512-0.098,0.707-0.293c0.391-0.391,0.391-1.023,0-1.414 +                c-1.237-1.237-1.918-2.885-1.918-4.639S7.775,9.22,9.013,7.983C9.403,7.593,9.403,6.96,9.013,6.569z"/> +        </svg> +    ) +}
\ No newline at end of file diff --git a/web/src/components/SuccessIcon.tsx b/web/src/components/SuccessIcon.tsx new file mode 100644 index 000000000..55bf79414 --- /dev/null +++ b/web/src/components/SuccessIcon.tsx @@ -0,0 +1,11 @@ +import React from "react"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { faCheckCircle } from "@fortawesome/free-regular-svg-icons"; + +export interface Props { } + +export default function (props: Props) { +    return ( +        <FontAwesomeIcon icon={faCheckCircle} size="4x" color="green" /> +    ) +}
\ No newline at end of file diff --git a/web/src/components/TimerIcon.tsx b/web/src/components/TimerIcon.tsx new file mode 100644 index 000000000..d82423ba0 --- /dev/null +++ b/web/src/components/TimerIcon.tsx @@ -0,0 +1,36 @@ +import React, { useState, useEffect } from "react"; +import PieChartIcon from "./PieChartIcon"; + +export interface Props { +    width: number; +    height: number; + +    color?: string; +    backgroundColor?: string; +} + +export default function (props: Props) { +    const maxTimeProgress = 1000; +    const [timeProgress, setTimeProgress] = useState(0); + +    useEffect(() => { +        // Get the current number of seconds to initialize timer. +        const initialValue = Math.floor((new Date().getSeconds() % 30) / 30 * maxTimeProgress); +        setTimeProgress(initialValue); + +        const interval = setInterval(() => { +            const ms = new Date().getSeconds() * 1000.0 + new Date().getMilliseconds(); +            const value = (ms % 30000) / 30000 * maxTimeProgress; +            setTimeProgress(value); +        }, 100); +        return () => clearInterval(interval); +    }, []); + +    return ( +        <PieChartIcon width={props.width} height={props.height} +            maxProgress={maxTimeProgress} +            progress={timeProgress} +            backgroundColor={props.backgroundColor} color={props.color} /> +    ) +} + diff --git a/web/src/constants.ts b/web/src/constants.ts new file mode 100644 index 000000000..4b4fb98ff --- /dev/null +++ b/web/src/constants.ts @@ -0,0 +1,5 @@ + +export const GoogleAuthenticator = { +    googlePlay: "https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&hl=en_us", +    appleStore: "https://apps.apple.com/us/app/google-authenticator/id388497605", +}; diff --git a/web/src/hooks/Configuration.ts b/web/src/hooks/Configuration.ts new file mode 100644 index 000000000..44a16e0ad --- /dev/null +++ b/web/src/hooks/Configuration.ts @@ -0,0 +1,6 @@ +import { useRemoteCall } from "./RemoteCall"; +import { getAvailable2FAMethods } from "../services/Configuration"; + +export function useAutheliaConfiguration() { +    return useRemoteCall(getAvailable2FAMethods, []); +}
\ No newline at end of file diff --git a/web/src/hooks/IntermittentClass.ts b/web/src/hooks/IntermittentClass.ts new file mode 100644 index 000000000..88bcaed57 --- /dev/null +++ b/web/src/hooks/IntermittentClass.ts @@ -0,0 +1,37 @@ +import { useState, useEffect } from "react"; + +export function useIntermittentClass( +    classname: string, +    activeMilliseconds: number, +    inactiveMillisecond: number, +    startMillisecond?: number) { +    const [currentClass, setCurrentClass] = useState(""); +    const [firstTime, setFirstTime] = useState(true); + +    useEffect(() => { +        let timeout: NodeJS.Timeout; + +        if (firstTime) { +            if (startMillisecond && startMillisecond > 0) { +                timeout = setTimeout(() => { +                    setCurrentClass(classname); +                    setFirstTime(false); +                }, startMillisecond); +            } else { +                timeout = setTimeout(() => { +                    setCurrentClass(classname); +                    setFirstTime(false); +                }, 0); +            } +        } else { +            if (currentClass === "") { +                timeout = setTimeout(() => setCurrentClass(classname), inactiveMillisecond); +            } else { +                timeout = setTimeout(() => setCurrentClass(""), activeMilliseconds); +            } +        } +        return () => clearTimeout(timeout); +    }, [currentClass, classname, activeMilliseconds, inactiveMillisecond, startMillisecond, firstTime]); + +    return currentClass; +}
\ No newline at end of file diff --git a/web/src/hooks/Mounted.ts b/web/src/hooks/Mounted.ts new file mode 100644 index 000000000..be4ab3a55 --- /dev/null +++ b/web/src/hooks/Mounted.ts @@ -0,0 +1,10 @@ +import { useRef, useEffect } from "react"; + +export function useIsMountedRef() { +    const isMountedRef = useRef(false); +    useEffect(() => { +        isMountedRef.current = true; +        return () => { isMountedRef.current = false }; +    }); +    return isMountedRef; +}
\ No newline at end of file diff --git a/web/src/hooks/NotificationsContext.ts b/web/src/hooks/NotificationsContext.ts new file mode 100644 index 000000000..ba46a4d7c --- /dev/null +++ b/web/src/hooks/NotificationsContext.ts @@ -0,0 +1,49 @@ +import { Level } from "../components/ColoredSnackbarContent"; +import { useCallback, createContext, useContext } from "react"; +import { Notification } from "../models/Notifications"; + +const defaultOptions = { +    timeout: 5, +} + +interface NotificationContextProps { +    notification: Notification | null; +    setNotification: (n: Notification | null) => void; +} + +const NotificationsContext = createContext<NotificationContextProps>( +    { notification: null, setNotification: () => { } }); + +export default NotificationsContext; + + +export function useNotifications() { +    let useNotificationsProps = useContext(NotificationsContext); + +    const notificationBuilder = (level: Level) => { +        return (message: string, timeout?: number) => { +            useNotificationsProps.setNotification({ +                level, message, +                timeout: timeout ? timeout : defaultOptions.timeout +            }); +        } +    } + +    const resetNotification = () => useNotificationsProps.setNotification(null); +    const createInfoNotification = useCallback(notificationBuilder("info"), []); +    const createSuccessNotification = useCallback(notificationBuilder("success"), []); +    const createWarnNotification = useCallback(notificationBuilder("warning"), []); +    const createErrorNotification = useCallback(notificationBuilder("error"), []); +    const isActive = useNotificationsProps.notification !== null; + + +    return { +        notification: useNotificationsProps.notification, +        resetNotification, +        createInfoNotification, +        createSuccessNotification, +        createWarnNotification, +        createErrorNotification, +        isActive +    } +}
\ No newline at end of file diff --git a/web/src/hooks/RedirectionURL.ts b/web/src/hooks/RedirectionURL.ts new file mode 100644 index 000000000..670be718a --- /dev/null +++ b/web/src/hooks/RedirectionURL.ts @@ -0,0 +1,10 @@ +import queryString from "query-string"; +import { useLocation } from "react-router"; + +export function useRedirectionURL() { +    const location = useLocation(); +    const queryParams = queryString.parse(location.search); +    return (queryParams && "rd" in queryParams) +        ? queryParams["rd"] as string +        : undefined; +}
\ No newline at end of file diff --git a/web/src/hooks/RemoteCall.ts b/web/src/hooks/RemoteCall.ts new file mode 100644 index 000000000..d2da6d869 --- /dev/null +++ b/web/src/hooks/RemoteCall.ts @@ -0,0 +1,31 @@ +import { useState, useCallback, DependencyList } from "react"; + +type PromisifiedFunction<Ret> = (...args: any) => Promise<Ret> + +export function useRemoteCall<Ret>(fn: PromisifiedFunction<Ret>, deps: DependencyList) +    : [Ret | undefined, PromisifiedFunction<void>, boolean, Error | undefined] { +    const [data, setData] = useState(undefined as Ret | undefined); +    const [inProgress, setInProgress] = useState(false); +    const [error, setError] = useState(undefined as Error | undefined); + +    const fnCallback = useCallback(fn, deps); + +    const triggerCallback = useCallback(async () => { +        try { +            setInProgress(true); +            const res = await fnCallback(); +            setInProgress(false); +            setData(res); +        } catch (err) { +            console.error(err); +            setError(err); +        } +    }, [setInProgress, setError, fnCallback]); + +    return [ +        data, +        triggerCallback, +        inProgress, +        error, +    ] +}
\ No newline at end of file diff --git a/web/src/hooks/State.ts b/web/src/hooks/State.ts new file mode 100644 index 000000000..c33a6cf7b --- /dev/null +++ b/web/src/hooks/State.ts @@ -0,0 +1,6 @@ +import { getState } from "../services/State"; +import { useRemoteCall } from "./RemoteCall"; + +export function useAutheliaState() { +    return useRemoteCall(getState, []); +}
\ No newline at end of file diff --git a/web/src/hooks/Timer.ts b/web/src/hooks/Timer.ts new file mode 100644 index 000000000..5e3c95074 --- /dev/null +++ b/web/src/hooks/Timer.ts @@ -0,0 +1,41 @@ +import { useState, useCallback, useEffect } from "react"; + +export function useTimer(timeoutMs: number): [number, () => void, () => void] { +    const Interval = 100; +    const [startDate, setStartDate] = useState(undefined as Date | undefined); +    const [percent, setPercent] = useState(0); + +    const trigger = useCallback(() => { +        setPercent(0); +        setStartDate(new Date()); +    }, [setStartDate, setPercent]); + +    const clear = useCallback(() => { +        setPercent(0); +        setStartDate(undefined); +    }, []); + +    useEffect(() => { +        if (!startDate) { +            return; +        } + +        const intervalNode = setInterval(() => { +            const elapsedMs = (startDate) ? new Date().getTime() - startDate.getTime() : 0; +            let p = elapsedMs / timeoutMs * 100.0; +            if (p >= 100) { +                p = 100; +                setStartDate(undefined); +            } +            setPercent(p); +        }, Interval); + +        return () => clearInterval(intervalNode); +    }, [startDate, setPercent, setStartDate, timeoutMs]); + +    return [ +        percent, +        trigger, +        clear, +    ] +}
\ No newline at end of file diff --git a/web/src/hooks/UserPreferences.ts b/web/src/hooks/UserPreferences.ts new file mode 100644 index 000000000..cd24227ac --- /dev/null +++ b/web/src/hooks/UserPreferences.ts @@ -0,0 +1,6 @@ +import { getUserPreferences } from "../services/UserPreferences"; +import { useRemoteCall } from "../hooks/RemoteCall"; + +export function useUserPreferences() { +    return useRemoteCall(getUserPreferences, []); +}
\ No newline at end of file diff --git a/web/src/index.css b/web/src/index.css new file mode 100644 index 000000000..b883ac1f2 --- /dev/null +++ b/web/src/index.css @@ -0,0 +1,23 @@ +body { +  margin: 0; +  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', +    'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', +    sans-serif; +  -webkit-font-smoothing: antialiased; +  -moz-osx-font-smoothing: grayscale; +} + +code { +  font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', +    monospace; +} + +input[type=number]::-webkit-inner-spin-button,  +input[type=number]::-webkit-outer-spin-button {  +  -webkit-appearance: none;  +  margin: 0;  +} + +.hidden { +  display: none; +}
\ No newline at end of file diff --git a/web/src/index.tsx b/web/src/index.tsx new file mode 100644 index 000000000..87d1be551 --- /dev/null +++ b/web/src/index.tsx @@ -0,0 +1,12 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import './index.css'; +import App from './App'; +import * as serviceWorker from './serviceWorker'; + +ReactDOM.render(<App />, document.getElementById('root')); + +// If you want your app to work offline and load faster, you can change +// unregister() to register() below. Note this comes with some pitfalls. +// Learn more about service workers: https://bit.ly/CRA-PWA +serviceWorker.unregister(); diff --git a/web/src/layouts/LoginLayout.tsx b/web/src/layouts/LoginLayout.tsx new file mode 100644 index 000000000..7e2444216 --- /dev/null +++ b/web/src/layouts/LoginLayout.tsx @@ -0,0 +1,67 @@ +import React, { ReactNode } from "react"; +import { Grid, makeStyles, Container, Typography, Link } from "@material-ui/core"; +import { ReactComponent as UserSvg } from "../assets/images/user.svg"; +import { grey } from "@material-ui/core/colors"; + + +export interface Props { +    children?: ReactNode; +    title: string; +    showBrand?: boolean; +} + +export default function (props: Props) { +    const style = useStyles(); +    return ( +        <Grid +            className={style.root} +            container +            spacing={0} +            alignItems="center" +            justify="center"> +            <Container maxWidth="xs"> +                <Grid container> +                    <Grid item xs={12}> +                        <UserSvg className={style.icon}></UserSvg> +                    </Grid> +                    <Grid item xs={12}> +                        <Typography variant="h5" className={style.title}> +                            {props.title} +                        </Typography> +                    </Grid> +                    <Grid item xs={12} className={style.body}> +                        {props.children} +                    </Grid> +                    {props.showBrand ? <Grid item xs={12}> +                        <Link +                            href="https://github.com/clems4ever/authelia" +                            target="_blank" +                            className={style.poweredBy}> +                            Powered by Authelia +                        </Link> +                    </Grid> +                        : null +                    } +                </Grid> +            </Container> +        </Grid> +    ); +} + +const useStyles = makeStyles(theme => ({ +    root: { +        minHeight: '90vh', +        textAlign: "center", +        // marginTop: theme.spacing(10), +    }, +    title: {}, +    icon: { +        margin: theme.spacing(), +        width: "64px", +    }, +    body: {}, +    poweredBy: { +        fontSize: "0.7em", +        color: grey[500], +    } +}))
\ No newline at end of file diff --git a/web/src/models/Configuration.ts b/web/src/models/Configuration.ts new file mode 100644 index 000000000..2784d9b37 --- /dev/null +++ b/web/src/models/Configuration.ts @@ -0,0 +1,3 @@ +import { SecondFactorMethod } from "./Methods"; + +export type Configuration = Set<SecondFactorMethod>
\ No newline at end of file diff --git a/web/src/models/Methods.ts b/web/src/models/Methods.ts new file mode 100644 index 000000000..6f4e22b21 --- /dev/null +++ b/web/src/models/Methods.ts @@ -0,0 +1,6 @@ + +export enum SecondFactorMethod { +    TOTP = 1, +    U2F = 2, +    Duo = 3 +} diff --git a/web/src/models/Notifications.ts b/web/src/models/Notifications.ts new file mode 100644 index 000000000..6b7d5d347 --- /dev/null +++ b/web/src/models/Notifications.ts @@ -0,0 +1,7 @@ +import { Level } from "../components/ColoredSnackbarContent"; + +export interface Notification { +    message: string; +    level: Level; +    timeout: number; +}
\ No newline at end of file diff --git a/web/src/models/UserPreferences.ts b/web/src/models/UserPreferences.ts new file mode 100644 index 000000000..0743e31c1 --- /dev/null +++ b/web/src/models/UserPreferences.ts @@ -0,0 +1,5 @@ +import { SecondFactorMethod } from "./Methods"; + +export interface UserPreferences { +    method: SecondFactorMethod; +} diff --git a/web/src/react-app-env.d.ts b/web/src/react-app-env.d.ts new file mode 100644 index 000000000..6431bc5fc --- /dev/null +++ b/web/src/react-app-env.d.ts @@ -0,0 +1 @@ +/// <reference types="react-scripts" /> diff --git a/web/src/serviceWorker.ts b/web/src/serviceWorker.ts new file mode 100644 index 000000000..15d90cb81 --- /dev/null +++ b/web/src/serviceWorker.ts @@ -0,0 +1,143 @@ +// This optional code is used to register a service worker. +// register() is not called by default. + +// This lets the app load faster on subsequent visits in production, and gives +// it offline capabilities. However, it also means that developers (and users) +// will only see deployed updates on subsequent visits to a page, after all the +// existing tabs open on the page have been closed, since previously cached +// resources are updated in the background. + +// To learn more about the benefits of this model and instructions on how to +// opt-in, read https://bit.ly/CRA-PWA + +const isLocalhost = Boolean( +  window.location.hostname === 'localhost' || +    // [::1] is the IPv6 localhost address. +    window.location.hostname === '[::1]' || +    // 127.0.0.1/8 is considered localhost for IPv4. +    window.location.hostname.match( +      /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/ +    ) +); + +type Config = { +  onSuccess?: (registration: ServiceWorkerRegistration) => void; +  onUpdate?: (registration: ServiceWorkerRegistration) => void; +}; + +export function register(config?: Config) { +  if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { +    // The URL constructor is available in all browsers that support SW. +    const publicUrl = new URL( +      (process as { env: { [key: string]: string } }).env.PUBLIC_URL, +      window.location.href +    ); +    if (publicUrl.origin !== window.location.origin) { +      // Our service worker won't work if PUBLIC_URL is on a different origin +      // from what our page is served on. This might happen if a CDN is used to +      // serve assets; see https://github.com/facebook/create-react-app/issues/2374 +      return; +    } + +    window.addEventListener('load', () => { +      const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`; + +      if (isLocalhost) { +        // This is running on localhost. Let's check if a service worker still exists or not. +        checkValidServiceWorker(swUrl, config); + +        // Add some additional logging to localhost, pointing developers to the +        // service worker/PWA documentation. +        navigator.serviceWorker.ready.then(() => { +          console.log( +            'This web app is being served cache-first by a service ' + +              'worker. To learn more, visit https://bit.ly/CRA-PWA' +          ); +        }); +      } else { +        // Is not localhost. Just register service worker +        registerValidSW(swUrl, config); +      } +    }); +  } +} + +function registerValidSW(swUrl: string, config?: Config) { +  navigator.serviceWorker +    .register(swUrl) +    .then(registration => { +      registration.onupdatefound = () => { +        const installingWorker = registration.installing; +        if (installingWorker == null) { +          return; +        } +        installingWorker.onstatechange = () => { +          if (installingWorker.state === 'installed') { +            if (navigator.serviceWorker.controller) { +              // At this point, the updated precached content has been fetched, +              // but the previous service worker will still serve the older +              // content until all client tabs are closed. +              console.log( +                'New content is available and will be used when all ' + +                  'tabs for this page are closed. See https://bit.ly/CRA-PWA.' +              ); + +              // Execute callback +              if (config && config.onUpdate) { +                config.onUpdate(registration); +              } +            } else { +              // At this point, everything has been precached. +              // It's the perfect time to display a +              // "Content is cached for offline use." message. +              console.log('Content is cached for offline use.'); + +              // Execute callback +              if (config && config.onSuccess) { +                config.onSuccess(registration); +              } +            } +          } +        }; +      }; +    }) +    .catch(error => { +      console.error('Error during service worker registration:', error); +    }); +} + +function checkValidServiceWorker(swUrl: string, config?: Config) { +  // Check if the service worker can be found. If it can't reload the page. +  fetch(swUrl) +    .then(response => { +      // Ensure service worker exists, and that we really are getting a JS file. +      const contentType = response.headers.get('content-type'); +      if ( +        response.status === 404 || +        (contentType != null && contentType.indexOf('javascript') === -1) +      ) { +        // No service worker found. Probably a different app. Reload the page. +        navigator.serviceWorker.ready.then(registration => { +          registration.unregister().then(() => { +            window.location.reload(); +          }); +        }); +      } else { +        // Service worker found. Proceed as normal. +        registerValidSW(swUrl, config); +      } +    }) +    .catch(() => { +      console.log( +        'No internet connection found. App is running in offline mode.' +      ); +    }); +} + +export function unregister() { +  if ('serviceWorker' in navigator) { +    navigator.serviceWorker.ready.then(registration => { +      registration.unregister(); +    }); +  } +} diff --git a/web/src/services/Api.ts b/web/src/services/Api.ts new file mode 100644 index 000000000..f1dc4d5ce --- /dev/null +++ b/web/src/services/Api.ts @@ -0,0 +1,59 @@ +import { AxiosResponse } from "axios"; + +export const FirstFactorPath = "/api/firstfactor"; +export const InitiateTOTPRegistrationPath = "/api/secondfactor/totp/identity/start"; +export const CompleteTOTPRegistrationPath = "/api/secondfactor/totp/identity/finish"; + +export const InitiateU2FRegistrationPath = "/api/secondfactor/u2f/identity/start"; +export const CompleteU2FRegistrationStep1Path = "/api/secondfactor/u2f/identity/finish"; +export const CompleteU2FRegistrationStep2Path = "/api/secondfactor/u2f/register"; + +export const InitiateU2FSignInPath = "/api/secondfactor/u2f/sign_request"; +export const CompleteU2FSignInPath = "/api/secondfactor/u2f/sign"; + +export const CompletePushNotificationSignInPath = "/api/secondfactor/duo" +export const CompleteTOTPSignInPath = "/api/secondfactor/totp" + +export const InitiateResetPasswordPath = "/api/reset-password/identity/start"; +export const CompleteResetPasswordPath = "/api/reset-password/identity/finish"; +// Do the password reset during completion. +export const ResetPasswordPath = "/api/reset-password" + +export const LogoutPath = "/api/logout"; +export const StatePath = "/api/state"; +export const UserPreferencesPath = "/api/secondfactor/preferences"; +export const Available2FAMethodsPath = "/api/secondfactor/available"; + +export interface ErrorResponse { +    status: "KO"; +    message: string; +} + +export interface Response<T> { +    status: "OK"; +    data: T; +} + +export type ServiceResponse<T> = Response<T> | ErrorResponse; + +function toErrorResponse<T>(resp: AxiosResponse<ServiceResponse<T>>): ErrorResponse | undefined { +    if (resp.data && "status" in resp.data && resp.data["status"] === "KO") { +        return resp.data as ErrorResponse; +    } +    return undefined; +} + +export function toData<T>(resp: AxiosResponse<ServiceResponse<T>>): T | undefined { +    if (resp.data && "status" in resp.data && resp.data["status"] === "OK") { +        return resp.data.data as T; +    } +    return undefined +} + +export function hasServiceError<T>(resp: AxiosResponse<ServiceResponse<T>>) { +    const errResp = toErrorResponse(resp); +    if (errResp && errResp.status === "KO") { +        return true; +    } +    return false; +}
\ No newline at end of file diff --git a/web/src/services/Client.ts b/web/src/services/Client.ts new file mode 100644 index 000000000..32831a9a2 --- /dev/null +++ b/web/src/services/Client.ts @@ -0,0 +1,33 @@ +import axios from "axios"; +import { ServiceResponse, hasServiceError, toData } from "./Api"; + +export async function PostWithOptionalResponse<T = undefined>(path: string, body?: any) { +    const res = await axios.post<ServiceResponse<T>>(path, body); + +    if (res.status !== 200 || hasServiceError(res)) { +        throw new Error(`Failed POST to ${path}. Code: ${res.status}.`); +    } +    return toData(res); +} + +export async function Post<T>(path: string, body?: any) { +    const res = await PostWithOptionalResponse<T>(path, body); +    if (!res) { +        throw new Error("unexpected type of response"); +    } +    return res; +} + +export async function Get<T = undefined>(path: string) { +    const res = await axios.get<ServiceResponse<T>>(path); + +    if (res.status !== 200 || hasServiceError(res)) { +        throw new Error(`Failed GET from ${path}. Code: ${res.status}.`); +    } + +    const d = toData(res); +    if (!d) { +        throw new Error("unexpected type of response"); +    } +    return d; +}
\ No newline at end of file diff --git a/web/src/services/Configuration.ts b/web/src/services/Configuration.ts new file mode 100644 index 000000000..47eb0425b --- /dev/null +++ b/web/src/services/Configuration.ts @@ -0,0 +1,9 @@ +import { Get } from "./Client"; +import { Available2FAMethodsPath } from "./Api"; +import { Method2FA, toEnum } from "./UserPreferences"; +import { Configuration } from "../models/Configuration"; + +export async function getAvailable2FAMethods(): Promise<Configuration> { +    const methods = await Get<Method2FA[]>(Available2FAMethodsPath); +    return new Set(methods.map(toEnum)); +}
\ No newline at end of file diff --git a/web/src/services/FirstFactor.ts b/web/src/services/FirstFactor.ts new file mode 100644 index 000000000..91c29b36d --- /dev/null +++ b/web/src/services/FirstFactor.ts @@ -0,0 +1,25 @@ +import { FirstFactorPath } from "./Api"; +import { PostWithOptionalResponse } from "./Client"; +import { SignInResponse } from "./SignIn"; + +interface PostFirstFactorBody { +    username: string; +    password: string; +    keepMeLoggedIn: boolean; +    targetURL?: string; +} + +export async function postFirstFactor( +    username: string, password: string, +    rememberMe: boolean, targetURL?: string) { +    const data: PostFirstFactorBody = { +        username, password, +        keepMeLoggedIn: rememberMe +    }; + +    if (targetURL) { +        data.targetURL = targetURL; +    } +    const res = await PostWithOptionalResponse<SignInResponse>(FirstFactorPath, data); +    return res ? res : {} as SignInResponse; +}
\ No newline at end of file diff --git a/web/src/services/OneTimePassword.ts b/web/src/services/OneTimePassword.ts new file mode 100644 index 000000000..fa892f9cc --- /dev/null +++ b/web/src/services/OneTimePassword.ts @@ -0,0 +1,16 @@ +import { PostWithOptionalResponse } from "./Client"; +import { CompleteTOTPSignInPath } from "./Api"; +import { SignInResponse } from "./SignIn"; + +interface CompleteU2FSigninBody { +    token: string; +    targetURL?: string; +} + +export function completeTOTPSignIn(passcode: string, targetURL: string | undefined) { +    const body: CompleteU2FSigninBody = { token: `${passcode}` }; +    if (targetURL) { +        body.targetURL = targetURL; +    } +    return PostWithOptionalResponse<SignInResponse>(CompleteTOTPSignInPath, body); +}
\ No newline at end of file diff --git a/web/src/services/PushNotification.ts b/web/src/services/PushNotification.ts new file mode 100644 index 000000000..a70ccef38 --- /dev/null +++ b/web/src/services/PushNotification.ts @@ -0,0 +1,15 @@ +import { PostWithOptionalResponse } from "./Client"; +import { CompletePushNotificationSignInPath } from "./Api"; +import { SignInResponse } from "./SignIn"; + +interface CompleteU2FSigninBody { +    targetURL?: string; +} + +export function completePushNotificationSignIn(targetURL: string | undefined) { +    const body: CompleteU2FSigninBody = {}; +    if (targetURL) { +        body.targetURL = targetURL; +    } +    return PostWithOptionalResponse<SignInResponse>(CompletePushNotificationSignInPath, body); +}
\ No newline at end of file diff --git a/web/src/services/RegisterDevice.ts b/web/src/services/RegisterDevice.ts new file mode 100644 index 000000000..67a57e358 --- /dev/null +++ b/web/src/services/RegisterDevice.ts @@ -0,0 +1,43 @@ +import { +    InitiateTOTPRegistrationPath, CompleteTOTPRegistrationPath, +    InitiateU2FRegistrationPath, CompleteU2FRegistrationStep1Path, +    CompleteU2FRegistrationStep2Path +} from "./Api"; +import U2fApi from "u2f-api"; +import { Post, PostWithOptionalResponse } from "./Client"; + +export async function initiateTOTPRegistrationProcess() { +    await PostWithOptionalResponse(InitiateTOTPRegistrationPath); +} + +interface CompleteTOTPRegistrationResponse { +    base32_secret: string; +    otpauth_url: string; +} + +export async function completeTOTPRegistrationProcess(processToken: string) { +    return Post<CompleteTOTPRegistrationResponse>( +        CompleteTOTPRegistrationPath, { token: processToken }); +} + + +export async function initiateU2FRegistrationProcess() { +    return PostWithOptionalResponse(InitiateU2FRegistrationPath); +} + +interface U2RRegistrationStep1Response { +    appId: string, +    registerRequests: [{ +        version: string, +        challenge: string, +    }] +} + +export async function completeU2FRegistrationProcessStep1(processToken: string) { +    return Post<U2RRegistrationStep1Response>( +        CompleteU2FRegistrationStep1Path, { token: processToken }); +} + +export async function completeU2FRegistrationProcessStep2(response: U2fApi.RegisterResponse) { +    return PostWithOptionalResponse(CompleteU2FRegistrationStep2Path, response); +}
\ No newline at end of file diff --git a/web/src/services/ResetPassword.ts b/web/src/services/ResetPassword.ts new file mode 100644 index 000000000..2d4819175 --- /dev/null +++ b/web/src/services/ResetPassword.ts @@ -0,0 +1,15 @@ +import { InitiateResetPasswordPath, CompleteResetPasswordPath, ResetPasswordPath } from "./Api"; +import { PostWithOptionalResponse } from "./Client"; + + +export async function initiateResetPasswordProcess(username: string) { +    return PostWithOptionalResponse(InitiateResetPasswordPath, { username }); +} + +export async function completeResetPasswordProcess(token: string) { +    return PostWithOptionalResponse(CompleteResetPasswordPath, { token }); +} + +export async function resetPassword(newPassword: string) { +    return PostWithOptionalResponse(ResetPasswordPath, { password: newPassword }); +}
\ No newline at end of file diff --git a/web/src/services/SecurityKey.ts b/web/src/services/SecurityKey.ts new file mode 100644 index 000000000..8a593d962 --- /dev/null +++ b/web/src/services/SecurityKey.ts @@ -0,0 +1,31 @@ +import { Post, PostWithOptionalResponse } from "./Client"; +import { InitiateU2FSignInPath, CompleteU2FSignInPath } from "./Api"; +import u2fApi from "u2f-api"; +import { SignInResponse } from "./SignIn"; + +interface InitiateU2FSigninResponse { +    appId: string, +    challenge: string, +    registeredKeys: { +        appId: string, +        keyHandle: string, +        version: string, +    }[] +} + +export async function initiateU2FSignin() { +    return Post<InitiateU2FSigninResponse>(InitiateU2FSignInPath); +} + +interface CompleteU2FSigninBody { +    signResponse: u2fApi.SignResponse; +    targetURL?: string; +} + +export function completeU2FSignin(signResponse: u2fApi.SignResponse, targetURL: string | undefined) { +    const body: CompleteU2FSigninBody = { signResponse }; +    if (targetURL) { +        body.targetURL = targetURL; +    } +    return PostWithOptionalResponse<SignInResponse>(CompleteU2FSignInPath, body); +}
\ No newline at end of file diff --git a/web/src/services/SignIn.ts b/web/src/services/SignIn.ts new file mode 100644 index 000000000..2dfceac68 --- /dev/null +++ b/web/src/services/SignIn.ts @@ -0,0 +1,2 @@ + +export type SignInResponse = { redirect: string } | undefined;
\ No newline at end of file diff --git a/web/src/services/SignOut.ts b/web/src/services/SignOut.ts new file mode 100644 index 000000000..a376ceb65 --- /dev/null +++ b/web/src/services/SignOut.ts @@ -0,0 +1,6 @@ +import { PostWithOptionalResponse } from "./Client"; +import { LogoutPath } from "./Api"; + +export async function signOut() { +    return PostWithOptionalResponse(LogoutPath); +}
\ No newline at end of file diff --git a/web/src/services/State.ts b/web/src/services/State.ts new file mode 100644 index 000000000..370a1c3e1 --- /dev/null +++ b/web/src/services/State.ts @@ -0,0 +1,17 @@ +import { Get } from "./Client"; +import { StatePath } from "./Api"; + +export enum AuthenticationLevel { +    Unauthenticated = 0, +    OneFactor = 1, +    TwoFactor = 2, +} + +export interface AutheliaState { +    username: string; +    authentication_level: AuthenticationLevel +} + +export function getState() { +    return Get<AutheliaState>(StatePath); +}
\ No newline at end of file diff --git a/web/src/services/UserPreferences.ts b/web/src/services/UserPreferences.ts new file mode 100644 index 000000000..3b4fa539c --- /dev/null +++ b/web/src/services/UserPreferences.ts @@ -0,0 +1,42 @@ +import { Get, PostWithOptionalResponse } from "./Client"; +import { UserPreferencesPath } from "./Api"; +import { SecondFactorMethod } from "../models/Methods"; +import { UserPreferences } from "../models/UserPreferences"; + +export type Method2FA = "u2f" | "totp" | "duo_push"; + +export interface UserPreferencesPayload { +    method: Method2FA; +} + +export function toEnum(method: Method2FA): SecondFactorMethod { +    switch (method) { +        case "u2f": +            return SecondFactorMethod.U2F; +        case "totp": +            return SecondFactorMethod.TOTP; +        case "duo_push": +            return SecondFactorMethod.Duo; +    } +} + +export function toString(method: SecondFactorMethod): Method2FA { +    switch (method) { +        case SecondFactorMethod.U2F: +            return "u2f"; +        case SecondFactorMethod.TOTP: +            return "totp"; +        case SecondFactorMethod.Duo: +            return "duo_push"; +    } +} + +export async function getUserPreferences(): Promise<UserPreferences> { +    const res = await Get<UserPreferencesPayload>(UserPreferencesPath); +    return { method: toEnum(res.method) }; +} + +export function setPrefered2FAMethod(method: SecondFactorMethod) { +    return PostWithOptionalResponse(UserPreferencesPath, +        { method: toString(method) } as UserPreferencesPayload); +}
\ No newline at end of file diff --git a/web/src/utils/IdentityToken.ts b/web/src/utils/IdentityToken.ts new file mode 100644 index 000000000..67269d478 --- /dev/null +++ b/web/src/utils/IdentityToken.ts @@ -0,0 +1,8 @@ +import queryString from "query-string"; + +export function extractIdentityToken(locationSearch: string) { +    const queryParams = queryString.parse(locationSearch); +    return (queryParams && "token" in queryParams) +        ? queryParams["token"] as string +        : null; +}
\ No newline at end of file diff --git a/web/src/views/DeviceRegistration/RegisterOneTimePassword.tsx b/web/src/views/DeviceRegistration/RegisterOneTimePassword.tsx new file mode 100644 index 000000000..81252dcf8 --- /dev/null +++ b/web/src/views/DeviceRegistration/RegisterOneTimePassword.tsx @@ -0,0 +1,132 @@ +import React, { useEffect, useCallback, useState } from "react"; +import LoginLayout from "../../layouts/LoginLayout"; +import classnames from "classnames"; +import { makeStyles, Typography, Button, Link, CircularProgress } from "@material-ui/core"; +import QRCode from 'qrcode.react'; +import AppStoreBadges from "../../components/AppStoreBadges"; +import { GoogleAuthenticator } from "../../constants"; +import { useHistory, useLocation } from "react-router"; +import { completeTOTPRegistrationProcess } from "../../services/RegisterDevice"; +import { useNotifications } from "../../hooks/NotificationsContext"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { faTimesCircle } from "@fortawesome/free-solid-svg-icons"; +import { red } from "@material-ui/core/colors"; +import { extractIdentityToken } from "../../utils/IdentityToken"; +import { FirstFactorRoute } from "../../Routes"; + +export default function () { +    const style = useStyles(); +    const history = useHistory(); +    const location = useLocation(); + +    // The secret retrieved from the API is all is ok. +    const [secretURL, setSecretURL] = useState("empty"); +    const { createErrorNotification } = useNotifications(); +    const [hasErrored, setHasErrored] = useState(false); +    const [isLoading, setIsLoading] = useState(false); + +    // Get the token from the query param to give it back to the API when requesting +    // the secret for OTP. +    const processToken = extractIdentityToken(location.search); + +    const handleDoneClick = () => { +        history.push(FirstFactorRoute); +    } + +    const completeRegistrationProcess = useCallback(async () => { +        if (!processToken) { +            return; +        } + +        setIsLoading(true); +        try { +            const secret = await completeTOTPRegistrationProcess(processToken); +            setSecretURL(secret.otpauth_url); +        } catch (err) { +            console.error(err); +            createErrorNotification("Failed to generate the code to register your device", 10000); +            setHasErrored(true); +        } +        setIsLoading(false); +    }, [processToken, createErrorNotification]); + +    useEffect(() => { completeRegistrationProcess() }, [completeRegistrationProcess]); +    const qrcodeFuzzyStyle = (isLoading || hasErrored) ? style.fuzzy : undefined + +    return ( +        <LoginLayout title="Scan QRCode"> +            <div className={style.root}> +                <div className={style.googleAuthenticator}> +                    <Typography className={style.googleAuthenticatorText}>Need Google Authenticator?</Typography> +                    <AppStoreBadges +                        iconSize={128} +                        targetBlank +                        className={style.googleAuthenticatorBadges} +                        googlePlayLink={GoogleAuthenticator.googlePlay} +                        appleStoreLink={GoogleAuthenticator.appleStore} /> +                </div> +                <div className={style.qrcodeContainer}> +                    <Link href={secretURL}> +                        <QRCode +                            value={secretURL} +                            className={classnames(qrcodeFuzzyStyle, style.qrcode)} +                            size={256} /> +                        {!hasErrored && isLoading ? <CircularProgress className={style.loader} size={128} /> : null} +                        {hasErrored ? <FontAwesomeIcon className={style.failureIcon} icon={faTimesCircle} /> : null} +                    </Link> +                </div> +                <Button +                    variant="contained" +                    color="primary" +                    className={style.doneButton} +                    onClick={handleDoneClick} +                    disabled={isLoading}> +                    Done +                </Button> +            </div> +        </LoginLayout> +    ) +} + +const useStyles = makeStyles(theme => ({ +    root: { +        paddingTop: theme.spacing(4), +        paddingBottom: theme.spacing(4), +    }, +    qrcode: { +        marginTop: theme.spacing(2), +        marginBottom: theme.spacing(2), +    }, +    fuzzy: { +        filter: "blur(10px)" +    }, +    secret: { +        display: "inline-block", +        fontSize: theme.typography.fontSize * 0.9, +    }, +    googleAuthenticator: {}, +    googleAuthenticatorText: { +        fontSize: theme.typography.fontSize * 0.8, +    }, +    googleAuthenticatorBadges: {}, +    doneButton: { +        width: "256px", +    }, +    qrcodeContainer: { +        position: "relative", +        display: "inline-block", +    }, +    loader: { +        position: "absolute", +        top: "calc(128px - 64px)", +        left: "calc(128px - 64px)", +        color: "rgba(255, 255, 255, 0.5)", +    }, +    failureIcon: { +        position: "absolute", +        top: "calc(128px - 64px)", +        left: "calc(128px - 64px)", +        color: red[400], +        fontSize: "128px", +    } +}))
\ No newline at end of file diff --git a/web/src/views/DeviceRegistration/RegisterSecurityKey.tsx b/web/src/views/DeviceRegistration/RegisterSecurityKey.tsx new file mode 100644 index 000000000..839cc641a --- /dev/null +++ b/web/src/views/DeviceRegistration/RegisterSecurityKey.tsx @@ -0,0 +1,77 @@ +import React, { useState, useEffect, useCallback } from "react"; +import LoginLayout from "../../layouts/LoginLayout"; +import FingerTouchIcon from "../../components/FingerTouchIcon"; +import { makeStyles, Typography, Button } from "@material-ui/core"; +import { useHistory, useLocation } from "react-router"; +import { FirstFactorPath } from "../../services/Api"; +import { extractIdentityToken } from "../../utils/IdentityToken"; +import { completeU2FRegistrationProcessStep1, completeU2FRegistrationProcessStep2 } from "../../services/RegisterDevice"; +import { useNotifications } from "../../hooks/NotificationsContext"; +import u2fApi from "u2f-api"; + +export default function () { +    const style = useStyles(); +    const history = useHistory(); +    const location = useLocation(); +    const { createErrorNotification } = useNotifications(); +    const [, setRegistrationInProgress] = useState(false); + +    const processToken = extractIdentityToken(location.search); + + +    const handleBackClick = () => { +        history.push(FirstFactorPath); +    } + +    const registerStep1 = useCallback(async () => { +        if (!processToken) { +            return; +        } +        try { +            setRegistrationInProgress(true); +            const res = await completeU2FRegistrationProcessStep1(processToken); +            const registerRequests: u2fApi.RegisterRequest[] = []; +            for (var i in res.registerRequests) { +                const r = res.registerRequests[i]; +                registerRequests.push({ +                    appId: res.appId, +                    challenge: r.challenge, +                    version: r.version, +                }) +            } +            const registerResponse = await u2fApi.register(registerRequests, [], 60); +            await completeU2FRegistrationProcessStep2(registerResponse); +            setRegistrationInProgress(false); +            history.push(FirstFactorPath); +        } catch (err) { +            console.error(err); +            createErrorNotification("Failed to register your security key. " + +                "The identity verification process might have timed out."); +        } +    }, [processToken, createErrorNotification, history]); + +    useEffect(() => { +        registerStep1(); +    }, [registerStep1]); + +    return ( +        <LoginLayout title="Touch Security Key"> +            <div className={style.icon}> +                <FingerTouchIcon size={64} animated /> +            </div> +            <Typography className={style.instruction}>Touch the token on your security key</Typography> +            <Button color="primary" onClick={handleBackClick}>Retry</Button> +            <Button color="primary" onClick={handleBackClick}>Cancel</Button> +        </LoginLayout> +    ) +} + +const useStyles = makeStyles(theme => ({ +    icon: { +        paddingTop: theme.spacing(4), +        paddingBottom: theme.spacing(4), +    }, +    instruction: { +        paddingBottom: theme.spacing(4), +    } +}))
\ No newline at end of file diff --git a/web/src/views/LoadingPage/LoadingPage.tsx b/web/src/views/LoadingPage/LoadingPage.tsx new file mode 100644 index 000000000..4a334d450 --- /dev/null +++ b/web/src/views/LoadingPage/LoadingPage.tsx @@ -0,0 +1,14 @@ +import React from "react"; +import ReactLoading from "react-loading"; +import { Typography, Grid } from "@material-ui/core"; + +export default function () { +    return ( +        <Grid container alignItems="center" justify="center" style={{ minHeight: "100vh" }}> +            <Grid item style={{ textAlign: "center", display: "inline-block" }}> +                <ReactLoading width={64} height={64} color="black" type="bars" /> +                <Typography>Loading...</Typography> +            </Grid> +        </Grid> +    ); +}
\ No newline at end of file diff --git a/web/src/views/LoginPortal/FirstFactor/FirstFactorForm.tsx b/web/src/views/LoginPortal/FirstFactor/FirstFactorForm.tsx new file mode 100644 index 000000000..ddec4fd84 --- /dev/null +++ b/web/src/views/LoginPortal/FirstFactor/FirstFactorForm.tsx @@ -0,0 +1,159 @@ +import React, { useState } from "react"; +import classnames from "classnames"; +import { makeStyles, Grid, Button, FormControlLabel, Checkbox, Link } from "@material-ui/core"; +import { useHistory } from "react-router"; +import LoginLayout from "../../../layouts/LoginLayout"; +import { useNotifications } from "../../../hooks/NotificationsContext"; +import { postFirstFactor } from "../../../services/FirstFactor"; +import { ResetPasswordStep1Route } from "../../../Routes"; +import { useRedirectionURL } from "../../../hooks/RedirectionURL"; +import FixedTextField from "../../../components/FixedTextField"; + +export interface Props { +    disabled: boolean; + +    onAuthenticationStart: () => void; +    onAuthenticationFailure: () => void; +    onAuthenticationSuccess: (redirectURL: string | undefined) => void; +} + +export default function (props: Props) { +    const style = useStyles(); +    const history = useHistory(); +    const redirectionURL = useRedirectionURL(); + +    const [rememberMe, setRememberMe] = useState(false); +    const [username, setUsername] = useState(""); +    const [usernameError, setUsernameError] = useState(false); +    const [password, setPassword] = useState(""); +    const [passwordError, setPasswordError] = useState(false); +    const { createErrorNotification } = useNotifications(); + +    const disabled = props.disabled; + +    const handleRememberMeChange = () => { +        setRememberMe(!rememberMe); +    } + +    const handleSignIn = async () => { +        if (username === "" || password === "") { +            if (username === "") { +                setUsernameError(true) +            } + +            if (password === "") { +                setPasswordError(true); +            } +            return; +        } + +        props.onAuthenticationStart(); +        try { +            const res = await postFirstFactor(username, password, rememberMe, redirectionURL); +            props.onAuthenticationSuccess(res ? res.redirect : undefined); +        } catch (err) { +            console.error(err); +            createErrorNotification( +                "There was a problem. Username or password might be incorrect."); +            props.onAuthenticationFailure(); +        } +    } + +    const handleResetPasswordClick = () => { +        history.push(ResetPasswordStep1Route); +    } + +    return ( +        <LoginLayout +            title="Sign in" +            showBrand> +            <Grid container spacing={2} className={style.root}> +                <Grid item xs={12}> +                    <FixedTextField +                        label="Username" +                        variant="outlined" +                        required +                        value={username} +                        error={usernameError} +                        disabled={disabled} +                        fullWidth +                        onChange={v => setUsername(v.target.value)} +                        onFocus={() => setUsernameError(false)} /> +                </Grid> +                <Grid item xs={12}> +                    <FixedTextField +                        label="Password" +                        variant="outlined" +                        required +                        fullWidth +                        disabled={disabled} +                        value={password} +                        error={passwordError} +                        onChange={v => setPassword(v.target.value)} +                        onFocus={() => setPasswordError(false)} +                        type="password" +                        onKeyPress={(ev) => { +                            if (ev.key === 'Enter') { +                                handleSignIn(); +                                ev.preventDefault(); +                            } +                        }} /> +                </Grid> +                <Grid item xs={12} className={classnames(style.leftAlign, style.actionRow)}> +                    <FormControlLabel +                        control={ +                            <Checkbox +                                disabled={disabled} +                                checked={rememberMe} +                                onChange={handleRememberMeChange} +                                value="rememberMe" +                                color="primary" /> +                        } +                        className={style.rememberMe} +                        label="Remember me" +                    /> +                    <Link +                        component="button" +                        onClick={handleResetPasswordClick} +                        className={style.resetLink}> +                        Reset password? +                    </Link> +                </Grid> +                <Grid item xs={12}> +                    <Button variant="contained" color="primary" +                        fullWidth +                        disabled={disabled} +                        onClick={handleSignIn}> +                        Sign in +                    </Button> +                </Grid> +            </Grid> +        </LoginLayout> +    ) +} + +const useStyles = makeStyles(theme => ({ +    root: { +        marginTop: theme.spacing(), +        marginBottom: theme.spacing(), +    }, +    actionRow: { +        display: "flex", +        flexDirection: "row", +        marginTop: theme.spacing(-1), +        marginBottom: theme.spacing(-1), +    }, +    resetLink: { +        cursor: "pointer", +    }, +    rememberMe: { +        flexGrow: 1, +    }, +    leftAlign: { +        textAlign: "left", +    }, +    rightAlign: { +        textAlign: "right", +        verticalAlign: "bottom", +    }, +}))
\ No newline at end of file diff --git a/web/src/views/LoginPortal/LoginPortal.tsx b/web/src/views/LoginPortal/LoginPortal.tsx new file mode 100644 index 000000000..a6f290fa6 --- /dev/null +++ b/web/src/views/LoginPortal/LoginPortal.tsx @@ -0,0 +1,154 @@ +import React, { useEffect, Fragment, ReactNode, useState } from "react"; +import { Switch, Route, Redirect, useHistory, useLocation } from "react-router"; +import FirstFactorForm from "./FirstFactor/FirstFactorForm"; +import SecondFactorForm from "./SecondFactor/SecondFactorForm"; +import { FirstFactorRoute, SecondFactorRoute, SecondFactorTOTPRoute, SecondFactorPushRoute, SecondFactorU2FRoute, LogoutRoute } from "../../Routes"; +import { useAutheliaState } from "../../hooks/State"; +import LoadingPage from "../LoadingPage/LoadingPage"; +import { AuthenticationLevel } from "../../services/State"; +import { useNotifications } from "../../hooks/NotificationsContext"; +import { useRedirectionURL } from "../../hooks/RedirectionURL"; +import { useUserPreferences } from "../../hooks/UserPreferences"; +import { SecondFactorMethod } from "../../models/Methods"; +import { useAutheliaConfiguration } from "../../hooks/Configuration"; +import SignOut from "./SignOut/SignOut"; + +export default function () { +    const history = useHistory(); +    const location = useLocation(); +    const redirectionURL = useRedirectionURL(); +    const { createErrorNotification } = useNotifications(); +    const [firstFactorDisabled, setFirstFactorDisabled] = useState(true); + +    const [state, fetchState, , fetchStateError] = useAutheliaState(); +    const [preferences, fetchPreferences, , fetchPreferencesError] = useUserPreferences(); +    const [configuration, fetchConfiguration, , fetchConfigurationError] = useAutheliaConfiguration(); + +    // Fetch the state when portal is mounted. +    useEffect(() => { fetchState() }, [fetchState]); + +    // Fetch preferences and configuration when user is authenticated. +    useEffect(() => { +        if (state && state.authentication_level >= AuthenticationLevel.OneFactor) { +            fetchPreferences(); +            fetchConfiguration(); +        } +    }, [state, fetchPreferences, fetchConfiguration]); + +    // Enable first factor when user is unauthenticated. +    useEffect(() => { +        if (state && state.authentication_level > AuthenticationLevel.Unauthenticated) { +            setFirstFactorDisabled(true); +        } +    }, [state, setFirstFactorDisabled]); + +    // Display an error when state fetching fails +    useEffect(() => { +        if (fetchStateError) { +            createErrorNotification("There was an issue fetching the current user state"); +        } +    }, [fetchStateError, createErrorNotification]); + +    // Display an error when configuration fetching fails +    useEffect(() => { +        if (fetchConfigurationError) { +            createErrorNotification("There was an issue retrieving global configuration"); +        } +    }, [fetchConfigurationError, createErrorNotification]); + +    // Display an error when preferences fetching fails +    useEffect(() => { +        if (fetchPreferencesError) { +            createErrorNotification("There was an issue retrieving user preferences"); +        } +    }, [fetchPreferencesError, createErrorNotification]); + +    // Redirect to the correct stage if not enough authenticated +    useEffect(() => { +        if (state) { +            const redirectionSuffix = redirectionURL +                ? `?rd=${encodeURI(redirectionURL)}` +                : ''; + +            if (state.authentication_level === AuthenticationLevel.Unauthenticated) { +                setFirstFactorDisabled(false); +                history.push(`${FirstFactorRoute}${redirectionSuffix}`); +            } else if (state.authentication_level >= AuthenticationLevel.OneFactor && preferences) { +                console.log("redirect"); +                if (preferences.method === SecondFactorMethod.U2F) { +                    history.push(`${SecondFactorU2FRoute}${redirectionSuffix}`); +                } else if (preferences.method === SecondFactorMethod.Duo) { +                    history.push(`${SecondFactorPushRoute}${redirectionSuffix}`); +                } else { +                    history.push(`${SecondFactorTOTPRoute}${redirectionSuffix}`); +                } +            } +        } +    }, [state, redirectionURL, history.push, preferences, setFirstFactorDisabled]); + +    const handleFirstFactorSuccess = async (redirectionURL: string | undefined) => { +        if (redirectionURL) { +            // Do an external redirection pushed by the server. +            window.location.href = redirectionURL; +        } else { +            // Refresh state +            fetchState(); +        } +    } + +    const handleSecondFactorSuccess = async (redirectionURL: string | undefined) => { +        if (redirectionURL) { +            // Do an external redirection pushed by the server. +            window.location.href = redirectionURL; +        } else { +            fetchState(); +        } +    } + +    const firstFactorReady = state !== undefined && +        state.authentication_level === AuthenticationLevel.Unauthenticated && +        location.pathname === FirstFactorRoute; + +    return ( +        <Switch> +            <Route path={FirstFactorRoute} exact> +                <ComponentOrLoading ready={firstFactorReady}> +                    <FirstFactorForm +                        disabled={firstFactorDisabled} +                        onAuthenticationStart={() => setFirstFactorDisabled(true)} +                        onAuthenticationFailure={() => setFirstFactorDisabled(false)} +                        onAuthenticationSuccess={handleFirstFactorSuccess} /> +                </ComponentOrLoading> +            </Route> +            <Route path={SecondFactorRoute}> +                {state && preferences && configuration ? <SecondFactorForm +                    username={state.username} +                    authenticationLevel={state.authentication_level} +                    userPreferences={preferences} +                    configuration={configuration} +                    onMethodChanged={() => fetchPreferences()} +                    onAuthenticationSuccess={handleSecondFactorSuccess} /> : null} +            </Route> +            <Route path="/"> +                <Redirect to={FirstFactorRoute} /> +            </Route> +        </Switch> +    ) +} + +interface ComponentOrLoadingProps { +    ready: boolean; + +    children: ReactNode; +} + +function ComponentOrLoading(props: ComponentOrLoadingProps) { +    return ( +        <Fragment> +            <div className={props.ready ? "hidden" : ""}> +                <LoadingPage /> +            </div> +            {props.ready ? props.children : null} +        </Fragment> +    ) +}
\ No newline at end of file diff --git a/web/src/views/LoginPortal/SecondFactor/IconWithContext.tsx b/web/src/views/LoginPortal/SecondFactor/IconWithContext.tsx new file mode 100644 index 000000000..b26bb2192 --- /dev/null +++ b/web/src/views/LoginPortal/SecondFactor/IconWithContext.tsx @@ -0,0 +1,45 @@ +import React, { ReactNode } from "react"; +import { makeStyles } from "@material-ui/core"; +import classnames from "classnames"; + +interface IconWithContextProps { +    icon: ReactNode; +    context: ReactNode; + +    className?: string; +} + +export default function (props: IconWithContextProps) { +    const iconSize = 64; +    const style = makeStyles(theme => ({ +        root: { +            height: iconSize + theme.spacing(6), +        }, +        iconContainer: { +            display: "flex", +            flexDirection: "column", +            alignItems: "center", +        }, +        icon: { +            width: iconSize, +            height: iconSize, +        }, +        context: { +            display: "block", +            height: theme.spacing(6), +        } +    }))(); + +    return ( +        <div className={classnames(props.className, style.root)}> +            <div className={style.iconContainer}> +                <div className={style.icon}> +                    {props.icon} +                </div> +            </div> +            <div className={style.context}> +                {props.context} +            </div> +        </div> +    ) +}
\ No newline at end of file diff --git a/web/src/views/LoginPortal/SecondFactor/MethodContainer.tsx b/web/src/views/LoginPortal/SecondFactor/MethodContainer.tsx new file mode 100644 index 000000000..56f460cec --- /dev/null +++ b/web/src/views/LoginPortal/SecondFactor/MethodContainer.tsx @@ -0,0 +1,33 @@ +import React, { ReactNode, Fragment } from "react"; +import { makeStyles, Typography, Link } from "@material-ui/core"; + +interface MethodContainerProps { +    title: string; +    explanation: string; +    children: ReactNode; + +    onRegisterClick?: () => void; +} + +export default function (props: MethodContainerProps) { +    const style = useStyles(); +    return ( +        <Fragment> +            <Typography variant="h6">{props.title}</Typography> +            <div className={style.icon}>{props.children}</div> +            <Typography>{props.explanation}</Typography> +            {props.onRegisterClick +                ? <Link component="button" onClick={props.onRegisterClick}> +                    Not registered yet? +                </Link> +                : null} +        </Fragment> +    ) +} + +const useStyles = makeStyles(theme => ({ +    icon: { +        paddingTop: theme.spacing(2), +        paddingBottom: theme.spacing(2), +    }, +}));
\ No newline at end of file diff --git a/web/src/views/LoginPortal/SecondFactor/MethodSelectionDialog.tsx b/web/src/views/LoginPortal/SecondFactor/MethodSelectionDialog.tsx new file mode 100644 index 000000000..6c98e7b68 --- /dev/null +++ b/web/src/views/LoginPortal/SecondFactor/MethodSelectionDialog.tsx @@ -0,0 +1,95 @@ +import React, { ReactNode } from "react"; +import { Dialog, Grid, makeStyles, DialogContent, Button, DialogActions, Typography, useTheme } from "@material-ui/core"; +import PushNotificationIcon from "../../../components/PushNotificationIcon"; +import PieChartIcon from "../../../components/PieChartIcon"; +import { SecondFactorMethod } from "../../../models/Methods"; +import FingerTouchIcon from "../../../components/FingerTouchIcon"; + +export interface Props { +    open: boolean; +    methods: Set<SecondFactorMethod>; +    u2fSupported: boolean; + +    onClose: () => void; +    onClick: (method: SecondFactorMethod) => void; +} + +export default function (props: Props) { +    const style = useStyles(); +    const theme = useTheme(); + +    const pieChartIcon = <PieChartIcon width={24} height={24} maxProgress={1000} progress={150} +        color={theme.palette.primary.main} backgroundColor={"white"} /> + +    return ( +        <Dialog open={props.open} className={style.root} onClose={props.onClose}> +            <DialogContent> +                <Grid container justify="center" spacing={1}> +                    {props.methods.has(SecondFactorMethod.TOTP) +                        ? <MethodItem method="One-Time Password" icon={pieChartIcon} +                            onClick={() => props.onClick(SecondFactorMethod.TOTP)} /> +                        : null} +                    {props.methods.has(SecondFactorMethod.U2F) && props.u2fSupported +                        ? <MethodItem +                            method="Security Key" +                            icon={<FingerTouchIcon size={32} />} +                            onClick={() => props.onClick(SecondFactorMethod.U2F)} /> +                        : null} +                    {props.methods.has(SecondFactorMethod.Duo) +                        ? <MethodItem +                            method="Push Notification" +                            icon={<PushNotificationIcon width={32} height={32} />} +                            onClick={() => props.onClick(SecondFactorMethod.Duo)} /> +                        : null} +                </Grid> +            </DialogContent> +            <DialogActions> +                <Button color="primary" onClick={props.onClose}> +                    Close +                </Button> +            </DialogActions> +        </Dialog> +    ) +} + +const useStyles = makeStyles(theme => ({ +    root: { +        textAlign: "center", +    } +})) + +interface MethodItemProps { +    method: string; +    icon: ReactNode; + +    onClick: () => void; +} + +function MethodItem(props: MethodItemProps) { +    const style = makeStyles(theme => ({ +        item: { +            paddingTop: theme.spacing(4), +            paddingBottom: theme.spacing(4), +            width: "100%", +        }, +        icon: { +            display: "inline-block", +            fill: "white", +        }, +        buttonRoot: { +            display: "block", +        } +    }))(); + +    return ( +        <Grid item xs={12}> +            <Button className={style.item} color="primary" +                classes={{ root: style.buttonRoot }} +                variant="contained" +                onClick={props.onClick}> +                <div className={style.icon}>{props.icon}</div> +                <div><Typography>{props.method}</Typography></div> +            </Button> +        </Grid> +    ) +}
\ No newline at end of file diff --git a/web/src/views/LoginPortal/SecondFactor/OTPDial.tsx b/web/src/views/LoginPortal/SecondFactor/OTPDial.tsx new file mode 100644 index 000000000..d0e6f20e4 --- /dev/null +++ b/web/src/views/LoginPortal/SecondFactor/OTPDial.tsx @@ -0,0 +1,73 @@ +import React, { Fragment } from "react"; +import OtpInput from "react-otp-input"; +import TimerIcon from "../../../components/TimerIcon"; +import { makeStyles } from "@material-ui/core"; +import classnames from "classnames"; +import IconWithContext from "./IconWithContext"; +import { State } from "./OneTimePasswordMethod"; +import SuccessIcon from "../../../components/SuccessIcon"; + +export interface Props { +    passcode: string; +    state: State; + +    onChange: (passcode: string) => void; +} + +export default function (props: Props) { +    const style = useStyles(); + +    const dial = ( +        <span className={style.otpInput}> +            <OtpInput +                onChange={props.onChange} +                value={props.passcode} +                numInputs={6} +                isDisabled={props.state === State.InProgress || props.state === State.Success} +                hasErrored={props.state === State.Failure} +                inputStyle={classnames(style.otpDigitInput, props.state === State.Failure ? style.inputError : "")} /> +        </span> +    ) + +    return ( +        <IconWithContext +            icon={<Icon state={props.state} />} +            context={dial} /> +    ) +} + +const useStyles = makeStyles(theme => ({ +    timeProgress: { +    }, +    register: { +        marginTop: theme.spacing(), +    }, +    otpInput: { +        display: "inline-block", +        marginTop: theme.spacing(2), +    }, +    otpDigitInput: { +        padding: theme.spacing(), +        marginLeft: theme.spacing(0.5), +        marginRight: theme.spacing(0.5), +        fontSize: "1rem", +        borderRadius: "5px", +        border: "1px solid rgba(0,0,0,0.3)", +    }, +    inputError: { +        border: "1px solid rgba(255, 2, 2, 0.95)", +    } +})); + +interface IconProps { +    state: State; +} + +function Icon(props: IconProps) { +    return ( +        <Fragment> +            {props.state !== State.Success ? <TimerIcon backgroundColor="#000" color="#FFFFFF" width={64} height={64} /> : null} +            {props.state === State.Success ? <SuccessIcon /> : null} +        </Fragment> +    ) +}
\ No newline at end of file diff --git a/web/src/views/LoginPortal/SecondFactor/OneTimePasswordMethod.tsx b/web/src/views/LoginPortal/SecondFactor/OneTimePasswordMethod.tsx new file mode 100644 index 000000000..7ee45986c --- /dev/null +++ b/web/src/views/LoginPortal/SecondFactor/OneTimePasswordMethod.tsx @@ -0,0 +1,78 @@ +import React, { useState, useEffect, useCallback } from "react"; +import MethodContainer from "./MethodContainer"; +import OTPDial from "./OTPDial"; +import { completeTOTPSignIn } from "../../../services/OneTimePassword"; +import { useRedirectionURL } from "../../../hooks/RedirectionURL"; +import { AuthenticationLevel } from "../../../services/State"; + +export enum State { +    Idle = 1, +    InProgress = 2, +    Success = 3, +    Failure = 4, +} + +export interface Props { +    authenticationLevel: AuthenticationLevel; + +    onRegisterClick: () => void; +    onSignInError: (err: Error) => void; +    onSignInSuccess: (redirectURL: string | undefined) => void; +} + +export default function (props: Props) { +    const [passcode, setPasscode] = useState(""); +    const [state, setState] = useState(props.authenticationLevel === AuthenticationLevel.TwoFactor +        ? State.Success +        : State.Idle); +    const redirectionURL = useRedirectionURL(); + +    const { onSignInSuccess, onSignInError } = props; +    const onSignInErrorCallback = useCallback(onSignInError, []); +    const onSignInSuccessCallback = useCallback(onSignInSuccess, []); + +    const signInFunc = useCallback(async () => { +        if (props.authenticationLevel === AuthenticationLevel.TwoFactor) { +            return; +        } + +        const passcodeStr = `${passcode}`; + +        if (!passcode || passcodeStr.length !== 6) { +            return; +        } + +        try { +            setState(State.InProgress); +            const res = await completeTOTPSignIn(passcodeStr, redirectionURL); +            setState(State.Success); +            onSignInSuccessCallback(res ? res.redirect : undefined); +        } catch (err) { +            console.error(err); +            onSignInErrorCallback(new Error("The one-time password might be wrong")); +            setState(State.Failure); +        } +        setPasscode(""); +    }, [passcode, onSignInErrorCallback, onSignInSuccessCallback, redirectionURL, props.authenticationLevel]); + +    // Set successful state if user is already authenticated. +    useEffect(() => { +        if (props.authenticationLevel >= AuthenticationLevel.TwoFactor) { +            setState(State.Success); +        } +    }, [props.authenticationLevel, setState]); + +    useEffect(() => { signInFunc() }, [signInFunc]); + +    return ( +        <MethodContainer +            title="One-Time Password" +            explanation="Enter one-time password" +            onRegisterClick={props.onRegisterClick}> +            <OTPDial +                passcode={passcode} +                onChange={setPasscode} +                state={state} /> +        </MethodContainer> +    ) +}
\ No newline at end of file diff --git a/web/src/views/LoginPortal/SecondFactor/PushNotificationMethod.tsx b/web/src/views/LoginPortal/SecondFactor/PushNotificationMethod.tsx new file mode 100644 index 000000000..6994a372a --- /dev/null +++ b/web/src/views/LoginPortal/SecondFactor/PushNotificationMethod.tsx @@ -0,0 +1,102 @@ +import React, { useEffect, useCallback, useState, ReactNode } from "react"; +import MethodContainer from "./MethodContainer"; +import PushNotificationIcon from "../../../components/PushNotificationIcon"; +import { completePushNotificationSignIn } from "../../../services/PushNotification"; +import { Button, makeStyles } from "@material-ui/core"; +import { useRedirectionURL } from "../../../hooks/RedirectionURL"; +import { useIsMountedRef } from "../../../hooks/Mounted"; +import SuccessIcon from "../../../components/SuccessIcon"; +import FailureIcon from "../../../components/FailureIcon"; +import { AuthenticationLevel } from "../../../services/State"; + +export enum State { +    SignInInProgress = 1, +    Success = 2, +    Failure = 3, +} + +export interface Props { +    authenticationLevel: AuthenticationLevel; + +    onSignInError: (err: Error) => void; +    onSignInSuccess: (redirectURL: string | undefined) => void; +} + +export default function (props: Props) { +    const style = useStyles(); +    const [state, setState] = useState(State.SignInInProgress); +    const redirectionURL = useRedirectionURL(); +    const mounted = useIsMountedRef(); + +    const { onSignInSuccess, onSignInError } = props; +    const onSignInErrorCallback = useCallback(onSignInError, []); +    const onSignInSuccessCallback = useCallback(onSignInSuccess, []); + +    const signInFunc = useCallback(async () => { +        if (props.authenticationLevel === AuthenticationLevel.TwoFactor) { +            return; +        } + +        try { +            setState(State.SignInInProgress); +            const res = await completePushNotificationSignIn(redirectionURL); + +            // If the request was initiated and the user changed 2FA method in the meantime, +            // the process is interrupted to avoid updating state of unmounted component. +            if (!mounted.current) return; + +            setState(State.Success); +            setTimeout(() => onSignInSuccessCallback(res ? res.redirect : undefined), 1500); +        } catch (err) { +            // If the request was initiated and the user changed 2FA method in the meantime, +            // the process is interrupted to avoid updating state of unmounted component. +            if (!mounted.current) return; + +            console.error(err); +            onSignInErrorCallback(new Error("There was an issue completing sign in process")); +            setState(State.Failure); +        } +    }, [onSignInErrorCallback, onSignInSuccessCallback, setState, redirectionURL, mounted, props.authenticationLevel]); + +    useEffect(() => { signInFunc() }, [signInFunc]); + +    // Set successful state if user is already authenticated. +    useEffect(() => { +        if (props.authenticationLevel >= AuthenticationLevel.TwoFactor) { +            setState(State.Success); +        } +    }, [props.authenticationLevel, setState]); + +    let icon: ReactNode; +    switch (state) { +        case State.SignInInProgress: +            icon = <PushNotificationIcon width={64} height={64} animated />; +            break; +        case State.Success: +            icon = <SuccessIcon />; +            break; +        case State.Failure: +            icon = <FailureIcon />; +    } + +    return ( +        <MethodContainer +            title="Push Notification" +            explanation="A notification has been sent to your smartphone"> +            <div className={style.icon}> +                {icon} +            </div> +            <div className={(state !== State.Failure) ? "hidden" : ""}> +                <Button color="secondary" onClick={signInFunc}>Retry</Button> +            </div> +        </MethodContainer> +    ) +} + +const useStyles = makeStyles(theme => ({ +    icon: { +        width: "64px", +        height: "64px", +        display: "inline-block", +    } +}))
\ No newline at end of file diff --git a/web/src/views/LoginPortal/SecondFactor/SecondFactorForm.tsx b/web/src/views/LoginPortal/SecondFactor/SecondFactorForm.tsx new file mode 100644 index 000000000..4f9c372a9 --- /dev/null +++ b/web/src/views/LoginPortal/SecondFactor/SecondFactorForm.tsx @@ -0,0 +1,140 @@ +import React, { useState, useEffect } from "react"; +import { Grid, makeStyles, Button } from "@material-ui/core"; +import MethodSelectionDialog from "./MethodSelectionDialog"; +import { SecondFactorMethod } from "../../../models/Methods"; +import { useHistory, Switch, Route, Redirect } from "react-router"; +import LoginLayout from "../../../layouts/LoginLayout"; +import { useNotifications } from "../../../hooks/NotificationsContext"; +import { +    initiateTOTPRegistrationProcess, +    initiateU2FRegistrationProcess +} from "../../../services/RegisterDevice"; +import SecurityKeyMethod from "./SecurityKeyMethod"; +import OneTimePasswordMethod from "./OneTimePasswordMethod"; +import PushNotificationMethod from "./PushNotificationMethod"; +import { +    LogoutRoute as SignOutRoute, SecondFactorTOTPRoute, +    SecondFactorPushRoute, SecondFactorU2FRoute, SecondFactorRoute +} from "../../../Routes"; +import { setPrefered2FAMethod } from "../../../services/UserPreferences"; +import { UserPreferences } from "../../../models/UserPreferences"; +import { Configuration } from "../../../models/Configuration"; +import u2fApi from "u2f-api"; +import { AuthenticationLevel } from "../../../services/State"; + +const EMAIL_SENT_NOTIFICATION = "An email has been sent to your address to complete the registration process"; + +export interface Props { +    username: string; +    authenticationLevel: AuthenticationLevel; + +    userPreferences: UserPreferences; +    configuration: Configuration; + +    onMethodChanged: (method: SecondFactorMethod) => void; +    onAuthenticationSuccess: (redirectURL: string | undefined) => void; +} + +export default function (props: Props) { +    const style = useStyles(); +    const history = useHistory(); +    const [methodSelectionOpen, setMethodSelectionOpen] = useState(false); +    const { createInfoNotification, createErrorNotification } = useNotifications(); +    const [registrationInProgress, setRegistrationInProgress] = useState(false); +    const [u2fSupported, setU2fSupported] = useState(false); + +    // Check that U2F is supported. +    useEffect(() => { u2fApi.ensureSupport().then(() => setU2fSupported(true)) }, [setU2fSupported]); + +    const initiateRegistration = (initiateRegistrationFunc: () => Promise<void>) => { +        return async () => { +            if (registrationInProgress) { +                return; +            } +            setRegistrationInProgress(true); +            try { +                await initiateRegistrationFunc(); +                createInfoNotification(EMAIL_SENT_NOTIFICATION); +            } catch (err) { +                console.error(err); +                createErrorNotification("There was a problem initiating the registration process"); +            } +            setRegistrationInProgress(false); +        } +    } + +    const handleMethodSelectionClick = () => { +        setMethodSelectionOpen(true); +    } + +    const handleMethodSelected = async (method: SecondFactorMethod) => { +        try { +            await setPrefered2FAMethod(method); +            setMethodSelectionOpen(false); +            props.onMethodChanged(method); +        } catch (err) { +            console.error(err); +            createErrorNotification("There was an issue updating prefered second factor method"); +        } +    } + +    const handleLogoutClick = () => { +        history.push(SignOutRoute); +    } + +    return ( +        <LoginLayout +            title={`Hi ${props.username}`} +            showBrand> +            <MethodSelectionDialog +                open={methodSelectionOpen} +                methods={props.configuration} +                u2fSupported={u2fSupported} +                onClose={() => setMethodSelectionOpen(false)} +                onClick={handleMethodSelected} /> +            <Grid container> +                <Grid item xs={12}> +                    <Button color="secondary" onClick={handleLogoutClick}>Logout</Button>{" | "} +                    <Button color="secondary" onClick={handleMethodSelectionClick}>Methods</Button> +                </Grid> +                <Grid item xs={12} className={style.methodContainer}> +                    <Switch> +                        <Route path={SecondFactorTOTPRoute} exact> +                            <OneTimePasswordMethod +                                authenticationLevel={props.authenticationLevel} +                                onRegisterClick={initiateRegistration(initiateTOTPRegistrationProcess)} +                                onSignInError={err => createErrorNotification(err.message)} +                                onSignInSuccess={props.onAuthenticationSuccess} /> +                        </Route> +                        <Route path={SecondFactorU2FRoute} exact> +                            <SecurityKeyMethod +                                authenticationLevel={props.authenticationLevel} +                                onRegisterClick={initiateRegistration(initiateU2FRegistrationProcess)} +                                onSignInError={err => createErrorNotification(err.message)} +                                onSignInSuccess={props.onAuthenticationSuccess} /> +                        </Route> +                        <Route path={SecondFactorPushRoute} exact> +                            <PushNotificationMethod +                                authenticationLevel={props.authenticationLevel} +                                onSignInError={err => createErrorNotification(err.message)} +                                onSignInSuccess={props.onAuthenticationSuccess} /> +                        </Route> +                        <Route path={SecondFactorRoute}> +                            <Redirect to={SecondFactorTOTPRoute} /> +                        </Route> +                    </Switch> +                </Grid> +            </Grid> +        </LoginLayout> +    ) +} + +const useStyles = makeStyles(theme => ({ +    methodContainer: { +        border: "1px solid #d6d6d6", +        borderRadius: "10px", +        padding: theme.spacing(4), +        marginTop: theme.spacing(2), +        marginBottom: theme.spacing(2), +    }, +})) diff --git a/web/src/views/LoginPortal/SecondFactor/SecurityKeyMethod.tsx b/web/src/views/LoginPortal/SecondFactor/SecurityKeyMethod.tsx new file mode 100644 index 000000000..526b75ff1 --- /dev/null +++ b/web/src/views/LoginPortal/SecondFactor/SecurityKeyMethod.tsx @@ -0,0 +1,147 @@ +import React, { useCallback, useEffect, useState, Fragment } from "react"; +import MethodContainer from "./MethodContainer"; +import { makeStyles, Button, useTheme } from "@material-ui/core"; +import { initiateU2FSignin, completeU2FSignin } from "../../../services/SecurityKey"; +import u2fApi from "u2f-api"; +import { useRedirectionURL } from "../../../hooks/RedirectionURL"; +import { useIsMountedRef } from "../../../hooks/Mounted"; +import { useTimer } from "../../../hooks/Timer"; +import LinearProgressBar from "../../../components/LinearProgressBar"; +import FingerTouchIcon from "../../../components/FingerTouchIcon"; +import SuccessIcon from "../../../components/SuccessIcon"; +import FailureIcon from "../../../components/FailureIcon"; +import IconWithContext from "./IconWithContext"; +import { CSSProperties } from "@material-ui/styles"; +import { AuthenticationLevel } from "../../../services/State"; + +export enum State { +    WaitTouch = 1, +    SigninInProgress = 2, +    Success = 3, +    Failure = 4, +} + +export interface Props { +    authenticationLevel: AuthenticationLevel; + +    onRegisterClick: () => void; +    onSignInError: (err: Error) => void; +    onSignInSuccess: (redirectURL: string | undefined) => void; +} + +export default function (props: Props) { +    const signInTimeout = 2; +    const [state, setState] = useState(State.WaitTouch); +    const style = useStyles(); +    const redirectionURL = useRedirectionURL(); +    const mounted = useIsMountedRef(); +    const [timerPercent, triggerTimer,] = useTimer(signInTimeout * 1000 - 500); + +    const { onSignInSuccess, onSignInError } = props; +    const onSignInErrorCallback = useCallback(onSignInError, []); +    const onSignInSuccessCallback = useCallback(onSignInSuccess, []); + +    const doInitiateSignIn = useCallback(async () => { +        // If user is already authenticated, we don't initiate sign in process. +        if (props.authenticationLevel >= AuthenticationLevel.TwoFactor) { +            return; +        } + +        try { +            triggerTimer(); +            setState(State.WaitTouch); +            const signRequest = await initiateU2FSignin(); +            const signRequests: u2fApi.SignRequest[] = []; +            for (var i in signRequest.registeredKeys) { +                const r = signRequest.registeredKeys[i]; +                signRequests.push({ +                    appId: signRequest.appId, +                    challenge: signRequest.challenge, +                    keyHandle: r.keyHandle, +                    version: r.version, +                }) +            } +            const signResponse = await u2fApi.sign(signRequests, signInTimeout); +            // If the request was initiated and the user changed 2FA method in the meantime, +            // the process is interrupted to avoid updating state of unmounted component. +            if (!mounted.current) return; + +            setState(State.SigninInProgress); +            const res = await completeU2FSignin(signResponse, redirectionURL); +            setState(State.Success); +            setTimeout(() => { onSignInSuccessCallback(res ? res.redirect : undefined) }, 1500); +        } catch (err) { +            // If the request was initiated and the user changed 2FA method in the meantime, +            // the process is interrupted to avoid updating state of unmounted component. +            if (!mounted.current) return; +            console.error(err); +            onSignInErrorCallback(new Error("Failed to initiate security key sign in process")); +            setState(State.Failure); +        } +    }, [onSignInSuccessCallback, onSignInErrorCallback, redirectionURL, mounted, triggerTimer, props.authenticationLevel]); + +    // Set successful state if user is already authenticated. +    useEffect(() => { +        if (props.authenticationLevel >= AuthenticationLevel.TwoFactor) { +            setState(State.Success); +        } +    }, [props.authenticationLevel, setState]); + +    useEffect(() => { doInitiateSignIn() }, [doInitiateSignIn]); + +    return ( +        <MethodContainer +            title="Security Key" +            explanation="Touch the token of your security key" +            onRegisterClick={props.onRegisterClick}> +            <div className={style.icon}> +                <Icon state={state} timer={timerPercent} onRetryClick={doInitiateSignIn} /> +            </div> +        </MethodContainer> +    ) +} + +const useStyles = makeStyles(theme => ({ +    icon: { +        display: "inline-block", +    } +})); + +interface IconProps { +    state: State; + +    timer: number; +    onRetryClick: () => void; +} + +function Icon(props: IconProps) { +    const state = props.state as State; +    const theme = useTheme(); + +    const progressBarStyle: CSSProperties = { +        marginTop: theme.spacing(), +    } + +    const touch = <IconWithContext +        icon={<FingerTouchIcon size={64} animated strong />} +        context={<LinearProgressBar value={props.timer} style={progressBarStyle} height={theme.spacing(2)} />} +        className={state === State.WaitTouch ? undefined : "hidden"} /> + +    const failure = <IconWithContext +        icon={<FailureIcon />} +        context={<Button color="secondary" onClick={props.onRetryClick}>Retry</Button>} +        className={state === State.Failure ? undefined : "hidden"} /> + +    const success = <IconWithContext +        icon={<SuccessIcon />} +        context={<div style={{ color: "green", padding: theme.spacing() }}>Success!</div>} +        className={state === State.Success || state === State.SigninInProgress ? undefined : "hidden"} /> + +    return ( +        <Fragment> +            {touch} +            {success} +            {failure} +        </Fragment> +    ) +} diff --git a/web/src/views/LoginPortal/SignOut/SignOut.tsx b/web/src/views/LoginPortal/SignOut/SignOut.tsx new file mode 100644 index 000000000..5c06854fb --- /dev/null +++ b/web/src/views/LoginPortal/SignOut/SignOut.tsx @@ -0,0 +1,53 @@ +import React, { useEffect, useCallback, useState } from "react"; +import LoginLayout from "../../../layouts/LoginLayout"; +import { useNotifications } from "../../../hooks/NotificationsContext"; +import { signOut } from "../../../services/SignOut"; +import { Typography, makeStyles } from "@material-ui/core"; +import { Redirect } from "react-router"; +import { FirstFactorRoute } from "../../../Routes"; +import { useRedirectionURL } from "../../../hooks/RedirectionURL"; + +export interface Props { +} + +export default function (props: Props) { +    const style = useStyles(); +    const { createErrorNotification } = useNotifications(); +    const redirectionURL = useRedirectionURL(); +    const [timedOut, setTimedOut] = useState(false); + +    const doSignOut = useCallback(async () => { +        try { +            // TODO(c.michaud): pass redirection URL to backend for validation. +            await signOut(); +            setTimeout(() => { setTimedOut(true); }, 2000); +        } catch (err) { +            console.error(err); +            createErrorNotification("There was an issue signing out"); +        } +    }, [createErrorNotification, setTimedOut]); + +    useEffect(() => { doSignOut() }, [doSignOut]); + +    if (timedOut) { +        if (redirectionURL) { +            window.location.href = redirectionURL; +        } else { +            return <Redirect to={FirstFactorRoute} /> +        } +    } + +    return ( +        <LoginLayout title="Sign out"> +            <Typography className={style.typo} > +                You're being signed out and redirected... +            </Typography> +        </LoginLayout> +    ) +} + +const useStyles = makeStyles(theme => ({ +    typo: { +        padding: theme.spacing(), +    } +}))
\ No newline at end of file diff --git a/web/src/views/ResetPassword/ResetPasswordStep1.tsx b/web/src/views/ResetPassword/ResetPasswordStep1.tsx new file mode 100644 index 000000000..6b6f8b9c7 --- /dev/null +++ b/web/src/views/ResetPassword/ResetPasswordStep1.tsx @@ -0,0 +1,81 @@ +import React, { useState } from "react"; +import LoginLayout from "../../layouts/LoginLayout"; +import { Grid, Button, makeStyles } from "@material-ui/core"; +import { useNotifications } from "../../hooks/NotificationsContext"; +import { useHistory } from "react-router"; +import { initiateResetPasswordProcess } from "../../services/ResetPassword"; +import { FirstFactorRoute } from "../../Routes"; +import FixedTextField from "../../components/FixedTextField"; + +export default function () { +    const style = useStyles(); +    const [username, setUsername] = useState(""); +    const [error, setError] = useState(false); +    const { createInfoNotification, createErrorNotification } = useNotifications(); +    const history = useHistory(); + +    const doInitiateResetPasswordProcess = async () => { +        if (username === "") { +            setError(true); +            return; +        } + +        try { +            await initiateResetPasswordProcess(username); +            createInfoNotification("An email has been sent to your address to complete the process"); +        } catch (err) { +            createErrorNotification("There was an issue initiating the password reset process"); +        } +    } + +    const handleResetClick = () => { +        doInitiateResetPasswordProcess(); +    } + +    const handleCancelClick = () => { +        history.push(FirstFactorRoute); +    } + +    return ( +        <LoginLayout title="Reset password"> +            <Grid container className={style.root} spacing={2}> +                <Grid item xs={12}> +                    <FixedTextField +                        label="Username" +                        variant="outlined" +                        fullWidth +                        error={error} +                        value={username} +                        onChange={(e) => setUsername(e.target.value)} +                        onKeyPress={(ev) => { +                            if (ev.key === 'Enter') { +                                doInitiateResetPasswordProcess(); +                                ev.preventDefault(); +                            } +                        }} /> +                </Grid> +                <Grid item xs={6}> +                    <Button +                        variant="contained" +                        color="primary" +                        fullWidth +                        onClick={handleResetClick}>Reset</Button> +                </Grid> +                <Grid item xs={6}> +                    <Button +                        variant="contained" +                        color="primary" +                        fullWidth +                        onClick={handleCancelClick}>Cancel</Button> +                </Grid> +            </Grid> +        </LoginLayout> +    ) +} + +const useStyles = makeStyles(theme => ({ +    root: { +        marginTop: theme.spacing(2), +        marginBottom: theme.spacing(2), +    }, +}))
\ No newline at end of file diff --git a/web/src/views/ResetPassword/ResetPasswordStep2.tsx b/web/src/views/ResetPassword/ResetPasswordStep2.tsx new file mode 100644 index 000000000..15c000d57 --- /dev/null +++ b/web/src/views/ResetPassword/ResetPasswordStep2.tsx @@ -0,0 +1,143 @@ +import React, { useState, useCallback, useEffect } from "react"; +import LoginLayout from "../../layouts/LoginLayout"; +import classnames from "classnames"; +import { Grid, Button, makeStyles } from "@material-ui/core"; +import { useNotifications } from "../../hooks/NotificationsContext"; +import { useHistory, useLocation } from "react-router"; +import { completeResetPasswordProcess, resetPassword } from "../../services/ResetPassword"; +import { FirstFactorRoute } from "../../Routes"; +import { extractIdentityToken } from "../../utils/IdentityToken"; +import FixedTextField from "../../components/FixedTextField"; + +export default function () { +    const style = useStyles(); +    const location = useLocation(); +    const [formDisabled, setFormDisabled] = useState(true); +    const [password1, setPassword1] = useState(""); +    const [password2, setPassword2] = useState(""); +    const [errorPassword1, setErrorPassword1] = useState(false); +    const [errorPassword2, setErrorPassword2] = useState(false); +    const { createSuccessNotification, createErrorNotification } = useNotifications(); +    const history = useHistory(); +    // Get the token from the query param to give it back to the API when requesting +    // the secret for OTP. +    const processToken = extractIdentityToken(location.search); + +    const completeProcess = useCallback(async () => { +        if (!processToken) { +            setFormDisabled(true); +            createErrorNotification("No verification token provided"); +            return; +        } + +        try { +            setFormDisabled(true); +            await completeResetPasswordProcess(processToken); +            setFormDisabled(false); +        } catch (err) { +            console.error(err); +            createErrorNotification("There was an issue completing the process. " + +                "The verification token might have expired."); +            setFormDisabled(true); +        } +    }, [processToken, createErrorNotification]); + +    useEffect(() => { +        completeProcess(); +    }, [completeProcess]); + +    const doResetPassword = async () => { +        if (password1 === "" || password2 === "") { +            if (password1 === "") { +                setErrorPassword1(true); +            } +            if (password2 === "") { +                setErrorPassword2(true); +            } + +            if (password1 !== password2) { +                setErrorPassword1(true); +                setErrorPassword2(true) +            } +            return +        } + +        try { +            await resetPassword(password1); +            createSuccessNotification("The password has been reset"); +            setTimeout(() => history.push(FirstFactorRoute), 1500); +            setFormDisabled(true); +        } catch (err) { +            console.error(err); +            createErrorNotification("There was an issue resetting the password"); +        } +    } + +    const handleResetClick = () => +        doResetPassword(); + +    const handleCancelClick = () => +        history.push(FirstFactorRoute); + +    return ( +        <LoginLayout title="Enter new password"> +            <Grid container className={style.root} spacing={2}> +                <Grid item xs={12}> +                    <FixedTextField +                        label="New password" +                        variant="outlined" +                        type="password" +                        value={password1} +                        disabled={formDisabled} +                        onChange={e => setPassword1(e.target.value)} +                        error={errorPassword1} +                        className={classnames(style.fullWidth)} /> +                </Grid> +                <Grid item xs={12}> +                    <FixedTextField +                        label="Repeat new password" +                        variant="outlined" +                        type="password" +                        disabled={formDisabled} +                        value={password2} +                        onChange={e => setPassword2(e.target.value)} +                        error={errorPassword2} +                        onKeyPress={(ev) => { +                            if (ev.key === 'Enter') { +                                doResetPassword(); +                                ev.preventDefault(); +                            } +                        }} +                        className={classnames(style.fullWidth)} /> +                </Grid> +                <Grid item xs={6}> +                    <Button +                        variant="contained" +                        color="primary" +                        name="password1" +                        disabled={formDisabled} +                        onClick={handleResetClick} +                        className={style.fullWidth}>Reset</Button> +                </Grid> +                <Grid item xs={6}> +                    <Button +                        variant="contained" +                        color="primary" +                        name="password2" +                        onClick={handleCancelClick} +                        className={style.fullWidth}>Cancel</Button> +                </Grid> +            </Grid> +        </LoginLayout> +    ) +} + +const useStyles = makeStyles(theme => ({ +    root: { +        marginTop: theme.spacing(2), +        marginBottom: theme.spacing(2), +    }, +    fullWidth: { +        width: "100%", +    } +}))
\ No newline at end of file diff --git a/web/tsconfig.json b/web/tsconfig.json new file mode 100644 index 000000000..873146052 --- /dev/null +++ b/web/tsconfig.json @@ -0,0 +1,26 @@ +{ +  "compilerOptions": { +    "target": "es5", +    "lib": [ +      "dom", +      "dom.iterable", +      "esnext" +    ], +    "allowJs": true, +    "skipLibCheck": true, +    "esModuleInterop": true, +    "allowSyntheticDefaultImports": true, +    "strict": true, +    "forceConsistentCasingInFileNames": true, +    "module": "esnext", +    "moduleResolution": "node", +    "resolveJsonModule": true, +    "isolatedModules": true, +    "noEmit": true, +    "jsx": "react" +  }, +  "include": [ +    "src", +    "types" +  ] +}
\ No newline at end of file diff --git a/web/types/index.d.ts b/web/types/index.d.ts new file mode 100644 index 000000000..85e730f8e --- /dev/null +++ b/web/types/index.d.ts @@ -0,0 +1 @@ +/// <reference path="react-otp-input/index.d.ts" />
\ No newline at end of file diff --git a/web/types/react-otp-input/index.d.ts b/web/types/react-otp-input/index.d.ts new file mode 100644 index 000000000..a872f08d0 --- /dev/null +++ b/web/types/react-otp-input/index.d.ts @@ -0,0 +1,2 @@ + +declare module 'react-otp-input';
\ No newline at end of file  | 
