You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dlab.apache.org by bh...@apache.org on 2019/09/06 09:03:17 UTC

[incubator-dlab] 01/01: DLAB-23 fixed merge conflicts

This is an automated email from the ASF dual-hosted git repository.

bhliva pushed a commit to branch bil-2
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git

commit f5563befd521da6ae49ecff62f39619b2658e52e
Merge: 217462d f56d671
Author: bhliva <bo...@epam.com>
AuthorDate: Fri Sep 6 12:02:14 2019 +0300

    DLAB-23 fixed merge conflicts

 README.md                                          |  594 +-
 RELEASE_NOTES.md                                   |   10 +-
 USER_GUIDE.md                                      |    2 +-
 infrastructure-provisioning/scripts/deploy_dlab.py |   20 +-
 infrastructure-provisioning/src/base/entrypoint.py |    4 +
 .../src/base/scripts/install_prerequisites.py      |    4 +
 .../src/base/scripts/install_user_key.py           |    5 +-
 .../src/dataengine/scripts/configure_dataengine.py |    8 +-
 .../src/deeplearning/fabfile.py                    |   16 +
 .../scripts/configure_deep_learning_node.py        |   10 +-
 infrastructure-provisioning/src/edge/fabfile.py    |  145 +-
 .../src/edge/templates/nginx.conf                  |    1 -
 .../api/{install_libs.py => check_inactivity.py}   |    6 +-
 .../src/general/api/configure.py                   |    4 +-
 .../src/general/api/create.py                      |    4 +-
 .../src/general/api/create_image.py                |    4 +-
 .../src/general/api/git_creds.py                   |    4 +-
 .../src/general/api/install_libs.py                |    4 +-
 .../src/general/api/list_libs.py                   |    8 +-
 .../src/general/api/reconfigure_spark.py           |    4 +-
 .../src/general/api/recreate.py                    |    4 +-
 .../src/general/api/reupload_key.py                |    4 +-
 .../src/general/api/start.py                       |    4 +-
 .../src/general/api/stop.py                        |    4 +-
 .../src/general/api/terminate.py                   |    4 +-
 .../src/general/api/terminate_image.py             |    4 +-
 .../src/general/conf/dlab.ini                      |    8 +-
 .../src/general/files/aws/base_Dockerfile          |    3 +-
 .../files/aws/dataengine-service_Dockerfile        |    3 +
 .../src/general/files/aws/dataengine_Dockerfile    |    1 +
 .../src/general/files/aws/deeplearning_Dockerfile  |    3 +
 .../src/general/files/aws/edge_description.json    |    4 +-
 .../src/general/files/aws/jupyter_Dockerfile       |    3 +
 .../aws/{rstudio_Dockerfile => project_Dockerfile} |   12 +-
 .../src/general/files/aws/project_description.json |    4 +
 .../src/general/files/aws/rstudio_Dockerfile       |    3 +
 .../src/general/files/aws/ssn_Dockerfile           |    2 +-
 .../src/general/files/aws/ssn_policy.json          |    3 +-
 .../general/files/aws/tensor-rstudio_Dockerfile    |    3 +
 .../src/general/files/aws/tensor_Dockerfile        |    3 +
 .../src/general/files/aws/tensor_description.json  |    2 +-
 .../src/general/files/aws/zeppelin_Dockerfile      |    3 +
 .../src/general/files/azure/base_Dockerfile        |    3 +
 .../src/general/files/azure/dataengine_Dockerfile  |    1 +
 .../general/files/azure/deeplearning_Dockerfile    |    3 +
 .../src/general/files/azure/jupyter_Dockerfile     |    4 +
 .../project_Dockerfile}                            |   13 +-
 .../general/files/azure/project_description.json   |    4 +
 .../src/general/files/azure/rstudio_Dockerfile     |    3 +
 .../src/general/files/azure/ssn_Dockerfile         |    1 +
 .../src/general/files/azure/tensor_Dockerfile      |    3 +
 .../src/general/files/azure/zeppelin_Dockerfile    |    3 +
 .../src/general/files/gcp/base_Dockerfile          |    2 +
 .../files/gcp/dataengine-service_Dockerfile        |    5 +-
 .../files/gcp/dataengine-service_description.json  |    5 +-
 .../src/general/files/gcp/dataengine_Dockerfile    |    3 +-
 .../general/files/gcp/dataengine_description.json  |    1 -
 .../src/general/files/gcp/deeplearning_Dockerfile  |    3 +
 .../src/general/files/gcp/jupyter_Dockerfile       |    3 +
 .../src/general/files/gcp/jupyter_description.json |    1 -
 .../rstudio_Dockerfile => gcp/project_Dockerfile}  |   15 +-
 .../src/general/files/gcp/project_description.json |    4 +
 .../src/general/files/gcp/rstudio_Dockerfile       |    3 +
 .../src/general/files/gcp/rstudio_description.json |    1 -
 .../src/general/files/gcp/ssn_Dockerfile           |    1 +
 .../src/general/files/gcp/ssn_policy.json          |    7 +-
 .../src/general/files/gcp/ssn_roles.json           |    4 +-
 .../files/{aws => gcp}/tensor-rstudio_Dockerfile   |    8 +-
 .../files/gcp/tensor-rstudio_description.json      |   38 +
 .../src/general/files/gcp/tensor_Dockerfile        |    3 +
 .../src/general/files/gcp/tensor_description.json  |    6 +-
 .../src/general/files/gcp/zeppelin_Dockerfile      |    3 +
 .../general/files/gcp/zeppelin_description.json    |    1 -
 .../src/general/lib/aws/actions_lib.py             |  443 +-
 .../src/general/lib/aws/meta_lib.py                |    5 +-
 .../src/general/lib/azure/actions_lib.py           |   63 +-
 .../src/general/lib/gcp/actions_lib.py             |  163 +-
 .../src/general/lib/gcp/meta_lib.py                |  100 +-
 .../src/general/lib/os/debian/common_lib.py        |   56 +-
 .../src/general/lib/os/debian/edge_lib.py          |    6 +-
 .../src/general/lib/os/debian/notebook_lib.py      |   47 +-
 .../src/general/lib/os/debian/ssn_lib.py           |    4 +-
 .../src/general/lib/os/fab.py                      |   33 +-
 .../src/general/lib/os/redhat/common_lib.py        |   21 +-
 .../src/general/lib/os/redhat/edge_lib.py          |    6 +-
 .../src/general/lib/os/redhat/notebook_lib.py      |   48 +-
 .../src/general/lib/os/redhat/ssn_lib.py           |    4 +-
 .../general/scripts/aws/common_create_bucket.py    |    3 +-
 .../scripts/aws/common_create_notebook_image.py    |   18 +-
 .../scripts/aws/common_create_role_policy.py       |    5 +-
 .../scripts/aws/common_create_security_group.py    |    2 +-
 .../general/scripts/aws/common_create_subnet.py    |   11 +-
 .../scripts/aws/common_download_git_certfile.py    |    4 +-
 ...common_notebook_configure_dataengine-service.py |   11 +-
 .../aws/common_notebook_configure_dataengine.py    |   15 +-
 .../general/scripts/aws/common_prepare_notebook.py |   44 +-
 .../general/scripts/aws/common_start_notebook.py   |   19 +-
 .../general/scripts/aws/common_stop_notebook.py    |    7 +-
 .../scripts/aws/common_terminate_notebook.py       |    7 +-
 .../scripts/aws/dataengine-service_configure.py    |   28 +-
 .../scripts/aws/dataengine-service_create.py       |   32 +-
 .../scripts/aws/dataengine-service_install_libs.py |    2 +-
 .../scripts/aws/dataengine-service_list_libs.py    |    2 +-
 .../scripts/aws/dataengine-service_prepare.py      |   40 +-
 .../scripts/aws/dataengine-service_terminate.py    |    7 +-
 .../general/scripts/aws/dataengine_configure.py    |   73 +-
 .../src/general/scripts/aws/dataengine_prepare.py  |   46 +-
 .../src/general/scripts/aws/dataengine_start.py    |   57 +-
 .../src/general/scripts/aws/dataengine_stop.py     |   11 +-
 .../general/scripts/aws/dataengine_terminate.py    |   11 +-
 .../general/scripts/aws/deeplearning_configure.py  |   48 +-
 .../scripts/aws/edge_associate_elastic_ip.py       |    9 +-
 .../src/general/scripts/aws/edge_configure.py      |   74 +-
 .../src/general/scripts/aws/edge_prepare.py        |  546 --
 .../src/general/scripts/aws/edge_start.py          |    7 +-
 .../src/general/scripts/aws/edge_stop.py           |    7 +-
 .../src/general/scripts/aws/jupyter_configure.py   |   62 +-
 .../jupyter_dataengine-service_create_configs.py   |    6 +-
 .../jupyter_install_dataengine-service_kernels.py  |    4 +-
 .../src/general/scripts/aws/project_prepare.py     |  611 ++
 .../{edge_terminate.py => project_terminate.py}    |   61 +-
 .../src/general/scripts/aws/rstudio_configure.py   |   46 +-
 .../rstudio_dataengine-service_create_configs.py   |    2 +-
 .../rstudio_install_dataengine-service_kernels.py  |    4 +-
 .../scripts/aws/ssn_associate_elastic_ip.py        |    7 +-
 .../src/general/scripts/aws/ssn_configure.py       |   72 +-
 .../src/general/scripts/aws/ssn_create_vpc.py      |    5 +
 .../src/general/scripts/aws/ssn_prepare.py         |  121 +-
 .../src/general/scripts/aws/ssn_terminate.py       |    3 +-
 .../scripts/aws/tensor-rstudio_configure.py        |   52 +-
 .../src/general/scripts/aws/tensor_configure.py    |   48 +-
 .../src/general/scripts/aws/zeppelin_configure.py  |   56 +-
 .../zeppelin_dataengine-service_create_configs.py  |    6 +-
 .../zeppelin_install_dataengine-service_kernels.py |    6 +-
 .../scripts/azure/common_create_instance.py        |    4 +-
 .../scripts/azure/common_create_notebook_image.py  |   10 +-
 .../azure/common_notebook_configure_dataengine.py  |   12 +-
 .../scripts/azure/common_prepare_notebook.py       |   35 +-
 .../general/scripts/azure/common_start_notebook.py |   16 +-
 .../general/scripts/azure/common_stop_notebook.py  |    2 +-
 .../scripts/azure/common_terminate_notebook.py     |    2 +-
 .../general/scripts/azure/dataengine_configure.py  |  107 +-
 .../general/scripts/azure/dataengine_prepare.py    |   30 +-
 .../src/general/scripts/azure/dataengine_start.py  |   27 +-
 .../src/general/scripts/azure/dataengine_stop.py   |    7 +-
 .../general/scripts/azure/dataengine_terminate.py  |    7 +-
 .../scripts/azure/deeplearning_configure.py        |  125 +-
 .../src/general/scripts/azure/edge_configure.py    |   91 +-
 .../src/general/scripts/azure/edge_prepare.py      |   37 +-
 .../src/general/scripts/azure/edge_start.py        |    6 +-
 .../src/general/scripts/azure/edge_stop.py         |    6 +-
 .../src/general/scripts/azure/edge_terminate.py    |   26 +-
 .../src/general/scripts/azure/jupyter_configure.py |   96 +-
 .../azure/{edge_prepare.py => project_prepare.py}  |  384 +-
 .../{edge_terminate.py => project_terminate.py}    |   43 +-
 .../src/general/scripts/azure/rstudio_configure.py |   97 +-
 .../src/general/scripts/azure/ssn_configure.py     |    3 +
 .../src/general/scripts/azure/ssn_prepare.py       |    4 +
 .../src/general/scripts/azure/tensor_configure.py  |  102 +-
 .../general/scripts/azure/zeppelin_configure.py    |  110 +-
 .../general/scripts/gcp/common_create_instance.py  |    7 +-
 .../scripts/gcp/common_create_service_account.py   |    6 +-
 ...common_notebook_configure_dataengine-service.py |   15 +-
 .../gcp/common_notebook_configure_dataengine.py    |   17 +-
 .../general/scripts/gcp/common_prepare_notebook.py |   62 +-
 .../general/scripts/gcp/common_start_notebook.py   |   16 +-
 .../general/scripts/gcp/common_stop_notebook.py    |   28 +-
 .../scripts/gcp/common_terminate_notebook.py       |   21 +-
 .../scripts/gcp/dataengine-service_configure.py    |   86 +-
 .../scripts/gcp/dataengine-service_create.py       |    2 +-
 .../scripts/gcp/dataengine-service_install_libs.py |    2 +-
 .../scripts/gcp/dataengine-service_jars_parser.py  |   14 +-
 .../scripts/gcp/dataengine-service_list_libs.py    |    2 +-
 .../scripts/gcp/dataengine-service_prepare.py      |   21 +-
 .../scripts/gcp/dataengine-service_terminate.py    |    7 +-
 .../general/scripts/gcp/dataengine_configure.py    |   88 +-
 .../src/general/scripts/gcp/dataengine_prepare.py  |   21 +-
 .../src/general/scripts/gcp/dataengine_start.py    |   29 +-
 .../src/general/scripts/gcp/dataengine_stop.py     |    7 +-
 .../general/scripts/gcp/dataengine_terminate.py    |    7 +-
 .../general/scripts/gcp/deeplearning_configure.py  |  105 +-
 .../src/general/scripts/gcp/edge_configure.py      |   65 +-
 .../general/scripts/gcp/edge_create_static_ip.py   |    2 +-
 .../src/general/scripts/gcp/edge_prepare.py        |  467 --
 .../src/general/scripts/gcp/edge_start.py          |    8 +-
 .../src/general/scripts/gcp/edge_stop.py           |    6 +-
 .../src/general/scripts/gcp/edge_terminate.py      |    6 +-
 .../src/general/scripts/gcp/jupyter_configure.py   |  105 +-
 .../jupyter_install_dataengine-service_kernels.py  |    9 +-
 .../src/general/scripts/gcp/project_prepare.py     |  475 ++
 .../{edge_terminate.py => project_terminate.py}    |   37 +-
 .../src/general/scripts/gcp/rstudio_configure.py   |  112 +-
 .../rstudio_install_dataengine-service_kernels.py  |    7 +-
 .../src/general/scripts/gcp/ssn_configure.py       |    4 +
 .../src/general/scripts/gcp/ssn_prepare.py         |   10 +-
 .../scripts/gcp/ssn_terminate_gcp_resources.py     |   14 +-
 ...io_configure.py => tensor-rstudio_configure.py} |  144 +-
 .../src/general/scripts/gcp/tensor_configure.py    |  113 +-
 .../src/general/scripts/gcp/zeppelin_configure.py  |  115 +-
 .../zeppelin_install_dataengine-service_kernels.py |    7 +-
 .../check_inactivity.py}                           |   40 +-
 .../general/scripts/os/common_clean_instance.py    |    8 +-
 .../scripts/os/common_configure_reverse_proxy.py   |    8 +-
 .../general/scripts/os/common_configure_spark.py   |   20 +-
 .../general/scripts/os/dataengine_install_libs.py  |    2 +-
 .../src/general/scripts/os/dataengine_list_libs.py |    2 +-
 .../scripts/os/dataengine_reconfigure_spark.py     |    2 +-
 .../os/deeplearning_install_dataengine_kernels.py  |    5 +
 .../os/jupyter_install_dataengine_kernels.py       |    5 +
 .../src/general/scripts/os/notebook_git_creds.py   |    2 +-
 ...igure_spark.py => notebook_inactivity_check.py} |   46 +-
 .../general/scripts/os/notebook_install_libs.py    |    2 +-
 .../src/general/scripts/os/notebook_list_libs.py   |    2 +-
 .../scripts/os/notebook_reconfigure_spark.py       |    2 +-
 .../src/general/scripts/os/reconfigure_spark.py    |    3 +
 .../os/rstudio_install_dataengine_kernels.py       |    5 +
 .../tensor-rstudio_install_dataengine_kernels.py   |    5 +
 .../os/tensor_install_dataengine_kernels.py        |    5 +
 .../update_inactivity_on_start.py}                 |   17 +-
 .../os/zeppelin_install_dataengine_kernels.py      |    5 +
 .../dataengine_reconfigure_spark/template.json     |    1 +
 .../notebook_reconfigure_spark/template.json       |    1 +
 .../gcp/jenkins_jobs/create_data_engine/config.xml |    4 +-
 .../create_dataengine-service/config.xml           |    5 +-
 .../jenkins_jobs/create_notebook_server/config.xml |    2 +-
 .../jenkins_jobs/start_notebook_server/config.xml  |    1 +
 .../jenkins_jobs/stop_notebook_server/config.xml   |    1 +
 .../terminate_notebook_server/config.xml           |    1 +
 .../os/inactive.service}                           |   19 +-
 .../src/general/templates/os/inactive.sh           |   49 +
 .../os/inactive.timer}                             |   21 +-
 .../src/general/templates/os/inactive_rs.sh        |   48 +
 infrastructure-provisioning/src/jupyter/fabfile.py |   16 +
 .../src/jupyter/scripts/configure_jupyter_node.py  |    8 +-
 infrastructure-provisioning/src/project/fabfile.py |   75 +
 .../scripts/configure_http_proxy.py}               |   36 +-
 .../scripts/configure_nginx_reverse_proxy.py}      |   42 +-
 .../scripts/reupload_ssh_key.py}                   |   44 +-
 .../templates/conf.d/proxy.conf}                   |   22 +-
 .../templates/locations/dataengine-service.conf    |   77 +
 .../templates/locations/jupyter.conf}              |   25 +-
 .../templates/locations/rstudio.conf}              |   24 +-
 .../src/project/templates/locations/spark.conf     |  123 +
 .../templates/locations/tensor.conf}               |   27 +-
 .../templates/locations/ungit.conf}                |   25 +-
 .../templates/locations/zeppelin.conf}             |   24 +-
 .../src/{edge => project}/templates/nginx.conf     |    9 +-
 .../src/project/templates/nginx_debian             |  216 +
 .../src/project/templates/nginx_redhat             |  128 +
 .../src/project/templates/squid.conf               |   62 +
 infrastructure-provisioning/src/rstudio/fabfile.py |   16 +
 .../src/rstudio/scripts/configure_rstudio_node.py  |   10 +-
 .../src/ssn/files/aws/mongo_roles.json             |    4 +-
 .../src/ssn/files/azure/mongo_roles.json           |    4 +-
 .../src/ssn/files/gcp/mongo_roles.json             |   36 +-
 .../src/ssn/scripts/configure_billing.py           |    5 +-
 .../src/ssn/scripts/configure_docker.py            |   44 +
 .../src/ssn/scripts/configure_ssn_node.py          |   14 +-
 .../src/ssn/scripts/configure_ui.py                |    3 +-
 .../src/ssn/templates/docker_build.py              |   73 +
 .../src/ssn/templates/nginx_proxy.conf             |    3 +-
 .../src/ssn/templates/ssn_nginx.conf               |    1 +
 .../src/tensor-rstudio/fabfile.py                  |   16 +
 .../scripts/configure_tensor-rstudio_node.py       |    8 +-
 infrastructure-provisioning/src/tensor/fabfile.py  |   38 +-
 .../src/tensor/scripts/configure_tensor_node.py    |    8 +-
 .../src/zeppelin/fabfile.py                        |   16 +
 .../zeppelin/scripts/configure_zeppelin_node.py    |    8 +-
 integration-tests-cucumber/pom.xml                 |  114 +
 .../main/java/org/apache/dlab/dto/EndpointDTO.java |   19 +
 .../java/org/apache/dlab/mongo/MongoDBHelper.java  |   14 +
 .../java/org/apache/dlab/util/JacksonMapper.java   |   16 +
 .../java/org/apache/dlab/util/PropertyHelper.java  |   23 +
 .../src/test/java/dlab/Constants.java              |    5 +
 .../src/test/java/dlab/RunCucumberTest.java        |   10 +
 .../src/test/java/dlab/endpoint/EndpointSteps.java |   97 +
 .../src/test/java/dlab/login/LoginSteps.java       |   44 +
 .../src/test/resources/config.properties           |    2 +
 .../src/test/resources/dlab/endpoint.feature       |   57 +
 .../src/test/resources/dlab/login.feature          |   12 +
 .../deeplearning/deeplearning-notebook.json        |    4 +-
 .../azure_templates/jupyter/jupyter-notebook.json  |    4 +-
 .../azure_templates/rstudio/rstudio-notebook.json  |    4 +-
 .../examples/ec2_templates/deeplearning/EMR.json   |    2 +-
 .../ec2_templates/deeplearning/EMR_spot.json       |    2 +-
 .../deeplearning/deeplearning-notebook.json        |    4 +-
 .../examples/ec2_templates/jupyter/EMR.json        |    2 +-
 .../examples/ec2_templates/jupyter/EMR_spot.json   |    2 +-
 .../ec2_templates/jupyter/jupyter-notebook.json    |    4 +-
 .../examples/ec2_templates/rstudio/EMR.json        |    2 +-
 .../examples/ec2_templates/rstudio/EMR_spot.json   |    2 +-
 .../ec2_templates/rstudio/rstudio-notebook.json    |    4 +-
 .../examples/ec2_templates/tensor/EMR.json         |    2 +-
 .../examples/ec2_templates/tensor/EMR_spot.json    |    2 +-
 .../examples/ec2_templates/zeppelin/EMR.json       |    2 +-
 .../examples/ec2_templates/zeppelin/EMR_spot.json  |    2 +-
 .../gcp_templates/deeplearning/dataproc.json       |    6 +-
 .../examples/gcp_templates/jupyter/dataproc.json   |    6 +-
 .../examples/gcp_templates/rstudio/dataproc.json   |    6 +-
 .../examples/gcp_templates/tensor/dataproc.json    |    6 +-
 .../examples/gcp_templates/zeppelin/dataproc.json  |    6 +-
 .../epam/dlab/automation/test/TestServices.java    |    4 +-
 pom.xml                                            |   12 +-
 services/billing-aws/billing.yml                   |    2 +-
 .../com/epam/dlab/module/aws/AdapterS3File.java    |   93 +-
 .../java/com/epam/dlab/module/aws/S3FileList.java  |    2 +-
 .../com/epam/dlab/mongo/DlabResourceTypeDAO.java   |   79 +-
 .../java/com/epam/dlab/mongo/MongoConstants.java   |   42 +-
 .../java/com/epam/dlab/mongo/ResourceItem.java     |   98 +-
 .../java/com/epam/dlab/mongo/ResourceItemList.java |   90 +-
 .../dlab/core/parser/ParserStatisticsTest.java     |   64 -
 .../com/epam/dlab/module/aws/S3FileListTest.java   |   18 +-
 .../com/epam/dlab/mongo/ResourceItemListTest.java  |    4 +-
 .../azure/AzureBillableResourcesService.java       |    4 +-
 .../epam/dlab/auth/conf/GcpLoginConfiguration.java |    2 +-
 services/dlab-auth-common/pom.xml                  |   56 -
 .../epam/dlab/dto/InfrastructureMetaInfoDTO.java}  |   24 +-
 .../java/com/epam/dlab/dto/SchedulerJobDTO.java    |    7 +
 .../java/com/epam/dlab/dto/UserInstanceDTO.java    |   26 +-
 .../computational/AwsComputationalResource.java    |    5 +-
 .../SparkComputationalCreateAzure.java             |    8 -
 .../exploratory/ExploratoryActionStartAzure.java   |   76 +-
 .../azure/exploratory/ExploratoryCreateAzure.java  |   16 -
 .../com/epam/dlab/dto/base/DataEngineType.java     |   54 +-
 .../dto/base/computational/ComputationalBase.java  |   29 +
 .../java/com/epam/dlab/dto/base/edge/EdgeInfo.java |   32 +-
 .../epam/dlab/dto/base/project/ProjectResult.java  |   16 +
 .../computational/CheckInactivityStatusDTO.java    |   30 +-
 ...O.java => ComputationalCheckInactivityDTO.java} |   39 +-
 .../ComputationalClusterConfigDTO.java             |   12 +-
 .../SparkStandaloneClusterResource.java            |    5 +-
 .../computational/UserComputationalResource.java   |    5 +-
 .../dlab/dto/exploratory/ExploratoryBaseDTO.java   |   71 +-
 .../ExploratoryCheckInactivityAction.java}         |   10 +-
 .../dlab/dto/exploratory/ExploratoryCreateDTO.java |   23 +
 .../dlab/dto/exploratory/ExploratoryImageDTO.java  |   17 +
 ...xploratoryReconfigureSparkClusterActionDTO.java |   19 +-
 .../dlab/dto/exploratory/ExploratoryStatusDTO.java |   12 +
 .../computational/GcpComputationalResource.java    |    6 +-
 .../ComputationalResourceShapeDto.java             |  198 +-
 .../epam/dlab/dto/project/ProjectActionDTO.java    |   15 +
 .../epam/dlab/dto/project/ProjectCreateDTO.java    |   18 +
 .../java/com/epam/dlab/dto/status/EnvResource.java |    5 +-
 .../epam/dlab/model/exploratory/Exploratory.java   |    3 +
 services/dlab-process/pom.xml                      |   60 -
 .../com/epam/dlab/process/ProcessConveyorTest.java |  225 -
 .../java/com/epam/dlab/util/AnnotationUtils.java   |   61 -
 .../main/java/com/epam/dlab/util/ObjectUtils.java  |   49 -
 services/dlab-webapp-common/pom.xml                |   18 +-
 .../com/epam/dlab/auth/SecurityAuthorizer.java     |    0
 .../dlab/auth/SecurityUnauthorizedHandler.java     |    0
 .../src/main/java/com/epam/dlab/auth/UserInfo.java |    6 +-
 .../main/java/com/epam/dlab/auth/UserInfoDAO.java  |   10 +-
 .../epam/dlab/auth/UserVerificationService.java    |    2 +-
 .../com/epam/dlab/auth/contract/SecurityAPI.java   |    0
 .../com/epam/dlab/auth/dto/UserCredentialDTO.java  |    1 -
 .../auth/oauth2/Oauth2AuthenticationService.java   |    0
 .../auth/rest/AbstractAuthenticationService.java   |    0
 .../epam/dlab/auth/rest/ConfigurableResource.java  |    0
 .../auth/rest/UserSessionDurationAuthorizer.java   |    0
 .../auth/rest/UserSessionDurationCallback.java     |    0
 .../com/epam/dlab/rest/client/RESTService.java     |    0
 .../epam/dlab/rest/client/RESTServiceFactory.java  |    0
 .../com/epam/dlab/rest/contracts/ApiCallbacks.java |    4 +-
 .../dlab/rest/contracts/InfrasctructureAPI.java    |    3 +-
 .../java/com/epam/dlab/rest/contracts/KeyAPI.java  |    3 +-
 .../rest/mappers/ValidationExceptionMapper.java    |    2 +-
 services/provisioning-service/pom.xml              |   10 +-
 services/provisioning-service/provisioning.yml     |    2 +-
 .../backendapi/ProvisioningServiceApplication.java |    1 +
 .../epam/dlab/backendapi/core/DockerWarmuper.java  |    2 +-
 .../core/commands/CommandExecutorMockAsync.java    |    4 +-
 .../backendapi/core/commands/DockerCommands.java   |    1 +
 .../backendapi/core/commands/RunDockerCommand.java |    8 +-
 .../handlers/CheckInactivityCallbackHandler.java   |   94 +-
 .../response/handlers/ProjectCallbackHandler.java  |   50 +
 .../dlab/backendapi/modules/ProductionModule.java  |    6 +
 .../backendapi/modules/ProvisioningDevModule.java  |   22 +-
 .../resources/InfrastructureResource.java          |   19 +-
 .../dlab/backendapi/resources/ProjectResource.java |   57 +
 .../backendapi/resources/base/KeyResource.java     |   23 +-
 .../service/CheckInactivityService.java}           |   14 +-
 .../dlab/backendapi/service/ProjectService.java    |   16 +
 .../service/impl/CheckInactivityService.java       |  103 -
 .../service/impl/CheckInactivityServiceImpl.java   |  114 +
 .../backendapi/service/impl/DockerService.java     |    3 +
 .../{ReuploadKeyService.java => KeyService.java}   |   29 +-
 .../service/impl/ProjectServiceImpl.java           |  100 +
 .../com/epam/dlab/process/ProcessConveyor.java     |    6 +-
 .../dlab/process/builder/ProcessInfoBuilder.java   |    0
 .../process/exception/DlabProcessException.java    |    0
 .../com/epam/dlab/process/model/DlabProcess.java   |    0
 .../com/epam/dlab/process/model/ProcessId.java     |    0
 .../com/epam/dlab/process/model/ProcessInfo.java   |    0
 .../com/epam/dlab/process/model/ProcessStatus.java |    0
 .../com/epam/dlab/process/model/ProcessStep.java   |    0
 .../aws/dataengine-service_check_inactivity.json   |    8 +
 .../aws/dataengine_check_inactivity.json           |    8 +
 .../resources/mock_response/aws/edge_create.json   |   75 +-
 .../aws/notebook_check_inactivity.json             |   16 +-
 .../mock_response/aws/project_create.json          |   57 +
 .../mock_response/aws/project_terminate.json       |   12 +
 .../azure/dataengine-service_check_inactivity.json |    8 +
 .../azure/dataengine_check_inactivity.json         |    8 +
 .../azure/notebook_check_inactivity.json           |   22 +-
 .../mock_response/azure/project_create.json        |   57 +
 .../mock_response/azure/project_terminate.json     |   12 +
 .../gcp/dataengine-service_check_inactivity.json   |    8 +
 .../gcp/dataengine_check_inactivity.json           |    8 +
 .../gcp/notebook_check_inactivity.json             |   22 +-
 .../mock_response/gcp/notebook_create.json         |    1 +
 .../mock_response/gcp/project_create.json          |   57 +
 .../mock_response/gcp/project_terminate.json       |   12 +
 .../dlab/backendapi/core/DockerWarmuperTest.java   |    4 +-
 services/security-aws/pom.xml                      |    7 +-
 .../aws/service/AwsUserVerificationService.java    |   16 +-
 services/security-azure/pom.xml                    |    4 -
 .../auth/azure/AzureAuthenticationResource.java    |   14 +-
 services/security-gcp/pom.xml                      |   15 +-
 .../auth/gcp/service/GcpAuthenticationService.java |    2 +-
 services/security-service/pom.xml                  |    6 +
 services/security-service/security.yml             |  112 +-
 .../dlab/auth/SecurityServiceConfiguration.java    |   39 +-
 .../epam/dlab/auth/core/CacheableReference.java    |   56 -
 .../epam/dlab/auth/core/DlabLdapConnection.java    |    2 +-
 .../dlab/auth/core/DlabLdapConnectionFactory.java  |   49 +
 .../com/epam/dlab/auth/core/LdapFilterCache.java   |   79 -
 .../java/com/epam/dlab/auth/core/LoginCache.java   |   83 -
 .../com/epam/dlab/auth/core/LoginConveyor.java     |   67 -
 .../java/com/epam/dlab/auth/core/LoginStep.java    |   47 -
 .../com/epam/dlab/auth/core/UserInfoBuilder.java   |  197 -
 .../java/com/epam/dlab/auth/dao/LdapUserDAO.java   |  189 +-
 .../com/epam/dlab/auth/dao/LdapUserDAOImpl.java    |  165 +
 .../main/java/com/epam/dlab/auth/dao/Request.java  |   92 +-
 .../epam/dlab/auth/dao/UserInfoDAODumbImpl.java    |    6 +-
 .../epam/dlab/auth/dao/UserInfoDAOMongoImpl.java   |   85 +-
 .../dlab/auth/dao/filter/SearchResultMapper.java   |   31 -
 .../auth/dao/filter/SearchResultProcessor.java     |   68 -
 .../com/epam/dlab/auth/dao/script/DeepMap.java     |   57 -
 .../epam/dlab/auth/dao/script/ScriptHolder.java    |   59 -
 .../dao/script/SearchResultToDictionaryMapper.java |   98 -
 .../auth/modules/AwsSecurityServiceModule.java     |    4 +-
 .../auth/modules/AzureSecurityServiceModule.java   |    4 +-
 .../auth/modules/GcpSecurityServiceModule.java     |    8 +-
 .../dlab/auth/modules/SecurityServiceModule.java   |   13 +-
 .../SynchronousLdapAuthenticationResource.java     |   80 +
 .../SynchronousLdapAuthenticationService.java      |  186 -
 .../dlab/auth/service/AuthenticationService.java}  |   15 +-
 .../service/impl/LdapAuthenticationService.java    |   89 +
 .../test/java/com/epam/dlab/auth/aws/AwsTest.java  |   78 -
 .../com/epam/dlab/auth/core/LoginConveyorTest.java |  131 -
 .../dlab/auth/dao/script/ScriptHolderTest.java     |   65 -
 .../java/com/epam/dlab/auth/ldap/BasicTest.java    |  116 -
 .../java/com/epam/dlab/auth/ldap/JsonTest.java     |   84 -
 .../java/com/epam/dlab/auth/ldap/ScriptList.java   |   76 -
 .../impl/LdapAuthenticationServiceTest.java        |  139 +
 services/self-service/pom.xml                      |   30 +-
 services/self-service/self-service.yml             |   17 +-
 .../dlab/backendapi/SelfServiceApplication.java    |   68 +-
 .../SelfServiceApplicationConfiguration.java       |   16 +
 .../epam/dlab/backendapi/annotation/Project.java   |   12 +
 .../auth/SelfServiceSecurityAuthorizer.java        |    2 +-
 .../epam/dlab/backendapi/dao/BaseBillingDAO.java   |  843 +-
 .../java/com/epam/dlab/backendapi/dao/BaseDAO.java |    4 +-
 .../com/epam/dlab/backendapi/dao/BillingDAO.java   |    5 +
 .../epam/dlab/backendapi/dao/ComputationalDAO.java |   14 +-
 .../com/epam/dlab/backendapi/dao/EndpointDAO.java  |   15 +
 .../epam/dlab/backendapi/dao/EndpointDAOImpl.java  |   38 +
 .../java/com/epam/dlab/backendapi/dao/EnvDAO.java  |   68 +-
 .../epam/dlab/backendapi/dao/ExploratoryDAO.java   |   63 +-
 .../backendapi/dao/ImageExploratoryDaoImpl.java    |    2 +-
 .../com/epam/dlab/backendapi/dao/ProjectDAO.java   |   36 +
 .../epam/dlab/backendapi/dao/ProjectDAOImpl.java   |  110 +
 .../epam/dlab/backendapi/dao/SchedulerJobDAO.java  |   66 +-
 .../com/epam/dlab/backendapi/dao/UserGroupDao.java |    2 +
 .../epam/dlab/backendapi/dao/UserGroupDaoImpl.java |    9 +
 .../dlab/backendapi/dao/aws/AwsBillingDAO.java     |    9 +
 .../epam/dlab/backendapi/domain/EndpointDTO.java   |   16 +
 .../epam/dlab/backendapi/domain/ProjectDTO.java    |   83 +
 .../backendapi/domain/UpdateProjectBudgetDTO.java  |   15 +
 .../dlab/backendapi/domain/UpdateProjectDTO.java   |   19 +
 .../interceptor/BudgetLimitInterceptor.java        |   17 +-
 .../epam/dlab/backendapi/modules/DevModule.java    |   36 +-
 .../dlab/backendapi/modules/ProductionModule.java  |    6 +
 .../backendapi/resources/EndpointResource.java     |  108 +
 .../backendapi/resources/ExploratoryResource.java  |   12 +-
 .../resources/InfrastructureInfoResource.java      |   16 +-
 .../resources/InfrastructureTemplateResource.java  |   19 +-
 .../dlab/backendapi/resources/ProjectResource.java |  217 +
 .../resources/aws/ComputationalResourceAws.java    |   38 +-
 .../azure/ComputationalResourceAzure.java          |   14 +-
 .../callback/CheckInactivityCallback.java          |   40 +-
 .../resources/callback/ComputationalCallback.java  |   45 +-
 .../resources/callback/ExploratoryCallback.java    |    3 +-
 .../resources/callback/ProjectCallback.java        |   57 +
 .../callback/base/KeyUploaderCallback.java         |    5 +-
 .../backendapi/resources/dto/BillingFilter.java    |   19 +
 .../resources/dto/ComputationalCreateFormDTO.java  |    6 +
 .../resources/dto/ExploratoryCreateFormDTO.java    |   30 +
 .../resources/dto/HealthStatusPageDTO.java         |   11 +
 .../resources/dto/ProjectActionFormDTO.java        |   10 +
 ...ureInfo.java => ProjectInfrastructureInfo.java} |   14 +-
 .../backendapi/resources/dto/UserResourceInfo.java |   15 +
 .../resources/gcp/ComputationalResourceGcp.java    |   18 +-
 .../com/epam/dlab/backendapi/roles/UserGroup.java  |   31 -
 .../com/epam/dlab/backendapi/roles/UserRoles.java  |   33 +-
 .../schedulers/CheckInactivityScheduledJob.java    |   12 +-
 ...nalJob.java => CheckProjectQuoteScheduler.java} |   30 +-
 .../computational/StopComputationalJob.java        |    2 -
 ...onalJob.java => TerminateComputationalJob.java} |   19 +-
 .../backendapi/service/ComputationalService.java   |    6 +-
 .../epam/dlab/backendapi/service/EdgeService.java  |    2 +
 .../dlab/backendapi/service/EndpointService.java   |   14 +
 .../backendapi/service/EnvironmentService.java     |    2 +
 .../backendapi/service/ExploratoryService.java     |    5 +-
 .../dlab/backendapi/service/GuacamoleService.java  |   10 +
 .../dlab/backendapi/service/InactivityService.java |   14 +-
 .../service/InfrastructureInfoService.java         |   12 +-
 .../service/InfrastructureTemplateService.java     |    4 +-
 .../dlab/backendapi/service/ProjectService.java    |   33 +
 .../backendapi/service/SchedulerJobService.java    |    5 -
 .../epam/dlab/backendapi/service/TagService.java   |    9 +
 .../dlab/backendapi/service/TagServiceImpl.java    |   23 +
 .../service/impl/ComputationalServiceImpl.java     |   38 +-
 .../backendapi/service/impl/EdgeServiceImpl.java   |    8 +
 .../service/impl/EndpointServiceImpl.java          |   44 +
 .../service/impl/EnvironmentServiceImpl.java       |   65 +-
 .../service/impl/ExploratoryServiceImpl.java       |   28 +-
 .../service/impl/GuacamoleServiceImpl.java         |   61 +
 .../service/impl/InactivityServiceImpl.java        |   94 +-
 .../impl/InfrastructureInfoServiceBase.java        |   44 +-
 .../impl/InfrastructureTemplateServiceBase.java    |   35 +-
 .../service/impl/MavenCentralLibraryService.java   |    6 +-
 .../service/impl/ProjectServiceImpl.java           |  168 +
 .../service/impl/SchedulerJobServiceImpl.java      |  127 +-
 .../servlet/guacamole/GuacamoleSecurityFilter.java |   56 +
 .../servlet/guacamole/GuacamoleServlet.java        |   32 +
 .../epam/dlab/backendapi/util/RequestBuilder.java  |  125 +-
 .../validation/SchedulerJobDTOValidator.java       |    2 +-
 .../annotation/SchedulerJobDTOValid.java           |    2 +-
 .../src/main/resources/webapp/angular.json         |   39 +-
 .../src/main/resources/webapp/package-lock.json    | 8350 ++++++++------------
 .../src/main/resources/webapp/package.json         |   31 +-
 .../app/access-denied/access-denied.component.scss |    5 -
 .../administration.module.ts}                      |   15 +-
 .../backup-dilog/backup-dilog.component.html       |   17 +-
 .../backup-dilog/backup-dilog.component.scss       |    0
 .../backup-dilog/backup-dilog.component.ts         |   55 +-
 .../management/endpoints/endpoints.component.html  |  139 +
 .../management/endpoints/endpoints.component.scss  |   71 +
 .../management/endpoints/endpoints.component.ts    |   92 +
 .../app/{ => administration}/management/index.ts   |   56 +-
 .../manage-environment-dilog.component.html        |   95 +
 .../manage-environment-dilog.component.scss        |   24 +-
 .../manage-environment-dilog.component.ts          |   66 +-
 .../management/management-data.service.ts}         |   25 +-
 .../management-grid/management-grid.component.html |  130 +
 .../management-grid/management-grid.component.scss |   16 +
 .../management-grid/management-grid.component.ts   |  104 +-
 .../management/management.component.html           |   51 +-
 .../management/management.component.scss           |    0
 .../management/management.component.ts             |  174 +
 .../management/management.model.ts                 |   27 +-
 .../ssn-monitor/ssn-monitor.component.html         |   53 +-
 .../ssn-monitor/ssn-monitor.component.scss         |    1 +
 .../ssn-monitor/ssn-monitor.component.ts           |   33 +-
 .../scheduler => administration/project}/index.ts  |   25 +-
 .../project/project-data.service.ts}               |   26 +-
 .../project-form/project-form.component.html       |  170 +
 .../project-form/project-form.component.scss}      |   79 +-
 .../project/project-form/project-form.component.ts |  185 +
 .../project-list/project-list.component.html       |   83 +
 .../project-list/project-list.component.scss}      |   50 +-
 .../project/project-list/project-list.component.ts |   72 +
 .../project/project.component.html}                |   35 +-
 .../administration/project/project.component.ts    |  145 +
 .../roles}/group-name-validarion.directive.ts      |    0
 .../scheduler => administration/roles}/index.ts    |   20 +-
 .../app/administration/roles/roles.component.html  |  173 +
 .../roles/roles.component.scss}                    |  109 +-
 .../app/administration/roles/roles.component.ts    |  244 +
 .../resources/webapp/src/app/app.component.html    |    1 -
 .../main/resources/webapp/src/app/app.module.ts    |   27 +-
 .../resources/webapp/src/app/app.routing.module.ts |   95 +-
 .../resources/webapp/src/app/core/core.module.ts   |   15 +-
 .../models/computationalResourceImage.model.ts     |    6 +-
 .../{cloudProvider.guard.ts => admin.quard.ts}     |    4 +-
 .../core/services/applicationSecurity.service.ts   |   10 +-
 .../services/applicationServiceFacade.service.ts   |  184 +-
 .../src/app/core/services/authorization.guard.ts   |   15 +-
 .../src/app/core/services/checkParams.guard.ts     |   21 +-
 .../src/app/core/services/cloudProvider.guard.ts   |    2 +-
 .../services/dataengineConfiguration.service.ts    |    2 +-
 .../{scheduler.service.ts => endpoint.service.ts}  |   33 +-
 .../src/app/core/services/healthStatus.service.ts  |   74 +-
 .../webapp/src/app/core/services/index.ts          |    3 +
 ...Configuration.service.ts => project.service.ts} |   53 +-
 .../src/app/core/services/scheduler.service.ts     |    3 +-
 .../src/app/core/services/userAccessKey.service.ts |    6 +
 .../src/app/core/services/userResource.service.ts  |   14 +-
 .../webapp/src/app/core/util/checkUtils.ts         |   17 +
 .../resources/webapp/src/app/core/util/index.ts    |    3 +-
 .../webapp/src/app/core/util/patterns.ts}          |   21 +-
 .../app/core/util/{sortUtil.ts => sortUtils.ts}    |    2 +-
 .../webapp/src/app/layout/layout.component.html}   |   24 +-
 .../webapp/src/app/layout/layout.component.ts}     |   16 +-
 .../index.ts => layout/layout.module.ts}           |   15 +-
 .../webapp/src/app/login/login.component.css       |    1 +
 .../webapp/src/app/login/login.component.ts        |   10 +-
 .../manage-environment-dilog.component.html        |   73 -
 .../manage-roles-groups.component.html             |  155 -
 .../manage-roles-groups.component.ts               |  190 -
 .../management-grid/management-grid.component.html |  158 -
 .../src/app/management/management.component.ts     |  270 -
 .../reporting-grid/reporting-grid.component.html   |  188 +-
 .../reporting-grid/reporting-grid.component.scss   |   62 +-
 .../reporting-grid/reporting-grid.component.ts     |   36 +-
 .../src/app/reporting/reporting.component.ts       |   56 +-
 .../webapp/src/app/reporting/reporting.module.ts   |    6 -
 .../app/reporting/toolbar/toolbar.component.css    |    1 -
 .../app/reporting/toolbar/toolbar.component.html   |    3 +-
 .../cluster-details/cluster-details.component.html |  122 +-
 .../cluster-details/cluster-details.component.scss |   10 +
 .../cluster-details/cluster-details.component.ts   |   35 +-
 .../computational/cluster-details/index.ts         |    4 +-
 ...utational-resource-create-dialog.component.html |  253 +-
 ...utational-resource-create-dialog.component.scss |   23 +-
 ...mputational-resource-create-dialog.component.ts |  293 +-
 .../computational-resource-create.model.ts         |  208 +-
 .../computational-resource-create-dialog/index.ts  |    8 +-
 .../computational-resources-list.component.html    |   72 +-
 .../computational-resources-list.component.scss    |   18 +-
 .../computational-resources-list.component.ts      |   55 +-
 .../computational-resources-list/index.ts          |    2 -
 .../ami-create-dialog.component.html               |   17 +-
 .../ami-create-dialog.component.ts                 |   28 +-
 .../exploratory/ami-create-dialog/index.ts         |    3 +-
 .../cost-details-dialog.component.html             |   12 +-
 .../cost-details-dialog.component.scss             |    0
 .../cost-details-dialog.component.ts               |   26 +-
 .../cost-details-dialog/index.ts                   |    4 +-
 .../create-environment.component.html              |  180 +
 .../create-environment.component.scss              |   20 +
 .../create-environment.component.ts                |  142 +
 .../index.ts                                       |   18 +-
 .../detail-dialog/detail-dialog.component.html     |   84 +-
 .../detail-dialog/detail-dialog.component.ts       |   39 +-
 .../resources/exploratory/detail-dialog/index.ts   |    4 +-
 ...ratory-environment-create-dialog.component.html |   93 -
 ...loratory-environment-create-dialog.component.ts |  195 -
 .../exploratory-environment-create.model.ts        |  157 -
 .../exploratory/install-libraries/index.ts         |    6 +-
 .../install-libraries.component.html               |   20 +-
 .../install-libraries.component.scss               |   89 +-
 .../install-libraries.component.ts                 |  140 +-
 .../manage-ungit/manage-ungit.component.html       |   56 +-
 .../manage-ungit/manage-ungit.component.scss       |   28 +-
 .../manage-ungit/manage-ungit.component.ts         |   48 +-
 .../resources-grid/create-resource.model.ts        |   25 -
 .../src/app/resources/resources-grid/index.ts      |    8 +-
 .../resources-grid/resources-grid.component.html   |  551 +-
 ...component.css => resources-grid.component.scss} |  171 +-
 .../resources-grid/resources-grid.component.ts     |  300 +-
 .../resources-grid/resources-grid.model.ts         |   56 +-
 .../src/app/resources/resources.component.html     |   57 +-
 .../src/app/resources/resources.component.scss     |    8 -
 .../src/app/resources/resources.component.ts       |   58 +-
 .../webapp/src/app/resources/resources.module.ts   |   14 +-
 .../webapp/src/app/resources/scheduler/index.ts    |    4 +-
 .../scheduler/scheduler.calculations.ts}           |   28 +-
 .../resources/scheduler/scheduler.component.html   |  234 +-
 .../resources/scheduler/scheduler.component.scss   |  122 +-
 .../app/resources/scheduler/scheduler.component.ts |  283 +-
 .../src/app/resources/scheduler/scheduler.model.ts |   25 +-
 .../webapp/src/app/shared/bubble/bubble.service.ts |    2 +-
 .../shared/form-controls/dropdowns.component.scss  |   43 +-
 .../main/resources/webapp/src/app/shared/index.ts  |    1 -
 .../confirmation-dialog.component.html             |   26 +-
 .../confirmation-dialog.component.ts               |   52 +-
 .../confirmation-dialog.model.ts                   |   10 +-
 .../modal-dialog/confirmation-dialog/index.ts      |    4 +-
 .../webapp/src/app/shared/modal-dialog/index.ts    |   61 -
 .../shared/modal-dialog/key-upload-dialog/index.ts |    4 +-
 .../key-upload-dialog.component.html               |   13 +-
 .../key-upload-dialog.component.ts                 |   40 +-
 .../app/shared/modal-dialog/modal.component.html   |   41 -
 .../app/shared/modal-dialog/modal.component.scss   |  416 -
 .../src/app/shared/modal-dialog/modal.component.ts |  111 -
 .../modal-dialog/notification-dialog/index.ts      |    3 +-
 .../notification-dialog.component.ts               |   63 +-
 .../shared/modal-dialog/progress-dialog/index.ts   |    5 +-
 .../progress-dialog/progress-dialog.component.html |   13 +-
 .../progress-dialog/progress-dialog.component.ts   |   18 +-
 .../webapp/src/app/shared/navbar/index.ts          |    6 +-
 .../src/app/shared/navbar/navbar.component.html    |   86 +-
 .../src/app/shared/navbar/navbar.component.scss    |  100 +-
 .../src/app/shared/navbar/navbar.component.ts      |  125 +-
 .../shared/time-picker/time-picker.component.scss  |   53 +-
 .../ami-create-dialog => webterminal}/index.ts     |   18 +-
 .../webterminal.component.html}                    |    5 +-
 .../webterminal.component.scss}                    |   19 +-
 .../src/app/webterminal/webterminal.component.ts   |   75 +
 .../webapp/src/assets/styles/_dialogs.scss         |  295 +
 .../webapp/src/assets/styles/_general.scss         |   34 +-
 .../resources/webapp/src/assets/styles/_reset.scss |   32 +-
 .../resources/webapp/src/assets/styles/_theme.scss |  393 +-
 .../webapp/src/assets/styles/_variables.scss}      |   11 +-
 .../webapp/src/dictionary/aws.dictionary.ts        |    4 +-
 .../webapp/src/dictionary/azure.dictionary.ts      |    4 +-
 .../webapp/src/dictionary/gcp.dictionary.ts        |  176 +-
 .../src/main/resources/webapp/src/styles.scss      |   96 +-
 .../main/resources/webapp/src/tsconfig.spec.json   |   20 +
 .../src/main/resources/webapp/tslint.json          |    1 -
 .../resources/ExploratoryResourceTest.java         |   23 +-
 .../resources/InfrastructureInfoResourceTest.java  |   69 +-
 .../InfrastructureTemplateResourceTest.java        |   36 +-
 .../epam/dlab/backendapi/roles/UserRolesTest.java  |   16 +-
 .../service/impl/ComputationalServiceImplTest.java |   67 +-
 .../service/impl/EnvironmentServiceImplTest.java   |  116 +-
 .../service/impl/ExploratoryServiceImplTest.java   |   28 +-
 .../service/impl/InactivityServiceImplTest.java    |  187 -
 .../impl/InfrastructureInfoServiceBaseTest.java    |  150 -
 .../InfrastructureTemplateServiceBaseTest.java     |   27 +-
 .../impl/MavenCentralLibraryServiceTest.java       |    3 +-
 .../service/impl/ReuploadKeyServiceImplTest.java   |   10 +-
 .../service/impl/SchedulerJobServiceImplTest.java  |  111 +-
 .../dlab/backendapi/util/RequestBuilderTest.java   |   16 +-
 727 files changed, 22131 insertions(+), 17936 deletions(-)

diff --cc pom.xml
index d28fce0,378593f..c7adf07
--- a/pom.xml
+++ b/pom.xml
@@@ -59,12 -47,15 +59,9 @@@
  
      <modules>
          <module>services/common</module>
 -        <module>services/billing-aws</module>
          <module>services/provisioning-service</module>
          <module>services/self-service</module>
 -        <module>services/billing-azure</module>
 -        <module>services/billing-gcp</module>
 -        <module>services/security-azure</module>
 -        <module>services/security-gcp</module>
 -        <module>services/security-aws</module>
          <module>services/security-service</module>
-         <module>services/dlab-process</module>
-         <module>services/dlab-auth-common</module>
-         <module>services/dlab-rest-client</module>
          <module>services/dlab-model</module>
          <module>services/dlab-utils</module>
          <module>services/dlab-webapp-common</module>
diff --cc services/self-service/src/main/java/com/epam/dlab/backendapi/dao/BaseBillingDAO.java
index f495f4f,944aad8..2eeb966
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/BaseBillingDAO.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/BaseBillingDAO.java
@@@ -62,412 -52,261 +62,439 @@@ import static java.util.Collections.sin
  @Slf4j
  public abstract class BaseBillingDAO<T extends BillingFilter> extends BaseDAO implements BillingDAO<T> {
  
-     public static final String SHAPE = "shape";
-     public static final String SERVICE_BASE_NAME = "service_base_name";
-     public static final String ITEMS = "lines";
-     public static final String COST_TOTAL = "cost_total";
-     public static final String FULL_REPORT = "full_report";
- 
-     private static final String MASTER_NODE_SHAPE = "master_node_shape";
-     private static final String SLAVE_NODE_SHAPE = "slave_node_shape";
-     private static final String TOTAL_INSTANCE_NUMBER = "total_instance_number";
- 
-     private static final String DATAENGINE_SHAPE = "dataengine_instance_shape";
-     private static final String DATAENGINE_INSTANCE_COUNT = "dataengine_instance_count";
- 
-     private static final String DATAENGINE_DOCKER_IMAGE = "image";
-     private static final int ONE_HUNDRED = 100;
-     private static final String TOTAL_FIELD_NAME = "total";
-     private static final String COST_FIELD = "$cost";
-     public static final String SHARED_RESOURCE_NAME = "Shared resource";
- 
-     @Inject
-     protected SettingsDAO settings;
-     @Inject
-     private UserSettingsDAO userSettingsDAO;
- 
-     @Override
-     public Document getReport(UserInfo userInfo, T filter) {
-         boolean isFullReport = UserRoles.checkAccess(userInfo, RoleType.PAGE, "/api/infrastructure_provision/billing");
-         setUserFilter(userInfo, filter, isFullReport);
-         List<Bson> matchCriteria = matchCriteria(filter);
-         List<Bson> pipeline = new ArrayList<>();
-         if (!matchCriteria.isEmpty()) {
-             pipeline.add(Aggregates.match(Filters.and(matchCriteria)));
-         }
-         pipeline.add(groupCriteria());
-         pipeline.add(sortCriteria());
-         final Map<String, ShapeInfo> shapes = getShapes(filter.getShapes());
-         return prepareReport(filter.getStatuses(), !filter.getShapes().isEmpty(), getCollection(BILLING).aggregate(pipeline), shapes, isFullReport); //TODO add shapes
-     }
- 
-     private Document prepareReport(List<UserInstanceStatus> statuses, boolean filterByShape,
-                                    AggregateIterable<Document> agg,
-                                    Map<String, ShapeInfo> shapes, boolean fullReport) {
- 
-         List<Document> reportItems = new ArrayList<>();
- 
-         String usageDateStart = null;
-         String usageDateEnd = null;
-         double costTotal = 0D;
- 
-         for (Document d : agg) {
-             Document id = (Document) d.get(MongoKeyWords.MONGO_ID);
-             String resourceId = id.getString(dlabIdFieldName());
-             ShapeInfo shape = shapes.get(resourceId);
-             final UserInstanceStatus status = Optional.ofNullable(shape).map(ShapeInfo::getStatus).orElse(null);
-             if ((filterByShape && shape == null) ||
-                     (!statuses.isEmpty() && statuses.stream().noneMatch(s -> s.equals(status)))) {
-                 continue;
-             }
- 
- 
-             String dateStart = d.getString(MongoKeyWords.USAGE_FROM);
-             if (StringUtils.compare(usageDateStart, dateStart, false) > 0) {
-                 usageDateStart = dateStart;
-             }
-             String dateEnd = d.getString(MongoKeyWords.USAGE_TO);
-             if (StringUtils.compare(usageDateEnd, dateEnd) < 0) {
-                 usageDateEnd = dateEnd;
-             }
- 
- 
-             costTotal += d.getDouble(MongoKeyWords.COST);
- 
-             final String statusString = Optional
-                     .ofNullable(status)
-                     .map(UserInstanceStatus::toString)
-                     .orElse(StringUtils.EMPTY);
-             Document item = new Document()
-                     .append(MongoKeyWords.DLAB_USER, getUserOrDefault(id.getString(USER)))
-                     .append(dlabIdFieldName(), resourceId)
-                     .append(shapeFieldName(), generateShapeName(shape))
-                     .append("dlab_resource_type", DlabResourceType.getResourceTypeName(id.getString("dlab_resource_type"))) //todo check on azure!!!
-                     .append(STATUS, statusString)
-                     .append(FIELD_RESOURCE_TYPE, resourceType(id))
-                     .append(productFieldName(), id.getString(productFieldName()))
-                     .append(MongoKeyWords.COST, d.getDouble(MongoKeyWords.COST))
-                     .append(costFieldName(), BillingCalculationUtils.formatDouble(d.getDouble(MongoKeyWords
-                             .COST)))
-                     .append(currencyCodeFieldName(), id.getString(currencyCodeFieldName()))
-                     .append(usageDateFromFieldName(), dateStart)
-                     .append(usageDateToFieldName(), dateEnd);
- 
- 
-             reportItems.add(item);
-         }
- 
-         return new Document()
-                 .append(SERVICE_BASE_NAME, settings.getServiceBaseName())
-                 .append(usageDateFromFieldName(), usageDateStart)
-                 .append(usageDateToFieldName(), usageDateEnd)
-                 .append(ITEMS, reportItems)
-                 .append(COST_TOTAL, BillingCalculationUtils.formatDouble(BillingCalculationUtils.round
-                         (costTotal, 2)))
-                 .append(currencyCodeFieldName(), (reportItems.isEmpty() ? null :
-                         reportItems.get(0).getString(currencyCodeFieldName())))
-                 .append(FULL_REPORT, fullReport);
- 
-     }
- 
-     protected String resourceType(Document id) {
-         return id.getString(FIELD_RESOURCE_TYPE);
-     }
- 
-     protected String currencyCodeFieldName() {
-         return "currency_code";
-     }
- 
-     protected String usageDateToFieldName() {
-         return MongoKeyWords.USAGE_TO;
-     }
- 
-     protected String costFieldName() {
-         return MongoKeyWords.COST;
-     }
- 
-     protected String productFieldName() {
-         return ReportLine.FIELD_PRODUCT;
-     }
- 
-     protected String usageDateFromFieldName() {
-         return MongoKeyWords.USAGE_FROM;
-     }
- 
-     protected String dlabIdFieldName() {
-         return ReportLine.FIELD_DLAB_ID;
-     }
- 
-     protected String shapeFieldName() {
-         return SHAPE;
-     }
- 
-     protected abstract Bson sortCriteria();
- 
-     protected abstract Bson groupCriteria();
- 
-     protected Map<String, ShapeInfo> getShapes(List<String> shapeNames) {
-         FindIterable<Document> userInstances = getUserInstances();
-         final Map<String, ShapeInfo> shapes = new HashMap<>();
- 
-         for (Document d : userInstances) {
-             getExploratoryShape(shapeNames, d)
-                     .ifPresent(shapeInfo -> shapes.put(d.getString(EXPLORATORY_ID), shapeInfo));
-             @SuppressWarnings("unchecked")
-             List<Document> comp = (List<Document>) d.get(COMPUTATIONAL_RESOURCES);
-             comp.forEach(computational ->
-                     getComputationalShape(shapeNames, computational)
-                             .ifPresent(shapeInfo -> shapes.put(computational.getString(COMPUTATIONAL_ID), shapeInfo)));
-         }
- 
-         appendSsnAndEdgeNodeType(shapeNames, shapes);
- 
-         log.trace("Loaded shapes is {}", shapes);
-         return shapes;
-     }
- 
-     @Override
-     public Double getTotalCost() {
-         return aggregateBillingData(singletonList(group(null, sum(TOTAL_FIELD_NAME, COST_FIELD))));
-     }
- 
-     @Override
-     public Double getUserCost(String user) {
-         final List<Bson> pipeline = Arrays.asList(match(eq(USER, user)),
-                 group(null, sum(TOTAL_FIELD_NAME, COST_FIELD)));
-         return aggregateBillingData(pipeline);
-     }
- 
-     @Override
-     public int getBillingQuoteUsed() {
-         return toPercentage(() -> settings.getMaxBudget(), getTotalCost());
-     }
- 
-     @Override
-     public int getBillingUserQuoteUsed(String user) {
-         return toPercentage(() -> userSettingsDAO.getAllowedBudget(user), getUserCost(user));
-     }
- 
-     @Override
-     public boolean isBillingQuoteReached() {
-         return getBillingQuoteUsed() >= ONE_HUNDRED;
-     }
- 
-     @Override
-     public boolean isUserQuoteReached(String user) {
-         final Double userCost = getUserCost(user);
-         return userSettingsDAO.getAllowedBudget(user)
-                 .filter(allowedBudget -> userCost.intValue() != 0 && allowedBudget <= userCost)
-                 .isPresent();
-     }
- 
-     protected String getUserOrDefault(String user) {
-         return StringUtils.isNotBlank(user) ? user : SHARED_RESOURCE_NAME;
-     }
- 
-     private Integer toPercentage(Supplier<Optional<Integer>> allowedBudget, Double totalCost) {
-         return allowedBudget.get()
-                 .map(userBudget -> (totalCost * ONE_HUNDRED) / userBudget)
-                 .map(Double::intValue)
-                 .orElse(BigDecimal.ZERO.intValue());
-     }
- 
-     private List<Bson> matchCriteria(BillingFilter filter) {
- 
-         List<Bson> searchCriteria = new ArrayList<>();
- 
-         if (filter.getUser() != null && !filter.getUser().isEmpty()) {
-             searchCriteria.add(Filters.in(MongoKeyWords.DLAB_USER, filter.getUser()));
-         }
- 
-         if (filter.getResourceType() != null && !filter.getResourceType().isEmpty()) {
-             searchCriteria.add(Filters.in("dlab_resource_type",
-                     DlabResourceType.getResourceTypeIds(filter.getResourceType())));
-         }
- 
-         if (filter.getDlabId() != null && !filter.getDlabId().isEmpty()) {
-             searchCriteria.add(regex(dlabIdFieldName(), filter.getDlabId(), "i"));
-         }
- 
-         if (filter.getDateStart() != null && !filter.getDateStart().isEmpty()) {
-             searchCriteria.add(gte(FIELD_USAGE_DATE, filter.getDateStart()));
-         }
-         if (filter.getDateEnd() != null && !filter.getDateEnd().isEmpty()) {
-             searchCriteria.add(lte(FIELD_USAGE_DATE, filter.getDateEnd()));
-         }
- 
-         searchCriteria.addAll(cloudMatchCriteria((T) filter));
-         return searchCriteria;
-     }
- 
-     protected abstract List<Bson> cloudMatchCriteria(T filter);
- 
- 
-     private Optional<ShapeInfo> getComputationalShape(List<String> shapeNames, Document c) {
-         return isDataEngine(c.getString(DATAENGINE_DOCKER_IMAGE)) ? getDataEngineShape(shapeNames, c) :
-                 getDataEngineServiceShape(shapeNames, c);
-     }
- 
-     private Double aggregateBillingData(List<Bson> pipeline) {
-         return Optional.ofNullable(aggregate(BILLING, pipeline).first())
-                 .map(d -> d.getDouble(TOTAL_FIELD_NAME))
-                 .orElse(BigDecimal.ZERO.doubleValue());
-     }
- 
-     private FindIterable<Document> getUserInstances() {
-         return getCollection(USER_INSTANCES)
-                 .find()
-                 .projection(
-                         fields(excludeId(),
-                                 include(SHAPE, EXPLORATORY_ID, STATUS,
-                                         COMPUTATIONAL_RESOURCES + "." + COMPUTATIONAL_ID,
-                                         COMPUTATIONAL_RESOURCES + "." + MASTER_NODE_SHAPE,
-                                         COMPUTATIONAL_RESOURCES + "." + SLAVE_NODE_SHAPE,
-                                         COMPUTATIONAL_RESOURCES + "." + TOTAL_INSTANCE_NUMBER,
-                                         COMPUTATIONAL_RESOURCES + "." + DATAENGINE_SHAPE,
-                                         COMPUTATIONAL_RESOURCES + "." + DATAENGINE_INSTANCE_COUNT,
-                                         COMPUTATIONAL_RESOURCES + "." + DATAENGINE_DOCKER_IMAGE,
-                                         COMPUTATIONAL_RESOURCES + "." + STATUS
-                                 )));
-     }
- 
-     private Optional<ShapeInfo> getExploratoryShape(List<String> shapeNames, Document d) {
-         final String shape = d.getString(SHAPE);
-         if (isShapeAcceptable(shapeNames, shape)) {
-             return Optional.of(new ShapeInfo(shape, UserInstanceStatus.of(d.getString(STATUS))));
-         }
-         return Optional.empty();
-     }
- 
-     private boolean isDataEngine(String dockerImage) {
-         return DataEngineType.fromDockerImageName(dockerImage) == DataEngineType.SPARK_STANDALONE;
-     }
- 
-     private Optional<ShapeInfo> getDataEngineServiceShape(List<String> shapeNames,
-                                                           Document c) {
-         final String desMasterShape = c.getString(MASTER_NODE_SHAPE);
-         final String desSlaveShape = c.getString(SLAVE_NODE_SHAPE);
-         if (isShapeAcceptable(shapeNames, desMasterShape, desSlaveShape)) {
-             return Optional.of(new ShapeInfo(desMasterShape, desSlaveShape, c.getString(TOTAL_INSTANCE_NUMBER),
-                     UserInstanceStatus.of(c.getString(STATUS))));
-         }
-         return Optional.empty();
-     }
- 
-     private Optional<ShapeInfo> getDataEngineShape(List<String> shapeNames, Document c) {
-         final String dataEngineShape = c.getString(DATAENGINE_SHAPE);
-         if ((isShapeAcceptable(shapeNames, dataEngineShape))
-                 && StringUtils.isNotEmpty(c.getString(COMPUTATIONAL_ID))) {
- 
-             return Optional.of(new ShapeInfo(dataEngineShape, c.getString(DATAENGINE_INSTANCE_COUNT),
-                     UserInstanceStatus.of(c.getString(STATUS))));
-         }
-         return Optional.empty();
-     }
- 
-     private boolean isShapeAcceptable(List<String> shapeNames, String... shapes) {
-         return shapeNames == null || shapeNames.isEmpty() || Arrays.stream(shapes).anyMatch(shapeNames::contains);
-     }
- 
-     protected void appendSsnAndEdgeNodeType(List<String> shapeNames, Map<String, ShapeInfo> shapes) {
-         final String ssnShape = getSsnShape();
-         if (shapeNames == null || shapeNames.isEmpty() || shapeNames.contains(ssnShape)) {
-             String serviceBaseName = getServiceBaseName();
-             shapes.put(serviceBaseName + "-ssn", new ShapeInfo(ssnShape, UserInstanceStatus.RUNNING));
-             FindIterable<Document> docs = getCollection(USER_EDGE)
-                     .find()
-                     .projection(fields(include(ID, EDGE_STATUS)));
-             for (Document d : docs) {
-                 shapes.put(edgeId(d),
-                         new ShapeInfo(getEdgeSize(), UserInstanceStatus.of(d.getString(EDGE_STATUS))));
-             }
-         }
-     }
- 
-     protected String getServiceBaseName() {
-         return settings.getServiceBaseName();
-     }
- 
-     protected abstract String getEdgeSize();
- 
-     protected abstract String edgeId(Document d);
- 
-     protected abstract String getSsnShape();
- 
- 
-     protected String generateShapeName(ShapeInfo shape) {
-         return Optional.ofNullable(shape).map(ShapeInfo::getName).orElse(StringUtils.EMPTY);
-     }
- 
-     protected void usersToLowerCase(List<String> users) {
-         if (users != null) {
-             users.replaceAll(u -> u != null ? u.toLowerCase() : null);
-         }
-     }
- 
-     protected void setUserFilter(UserInfo userInfo, BillingFilter filter, boolean isFullReport) {
-         if (isFullReport) {
-             usersToLowerCase(filter.getUser());
-         } else {
-             filter.setUser(Lists.newArrayList(userInfo.getName().toLowerCase()));
-         }
-     }
- 
-     /**
-      * Store shape info
-      */
-     @Getter
-     @ToString
-     protected class ShapeInfo {
-         private static final String DES_NAME_FORMAT = "Master: %s%sSlave:  %d x %s";
-         private static final String DE_NAME_FORMAT = "%d x %s";
-         private final boolean isDataEngine;
-         private final String shape;
-         private final String slaveShape;
-         private final String slaveCount;
-         private final boolean isExploratory;
-         private final UserInstanceStatus status;
- 
-         private ShapeInfo(boolean isDataEngine, String shape, String slaveShape, String slaveCount, boolean
-                 isExploratory, UserInstanceStatus status) {
-             this.isDataEngine = isDataEngine;
-             this.shape = shape;
-             this.slaveShape = slaveShape;
-             this.slaveCount = slaveCount;
-             this.isExploratory = isExploratory;
-             this.status = status;
-         }
- 
-         public ShapeInfo(String shape, UserInstanceStatus status) {
-             this(false, shape, null, null, true, status);
-         }
- 
-         ShapeInfo(String shape, String slaveShape, String slaveCount, UserInstanceStatus status) {
-             this(false, shape, slaveShape, slaveCount, false, status);
-         }
- 
- 
-         ShapeInfo(String shape, String slaveCount, UserInstanceStatus status) {
-             this(true, shape, null, slaveCount, false, status);
-         }
- 
-         public String getName() {
-             if (isExploratory) {
-                 return shape;
-             } else {
-                 return clusterName();
-             }
-         }
- 
-         private String clusterName() {
-             try {
-                 final Integer count = Integer.valueOf(slaveCount);
-                 return isDataEngine ? String.format(DE_NAME_FORMAT, count, shape) :
-                         String.format(DES_NAME_FORMAT, shape, System.lineSeparator(), count - 1, slaveShape);
-             } catch (NumberFormatException e) {
-                 log.error("Cannot parse string {} to integer", slaveCount);
-                 return StringUtils.EMPTY;
-             }
-         }
-     }
+ 	public static final String SHAPE = "shape";
+ 	public static final String SERVICE_BASE_NAME = "service_base_name";
+ 	public static final String ITEMS = "lines";
+ 	public static final String COST_TOTAL = "cost_total";
+ 	public static final String FULL_REPORT = "full_report";
+ 
+ 	private static final String PROJECT = "project";
+ 	private static final String MASTER_NODE_SHAPE = "master_node_shape";
+ 	private static final String SLAVE_NODE_SHAPE = "slave_node_shape";
+ 	private static final String TOTAL_INSTANCE_NUMBER = "total_instance_number";
+ 
+ 	private static final String DATAENGINE_SHAPE = "dataengine_instance_shape";
+ 	private static final String DATAENGINE_INSTANCE_COUNT = "dataengine_instance_count";
+ 
+ 	private static final String DATAENGINE_DOCKER_IMAGE = "image";
+ 	private static final int ONE_HUNDRED = 100;
+ 	private static final String TOTAL_FIELD_NAME = "total";
+ 	private static final String COST_FIELD = "$cost";
+ 	public static final String SHARED_RESOURCE_NAME = "Shared resource";
+ 
+ 	@Inject
+ 	protected SettingsDAO settings;
+ 	@Inject
+ 	private UserSettingsDAO userSettingsDAO;
+ 	@Inject
+ 	private ProjectDAO projectDAO;
+ 
++	@Override
++	public Document getReport(UserInfo userInfo, T filter) {
++		boolean isFullReport = UserRoles.checkAccess(userInfo, RoleType.PAGE, "/api/infrastructure_provision/billing",
++				userInfo.getRoles());
++		setUserFilter(userInfo, filter, isFullReport);
++		List<Bson> matchCriteria = matchCriteria(filter);
++		List<Bson> pipeline = new ArrayList<>();
++		if (!matchCriteria.isEmpty()) {
++			pipeline.add(Aggregates.match(Filters.and(matchCriteria)));
++		}
++		pipeline.add(groupCriteria());
++		pipeline.add(sortCriteria());
++		final Map<String, ShapeInfo> shapes = getShapes(filter.getShapes());
++		return prepareReport(filter.getStatuses(), !filter.getShapes().isEmpty(),
++				getCollection(BILLING).aggregate(pipeline), shapes, isFullReport); //TODO add shapes
++	}
++
++	private Document prepareReport(List<UserInstanceStatus> statuses, boolean filterByShape,
++								   AggregateIterable<Document> agg,
++								   Map<String, ShapeInfo> shapes, boolean fullReport) {
++
++		List<Document> reportItems = new ArrayList<>();
++
++		String usageDateStart = null;
++		String usageDateEnd = null;
++		double costTotal = 0D;
++
++		for (Document d : agg) {
++			Document id = (Document) d.get(MongoKeyWords.MONGO_ID);
++			String resourceId = id.getString(dlabIdFieldName());
++			ShapeInfo shape = shapes.get(resourceId);
++			final UserInstanceStatus status = Optional.ofNullable(shape).map(ShapeInfo::getStatus).orElse(null);
++			if ((filterByShape && shape == null) ||
++					(!statuses.isEmpty() && statuses.stream().noneMatch(s -> s.equals(status)))) {
++				continue;
++			}
++
++
++			String dateStart = d.getString(MongoKeyWords.USAGE_FROM);
++			if (StringUtils.compare(usageDateStart, dateStart, false) > 0) {
++				usageDateStart = dateStart;
++			}
++			String dateEnd = d.getString(MongoKeyWords.USAGE_TO);
++			if (StringUtils.compare(usageDateEnd, dateEnd) < 0) {
++				usageDateEnd = dateEnd;
++			}
++
++
++			costTotal += d.getDouble(MongoKeyWords.COST);
++
++			final String statusString = Optional
++					.ofNullable(status)
++					.map(UserInstanceStatus::toString)
++					.orElse(StringUtils.EMPTY);
++			Document item = new Document()
++					.append(MongoKeyWords.DLAB_USER, getUserOrDefault(id.getString(USER)))
++					.append(dlabIdFieldName(), resourceId)
++					.append(shapeFieldName(), generateShapeName(shape))
++					.append("dlab_resource_type", DlabResourceType.getResourceTypeName(id.getString(
++							"dlab_resource_type"))) //todo check on azure!!!
++					.append(STATUS, statusString)
++					.append(FIELD_RESOURCE_TYPE, resourceType(id))
++					.append(productFieldName(), id.getString(productFieldName()))
++					.append(MongoKeyWords.COST, d.getDouble(MongoKeyWords.COST))
++					.append(costFieldName(), BillingCalculationUtils.formatDouble(d.getDouble(MongoKeyWords
++							.COST)))
++					.append(currencyCodeFieldName(), id.getString(currencyCodeFieldName()))
++					.append(usageDateFromFieldName(), dateStart)
++					.append(usageDateToFieldName(), dateEnd);
++
++
++			reportItems.add(item);
++		}
++
++		return new Document()
++				.append(SERVICE_BASE_NAME, settings.getServiceBaseName())
++				.append(usageDateFromFieldName(), usageDateStart)
++				.append(usageDateToFieldName(), usageDateEnd)
++				.append(ITEMS, reportItems)
++				.append(COST_TOTAL, BillingCalculationUtils.formatDouble(BillingCalculationUtils.round
++						(costTotal, 2)))
++				.append(currencyCodeFieldName(), (reportItems.isEmpty() ? null :
++						reportItems.get(0).getString(currencyCodeFieldName())))
++				.append(FULL_REPORT, fullReport);
++
++	}
++
++	protected String resourceType(Document id) {
++		return id.getString(FIELD_RESOURCE_TYPE);
++	}
++
++	protected String currencyCodeFieldName() {
++		return "currency_code";
++	}
++
++	protected String usageDateToFieldName() {
++		return MongoKeyWords.USAGE_TO;
++	}
++
++	protected String costFieldName() {
++		return MongoKeyWords.COST;
++	}
++
++	protected String productFieldName() {
++		return ReportLine.FIELD_PRODUCT;
++	}
++
++	protected String usageDateFromFieldName() {
++		return MongoKeyWords.USAGE_FROM;
++	}
++
++	protected String dlabIdFieldName() {
++		return ReportLine.FIELD_DLAB_ID;
++	}
++
++	protected String shapeFieldName() {
++		return SHAPE;
++	}
++
++	protected abstract Bson sortCriteria();
++
++	protected abstract Bson groupCriteria();
++
+ 	protected Map<String, ShapeInfo> getShapes(List<String> shapeNames) {
+ 		FindIterable<Document> userInstances = getUserInstances();
+ 		final Map<String, ShapeInfo> shapes = new HashMap<>();
+ 
+ 		for (Document d : userInstances) {
+ 			getExploratoryShape(shapeNames, d)
+ 					.ifPresent(shapeInfo -> shapes.put(d.getString(EXPLORATORY_ID), shapeInfo));
+ 			@SuppressWarnings("unchecked")
+ 			List<Document> comp = (List<Document>) d.get(COMPUTATIONAL_RESOURCES);
+ 			comp.forEach(computational ->
+ 					getComputationalShape(shapeNames, computational)
+ 							.ifPresent(shapeInfo -> shapes.put(computational.getString(COMPUTATIONAL_ID), shapeInfo)));
+ 		}
+ 
+ 		appendSsnAndEdgeNodeType(shapeNames, shapes);
+ 
+ 		log.trace("Loaded shapes is {}", shapes);
+ 		return shapes;
+ 	}
+ 
+ 	@Override
+ 	public Double getTotalCost() {
+ 		return aggregateBillingData(singletonList(group(null, sum(TOTAL_FIELD_NAME, COST_FIELD))));
+ 	}
+ 
+ 	@Override
+ 	public Double getUserCost(String user) {
+ 		final List<Bson> pipeline = Arrays.asList(match(eq(USER, user)),
+ 				group(null, sum(TOTAL_FIELD_NAME, COST_FIELD)));
+ 		return aggregateBillingData(pipeline);
+ 	}
+ 
+ 	@Override
+ 	public Double getProjectCost(String project) {
+ 		final List<Bson> pipeline = Arrays.asList(match(eq(PROJECT, project)),
+ 				group(null, sum(TOTAL_FIELD_NAME, COST_FIELD)));
+ 		return aggregateBillingData(pipeline);
+ 	}
+ 
+ 	@Override
+ 	public int getBillingQuoteUsed() {
+ 		return toPercentage(() -> settings.getMaxBudget(), getTotalCost());
+ 	}
+ 
+ 	@Override
+ 	public int getBillingUserQuoteUsed(String user) {
+ 		return toPercentage(() -> userSettingsDAO.getAllowedBudget(user), getUserCost(user));
+ 	}
+ 
+ 	@Override
 -	public int getBillingProjectQuoteUsed(String project) {
 -		return toPercentage(() -> projectDAO.getAllowedBudget(project), getProjectCost(project));
 -	}
 -
 -	@Override
+ 	public boolean isBillingQuoteReached() {
+ 		return getBillingQuoteUsed() >= ONE_HUNDRED;
+ 	}
+ 
+ 	@Override
+ 	public boolean isUserQuoteReached(String user) {
+ 		final Double userCost = getUserCost(user);
+ 		return userSettingsDAO.getAllowedBudget(user)
+ 				.filter(allowedBudget -> userCost.intValue() != 0 && allowedBudget <= userCost)
+ 				.isPresent();
+ 	}
+ 
++
+ 	@Override
+ 	public boolean isProjectQuoteReached(String project) {
+ 		final Double projectCost = getProjectCost(project);
+ 		return projectDAO.getAllowedBudget(project)
+ 				.filter(allowedBudget -> projectCost.intValue() != 0 && allowedBudget <= projectCost)
+ 				.isPresent();
+ 	}
+ 
++	@Override
++	public int getBillingProjectQuoteUsed(String project) {
++		return toPercentage(() -> projectDAO.getAllowedBudget(project), getProjectCost(project));
++	}
++
+ 	protected String getUserOrDefault(String user) {
+ 		return StringUtils.isNotBlank(user) ? user : SHARED_RESOURCE_NAME;
+ 	}
+ 
+ 	private Integer toPercentage(Supplier<Optional<Integer>> allowedBudget, Double totalCost) {
+ 		return allowedBudget.get()
+ 				.map(userBudget -> (totalCost * ONE_HUNDRED) / userBudget)
+ 				.map(Double::intValue)
+ 				.orElse(BigDecimal.ZERO.intValue());
+ 	}
+ 
++	private List<Bson> matchCriteria(BillingFilter filter) {
++
++		List<Bson> searchCriteria = new ArrayList<>();
++
++		if (filter.getUser() != null && !filter.getUser().isEmpty()) {
++			searchCriteria.add(Filters.in(MongoKeyWords.DLAB_USER, filter.getUser()));
++		}
++
++		if (filter.getResourceType() != null && !filter.getResourceType().isEmpty()) {
++			searchCriteria.add(Filters.in("dlab_resource_type",
++					DlabResourceType.getResourceTypeIds(filter.getResourceType())));
++		}
++
++		if (filter.getDlabId() != null && !filter.getDlabId().isEmpty()) {
++			searchCriteria.add(regex(dlabIdFieldName(), filter.getDlabId(), "i"));
++		}
++
++		if (filter.getDateStart() != null && !filter.getDateStart().isEmpty()) {
++			searchCriteria.add(gte(FIELD_USAGE_DATE, filter.getDateStart()));
++		}
++		if (filter.getDateEnd() != null && !filter.getDateEnd().isEmpty()) {
++			searchCriteria.add(lte(FIELD_USAGE_DATE, filter.getDateEnd()));
++		}
++
++		searchCriteria.addAll(cloudMatchCriteria((T) filter));
++		return searchCriteria;
++	}
++
++	protected abstract List<Bson> cloudMatchCriteria(T filter);
++
+ 
+ 	private Optional<ShapeInfo> getComputationalShape(List<String> shapeNames, Document c) {
+ 		return isDataEngine(c.getString(DATAENGINE_DOCKER_IMAGE)) ? getDataEngineShape(shapeNames, c) :
+ 				getDataEngineServiceShape(shapeNames, c);
+ 	}
+ 
+ 	private Double aggregateBillingData(List<Bson> pipeline) {
+ 		return Optional.ofNullable(aggregate(BILLING, pipeline).first())
+ 				.map(d -> d.getDouble(TOTAL_FIELD_NAME))
+ 				.orElse(BigDecimal.ZERO.doubleValue());
+ 	}
+ 
+ 	private FindIterable<Document> getUserInstances() {
+ 		return getCollection(USER_INSTANCES)
+ 				.find()
+ 				.projection(
+ 						fields(excludeId(),
+ 								include(SHAPE, EXPLORATORY_ID, STATUS,
+ 										COMPUTATIONAL_RESOURCES + "." + COMPUTATIONAL_ID,
+ 										COMPUTATIONAL_RESOURCES + "." + MASTER_NODE_SHAPE,
+ 										COMPUTATIONAL_RESOURCES + "." + SLAVE_NODE_SHAPE,
+ 										COMPUTATIONAL_RESOURCES + "." + TOTAL_INSTANCE_NUMBER,
+ 										COMPUTATIONAL_RESOURCES + "." + DATAENGINE_SHAPE,
+ 										COMPUTATIONAL_RESOURCES + "." + DATAENGINE_INSTANCE_COUNT,
+ 										COMPUTATIONAL_RESOURCES + "." + DATAENGINE_DOCKER_IMAGE,
+ 										COMPUTATIONAL_RESOURCES + "." + STATUS
+ 								)));
+ 	}
+ 
+ 	private Optional<ShapeInfo> getExploratoryShape(List<String> shapeNames, Document d) {
+ 		final String shape = d.getString(SHAPE);
+ 		if (isShapeAcceptable(shapeNames, shape)) {
+ 			return Optional.of(new ShapeInfo(shape, UserInstanceStatus.of(d.getString(STATUS))));
+ 		}
+ 		return Optional.empty();
+ 	}
+ 
+ 	private boolean isDataEngine(String dockerImage) {
+ 		return DataEngineType.fromDockerImageName(dockerImage) == DataEngineType.SPARK_STANDALONE;
+ 	}
+ 
+ 	private Optional<ShapeInfo> getDataEngineServiceShape(List<String> shapeNames,
+ 														  Document c) {
+ 		final String desMasterShape = c.getString(MASTER_NODE_SHAPE);
+ 		final String desSlaveShape = c.getString(SLAVE_NODE_SHAPE);
+ 		if (isShapeAcceptable(shapeNames, desMasterShape, desSlaveShape)) {
+ 			return Optional.of(new ShapeInfo(desMasterShape, desSlaveShape, c.getString(TOTAL_INSTANCE_NUMBER),
+ 					UserInstanceStatus.of(c.getString(STATUS))));
+ 		}
+ 		return Optional.empty();
+ 	}
+ 
+ 	private Optional<ShapeInfo> getDataEngineShape(List<String> shapeNames, Document c) {
+ 		final String dataEngineShape = c.getString(DATAENGINE_SHAPE);
+ 		if ((isShapeAcceptable(shapeNames, dataEngineShape))
+ 				&& StringUtils.isNotEmpty(c.getString(COMPUTATIONAL_ID))) {
+ 
+ 			return Optional.of(new ShapeInfo(dataEngineShape, c.getString(DATAENGINE_INSTANCE_COUNT),
+ 					UserInstanceStatus.of(c.getString(STATUS))));
+ 		}
+ 		return Optional.empty();
+ 	}
+ 
+ 	private boolean isShapeAcceptable(List<String> shapeNames, String... shapes) {
+ 		return shapeNames == null || shapeNames.isEmpty() || Arrays.stream(shapes).anyMatch(shapeNames::contains);
+ 	}
+ 
 -	protected abstract void appendSsnAndEdgeNodeType(List<String> shapeNames, Map<String, ShapeInfo> shapes);
++	protected void appendSsnAndEdgeNodeType(List<String> shapeNames, Map<String, ShapeInfo> shapes) {
++		final String ssnShape = getSsnShape();
++		if (shapeNames == null || shapeNames.isEmpty() || shapeNames.contains(ssnShape)) {
++			String serviceBaseName = getServiceBaseName();
++			shapes.put(serviceBaseName + "-ssn", new ShapeInfo(ssnShape, UserInstanceStatus.RUNNING));
++			FindIterable<Document> docs = getCollection(USER_EDGE)
++					.find()
++					.projection(fields(include(ID, EDGE_STATUS)));
++			for (Document d : docs) {
++				shapes.put(edgeId(d),
++						new ShapeInfo(getEdgeSize(), UserInstanceStatus.of(d.getString(EDGE_STATUS))));
++			}
++		}
++	}
++
++	protected String getServiceBaseName() {
++		return settings.getServiceBaseName();
++	}
++
++	protected abstract String getEdgeSize();
++
++	protected abstract String edgeId(Document d);
++
++	protected abstract String getSsnShape();
++
+ 
+ 	protected String generateShapeName(ShapeInfo shape) {
+ 		return Optional.ofNullable(shape).map(ShapeInfo::getName).orElse(StringUtils.EMPTY);
+ 	}
+ 
+ 	protected void usersToLowerCase(List<String> users) {
+ 		if (users != null) {
+ 			users.replaceAll(u -> u != null ? u.toLowerCase() : null);
+ 		}
+ 	}
+ 
+ 	protected void setUserFilter(UserInfo userInfo, BillingFilter filter, boolean isFullReport) {
+ 		if (isFullReport) {
+ 			usersToLowerCase(filter.getUser());
+ 		} else {
+ 			filter.setUser(Lists.newArrayList(userInfo.getName().toLowerCase()));
+ 		}
+ 	}
+ 
+ 	/**
+ 	 * Store shape info
+ 	 */
+ 	@Getter
+ 	@ToString
+ 	protected class ShapeInfo {
+ 		private static final String DES_NAME_FORMAT = "Master: %s%sSlave:  %d x %s";
+ 		private static final String DE_NAME_FORMAT = "%d x %s";
+ 		private final boolean isDataEngine;
+ 		private final String shape;
+ 		private final String slaveShape;
+ 		private final String slaveCount;
+ 		private final boolean isExploratory;
+ 		private final UserInstanceStatus status;
+ 
+ 		private ShapeInfo(boolean isDataEngine, String shape, String slaveShape, String slaveCount, boolean
+ 				isExploratory, UserInstanceStatus status) {
+ 			this.isDataEngine = isDataEngine;
+ 			this.shape = shape;
+ 			this.slaveShape = slaveShape;
+ 			this.slaveCount = slaveCount;
+ 			this.isExploratory = isExploratory;
+ 			this.status = status;
+ 		}
+ 
+ 		public ShapeInfo(String shape, UserInstanceStatus status) {
+ 			this(false, shape, null, null, true, status);
+ 		}
+ 
+ 		ShapeInfo(String shape, String slaveShape, String slaveCount, UserInstanceStatus status) {
+ 			this(false, shape, slaveShape, slaveCount, false, status);
+ 		}
+ 
+ 
+ 		ShapeInfo(String shape, String slaveCount, UserInstanceStatus status) {
+ 			this(true, shape, null, slaveCount, false, status);
+ 		}
+ 
+ 		public String getName() {
+ 			if (isExploratory) {
+ 				return shape;
+ 			} else {
+ 				return clusterName();
+ 			}
+ 		}
+ 
+ 		private String clusterName() {
+ 			try {
+ 				final Integer count = Integer.valueOf(slaveCount);
+ 				return isDataEngine ? String.format(DE_NAME_FORMAT, count, shape) :
+ 						String.format(DES_NAME_FORMAT, shape, System.lineSeparator(), count - 1, slaveShape);
+ 			} catch (NumberFormatException e) {
+ 				log.error("Cannot parse string {} to integer", slaveCount);
+ 				return StringUtils.EMPTY;
+ 			}
+ 		}
+ 	}
  }
diff --cc services/self-service/src/main/java/com/epam/dlab/backendapi/dao/aws/AwsBillingDAO.java
index d2f7268,adcef5e..71bda09
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/aws/AwsBillingDAO.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/aws/AwsBillingDAO.java
@@@ -19,20 -19,35 +19,29 @@@
  
  package com.epam.dlab.backendapi.dao.aws;
  
 -import com.epam.dlab.auth.UserInfo;
 +import com.epam.dlab.MongoKeyWords;
  import com.epam.dlab.backendapi.dao.BaseBillingDAO;
+ import com.epam.dlab.backendapi.domain.ProjectDTO;
  import com.epam.dlab.backendapi.resources.dto.aws.AwsBillingFilter;
 +import com.epam.dlab.util.UsernameUtils;
+ import com.epam.dlab.backendapi.roles.RoleType;
+ import com.epam.dlab.backendapi.roles.UserRoles;
+ import com.epam.dlab.billing.BillingCalculationUtils;
+ import com.epam.dlab.billing.DlabResourceType;
+ import com.epam.dlab.dto.UserInstanceStatus;
+ import com.mongodb.client.AggregateIterable;
+ import com.mongodb.client.FindIterable;
+ import org.apache.commons.lang3.StringUtils;
  import org.bson.Document;
  import org.bson.conversions.Bson;
 -import org.slf4j.Logger;
 -import org.slf4j.LoggerFactory;
  
 -import java.util.ArrayList;
 +import java.util.Collections;
  import java.util.List;
 -import java.util.Map;
 -import java.util.Optional;
  
 -import static com.epam.dlab.backendapi.dao.MongoCollections.BILLING;
  import static com.epam.dlab.model.aws.ReportLine.*;
  import static com.mongodb.client.model.Accumulators.*;
 -import static com.mongodb.client.model.Aggregates.*;
 -import static com.mongodb.client.model.Filters.*;
 -import static com.mongodb.client.model.Projections.fields;
 -import static com.mongodb.client.model.Projections.include;
 +import static com.mongodb.client.model.Aggregates.group;
 +import static com.mongodb.client.model.Aggregates.sort;
  
  /**
   * DAO for user billing.
diff --cc services/self-service/src/main/resources/webapp/package-lock.json
index e2afedc,b6db496..a8fcfde
--- a/services/self-service/src/main/resources/webapp/package-lock.json
+++ b/services/self-service/src/main/resources/webapp/package-lock.json
@@@ -417,24 -417,29 +417,29 @@@
            "dependencies": {
              "abbrev": {
                "version": "1.1.1",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
++              "resolved": false,
+               "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
                "dev": true,
                "optional": true
              },
              "ansi-regex": {
                "version": "2.1.1",
-               "bundled": true,
-               "dev": true
 -              "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
++              "resolved": false,
+               "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+               "dev": true,
+               "optional": true
              },
              "aproba": {
                "version": "1.2.0",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
++              "resolved": false,
+               "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
                "dev": true,
                "optional": true
              },
              "are-we-there-yet": {
                "version": "1.1.5",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
++              "resolved": false,
+               "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -444,48 -449,61 +449,61 @@@
              },
              "balanced-match": {
                "version": "1.0.0",
-               "bundled": true,
-               "dev": true
 -              "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
++              "resolved": false,
+               "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+               "dev": true,
+               "optional": true
              },
              "brace-expansion": {
                "version": "1.1.11",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
++              "resolved": false,
+               "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
                "dev": true,
+               "optional": true,
                "requires": {
-                 "balanced-match": "1.0.0",
+                 "balanced-match": "^1.0.0",
                  "concat-map": "0.0.1"
                }
              },
              "chownr": {
                "version": "1.1.1",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz",
++              "resolved": false,
+               "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==",
                "dev": true,
                "optional": true
              },
              "code-point-at": {
                "version": "1.1.0",
-               "bundled": true,
-               "dev": true
 -              "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
++              "resolved": false,
+               "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+               "dev": true,
+               "optional": true
              },
              "concat-map": {
                "version": "0.0.1",
-               "bundled": true,
-               "dev": true
 -              "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
++              "resolved": false,
+               "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+               "dev": true,
+               "optional": true
              },
              "console-control-strings": {
                "version": "1.1.0",
-               "bundled": true,
-               "dev": true
 -              "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
++              "resolved": false,
+               "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
+               "dev": true,
+               "optional": true
              },
              "core-util-is": {
                "version": "1.0.2",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
++              "resolved": false,
+               "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
                "dev": true,
                "optional": true
              },
              "debug": {
                "version": "2.6.9",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
++              "resolved": false,
+               "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -494,25 -512,29 +512,29 @@@
              },
              "deep-extend": {
                "version": "0.6.0",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
++              "resolved": false,
+               "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
                "dev": true,
                "optional": true
              },
              "delegates": {
                "version": "1.0.0",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
++              "resolved": false,
+               "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
                "dev": true,
                "optional": true
              },
              "detect-libc": {
                "version": "1.0.3",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
++              "resolved": false,
+               "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
                "dev": true,
                "optional": true
              },
              "fs-minipass": {
                "version": "1.2.5",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz",
++              "resolved": false,
+               "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -521,13 -543,15 +543,15 @@@
              },
              "fs.realpath": {
                "version": "1.0.0",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
++              "resolved": false,
+               "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
                "dev": true,
                "optional": true
              },
              "gauge": {
                "version": "2.7.4",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
++              "resolved": false,
+               "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -543,7 -567,8 +567,8 @@@
              },
              "glob": {
                "version": "7.1.3",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
++              "resolved": false,
+               "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -557,13 -582,15 +582,15 @@@
              },
              "has-unicode": {
                "version": "2.0.1",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
++              "resolved": false,
+               "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
                "dev": true,
                "optional": true
              },
              "iconv-lite": {
                "version": "0.4.24",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
++              "resolved": false,
+               "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -572,7 -599,8 +599,8 @@@
              },
              "ignore-walk": {
                "version": "3.0.1",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz",
++              "resolved": false,
+               "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -581,7 -609,8 +609,8 @@@
              },
              "inflight": {
                "version": "1.0.6",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
++              "resolved": false,
+               "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -591,54 -620,67 +620,67 @@@
              },
              "inherits": {
                "version": "2.0.3",
-               "bundled": true,
-               "dev": true
 -              "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
++              "resolved": false,
+               "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+               "dev": true,
+               "optional": true
              },
              "ini": {
                "version": "1.3.5",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
++              "resolved": false,
+               "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
                "dev": true,
                "optional": true
              },
              "is-fullwidth-code-point": {
                "version": "1.0.0",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
++              "resolved": false,
+               "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
                "dev": true,
+               "optional": true,
                "requires": {
-                 "number-is-nan": "1.0.1"
+                 "number-is-nan": "^1.0.0"
                }
              },
              "isarray": {
                "version": "1.0.0",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
++              "resolved": false,
+               "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
                "dev": true,
                "optional": true
              },
              "minimatch": {
                "version": "3.0.4",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
++              "resolved": false,
+               "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
                "dev": true,
+               "optional": true,
                "requires": {
-                 "brace-expansion": "1.1.11"
+                 "brace-expansion": "^1.1.7"
                }
              },
              "minimist": {
                "version": "0.0.8",
-               "bundled": true,
-               "dev": true
 -              "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
++              "resolved": false,
+               "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+               "dev": true,
+               "optional": true
              },
              "minipass": {
                "version": "2.3.5",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz",
++              "resolved": false,
+               "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==",
                "dev": true,
+               "optional": true,
                "requires": {
-                 "safe-buffer": "5.1.2",
-                 "yallist": "3.0.3"
+                 "safe-buffer": "^5.1.2",
+                 "yallist": "^3.0.0"
                }
              },
              "minizlib": {
                "version": "1.2.1",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz",
++              "resolved": false,
+               "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -647,21 -689,25 +689,25 @@@
              },
              "mkdirp": {
                "version": "0.5.1",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
++              "resolved": false,
+               "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
                "dev": true,
+               "optional": true,
                "requires": {
                  "minimist": "0.0.8"
                }
              },
              "ms": {
                "version": "2.0.0",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
++              "resolved": false,
+               "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
                "dev": true,
                "optional": true
              },
              "needle": {
                "version": "2.2.4",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.4.tgz",
++              "resolved": false,
+               "integrity": "sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -672,7 -718,8 +718,8 @@@
              },
              "node-pre-gyp": {
                "version": "0.10.3",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz",
++              "resolved": false,
+               "integrity": "sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -690,7 -737,8 +737,8 @@@
              },
              "nopt": {
                "version": "4.0.1",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
++              "resolved": false,
+               "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -700,13 -748,15 +748,15 @@@
              },
              "npm-bundled": {
                "version": "1.0.5",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.5.tgz",
++              "resolved": false,
+               "integrity": "sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g==",
                "dev": true,
                "optional": true
              },
              "npm-packlist": {
                "version": "1.2.0",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.2.0.tgz",
++              "resolved": false,
+               "integrity": "sha512-7Mni4Z8Xkx0/oegoqlcao/JpPCPEMtUvsmB0q7mgvlMinykJLSRTYuFqoQLYgGY8biuxIeiHO+QNJKbCfljewQ==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -716,7 -766,8 +766,8 @@@
              },
              "npmlog": {
                "version": "4.1.2",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
++              "resolved": false,
+               "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -728,38 -779,46 +779,46 @@@
              },
              "number-is-nan": {
                "version": "1.0.1",
-               "bundled": true,
-               "dev": true
 -              "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
++              "resolved": false,
+               "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+               "dev": true,
+               "optional": true
              },
              "object-assign": {
                "version": "4.1.1",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
++              "resolved": false,
+               "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
                "dev": true,
                "optional": true
              },
              "once": {
                "version": "1.4.0",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
++              "resolved": false,
+               "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
                "dev": true,
+               "optional": true,
                "requires": {
-                 "wrappy": "1.0.2"
+                 "wrappy": "1"
                }
              },
              "os-homedir": {
                "version": "1.0.2",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
++              "resolved": false,
+               "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
                "dev": true,
                "optional": true
              },
              "os-tmpdir": {
                "version": "1.0.2",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
++              "resolved": false,
+               "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
                "dev": true,
                "optional": true
              },
              "osenv": {
                "version": "0.1.5",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
++              "resolved": false,
+               "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -769,19 -828,22 +828,22 @@@
              },
              "path-is-absolute": {
                "version": "1.0.1",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
++              "resolved": false,
+               "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
                "dev": true,
                "optional": true
              },
              "process-nextick-args": {
                "version": "2.0.0",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
++              "resolved": false,
+               "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
                "dev": true,
                "optional": true
              },
              "rc": {
                "version": "1.2.8",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
++              "resolved": false,
+               "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -793,7 -855,8 +855,8 @@@
                "dependencies": {
                  "minimist": {
                    "version": "1.2.0",
-                   "bundled": true,
 -                  "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
++                  "resolved": false,
+                   "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
                    "dev": true,
                    "optional": true
                  }
@@@ -801,7 -864,8 +864,8 @@@
              },
              "readable-stream": {
                "version": "2.3.6",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
++              "resolved": false,
+               "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -816,7 -880,8 +880,8 @@@
              },
              "rimraf": {
                "version": "2.6.3",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
++              "resolved": false,
+               "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -825,52 -890,62 +890,62 @@@
              },
              "safe-buffer": {
                "version": "5.1.2",
-               "bundled": true,
-               "dev": true
 -              "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
++              "resolved": false,
+               "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+               "dev": true,
+               "optional": true
              },
              "safer-buffer": {
                "version": "2.1.2",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
++              "resolved": false,
+               "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
                "dev": true,
                "optional": true
              },
              "sax": {
                "version": "1.2.4",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
++              "resolved": false,
+               "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
                "dev": true,
                "optional": true
              },
              "semver": {
                "version": "5.6.0",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
++              "resolved": false,
+               "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
                "dev": true,
                "optional": true
              },
              "set-blocking": {
                "version": "2.0.0",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
++              "resolved": false,
+               "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
                "dev": true,
                "optional": true
              },
              "signal-exit": {
                "version": "3.0.2",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
++              "resolved": false,
+               "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
                "dev": true,
                "optional": true
              },
              "string-width": {
                "version": "1.0.2",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
++              "resolved": false,
+               "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
                "dev": true,
+               "optional": true,
                "requires": {
-                 "code-point-at": "1.1.0",
-                 "is-fullwidth-code-point": "1.0.0",
-                 "strip-ansi": "3.0.1"
+                 "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,
 -              "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
++              "resolved": false,
+               "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -879,21 -954,25 +954,25 @@@
              },
              "strip-ansi": {
                "version": "3.0.1",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
++              "resolved": false,
+               "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
                "dev": true,
+               "optional": true,
                "requires": {
-                 "ansi-regex": "2.1.1"
+                 "ansi-regex": "^2.0.0"
                }
              },
              "strip-json-comments": {
                "version": "2.0.1",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
++              "resolved": false,
+               "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
                "dev": true,
                "optional": true
              },
              "tar": {
                "version": "4.4.8",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz",
++              "resolved": false,
+               "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -908,13 -987,15 +987,15 @@@
              },
              "util-deprecate": {
                "version": "1.0.2",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
++              "resolved": false,
+               "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
                "dev": true,
                "optional": true
              },
              "wide-align": {
                "version": "1.1.3",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
++              "resolved": false,
+               "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -923,13 -1004,17 +1004,17 @@@
              },
              "wrappy": {
                "version": "1.0.2",
-               "bundled": true,
-               "dev": true
 -              "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
++              "resolved": false,
+               "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+               "dev": true,
+               "optional": true
              },
              "yallist": {
                "version": "3.0.3",
-               "bundled": true,
-               "dev": true
 -              "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
++              "resolved": false,
+               "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==",
+               "dev": true,
+               "optional": true
              }
            }
          },
@@@ -5043,27 -4523,17 +4523,17 @@@
            "dev": true,
            "optional": true
          },
-         "ajv": {
-           "version": "4.11.8",
-           "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
-           "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
-           "dev": true,
-           "optional": true,
-           "requires": {
-             "co": "4.6.0",
-             "json-stable-stringify": "1.0.1"
-           }
-         },
          "ansi-regex": {
            "version": "2.1.1",
--          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
++          "resolved": false,
            "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
-           "dev": true
+           "dev": true,
+           "optional": true
          },
          "aproba": {
-           "version": "1.1.1",
-           "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.1.tgz",
-           "integrity": "sha1-ldNgDwdxCqDpKYxyatXs8urLq6s=",
+           "version": "1.2.0",
+           "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+           "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
            "dev": true,
            "optional": true
          },
@@@ -5092,37 -4573,38 +4573,38 @@@
            "dev": true,
            "optional": true
          },
-         "asynckit": {
-           "version": "0.4.0",
-           "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
-           "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+         "code-point-at": {
+           "version": "1.1.0",
 -          "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
++          "resolved": false,
+           "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
            "dev": true,
            "optional": true
          },
-         "aws-sign2": {
-           "version": "0.6.0",
-           "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz",
-           "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=",
+         "concat-map": {
+           "version": "0.0.1",
 -          "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
++          "resolved": false,
+           "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
            "dev": true,
            "optional": true
          },
-         "aws4": {
-           "version": "1.6.0",
-           "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
-           "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=",
+         "console-control-strings": {
+           "version": "1.1.0",
 -          "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
++          "resolved": false,
+           "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
            "dev": true,
            "optional": true
          },
-         "balanced-match": {
-           "version": "0.4.2",
-           "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
-           "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
-           "dev": true
+         "core-util-is": {
+           "version": "1.0.2",
 -          "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
++          "resolved": false,
+           "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+           "dev": true,
+           "optional": true
          },
-         "bcrypt-pbkdf": {
-           "version": "1.0.1",
-           "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
-           "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
+         "debug": {
+           "version": "4.1.1",
+           "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+           "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
            "dev": true,
            "optional": true,
            "requires": {
@@@ -5170,101 -4618,9 +4618,9 @@@
            "dev": true,
            "optional": true
          },
-         "co": {
-           "version": "4.6.0",
-           "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
-           "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
-           "dev": true,
-           "optional": true
-         },
-         "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=",
-           "dev": true
-         },
-         "combined-stream": {
-           "version": "1.0.5",
-           "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
-           "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=",
-           "dev": true,
-           "requires": {
-             "delayed-stream": "1.0.0"
-           }
-         },
-         "concat-map": {
-           "version": "0.0.1",
-           "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-           "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
-           "dev": true
-         },
-         "console-control-strings": {
-           "version": "1.1.0",
-           "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
-           "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
-           "dev": true
-         },
-         "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=",
-           "dev": true
-         },
-         "cryptiles": {
-           "version": "2.0.5",
-           "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
-           "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
-           "dev": true,
-           "optional": true,
-           "requires": {
-             "boom": "2.10.1"
-           }
-         },
-         "dashdash": {
-           "version": "1.14.1",
-           "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
-           "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
-           "dev": true,
-           "optional": true,
-           "requires": {
-             "assert-plus": "1.0.0"
-           },
-           "dependencies": {
-             "assert-plus": {
-               "version": "1.0.0",
-               "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
-               "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
-               "dev": true,
-               "optional": true
-             }
-           }
-         },
-         "debug": {
-           "version": "2.6.8",
-           "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
-           "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
-           "dev": true,
-           "optional": true,
-           "requires": {
-             "ms": "2.0.0"
-           }
-         },
-         "deep-extend": {
-           "version": "0.4.2",
-           "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz",
-           "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=",
-           "dev": true,
-           "optional": true
-         },
-         "delayed-stream": {
-           "version": "1.0.0",
-           "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
-           "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
-           "dev": true
-         },
          "delegates": {
            "version": "1.0.0",
--          "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
++          "resolved": false,
            "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
            "dev": true,
            "optional": true
@@@ -5313,37 -4644,14 +4644,14 @@@
          },
          "fs.realpath": {
            "version": "1.0.0",
--          "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
++          "resolved": false,
            "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
-           "dev": true
-         },
-         "fstream": {
-           "version": "1.0.11",
-           "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
-           "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
-           "dev": true,
-           "requires": {
-             "graceful-fs": "4.1.11",
-             "inherits": "2.0.3",
-             "mkdirp": "0.5.1",
-             "rimraf": "2.6.1"
-           }
-         },
-         "fstream-ignore": {
-           "version": "1.0.5",
-           "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz",
-           "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=",
            "dev": true,
-           "optional": true,
-           "requires": {
-             "fstream": "1.0.11",
-             "inherits": "2.0.3",
-             "minimatch": "3.0.4"
-           }
+           "optional": true
          },
          "gauge": {
            "version": "2.7.4",
--          "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
++          "resolved": false,
            "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
            "dev": true,
            "optional": true,
@@@ -5417,7 -4683,7 +4683,7 @@@
          },
          "has-unicode": {
            "version": "2.0.1",
--          "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
++          "resolved": false,
            "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
            "dev": true,
            "optional": true
@@@ -5455,77 -4710,60 +4710,60 @@@
          },
          "inflight": {
            "version": "1.0.6",
--          "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
++          "resolved": false,
            "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
            "dev": true,
+           "optional": true,
            "requires": {
-             "once": "1.4.0",
-             "wrappy": "1.0.2"
+             "once": "^1.3.0",
+             "wrappy": "1"
            }
          },
          "inherits": {
            "version": "2.0.3",
--          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
++          "resolved": false,
            "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
-           "dev": true
+           "dev": true,
+           "optional": true
          },
          "ini": {
-           "version": "1.3.4",
-           "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz",
-           "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=",
+           "version": "1.3.5",
+           "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+           "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
            "dev": true,
            "optional": true
          },
          "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",
++          "resolved": false,
            "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
            "dev": true,
+           "optional": true,
            "requires": {
-             "number-is-nan": "1.0.1"
+             "number-is-nan": "^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=",
-           "dev": true,
-           "optional": true
-         },
          "isarray": {
            "version": "1.0.0",
--          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
++          "resolved": false,
            "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
-           "dev": true
-         },
-         "isstream": {
-           "version": "0.1.2",
-           "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
-           "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
            "dev": true,
            "optional": true
          },
-         "jodid25519": {
-           "version": "1.0.2",
-           "resolved": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz",
-           "integrity": "sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=",
+         "minimatch": {
+           "version": "3.0.4",
 -          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
++          "resolved": false,
+           "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
            "dev": true,
            "optional": true,
            "requires": {
-             "jsbn": "0.1.1"
+             "brace-expansion": "^1.1.7"
            }
          },
-         "jsbn": {
-           "version": "0.1.1",
-           "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
-           "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
-           "dev": true,
-           "optional": true
-         },
-         "json-schema": {
-           "version": "0.2.3",
-           "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
-           "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+         "minimist": {
+           "version": "0.0.8",
 -          "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
++          "resolved": false,
+           "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
            "dev": true,
            "optional": true
          },
@@@ -5560,56 -4785,15 +4785,15 @@@
            "dev": true,
            "optional": true,
            "requires": {
-             "assert-plus": "1.0.0",
-             "extsprintf": "1.0.2",
-             "json-schema": "0.2.3",
-             "verror": "1.3.6"
-           },
-           "dependencies": {
-             "assert-plus": {
-               "version": "1.0.0",
-               "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
-               "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
-               "dev": true,
-               "optional": true
-             }
-           }
-         },
-         "mime-db": {
-           "version": "1.27.0",
-           "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz",
-           "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=",
-           "dev": true
-         },
-         "mime-types": {
-           "version": "2.1.15",
-           "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz",
-           "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=",
-           "dev": true,
-           "requires": {
-             "mime-db": "1.27.0"
-           }
-         },
-         "minimatch": {
-           "version": "3.0.4",
-           "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
-           "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
-           "dev": true,
-           "requires": {
-             "brace-expansion": "1.1.7"
+             "minipass": "^2.2.1"
            }
          },
-         "minimist": {
-           "version": "0.0.8",
-           "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
-           "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
-           "dev": true
-         },
          "mkdirp": {
            "version": "0.5.1",
--          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
++          "resolved": false,
            "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
            "dev": true,
+           "optional": true,
            "requires": {
              "minimist": "0.0.8"
            }
@@@ -5641,7 -4838,7 +4838,7 @@@
          },
          "nopt": {
            "version": "4.0.1",
--          "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
++          "resolved": false,
            "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
            "dev": true,
            "optional": true,
@@@ -5665,43 -4880,38 +4880,38 @@@
          },
          "number-is-nan": {
            "version": "1.0.1",
--          "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
++          "resolved": false,
            "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
-           "dev": true
-         },
-         "oauth-sign": {
-           "version": "0.8.2",
-           "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
-           "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
            "dev": true,
            "optional": true
          },
          "object-assign": {
            "version": "4.1.1",
--          "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
++          "resolved": false,
            "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
            "dev": true,
            "optional": true
          },
          "once": {
            "version": "1.4.0",
--          "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
++          "resolved": false,
            "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
            "dev": true,
+           "optional": true,
            "requires": {
-             "wrappy": "1.0.2"
+             "wrappy": "1"
            }
          },
          "os-homedir": {
            "version": "1.0.2",
--          "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
++          "resolved": false,
            "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
            "dev": true,
            "optional": true
          },
          "os-tmpdir": {
            "version": "1.0.2",
--          "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
++          "resolved": false,
            "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
            "dev": true,
            "optional": true
@@@ -5719,14 -4929,8 +4929,8 @@@
          },
          "path-is-absolute": {
            "version": "1.0.1",
--          "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
++          "resolved": false,
            "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
-           "dev": true
-         },
-         "performance-now": {
-           "version": "0.2.0",
-           "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz",
-           "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=",
            "dev": true,
            "optional": true
          },
@@@ -5765,7 -4956,7 +4956,7 @@@
            "dependencies": {
              "minimist": {
                "version": "1.2.0",
--              "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
++              "resolved": false,
                "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
                "dev": true,
                "optional": true
@@@ -5918,37 -5017,24 +5017,24 @@@
            "dev": true,
            "optional": true
          },
-         "strip-ansi": {
-           "version": "3.0.1",
-           "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
-           "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+         "set-blocking": {
+           "version": "2.0.0",
 -          "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
++          "resolved": false,
+           "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
            "dev": true,
-           "requires": {
-             "ansi-regex": "2.1.1"
-           }
+           "optional": true
          },
-         "strip-json-comments": {
-           "version": "2.0.1",
-           "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
-           "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+         "signal-exit": {
+           "version": "3.0.2",
 -          "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
++          "resolved": false,
+           "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
            "dev": true,
            "optional": true
          },
-         "tar": {
-           "version": "2.2.1",
-           "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
-           "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
-           "dev": true,
-           "requires": {
-             "block-stream": "0.0.9",
-             "fstream": "1.0.11",
-             "inherits": "2.0.3"
-           }
-         },
-         "tar-pack": {
-           "version": "3.4.0",
-           "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.4.0.tgz",
-           "integrity": "sha1-I74tf2cagzk3bL2wuP4/3r8xeYQ=",
+         "string-width": {
+           "version": "1.0.2",
 -          "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
++          "resolved": false,
+           "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
            "dev": true,
            "optional": true,
            "requires": {
@@@ -5969,23 -5050,23 +5050,23 @@@
            "dev": true,
            "optional": true,
            "requires": {
-             "punycode": "1.4.1"
+             "safe-buffer": "~5.1.0"
            }
          },
-         "tunnel-agent": {
-           "version": "0.6.0",
-           "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
-           "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+         "strip-ansi": {
+           "version": "3.0.1",
 -          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
++          "resolved": false,
+           "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
            "dev": true,
            "optional": true,
            "requires": {
-             "safe-buffer": "5.0.1"
+             "ansi-regex": "^2.0.0"
            }
          },
-         "tweetnacl": {
-           "version": "0.14.5",
-           "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
-           "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+         "strip-json-comments": {
+           "version": "2.0.1",
 -          "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
++          "resolved": false,
+           "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
            "dev": true,
            "optional": true
          },
@@@ -5998,14 -5088,8 +5088,8 @@@
          },
          "util-deprecate": {
            "version": "1.0.2",
--          "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
++          "resolved": false,
            "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
-           "dev": true
-         },
-         "uuid": {
-           "version": "3.0.1",
-           "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz",
-           "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=",
            "dev": true,
            "optional": true
          },
@@@ -6031,9 -5105,17 +5105,17 @@@
          },
          "wrappy": {
            "version": "1.0.2",
--          "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
++          "resolved": false,
            "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
-           "dev": true
+           "dev": true,
+           "optional": true
+         },
+         "yallist": {
+           "version": "3.0.3",
+           "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
+           "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==",
+           "dev": true,
+           "optional": true
          }
        }
      },
@@@ -13078,24 -11200,29 +11200,29 @@@
            "dependencies": {
              "abbrev": {
                "version": "1.1.1",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
++              "resolved": false,
+               "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
                "dev": true,
                "optional": true
              },
              "ansi-regex": {
                "version": "2.1.1",
-               "bundled": true,
-               "dev": true
 -              "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
++              "resolved": false,
+               "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+               "dev": true,
+               "optional": true
              },
              "aproba": {
                "version": "1.2.0",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
++              "resolved": false,
+               "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
                "dev": true,
                "optional": true
              },
              "are-we-there-yet": {
                "version": "1.1.5",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
++              "resolved": false,
+               "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -13105,48 -11232,61 +11232,61 @@@
              },
              "balanced-match": {
                "version": "1.0.0",
-               "bundled": true,
-               "dev": true
 -              "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
++              "resolved": false,
+               "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+               "dev": true,
+               "optional": true
              },
              "brace-expansion": {
                "version": "1.1.11",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
++              "resolved": false,
+               "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
                "dev": true,
+               "optional": true,
                "requires": {
-                 "balanced-match": "1.0.0",
+                 "balanced-match": "^1.0.0",
                  "concat-map": "0.0.1"
                }
              },
              "chownr": {
                "version": "1.1.1",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz",
++              "resolved": false,
+               "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==",
                "dev": true,
                "optional": true
              },
              "code-point-at": {
                "version": "1.1.0",
-               "bundled": true,
-               "dev": true
 -              "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
++              "resolved": false,
+               "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+               "dev": true,
+               "optional": true
              },
              "concat-map": {
                "version": "0.0.1",
-               "bundled": true,
-               "dev": true
 -              "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
++              "resolved": false,
+               "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+               "dev": true,
+               "optional": true
              },
              "console-control-strings": {
                "version": "1.1.0",
-               "bundled": true,
-               "dev": true
 -              "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
++              "resolved": false,
+               "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
+               "dev": true,
+               "optional": true
              },
              "core-util-is": {
                "version": "1.0.2",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
++              "resolved": false,
+               "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
                "dev": true,
                "optional": true
              },
              "debug": {
                "version": "2.6.9",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
++              "resolved": false,
+               "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -13155,25 -11295,29 +11295,29 @@@
              },
              "deep-extend": {
                "version": "0.6.0",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
++              "resolved": false,
+               "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
                "dev": true,
                "optional": true
              },
              "delegates": {
                "version": "1.0.0",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
++              "resolved": false,
+               "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
                "dev": true,
                "optional": true
              },
              "detect-libc": {
                "version": "1.0.3",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
++              "resolved": false,
+               "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
                "dev": true,
                "optional": true
              },
              "fs-minipass": {
                "version": "1.2.5",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz",
++              "resolved": false,
+               "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -13182,13 -11326,15 +11326,15 @@@
              },
              "fs.realpath": {
                "version": "1.0.0",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
++              "resolved": false,
+               "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
                "dev": true,
                "optional": true
              },
              "gauge": {
                "version": "2.7.4",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
++              "resolved": false,
+               "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -13204,7 -11350,8 +11350,8 @@@
              },
              "glob": {
                "version": "7.1.3",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
++              "resolved": false,
+               "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -13218,13 -11365,15 +11365,15 @@@
              },
              "has-unicode": {
                "version": "2.0.1",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
++              "resolved": false,
+               "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
                "dev": true,
                "optional": true
              },
              "iconv-lite": {
                "version": "0.4.24",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
++              "resolved": false,
+               "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -13233,7 -11382,8 +11382,8 @@@
              },
              "ignore-walk": {
                "version": "3.0.1",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz",
++              "resolved": false,
+               "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -13242,7 -11392,8 +11392,8 @@@
              },
              "inflight": {
                "version": "1.0.6",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
++              "resolved": false,
+               "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -13252,54 -11403,67 +11403,67 @@@
              },
              "inherits": {
                "version": "2.0.3",
-               "bundled": true,
-               "dev": true
 -              "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
++              "resolved": false,
+               "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+               "dev": true,
+               "optional": true
              },
              "ini": {
                "version": "1.3.5",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
++              "resolved": false,
+               "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
                "dev": true,
                "optional": true
              },
              "is-fullwidth-code-point": {
                "version": "1.0.0",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
++              "resolved": false,
+               "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
                "dev": true,
+               "optional": true,
                "requires": {
-                 "number-is-nan": "1.0.1"
+                 "number-is-nan": "^1.0.0"
                }
              },
              "isarray": {
                "version": "1.0.0",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
++              "resolved": false,
+               "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
                "dev": true,
                "optional": true
              },
              "minimatch": {
                "version": "3.0.4",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
++              "resolved": false,
+               "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
                "dev": true,
+               "optional": true,
                "requires": {
-                 "brace-expansion": "1.1.11"
+                 "brace-expansion": "^1.1.7"
                }
              },
              "minimist": {
                "version": "0.0.8",
-               "bundled": true,
-               "dev": true
 -              "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
++              "resolved": false,
+               "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+               "dev": true,
+               "optional": true
              },
              "minipass": {
                "version": "2.3.5",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz",
++              "resolved": false,
+               "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==",
                "dev": true,
+               "optional": true,
                "requires": {
-                 "safe-buffer": "5.1.2",
-                 "yallist": "3.0.3"
+                 "safe-buffer": "^5.1.2",
+                 "yallist": "^3.0.0"
                }
              },
              "minizlib": {
                "version": "1.2.1",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz",
++              "resolved": false,
+               "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -13308,21 -11472,25 +11472,25 @@@
              },
              "mkdirp": {
                "version": "0.5.1",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
++              "resolved": false,
+               "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
                "dev": true,
+               "optional": true,
                "requires": {
                  "minimist": "0.0.8"
                }
              },
              "ms": {
                "version": "2.0.0",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
++              "resolved": false,
+               "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
                "dev": true,
                "optional": true
              },
              "needle": {
                "version": "2.2.4",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.4.tgz",
++              "resolved": false,
+               "integrity": "sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -13333,7 -11501,8 +11501,8 @@@
              },
              "node-pre-gyp": {
                "version": "0.10.3",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz",
++              "resolved": false,
+               "integrity": "sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -13351,7 -11520,8 +11520,8 @@@
              },
              "nopt": {
                "version": "4.0.1",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
++              "resolved": false,
+               "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -13361,13 -11531,15 +11531,15 @@@
              },
              "npm-bundled": {
                "version": "1.0.5",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.5.tgz",
++              "resolved": false,
+               "integrity": "sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g==",
                "dev": true,
                "optional": true
              },
              "npm-packlist": {
                "version": "1.2.0",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.2.0.tgz",
++              "resolved": false,
+               "integrity": "sha512-7Mni4Z8Xkx0/oegoqlcao/JpPCPEMtUvsmB0q7mgvlMinykJLSRTYuFqoQLYgGY8biuxIeiHO+QNJKbCfljewQ==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -13377,7 -11549,8 +11549,8 @@@
              },
              "npmlog": {
                "version": "4.1.2",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
++              "resolved": false,
+               "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -13389,38 -11562,46 +11562,46 @@@
              },
              "number-is-nan": {
                "version": "1.0.1",
-               "bundled": true,
-               "dev": true
 -              "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
++              "resolved": false,
+               "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+               "dev": true,
+               "optional": true
              },
              "object-assign": {
                "version": "4.1.1",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
++              "resolved": false,
+               "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
                "dev": true,
                "optional": true
              },
              "once": {
                "version": "1.4.0",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
++              "resolved": false,
+               "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
                "dev": true,
+               "optional": true,
                "requires": {
-                 "wrappy": "1.0.2"
+                 "wrappy": "1"
                }
              },
              "os-homedir": {
                "version": "1.0.2",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
++              "resolved": false,
+               "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
                "dev": true,
                "optional": true
              },
              "os-tmpdir": {
                "version": "1.0.2",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
++              "resolved": false,
+               "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
                "dev": true,
                "optional": true
              },
              "osenv": {
                "version": "0.1.5",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
++              "resolved": false,
+               "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -13430,19 -11611,22 +11611,22 @@@
              },
              "path-is-absolute": {
                "version": "1.0.1",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
++              "resolved": false,
+               "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
                "dev": true,
                "optional": true
              },
              "process-nextick-args": {
                "version": "2.0.0",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
++              "resolved": false,
+               "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
                "dev": true,
                "optional": true
              },
              "rc": {
                "version": "1.2.8",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
++              "resolved": false,
+               "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -13454,7 -11638,8 +11638,8 @@@
                "dependencies": {
                  "minimist": {
                    "version": "1.2.0",
-                   "bundled": true,
 -                  "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
++                  "resolved": false,
+                   "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
                    "dev": true,
                    "optional": true
                  }
@@@ -13462,7 -11647,8 +11647,8 @@@
              },
              "readable-stream": {
                "version": "2.3.6",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
++              "resolved": false,
+               "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -13477,7 -11663,8 +11663,8 @@@
              },
              "rimraf": {
                "version": "2.6.3",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
++              "resolved": false,
+               "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -13486,52 -11673,62 +11673,62 @@@
              },
              "safe-buffer": {
                "version": "5.1.2",
-               "bundled": true,
-               "dev": true
 -              "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
++              "resolved": false,
+               "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+               "dev": true,
+               "optional": true
              },
              "safer-buffer": {
                "version": "2.1.2",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
++              "resolved": false,
+               "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
                "dev": true,
                "optional": true
              },
              "sax": {
                "version": "1.2.4",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
++              "resolved": false,
+               "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
                "dev": true,
                "optional": true
              },
              "semver": {
                "version": "5.6.0",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
++              "resolved": false,
+               "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
                "dev": true,
                "optional": true
              },
              "set-blocking": {
                "version": "2.0.0",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
++              "resolved": false,
+               "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
                "dev": true,
                "optional": true
              },
              "signal-exit": {
                "version": "3.0.2",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
++              "resolved": false,
+               "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
                "dev": true,
                "optional": true
              },
              "string-width": {
                "version": "1.0.2",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
++              "resolved": false,
+               "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
                "dev": true,
+               "optional": true,
                "requires": {
-                 "code-point-at": "1.1.0",
-                 "is-fullwidth-code-point": "1.0.0",
-                 "strip-ansi": "3.0.1"
+                 "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,
 -              "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
++              "resolved": false,
+               "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -13540,21 -11737,25 +11737,25 @@@
              },
              "strip-ansi": {
                "version": "3.0.1",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
++              "resolved": false,
+               "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
                "dev": true,
+               "optional": true,
                "requires": {
-                 "ansi-regex": "2.1.1"
+                 "ansi-regex": "^2.0.0"
                }
              },
              "strip-json-comments": {
                "version": "2.0.1",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
++              "resolved": false,
+               "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
                "dev": true,
                "optional": true
              },
              "tar": {
                "version": "4.4.8",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz",
++              "resolved": false,
+               "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -13569,13 -11770,15 +11770,15 @@@
              },
              "util-deprecate": {
                "version": "1.0.2",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
++              "resolved": false,
+               "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
                "dev": true,
                "optional": true
              },
              "wide-align": {
                "version": "1.1.3",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
++              "resolved": false,
+               "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -13584,13 -11787,17 +11787,17 @@@
              },
              "wrappy": {
                "version": "1.0.2",
-               "bundled": true,
-               "dev": true
 -              "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
++              "resolved": false,
+               "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+               "dev": true,
+               "optional": true
              },
              "yallist": {
                "version": "3.0.3",
-               "bundled": true,
-               "dev": true
 -              "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
++              "resolved": false,
+               "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==",
+               "dev": true,
+               "optional": true
              }
            }
          },
@@@ -14547,24 -12780,29 +12780,29 @@@
            "dependencies": {
              "abbrev": {
                "version": "1.1.1",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
++              "resolved": false,
+               "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
                "dev": true,
                "optional": true
              },
              "ansi-regex": {
                "version": "2.1.1",
-               "bundled": true,
-               "dev": true
 -              "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
++              "resolved": false,
+               "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+               "dev": true,
+               "optional": true
              },
              "aproba": {
                "version": "1.2.0",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
++              "resolved": false,
+               "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
                "dev": true,
                "optional": true
              },
              "are-we-there-yet": {
                "version": "1.1.5",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
++              "resolved": false,
+               "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -14574,48 -12812,61 +12812,61 @@@
              },
              "balanced-match": {
                "version": "1.0.0",
-               "bundled": true,
-               "dev": true
 -              "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
++              "resolved": false,
+               "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+               "dev": true,
+               "optional": true
              },
              "brace-expansion": {
                "version": "1.1.11",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
++              "resolved": false,
+               "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
                "dev": true,
+               "optional": true,
                "requires": {
-                 "balanced-match": "1.0.0",
+                 "balanced-match": "^1.0.0",
                  "concat-map": "0.0.1"
                }
              },
              "chownr": {
                "version": "1.1.1",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz",
++              "resolved": false,
+               "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==",
                "dev": true,
                "optional": true
              },
              "code-point-at": {
                "version": "1.1.0",
-               "bundled": true,
-               "dev": true
 -              "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
++              "resolved": false,
+               "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+               "dev": true,
+               "optional": true
              },
              "concat-map": {
                "version": "0.0.1",
-               "bundled": true,
-               "dev": true
 -              "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
++              "resolved": false,
+               "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+               "dev": true,
+               "optional": true
              },
              "console-control-strings": {
                "version": "1.1.0",
-               "bundled": true,
-               "dev": true
 -              "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
++              "resolved": false,
+               "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
+               "dev": true,
+               "optional": true
              },
              "core-util-is": {
                "version": "1.0.2",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
++              "resolved": false,
+               "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
                "dev": true,
                "optional": true
              },
              "debug": {
                "version": "2.6.9",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
++              "resolved": false,
+               "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -14624,25 -12875,29 +12875,29 @@@
              },
              "deep-extend": {
                "version": "0.6.0",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
++              "resolved": false,
+               "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
                "dev": true,
                "optional": true
              },
              "delegates": {
                "version": "1.0.0",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
++              "resolved": false,
+               "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
                "dev": true,
                "optional": true
              },
              "detect-libc": {
                "version": "1.0.3",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
++              "resolved": false,
+               "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
                "dev": true,
                "optional": true
              },
              "fs-minipass": {
                "version": "1.2.5",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz",
++              "resolved": false,
+               "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -14651,13 -12906,15 +12906,15 @@@
              },
              "fs.realpath": {
                "version": "1.0.0",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
++              "resolved": false,
+               "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
                "dev": true,
                "optional": true
              },
              "gauge": {
                "version": "2.7.4",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
++              "resolved": false,
+               "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -14673,7 -12930,8 +12930,8 @@@
              },
              "glob": {
                "version": "7.1.3",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
++              "resolved": false,
+               "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -14687,13 -12945,15 +12945,15 @@@
              },
              "has-unicode": {
                "version": "2.0.1",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
++              "resolved": false,
+               "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
                "dev": true,
                "optional": true
              },
              "iconv-lite": {
                "version": "0.4.24",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
++              "resolved": false,
+               "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -14702,7 -12962,8 +12962,8 @@@
              },
              "ignore-walk": {
                "version": "3.0.1",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz",
++              "resolved": false,
+               "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -14711,7 -12972,8 +12972,8 @@@
              },
              "inflight": {
                "version": "1.0.6",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
++              "resolved": false,
+               "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -14721,54 -12983,67 +12983,67 @@@
              },
              "inherits": {
                "version": "2.0.3",
-               "bundled": true,
-               "dev": true
 -              "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
++              "resolved": false,
+               "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+               "dev": true,
+               "optional": true
              },
              "ini": {
                "version": "1.3.5",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
++              "resolved": false,
+               "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
                "dev": true,
                "optional": true
              },
              "is-fullwidth-code-point": {
                "version": "1.0.0",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
++              "resolved": false,
+               "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
                "dev": true,
+               "optional": true,
                "requires": {
-                 "number-is-nan": "1.0.1"
+                 "number-is-nan": "^1.0.0"
                }
              },
              "isarray": {
                "version": "1.0.0",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
++              "resolved": false,
+               "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
                "dev": true,
                "optional": true
              },
              "minimatch": {
                "version": "3.0.4",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
++              "resolved": false,
+               "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
                "dev": true,
+               "optional": true,
                "requires": {
-                 "brace-expansion": "1.1.11"
+                 "brace-expansion": "^1.1.7"
                }
              },
              "minimist": {
                "version": "0.0.8",
-               "bundled": true,
-               "dev": true
 -              "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
++              "resolved": false,
+               "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+               "dev": true,
+               "optional": true
              },
              "minipass": {
                "version": "2.3.5",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz",
++              "resolved": false,
+               "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==",
                "dev": true,
+               "optional": true,
                "requires": {
-                 "safe-buffer": "5.1.2",
-                 "yallist": "3.0.3"
+                 "safe-buffer": "^5.1.2",
+                 "yallist": "^3.0.0"
                }
              },
              "minizlib": {
                "version": "1.2.1",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz",
++              "resolved": false,
+               "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -14777,21 -13052,25 +13052,25 @@@
              },
              "mkdirp": {
                "version": "0.5.1",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
++              "resolved": false,
+               "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
                "dev": true,
+               "optional": true,
                "requires": {
                  "minimist": "0.0.8"
                }
              },
              "ms": {
                "version": "2.0.0",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
++              "resolved": false,
+               "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
                "dev": true,
                "optional": true
              },
              "needle": {
                "version": "2.2.4",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.4.tgz",
++              "resolved": false,
+               "integrity": "sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -14802,7 -13081,8 +13081,8 @@@
              },
              "node-pre-gyp": {
                "version": "0.10.3",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz",
++              "resolved": false,
+               "integrity": "sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -14820,7 -13100,8 +13100,8 @@@
              },
              "nopt": {
                "version": "4.0.1",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
++              "resolved": false,
+               "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -14830,13 -13111,15 +13111,15 @@@
              },
              "npm-bundled": {
                "version": "1.0.5",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.5.tgz",
++              "resolved": false,
+               "integrity": "sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g==",
                "dev": true,
                "optional": true
              },
              "npm-packlist": {
                "version": "1.2.0",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.2.0.tgz",
++              "resolved": false,
+               "integrity": "sha512-7Mni4Z8Xkx0/oegoqlcao/JpPCPEMtUvsmB0q7mgvlMinykJLSRTYuFqoQLYgGY8biuxIeiHO+QNJKbCfljewQ==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -14846,7 -13129,8 +13129,8 @@@
              },
              "npmlog": {
                "version": "4.1.2",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
++              "resolved": false,
+               "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -14858,38 -13142,46 +13142,46 @@@
              },
              "number-is-nan": {
                "version": "1.0.1",
-               "bundled": true,
-               "dev": true
 -              "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
++              "resolved": false,
+               "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+               "dev": true,
+               "optional": true
              },
              "object-assign": {
                "version": "4.1.1",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
++              "resolved": false,
+               "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
                "dev": true,
                "optional": true
              },
              "once": {
                "version": "1.4.0",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
++              "resolved": false,
+               "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
                "dev": true,
+               "optional": true,
                "requires": {
-                 "wrappy": "1.0.2"
+                 "wrappy": "1"
                }
              },
              "os-homedir": {
                "version": "1.0.2",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
++              "resolved": false,
+               "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
                "dev": true,
                "optional": true
              },
              "os-tmpdir": {
                "version": "1.0.2",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
++              "resolved": false,
+               "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
                "dev": true,
                "optional": true
              },
              "osenv": {
                "version": "0.1.5",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
++              "resolved": false,
+               "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -14899,19 -13191,22 +13191,22 @@@
              },
              "path-is-absolute": {
                "version": "1.0.1",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
++              "resolved": false,
+               "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
                "dev": true,
                "optional": true
              },
              "process-nextick-args": {
                "version": "2.0.0",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
++              "resolved": false,
+               "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
                "dev": true,
                "optional": true
              },
              "rc": {
                "version": "1.2.8",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
++              "resolved": false,
+               "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -14923,7 -13218,8 +13218,8 @@@
                "dependencies": {
                  "minimist": {
                    "version": "1.2.0",
-                   "bundled": true,
 -                  "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
++                  "resolved": false,
+                   "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
                    "dev": true,
                    "optional": true
                  }
@@@ -14931,7 -13227,8 +13227,8 @@@
              },
              "readable-stream": {
                "version": "2.3.6",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
++              "resolved": false,
+               "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -14946,7 -13243,8 +13243,8 @@@
              },
              "rimraf": {
                "version": "2.6.3",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
++              "resolved": false,
+               "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -14955,52 -13253,62 +13253,62 @@@
              },
              "safe-buffer": {
                "version": "5.1.2",
-               "bundled": true,
-               "dev": true
 -              "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
++              "resolved": false,
+               "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+               "dev": true,
+               "optional": true
              },
              "safer-buffer": {
                "version": "2.1.2",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
++              "resolved": false,
+               "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
                "dev": true,
                "optional": true
              },
              "sax": {
                "version": "1.2.4",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
++              "resolved": false,
+               "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
                "dev": true,
                "optional": true
              },
              "semver": {
                "version": "5.6.0",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
++              "resolved": false,
+               "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
                "dev": true,
                "optional": true
              },
              "set-blocking": {
                "version": "2.0.0",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
++              "resolved": false,
+               "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
                "dev": true,
                "optional": true
              },
              "signal-exit": {
                "version": "3.0.2",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
++              "resolved": false,
+               "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
                "dev": true,
                "optional": true
              },
              "string-width": {
                "version": "1.0.2",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
++              "resolved": false,
+               "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
                "dev": true,
+               "optional": true,
                "requires": {
-                 "code-point-at": "1.1.0",
-                 "is-fullwidth-code-point": "1.0.0",
-                 "strip-ansi": "3.0.1"
+                 "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,
 -              "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
++              "resolved": false,
+               "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -15009,21 -13317,25 +13317,25 @@@
              },
              "strip-ansi": {
                "version": "3.0.1",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
++              "resolved": false,
+               "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
                "dev": true,
+               "optional": true,
                "requires": {
-                 "ansi-regex": "2.1.1"
+                 "ansi-regex": "^2.0.0"
                }
              },
              "strip-json-comments": {
                "version": "2.0.1",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
++              "resolved": false,
+               "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
                "dev": true,
                "optional": true
              },
              "tar": {
                "version": "4.4.8",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz",
++              "resolved": false,
+               "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -15038,13 -13350,15 +13350,15 @@@
              },
              "util-deprecate": {
                "version": "1.0.2",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
++              "resolved": false,
+               "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
                "dev": true,
                "optional": true
              },
              "wide-align": {
                "version": "1.1.3",
-               "bundled": true,
 -              "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
++              "resolved": false,
+               "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
                "dev": true,
                "optional": true,
                "requires": {
@@@ -15053,13 -13367,17 +13367,17 @@@
              },
              "wrappy": {
                "version": "1.0.2",
-               "bundled": true,
-               "dev": true
 -              "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
++              "resolved": false,
+               "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+               "dev": true,
+               "optional": true
              },
              "yallist": {
                "version": "3.0.3",
-               "bundled": true,
-               "dev": true
 -              "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
++              "resolved": false,
+               "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==",
+               "dev": true,
+               "optional": true
              }
            }
          },
diff --cc services/self-service/src/main/resources/webapp/src/dictionary/gcp.dictionary.ts
index 86355b1,e477161..4db72cf
--- a/services/self-service/src/main/resources/webapp/src/dictionary/gcp.dictionary.ts
+++ b/services/self-service/src/main/resources/webapp/src/dictionary/gcp.dictionary.ts
@@@ -18,72 -18,74 +18,74 @@@
   */
  
  export const NAMING_CONVENTION = {
-   'cloud_provider': 'gcp',
-   'use_ldap': true,
-   'notebook_instance_size': 'Instance type',
-   'personal_storage': 'Data bucket',
-   'collaboration_storage': 'Collaboration bucket',
-   'account': '',
-   'container': '',
-   'data_engine': 'Deploy Spark Server / Deploy Dataproc',
-   'image': 'Not available',
-   'data_engine_master_instance_size': 'Master machine type',
-   'data_engine_slave_instance_size': 'Slave machine type',
+     'cloud_provider': 'gcp',
+     'use_ldap': true,
+     'notebook_instance_size': 'Instance type',
+     'personal_storage': 'Data bucket',
+     'collaboration_storage': 'Collaboration bucket',
+     'account': '',
+     'container': '',
+     'data_engine': 'Deploy Spark Server / Deploy Dataproc',
+     'image': 'Not available',
+     'data_engine_master_instance_size': 'Master machine type',
+     'data_engine_slave_instance_size': 'Slave machine type',
  
-   'master_node_shape': 'master_node_shape',
-   'slave_node_shape': 'slave_node_shape',
-   'total_instance_number': 'total_instance_number',
+     'master_node_shape': 'master_node_shape',
+     'slave_node_shape': 'slave_node_shape',
+     'total_instance_number': 'total_instance_number',
  
-   'spot_instance': 'Preemptible worker nodes',
-   'billing': {
-       'resourceName': 'resource_name',
-       'cost': 'cost',
-       'costTotal': 'cost_total',
-       'currencyCode': 'currency_code',
-       'dateFrom': 'from',
-       'dateTo': 'to',
-       'service': 'product',
-       'service_filter_key': 'product',
-       'type': 'dlab_resource_type',
-       'resourceType': 'dlab_resource_type',
-       'instance_size': 'shape',
-       'dlabId': 'dlab_id'
-   },
-   'service': 'Product',
-   'type': 'Resource',
-   'instance_size': 'Type',
-   'computational_resource': 'Computational resources',
-   'user_storage_account_name': '',
-   'shared_storage_account_name': '',
-   'bucket_name': 'user_own_bucket_name',
-   'shared_bucket_name': 'shared_bucket_name',
-   'datalake_name': '',
-   'datalake_user_directory_name': '',
-   'datalake_shared_directory_name': '',
-   'docker.dlab-dataengine-service': {
-       'total_instance_number_min': 'min_instance_count',
-       'total_instance_number_max': 'max_instance_count',
-       'min_emr_spot_instance_bid_pct': 'min_emr_spot_instance_bid_pct',
-       'max_emr_spot_instance_bid_pct': 'max_emr_spot_instance_bid_pct',
-       'data_engine_master_instance_size': 'Master machine type',
-       'data_engine_slave_instance_size': 'Slave machine type',
-       'instance_number': 'Total machine count',
-       'master_instance_number': 'Master node count',
-       'slave_instance_number': 'Worker node count',
-       'master_node_shape': 'master_node_shape',
-       'slave_node_shape': 'slave_node_shape',
-       'total_instance_number': 'total_master_instance_number',
-       'total_slave_instance_number': 'total_slave_instance_number',
-   },
-   'docker.dlab-dataengine': {
-       'total_instance_number_min': 'min_spark_instance_count',
-       'total_instance_number_max': 'max_spark_instance_count',
-       'data_engine_master_instance_size': 'Machine type',
-       'instance_number': 'Total machine number',
-       'master_instance_number': 'Master machine number',
-       'master_node_shape': 'dataengine_instance_shape',
-       'total_instance_number': 'dataengine_instance_count',
-   }
+     'spot_instance': 'Preemptible worker nodes',
+     'cluster_version': 'dataproc_version',
+     'billing': {
+         'resourceName': 'resource_name',
+         'cost': 'cost',
+         'costTotal': 'cost_total',
+         'currencyCode': 'currency_code',
 -        'dateFrom': 'usage_date_start',
 -        'dateTo': 'usage_date_end',
++        'dateFrom': 'from',
++        'dateTo': 'to',
+         'service': 'product',
+         'service_filter_key': 'product',
 -        'type': 'resource_type',
++        'type': 'dlab_resource_type',
+         'resourceType': 'dlab_resource_type',
+         'instance_size': 'shape',
+         'dlabId': 'dlab_id'
+     },
+     'service': 'Product',
+     'type': 'Resource',
+     'instance_size': 'Type',
+     'computational_resource': 'Computational resources',
+     'user_storage_account_name': '',
+     'shared_storage_account_name': '',
+     'bucket_name': 'user_own_bucket_name',
+     'shared_bucket_name': 'shared_bucket_name',
+     'datalake_name': '',
+     'datalake_user_directory_name': '',
+     'datalake_shared_directory_name': '',
+     'docker.dlab-dataengine-service': {
+         'total_instance_number_min': 'min_instance_count',
+         'total_instance_number_max': 'max_instance_count',
+         'min_emr_spot_instance_bid_pct': 'min_emr_spot_instance_bid_pct',
+         'max_emr_spot_instance_bid_pct': 'max_emr_spot_instance_bid_pct',
+         'data_engine_master_instance_size': 'Master machine type',
+         'data_engine_slave_instance_size': 'Slave machine type',
+         'instance_number': 'Total machine count',
+         'master_instance_number': 'Master node count',
+         'slave_instance_number': 'Worker node count',
+         'master_node_shape': 'master_node_shape',
+         'slave_node_shape': 'slave_node_shape',
+         'total_instance_number': 'total_master_instance_number',
+         'total_slave_instance_number': 'total_slave_instance_number',
+     },
+     'docker.dlab-dataengine': {
+         'total_instance_number_min': 'min_spark_instance_count',
+         'total_instance_number_max': 'max_spark_instance_count',
+         'data_engine_master_instance_size': 'Machine type',
+         'instance_number': 'Total machine number',
+         'master_instance_number': 'Master machine number',
+         'master_node_shape': 'dataengine_instance_shape',
+         'total_instance_number': 'dataengine_instance_count',
+     },
+     'max_project_name_length': 10
  };
  
  export class ReportingConfigModel {


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org