~zacbrown/api.zacbrown.org-infra

d795470befa398738854e41985ec5764f4a97c8b — Zac Brown 5 months ago
Pulumi deploy code for EC2 instance using Cloud Init as user data.
A  => .gitignore +1 -0
@@ 1,1 @@
.DS_Store

A  => deploy-ec2-cloudinit/.gitignore +2 -0
@@ 1,2 @@
/bin/
/node_modules/

A  => deploy-ec2-cloudinit/Pulumi.dev.yaml +5 -0
@@ 1,5 @@
config:
  api.zacbrown.org:iamAccessKeyId: AKIARXV7PKGM67NZNLSI
  api.zacbrown.org:iamAccessKeySecret:
    secure: AAABADUa+j71kFkHyQPeZ+PezD8CPnpFo/2Ux4oSnVbPh/bKpvjeqKOkjVJ+tqm9t7U5AySauUpR0QdvDsfph8gFKLqi4CzC
  aws:region: us-west-2

A  => deploy-ec2-cloudinit/Pulumi.yaml +3 -0
@@ 1,3 @@
name: api.zacbrown.org
runtime: nodejs
description: A silly API for playing with at api.zacbrown.org.

A  => deploy-ec2-cloudinit/config.ts +12 -0
@@ 1,12 @@
import * as aws from "@pulumi/aws";
import * as pulumi from "@pulumi/pulumi";

const config = new pulumi.Config();

export const iamAccessKeyId = config.require("iamAccessKeyId");
export const iamAccessKeySecret = config.require("iamAccessKeySecret");

// instanceType is the WebServer EC2 instance type.
export const instanceType: aws.ec2.InstanceType = <aws.ec2.InstanceType>config.get("instanceType") || "t3a.nano";

export const awsRegion = aws.config.region;
\ No newline at end of file

A  => deploy-ec2-cloudinit/files/build_app +26 -0
@@ 1,26 @@
#!/bin/bash -e

export GOROOT=/opt/go
export PATH=$PATH:$GOROOT/bin/
export HOME=/home/ec2-user

cd $HOME

# Kill the app server if it's running.
if pgrep api.zacbrown.org &> /dev/null ; then pkill -TERM api.zacbrown.org  ; fi

# Setup the GOPATH
export GIT_ACCOUNT_ROOT=$HOME/go/src/git.sr.ht/~zacbrown/
mkdir -p $GIT_ACCOUNT_ROOT

# Fetch the project
export GIT_REPO_NAME=api.zacbrown.org-app
cd $GIT_ACCOUNT_ROOT
git clone https://git.sr.ht/~zacbrown/$GIT_REPO_NAME
cd $GIT_REPO_NAME

# Build the binary.
go get -u
go build

mv /tmp/config.toml $HOME/
\ No newline at end of file

A  => deploy-ec2-cloudinit/files/config.toml +4 -0
@@ 1,4 @@
[AwsConfig]
IamAccessKeyId = "{{iamAccessKeyId}}"
IamAccessKeySecret = "{{iamAccessKeySecret}}"
Region = "{{awsRegion}}"
\ No newline at end of file

A  => deploy-ec2-cloudinit/files/install_golang +6 -0
@@ 1,6 @@
#!/bin/bash -e
cd /opt/
curl -sSL -O https://dl.google.com/go/go1.13.4.linux-amd64.tar.gz
tar zxf go1.13.4.linux-amd64.tar.gz



A  => deploy-ec2-cloudinit/files/start_app +6 -0
@@ 1,6 @@
#!/bin/bash -e

export HOME=/home/ec2-user
export GOPATH=$HOME/go

$GOPATH/bin/api.zacbrown.org $HOME/config.toml
\ No newline at end of file

A  => deploy-ec2-cloudinit/files/update_system +4 -0
@@ 1,4 @@
#!/bin/bash -e

yum update -y
yum install -y git
\ No newline at end of file

A  => deploy-ec2-cloudinit/index.ts +160 -0
@@ 1,160 @@
import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
import * as awsx from "@pulumi/awsx";
import { createUserData, renderConfigFile } from "pcloudinit";
import * as config from "./config";
import * as toml from "@iarna/toml";
import {Output} from "@pulumi/pulumi/output";

// Create an IAM user for accessing relevant data in S3
const iamUser = new aws.iam.User("api.zacbrown.org-iam", {
    path: "/system/",
});
const iamAccessKey = new aws.iam.AccessKey("api.zacbrown.org-iam", {
    user: iamUser.name,
    pgpKey: "keybase:zacbrown",
});
const iamS3ReadOnly = new aws.iam.UserPolicy("api.zacbrown.org-iam-s3-ro", {
    policy: `{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::pub-static-files/*"
    }
  ]
}
`,
    user: iamUser.name,
});

// Create our VPC security group.
const webSg = new aws.ec2.SecurityGroup("webServerSecurityGroup", {
    description: "Enable HTTP and/or SSH access",
    egress: [
        { protocol: "-1", fromPort: 0, toPort: 0, cidrBlocks: [ "0.0.0.0/0" ] },
    ],
    ingress: [
        //{ protocol: "tcp", fromPort: 22, toPort: 22, cidrBlocks: [ "0.0.0.0/0" ] },
        { protocol: "tcp", fromPort: 80, toPort: 80, cidrBlocks: [ "0.0.0.0/0" ] },
        //{ protocol: "tcp", fromPort: 443, toPort: 443, cidrBlocks: [ "0.0.0.0/0" ] },
    ],
});

// Select the most recent version of Amazon Linux 2.
const amiId = aws.getAmi({
    filters: [
        {
            name: "name",
            values: ["amzn2-ami-hvm-2.0*"],
        },
        {
            name: "virtualization-type",
            values: ["hvm"],
        },
    ],
    mostRecent: true,
    owners: ["137112412989"], // Amazon
});

// Set the keypair for remote login.
const keypair = new aws.ec2.KeyPair("keypair", {
    publicKey: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD2uYdBlc7pPZvZ0bJDfRuqj4JEEhhTlGXYIZm0/K613S01d7WsxfXcJJOuy/ZrtGluBAtHVMDHfeD4eSrISstI5BxkFJILKLsw6yyAGDmNHvs+bMG3a6+9PWc8MFUlbJ5c33331Rb69I209Zem8kHuL62GBLIqgWVmYWL60zMTYvCSNCpFYOxzhdCAF8yDWtG6tI0DU6C+bXsD3c7guzxTqzehnfFg1IdcLdEH9ITtFFJnmvm4JIcWA7BohgY1UdXuNV0d1yGy3c3UtZOxHfZdzw6QERLXQ8X6sSupEA0dRZ/PpEQxrkWHnpDbAhLt3Cl5e83yUIyT+57/UkoXWrab",
});

// Create our AMI.
const awsInstanceWeb = new aws.ec2.Instance("webServer", {
    ami: amiId.id,
    instanceType: config.instanceType,
    securityGroups: [ webSg.name ],
    keyName: keypair.keyName,
    monitoring: true,
    userData: createUserData(
        ["update_system", "install_golang", "build_app", "start_app"],
        {
            "update_system": {
                files: {
                    "/tmp/update_system": {
                        content: renderConfigFile("./files/update_system", config),
                        mode: "000500",
                        owner: "root",
                        group: "root",
                    }
                },
                commands: {
                    "01_update_system": {
                        command: "/tmp/update_system > /var/log/update_system.log 2>&1"
                    }
                }
            },
            "install_golang": {
                files: {
                    "/tmp/install_golang": {
                        content: renderConfigFile("./files/install_golang", config),
                        mode: "000500",
                        owner: "root",
                        group: "root",
                    }
                },
                commands: {
                    "01_install_golang": {
                        command: "/tmp/install_golang > /var/log/install_golang.log 2>&1"
                    }
                }
            },
            "build_app": {
                files: {
                    "/tmp/config.toml": {
                        content: renderConfigFile("./files/config.toml", config),
                        mode: "000400",
                        owner: "root",
                        group: "root",
                    },
                    "/tmp/build_app": {
                        content: renderConfigFile("./files/build_app", config),
                        mode: "000500",
                        owner: "root",
                        group: "root",
                    }
                },
                commands: {
                    "01_build_app": {
                        command: "/tmp/build_app > /var/log/build_app.log 2>&1"
                    }
                }
            },
            "start_app": {
                files: {
                    "/tmp/start_app": {
                        content: renderConfigFile("./files/start_app", config),
                        mode: "000500",
                        owner: "root",
                        group: "root",
                    }
                },
                commands: {
                    "01_start_app": {
                        command: "/tmp/start_app > /var/log/start_app.log 2>&1"
                    }
                }
            },
        }
    ),
});

// Define an Elastic IP for our EC2 instance
const eip = new aws.ec2.Eip("eip", {
    vpc: true,
});

const eipAssoc = new aws.ec2.EipAssociation("eipAssoc", {
    allocationId: eip.id,
    instanceId: awsInstanceWeb.id,
});

// Export the Elastic IP in case we want to SSH.
export let publicElasticIp = eip.publicIp;
export let elasticIpAssocId = eipAssoc.allocationId
\ No newline at end of file

A  => deploy-ec2-cloudinit/package-lock.json +1415 -0
@@ 1,1415 @@
{
    "name": "aws-typescript",
    "requires": true,
    "lockfileVersion": 1,
    "dependencies": {
        "@iarna/toml": {
            "version": "2.2.3",
            "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.3.tgz",
            "integrity": "sha512-FmuxfCuolpLl0AnQ2NHSzoUKWEJDFl63qXjzdoWBVyFCXzMGm1spBzk7LeHNoVCiWCF7mRVms9e6jEV9+MoPbg=="
        },
        "@protobufjs/aspromise": {
            "version": "1.1.2",
            "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
            "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78="
        },
        "@protobufjs/base64": {
            "version": "1.1.2",
            "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
            "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="
        },
        "@protobufjs/codegen": {
            "version": "2.0.4",
            "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
            "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg=="
        },
        "@protobufjs/eventemitter": {
            "version": "1.1.0",
            "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
            "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A="
        },
        "@protobufjs/fetch": {
            "version": "1.1.0",
            "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz",
            "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=",
            "requires": {
                "@protobufjs/aspromise": "^1.1.1",
                "@protobufjs/inquire": "^1.1.0"
            }
        },
        "@protobufjs/float": {
            "version": "1.0.2",
            "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz",
            "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E="
        },
        "@protobufjs/inquire": {
            "version": "1.1.0",
            "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz",
            "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik="
        },
        "@protobufjs/path": {
            "version": "1.1.2",
            "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz",
            "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0="
        },
        "@protobufjs/pool": {
            "version": "1.1.0",
            "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz",
            "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q="
        },
        "@protobufjs/utf8": {
            "version": "1.1.0",
            "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
            "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA="
        },
        "@pulumi/aws": {
            "version": "1.10.0",
            "resolved": "https://registry.npmjs.org/@pulumi/aws/-/aws-1.10.0.tgz",
            "integrity": "sha512-JaBVLZoOkWesxHzWR/5C99mJ/qWAOZZ5eZp9kTtGQqEVSHPDQpBHw0YTl5hv/6err7joRpCNTa9Il06TRBgKhg==",
            "requires": {
                "@pulumi/pulumi": "^1.0.0",
                "aws-sdk": "^2.0.0",
                "builtin-modules": "3.0.0",
                "mime": "^2.0.0",
                "read-package-tree": "^5.2.1",
                "resolve": "^1.7.1"
            }
        },
        "@pulumi/awsx": {
            "version": "0.18.14",
            "resolved": "https://registry.npmjs.org/@pulumi/awsx/-/awsx-0.18.14.tgz",
            "integrity": "sha512-2etPn1fCPSk+xpIow9vqS398SVmNZlmJe3gP7icWSZeaON8ActfYE/89JEWLSSkWkzc7h8P+LavkLg2sYWmGnw==",
            "requires": {
                "@pulumi/aws": "^1.0.0",
                "@pulumi/docker": "^0.17.3",
                "@pulumi/pulumi": "^1.0.0",
                "@types/aws-lambda": "^8.10.23",
                "deasync": "^0.1.15",
                "mime": "^2.0.0"
            }
        },
        "@pulumi/docker": {
            "version": "0.17.4",
            "resolved": "https://registry.npmjs.org/@pulumi/docker/-/docker-0.17.4.tgz",
            "integrity": "sha512-uGnt9VEGXxCFTpIkCrULP2XTbSEJMH3vQrOq9Q+ATTnIxswlG0z/LkpuktEB6YmvnQqEUtTPPEM+p/RmLkqLrA==",
            "requires": {
                "@pulumi/pulumi": "^1.0.0",
                "semver": "^5.4.0"
            },
            "dependencies": {
                "semver": {
                    "version": "5.7.1",
                    "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
                    "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
                }
            }
        },
        "@pulumi/pulumi": {
            "version": "1.6.0",
            "resolved": "https://registry.npmjs.org/@pulumi/pulumi/-/pulumi-1.6.0.tgz",
            "integrity": "sha512-2aUibBsFT9rpE+5ZfqGGdUlNAVrlP79DWP0hm02h0toY/PzP1A+EyylUDhvt/3tbWN4Ejizwysi+WR08MtNBiw==",
            "requires": {
                "@pulumi/query": "^0.3.0",
                "deasync": "^0.1.15",
                "google-protobuf": "^3.5.0",
                "grpc": "1.24.2",
                "minimist": "^1.2.0",
                "normalize-package-data": "^2.4.0",
                "protobufjs": "^6.8.6",
                "read-package-tree": "^5.3.1",
                "require-from-string": "^2.0.1",
                "semver": "^6.1.0",
                "source-map-support": "^0.4.16",
                "ts-node": "^7.0.0",
                "typescript": "=3.6.3",
                "upath": "^1.1.0"
            }
        },
        "@pulumi/query": {
            "version": "0.3.0",
            "resolved": "https://registry.npmjs.org/@pulumi/query/-/query-0.3.0.tgz",
            "integrity": "sha512-xfo+yLRM2zVjVEA4p23IjQWzyWl1ZhWOGobsBqRpIarzLvwNH/RAGaoehdxlhx4X92302DrpdIFgTICMN4P38w=="
        },
        "@types/aws-lambda": {
            "version": "8.10.36",
            "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.36.tgz",
            "integrity": "sha512-oO7VHmHsr2V3U5uEVNfxO+h6nfDQ5kb8NPotwkzpYKnrW+cJ5BBRLdD7DAWx/7fEtMFnGg6L224Zn4tUxmnzcw=="
        },
        "@types/bytebuffer": {
            "version": "5.0.40",
            "resolved": "https://registry.npmjs.org/@types/bytebuffer/-/bytebuffer-5.0.40.tgz",
            "integrity": "sha512-h48dyzZrPMz25K6Q4+NCwWaxwXany2FhQg/ErOcdZS1ZpsaDnDMZg8JYLMTGz7uvXKrcKGJUZJlZObyfgdaN9g==",
            "requires": {
                "@types/long": "*",
                "@types/node": "*"
            },
            "dependencies": {
                "@types/node": {
                    "version": "12.12.12",
                    "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.12.tgz",
                    "integrity": "sha512-MGuvYJrPU0HUwqF7LqvIj50RZUX23Z+m583KBygKYUZLlZ88n6w28XRNJRJgsHukLEnLz6w6SvxZoLgbr5wLqQ=="
                }
            }
        },
        "@types/long": {
            "version": "4.0.0",
            "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.0.tgz",
            "integrity": "sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q=="
        },
        "@types/node": {
            "version": "8.10.59",
            "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.59.tgz",
            "integrity": "sha512-8RkBivJrDCyPpBXhVZcjh7cQxVBSmRk9QM7hOketZzp6Tg79c0N8kkpAIito9bnJ3HCVCHVYz+KHTEbfQNfeVQ==",
            "dev": true
        },
        "ansi-regex": {
            "version": "2.1.1",
            "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
            "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
        },
        "arrify": {
            "version": "1.0.1",
            "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
            "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0="
        },
        "asap": {
            "version": "2.0.6",
            "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
            "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
        },
        "ascli": {
            "version": "1.0.1",
            "resolved": "https://registry.npmjs.org/ascli/-/ascli-1.0.1.tgz",
            "integrity": "sha1-vPpZdKYvGOgcq660lzKrSoj5Brw=",
            "requires": {
                "colour": "~0.7.1",
                "optjs": "~3.2.2"
            }
        },
        "async-file": {
            "version": "2.0.2",
            "resolved": "https://registry.npmjs.org/async-file/-/async-file-2.0.2.tgz",
            "integrity": "sha1-Aq0HhWrDcX6DayCuxaTP4AxG3yM=",
            "requires": {
                "rimraf": "^2.5.2"
            }
        },
        "aws-sdk": {
            "version": "2.578.0",
            "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.578.0.tgz",
            "integrity": "sha512-QOot7ha8J+w+AQf1UNzpGpbcZtCaK/mqjenG177ybm2nvm00a4PKa5dz/kF/bYi2qMx9yJmiQ17kn32Q5ar8Kg==",
            "requires": {
                "buffer": "^4.9.1",
                "events": "^1.1.1",
                "ieee754": "^1.1.13",
                "jmespath": "^0.15.0",
                "querystring": "^0.2.0",
                "sax": "^1.2.1",
                "url": "^0.10.3",
                "uuid": "^3.3.2",
                "xml2js": "^0.4.19"
            }
        },
        "balanced-match": {
            "version": "1.0.0",
            "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
            "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
        },
        "base64-js": {
            "version": "1.3.1",
            "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
            "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g=="
        },
        "bindings": {
            "version": "1.5.0",
            "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
            "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
            "requires": {
                "file-uri-to-path": "1.0.0"
            }
        },
        "brace-expansion": {
            "version": "1.1.11",
            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
            "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
            "requires": {
                "balanced-match": "^1.0.0",
                "concat-map": "0.0.1"
            }
        },
        "buffer": {
            "version": "4.9.2",
            "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
            "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
            "requires": {
                "base64-js": "^1.0.2",
                "ieee754": "^1.1.4",
                "isarray": "^1.0.0"
            }
        },
        "buffer-from": {
            "version": "1.1.1",
            "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
            "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
        },
        "builtin-modules": {
            "version": "3.0.0",
            "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.0.0.tgz",
            "integrity": "sha512-hMIeU4K2ilbXV6Uv93ZZ0Avg/M91RaKXucQ+4me2Do1txxBDyDZWCBa5bJSLqoNTRpXTLwEzIk1KmloenDDjhg=="
        },
        "bytebuffer": {
            "version": "5.0.1",
            "resolved": "https://registry.npmjs.org/bytebuffer/-/bytebuffer-5.0.1.tgz",
            "integrity": "sha1-WC7qSxqHO20CCkjVjfhfC7ps/d0=",
            "requires": {
                "long": "~3"
            }
        },
        "camelcase": {
            "version": "2.1.1",
            "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
            "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8="
        },
        "cliui": {
            "version": "3.2.0",
            "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
            "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
            "requires": {
                "string-width": "^1.0.1",
                "strip-ansi": "^3.0.1",
                "wrap-ansi": "^2.0.0"
            }
        },
        "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="
        },
        "colour": {
            "version": "0.7.1",
            "resolved": "https://registry.npmjs.org/colour/-/colour-0.7.1.tgz",
            "integrity": "sha1-nLFpkX7F0SwHNtPoaFdG3xyt93g="
        },
        "concat-map": {
            "version": "0.0.1",
            "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
            "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
        },
        "deasync": {
            "version": "0.1.16",
            "resolved": "https://registry.npmjs.org/deasync/-/deasync-0.1.16.tgz",
            "integrity": "sha512-FNCjDwxGbhK+Ye8fmE3p2ahIjERhkbuwX+WVGZPtSbAh9LfE1Saa2p0l+f0t11sIlk9D8W+Bym+cDp6r5yghAQ==",
            "requires": {
                "bindings": "^1.5.0",
                "node-addon-api": "^1.7.1"
            }
        },
        "debuglog": {
            "version": "1.0.1",
            "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz",
            "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI="
        },
        "decamelize": {
            "version": "1.2.0",
            "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
            "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
        },
        "define-properties": {
            "version": "1.1.3",
            "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
            "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
            "requires": {
                "object-keys": "^1.0.12"
            }
        },
        "dezalgo": {
            "version": "1.0.3",
            "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz",
            "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=",
            "requires": {
                "asap": "^2.0.0",
                "wrappy": "1"
            }
        },
        "diff": {
            "version": "3.5.0",
            "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
            "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA=="
        },
        "es-abstract": {
            "version": "1.16.0",
            "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.0.tgz",
            "integrity": "sha512-xdQnfykZ9JMEiasTAJZJdMWCQ1Vm00NBw79/AWi7ELfZuuPCSOMDZbT9mkOfSctVtfhb+sAAzrm+j//GjjLHLg==",
            "requires": {
                "es-to-primitive": "^1.2.0",
                "function-bind": "^1.1.1",
                "has": "^1.0.3",
                "has-symbols": "^1.0.0",
                "is-callable": "^1.1.4",
                "is-regex": "^1.0.4",
                "object-inspect": "^1.6.0",
                "object-keys": "^1.1.1",
                "string.prototype.trimleft": "^2.1.0",
                "string.prototype.trimright": "^2.1.0"
            }
        },
        "es-to-primitive": {
            "version": "1.2.1",
            "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
            "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
            "requires": {
                "is-callable": "^1.1.4",
                "is-date-object": "^1.0.1",
                "is-symbol": "^1.0.2"
            }
        },
        "events": {
            "version": "1.1.1",
            "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz",
            "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ="
        },
        "file-uri-to-path": {
            "version": "1.0.0",
            "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
            "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="
        },
        "fs.realpath": {
            "version": "1.0.0",
            "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
            "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
        },
        "function-bind": {
            "version": "1.1.1",
            "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
            "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
        },
        "glob": {
            "version": "7.1.6",
            "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
            "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
            "requires": {
                "fs.realpath": "^1.0.0",
                "inflight": "^1.0.4",
                "inherits": "2",
                "minimatch": "^3.0.4",
                "once": "^1.3.0",
                "path-is-absolute": "^1.0.0"
            }
        },
        "google-protobuf": {
            "version": "3.10.0",
            "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.10.0.tgz",
            "integrity": "sha512-d0cMO8TJ6xtB/WrVHCv5U81L2ulX+aCD58IljyAN6mHwdHHJ2jbcauX5glvivi3s3hx7EYEo7eUA9WftzamMnw=="
        },
        "graceful-fs": {
            "version": "4.2.3",
            "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
            "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="
        },
        "grpc": {
            "version": "1.24.2",
            "resolved": "https://registry.npmjs.org/grpc/-/grpc-1.24.2.tgz",
            "integrity": "sha512-EG3WH6AWMVvAiV15d+lr+K77HJ/KV/3FvMpjKjulXHbTwgDZkhkcWbwhxFAoTdxTkQvy0WFcO3Nog50QBbHZWw==",
            "requires": {
                "@types/bytebuffer": "^5.0.40",
                "lodash.camelcase": "^4.3.0",
                "lodash.clone": "^4.5.0",
                "nan": "^2.13.2",
                "node-pre-gyp": "^0.14.0",
                "protobufjs": "^5.0.3"
            },
            "dependencies": {
                "abbrev": {
                    "version": "1.1.1",
                    "bundled": true
                },
                "ansi-regex": {
                    "version": "2.1.1",
                    "bundled": true
                },
                "aproba": {
                    "version": "1.2.0",
                    "bundled": true
                },
                "are-we-there-yet": {
                    "version": "1.1.5",
                    "bundled": true,
                    "requires": {
                        "delegates": "^1.0.0",
                        "readable-stream": "^2.0.6"
                    }
                },
                "balanced-match": {
                    "version": "1.0.0",
                    "bundled": true
                },
                "brace-expansion": {
                    "version": "1.1.11",
                    "bundled": true,
                    "requires": {
                        "balanced-match": "^1.0.0",
                        "concat-map": "0.0.1"
                    }
                },
                "chownr": {
                    "version": "1.1.3",
                    "bundled": true
                },
                "code-point-at": {
                    "version": "1.1.0",
                    "bundled": true
                },
                "concat-map": {
                    "version": "0.0.1",
                    "bundled": true
                },
                "console-control-strings": {
                    "version": "1.1.0",
                    "bundled": true
                },
                "core-util-is": {
                    "version": "1.0.2",
                    "bundled": true
                },
                "debug": {
                    "version": "3.2.6",
                    "bundled": true,
                    "requires": {
                        "ms": "^2.1.1"
                    }
                },
                "deep-extend": {
                    "version": "0.6.0",
                    "bundled": true
                },
                "delegates": {
                    "version": "1.0.0",
                    "bundled": true
                },
                "detect-libc": {
                    "version": "1.0.3",
                    "bundled": true
                },
                "fs-minipass": {
                    "version": "1.2.7",
                    "bundled": true,
                    "requires": {
                        "minipass": "^2.6.0"
                    }
                },
                "fs.realpath": {
                    "version": "1.0.0",
                    "bundled": true
                },
                "gauge": {
                    "version": "2.7.4",
                    "bundled": true,
                    "requires": {
                        "aproba": "^1.0.3",
                        "console-control-strings": "^1.0.0",
                        "has-unicode": "^2.0.0",
                        "object-assign": "^4.1.0",
                        "signal-exit": "^3.0.0",
                        "string-width": "^1.0.1",
                        "strip-ansi": "^3.0.1",
                        "wide-align": "^1.1.0"
                    }
                },
                "glob": {
                    "version": "7.1.4",
                    "bundled": true,
                    "requires": {
                        "fs.realpath": "^1.0.0",
                        "inflight": "^1.0.4",
                        "inherits": "2",
                        "minimatch": "^3.0.4",
                        "once": "^1.3.0",
                        "path-is-absolute": "^1.0.0"
                    }
                },
                "has-unicode": {
                    "version": "2.0.1",
                    "bundled": true
                },
                "iconv-lite": {
                    "version": "0.4.24",
                    "bundled": true,
                    "requires": {
                        "safer-buffer": ">= 2.1.2 < 3"
                    }
                },
                "ignore-walk": {
                    "version": "3.0.3",
                    "bundled": true,
                    "requires": {
                        "minimatch": "^3.0.4"
                    }
                },
                "inflight": {
                    "version": "1.0.6",
                    "bundled": true,
                    "requires": {
                        "once": "^1.3.0",
                        "wrappy": "1"
                    }
                },
                "inherits": {
                    "version": "2.0.4",
                    "bundled": true
                },
                "ini": {
                    "version": "1.3.5",
                    "bundled": true
                },
                "is-fullwidth-code-point": {
                    "version": "1.0.0",
                    "bundled": true,
                    "requires": {
                        "number-is-nan": "^1.0.0"
                    }
                },
                "isarray": {
                    "version": "1.0.0",
                    "bundled": true
                },
                "minimatch": {
                    "version": "3.0.4",
                    "bundled": true,
                    "requires": {
                        "brace-expansion": "^1.1.7"
                    }
                },
                "minimist": {
                    "version": "1.2.0",
                    "bundled": true
                },
                "minipass": {
                    "version": "2.9.0",
                    "bundled": true,
                    "requires": {
                        "safe-buffer": "^5.1.2",
                        "yallist": "^3.0.0"
                    }
                },
                "minizlib": {
                    "version": "1.3.3",
                    "bundled": true,
                    "requires": {
                        "minipass": "^2.9.0"
                    }
                },
                "mkdirp": {
                    "version": "0.5.1",
                    "bundled": true,
                    "requires": {
                        "minimist": "0.0.8"
                    },
                    "dependencies": {
                        "minimist": {
                            "version": "0.0.8",
                            "bundled": true
                        }
                    }
                },
                "ms": {
                    "version": "2.1.2",
                    "bundled": true
                },
                "needle": {
                    "version": "2.4.0",
                    "bundled": true,
                    "requires": {
                        "debug": "^3.2.6",
                        "iconv-lite": "^0.4.4",
                        "sax": "^1.2.4"
                    }
                },
                "node-pre-gyp": {
                    "version": "0.14.0",
                    "bundled": true,
                    "requires": {
                        "detect-libc": "^1.0.2",
                        "mkdirp": "^0.5.1",
                        "needle": "^2.2.1",
                        "nopt": "^4.0.1",
                        "npm-packlist": "^1.1.6",
                        "npmlog": "^4.0.2",
                        "rc": "^1.2.7",
                        "rimraf": "^2.6.1",
                        "semver": "^5.3.0",
                        "tar": "^4.4.2"
                    }
                },
                "nopt": {
                    "version": "4.0.1",
                    "bundled": true,
                    "requires": {
                        "abbrev": "1",
                        "osenv": "^0.1.4"
                    }
                },
                "npm-bundled": {
                    "version": "1.0.6",
                    "bundled": true
                },
                "npm-packlist": {
                    "version": "1.4.6",
                    "bundled": true,
                    "requires": {
                        "ignore-walk": "^3.0.1",
                        "npm-bundled": "^1.0.1"
                    }
                },
                "npmlog": {
                    "version": "4.1.2",
                    "bundled": true,
                    "requires": {
                        "are-we-there-yet": "~1.1.2",
                        "console-control-strings": "~1.1.0",
                        "gauge": "~2.7.3",
                        "set-blocking": "~2.0.0"
                    }
                },
                "number-is-nan": {
                    "version": "1.0.1",
                    "bundled": true
                },
                "object-assign": {
                    "version": "4.1.1",
                    "bundled": true
                },
                "once": {
                    "version": "1.4.0",
                    "bundled": true,
                    "requires": {
                        "wrappy": "1"
                    }
                },
                "os-homedir": {
                    "version": "1.0.2",
                    "bundled": true
                },
                "os-tmpdir": {
                    "version": "1.0.2",
                    "bundled": true
                },
                "osenv": {
                    "version": "0.1.5",
                    "bundled": true,
                    "requires": {
                        "os-homedir": "^1.0.0",
                        "os-tmpdir": "^1.0.0"
                    }
                },
                "path-is-absolute": {
                    "version": "1.0.1",
                    "bundled": true
                },
                "process-nextick-args": {
                    "version": "2.0.1",
                    "bundled": true
                },
                "protobufjs": {
                    "version": "5.0.3",
                    "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-5.0.3.tgz",
                    "integrity": "sha512-55Kcx1MhPZX0zTbVosMQEO5R6/rikNXd9b6RQK4KSPcrSIIwoXTtebIczUrXlwaSrbz4x8XUVThGPob1n8I4QA==",
                    "requires": {
                        "ascli": "~1",
                        "bytebuffer": "~5",
                        "glob": "^7.0.5",
                        "yargs": "^3.10.0"
                    }
                },
                "rc": {
                    "version": "1.2.8",
                    "bundled": true,
                    "requires": {
                        "deep-extend": "^0.6.0",
                        "ini": "~1.3.0",
                        "minimist": "^1.2.0",
                        "strip-json-comments": "~2.0.1"
                    }
                },
                "readable-stream": {
                    "version": "2.3.6",
                    "bundled": true,
                    "requires": {
                        "core-util-is": "~1.0.0",
                        "inherits": "~2.0.3",
                        "isarray": "~1.0.0",
                        "process-nextick-args": "~2.0.0",
                        "safe-buffer": "~5.1.1",
                        "string_decoder": "~1.1.1",
                        "util-deprecate": "~1.0.1"
                    }
                },
                "rimraf": {
                    "version": "2.7.1",
                    "bundled": true,
                    "requires": {
                        "glob": "^7.1.3"
                    }
                },
                "safe-buffer": {
                    "version": "5.1.2",
                    "bundled": true
                },
                "safer-buffer": {
                    "version": "2.1.2",
                    "bundled": true
                },
                "sax": {
                    "version": "1.2.4",
                    "bundled": true
                },
                "semver": {
                    "version": "5.7.1",
                    "bundled": true
                },
                "set-blocking": {
                    "version": "2.0.0",
                    "bundled": true
                },
                "signal-exit": {
                    "version": "3.0.2",
                    "bundled": true
                },
                "string-width": {
                    "version": "1.0.2",
                    "bundled": true,
                    "requires": {
                        "code-point-at": "^1.0.0",
                        "is-fullwidth-code-point": "^1.0.0",
                        "strip-ansi": "^3.0.0"
                    }
                },
                "string_decoder": {
                    "version": "1.1.1",
                    "bundled": true,
                    "requires": {
                        "safe-buffer": "~5.1.0"
                    }
                },
                "strip-ansi": {
                    "version": "3.0.1",
                    "bundled": true,
                    "requires": {
                        "ansi-regex": "^2.0.0"
                    }
                },
                "strip-json-comments": {
                    "version": "2.0.1",
                    "bundled": true
                },
                "tar": {
                    "version": "4.4.13",
                    "bundled": true,
                    "requires": {
                        "chownr": "^1.1.1",
                        "fs-minipass": "^1.2.5",
                        "minipass": "^2.8.6",
                        "minizlib": "^1.2.1",
                        "mkdirp": "^0.5.0",
                        "safe-buffer": "^5.1.2",
                        "yallist": "^3.0.3"
                    }
                },
                "util-deprecate": {
                    "version": "1.0.2",
                    "bundled": true
                },
                "wide-align": {
                    "version": "1.1.3",
                    "bundled": true,
                    "requires": {
                        "string-width": "^1.0.2 || 2"
                    }
                },
                "wrappy": {
                    "version": "1.0.2",
                    "bundled": true
                },
                "yallist": {
                    "version": "3.1.1",
                    "bundled": true
                }
            }
        },
        "has": {
            "version": "1.0.3",
            "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
            "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
            "requires": {
                "function-bind": "^1.1.1"
            }
        },
        "has-symbols": {
            "version": "1.0.1",
            "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
            "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg=="
        },
        "hosted-git-info": {
            "version": "2.8.5",
            "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz",
            "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg=="
        },
        "ieee754": {
            "version": "1.1.13",
            "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
            "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
        },
        "inflight": {
            "version": "1.0.6",
            "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
            "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
            "requires": {
                "once": "^1.3.0",
                "wrappy": "1"
            }
        },
        "inherits": {
            "version": "2.0.4",
            "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
            "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
        },
        "invert-kv": {
            "version": "1.0.0",
            "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
            "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY="
        },
        "is-callable": {
            "version": "1.1.4",
            "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
            "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA=="
        },
        "is-date-object": {
            "version": "1.0.1",
            "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
            "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY="
        },
        "is-fullwidth-code-point": {
            "version": "1.0.0",
            "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
            "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
            "requires": {
                "number-is-nan": "^1.0.0"
            }
        },
        "is-regex": {
            "version": "1.0.4",
            "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
            "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
            "requires": {
                "has": "^1.0.1"
            }
        },
        "is-symbol": {
            "version": "1.0.3",
            "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
            "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
            "requires": {
                "has-symbols": "^1.0.1"
            }
        },
        "isarray": {
            "version": "1.0.0",
            "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
            "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
        },
        "jmespath": {
            "version": "0.15.0",
            "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz",
            "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc="
        },
        "json-parse-better-errors": {
            "version": "1.0.2",
            "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
            "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw=="
        },
        "lcid": {
            "version": "1.0.0",
            "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
            "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
            "requires": {
                "invert-kv": "^1.0.0"
            }
        },
        "lodash.camelcase": {
            "version": "4.3.0",
            "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
            "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY="
        },
        "lodash.clone": {
            "version": "4.5.0",
            "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz",
            "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y="
        },
        "long": {
            "version": "3.2.0",
            "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz",
            "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s="
        },
        "make-error": {
            "version": "1.3.5",
            "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz",
            "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g=="
        },
        "mime": {
            "version": "2.4.4",
            "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz",
            "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA=="
        },
        "minimatch": {
            "version": "3.0.4",
            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
            "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
            "requires": {
                "brace-expansion": "^1.1.7"
            }
        },
        "minimist": {
            "version": "1.2.0",
            "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
            "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
        },
        "mkdirp": {
            "version": "0.5.1",
            "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
            "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
            "requires": {
                "minimist": "0.0.8"
            },
            "dependencies": {
                "minimist": {
                    "version": "0.0.8",
                    "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
                    "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
                }
            }
        },
        "mustache": {
            "version": "2.3.2",
            "resolved": "https://registry.npmjs.org/mustache/-/mustache-2.3.2.tgz",
            "integrity": "sha512-KpMNwdQsYz3O/SBS1qJ/o3sqUJ5wSb8gb0pul8CO0S56b9Y2ALm8zCfsjPXsqGFfoNBkDwZuZIAjhsZI03gYVQ=="
        },
        "nan": {
            "version": "2.14.0",
            "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
            "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg=="
        },
        "node-addon-api": {
            "version": "1.7.1",
            "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.1.tgz",
            "integrity": "sha512-2+DuKodWvwRTrCfKOeR24KIc5unKjOh8mz17NCzVnHWfjAdDqbfbjqh7gUT+BkXBRQM52+xCHciKWonJ3CbJMQ=="
        },
        "normalize-package-data": {
            "version": "2.5.0",
            "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
            "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
            "requires": {
                "hosted-git-info": "^2.1.4",
                "resolve": "^1.10.0",
                "semver": "2 || 3 || 4 || 5",
                "validate-npm-package-license": "^3.0.1"
            },
            "dependencies": {
                "semver": {
                    "version": "5.7.1",
                    "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
                    "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
                }
            }
        },
        "number-is-nan": {
            "version": "1.0.1",
            "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
            "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
        },
        "object-inspect": {
            "version": "1.7.0",
            "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
            "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw=="
        },
        "object-keys": {
            "version": "1.1.1",
            "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
            "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
        },
        "object.getownpropertydescriptors": {
            "version": "2.0.3",
            "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz",
            "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=",
            "requires": {
                "define-properties": "^1.1.2",
                "es-abstract": "^1.5.1"
            }
        },
        "once": {
            "version": "1.4.0",
            "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
            "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
            "requires": {
                "wrappy": "1"
            }
        },
        "optjs": {
            "version": "3.2.2",
            "resolved": "https://registry.npmjs.org/optjs/-/optjs-3.2.2.tgz",
            "integrity": "sha1-aabOicRCpEQDFBrS+bNwvVu29O4="
        },
        "os-locale": {
            "version": "1.4.0",
            "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
            "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
            "requires": {
                "lcid": "^1.0.0"
            }
        },
        "path-is-absolute": {
            "version": "1.0.1",
            "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
            "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
        },
        "path-parse": {
            "version": "1.0.6",
            "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
            "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
        },
        "pcloudinit": {
            "version": "0.1.0",
            "resolved": "https://registry.npmjs.org/pcloudinit/-/pcloudinit-0.1.0.tgz",
            "integrity": "sha512-fxZR9hK3Wx69Zg4jO5bp9wjT/oXwGyhuo/uS+73+crz2q5v3vnV17z9B6lWd6OabdjF60JodMcHq5YnJWlAIYQ==",
            "requires": {
                "async-file": "^2.0.2",
                "mustache": "^2.3.0"
            }
        },
        "protobufjs": {
            "version": "6.8.8",
            "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz",
            "integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==",
            "requires": {
                "@protobufjs/aspromise": "^1.1.2",
                "@protobufjs/base64": "^1.1.2",
                "@protobufjs/codegen": "^2.0.4",
                "@protobufjs/eventemitter": "^1.1.0",
                "@protobufjs/fetch": "^1.1.0",
                "@protobufjs/float": "^1.0.2",
                "@protobufjs/inquire": "^1.1.0",
                "@protobufjs/path": "^1.1.2",
                "@protobufjs/pool": "^1.1.0",
                "@protobufjs/utf8": "^1.1.0",
                "@types/long": "^4.0.0",
                "@types/node": "^10.1.0",
                "long": "^4.0.0"
            },
            "dependencies": {
                "@types/node": {
                    "version": "10.17.5",
                    "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.5.tgz",
                    "integrity": "sha512-RElZIr/7JreF1eY6oD5RF3kpmdcreuQPjg5ri4oQ5g9sq7YWU8HkfB3eH8GwAwxf5OaCh0VPi7r4N/yoTGelrA=="
                },
                "long": {
                    "version": "4.0.0",
                    "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
                    "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
                }
            }
        },
        "punycode": {
            "version": "1.3.2",
            "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
            "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0="
        },
        "querystring": {
            "version": "0.2.0",
            "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
            "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA="
        },
        "read-package-json": {
            "version": "2.1.0",
            "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.0.tgz",
            "integrity": "sha512-KLhu8M1ZZNkMcrq1+0UJbR8Dii8KZUqB0Sha4mOx/bknfKI/fyrQVrG/YIt2UOtG667sD8+ee4EXMM91W9dC+A==",
            "requires": {
                "glob": "^7.1.1",
                "graceful-fs": "^4.1.2",
                "json-parse-better-errors": "^1.0.1",
                "normalize-package-data": "^2.0.0",
                "slash": "^1.0.0"
            }
        },
        "read-package-tree": {
            "version": "5.3.1",
            "resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.3.1.tgz",
            "integrity": "sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw==",
            "requires": {
                "read-package-json": "^2.0.0",
                "readdir-scoped-modules": "^1.0.0",
                "util-promisify": "^2.1.0"
            }
        },
        "readdir-scoped-modules": {
            "version": "1.1.0",
            "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz",
            "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==",
            "requires": {
                "debuglog": "^1.0.1",
                "dezalgo": "^1.0.0",
                "graceful-fs": "^4.1.2",
                "once": "^1.3.0"
            }
        },
        "require-from-string": {
            "version": "2.0.2",
            "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
            "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="
        },
        "resolve": {
            "version": "1.12.2",
            "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.2.tgz",
            "integrity": "sha512-cAVTI2VLHWYsGOirfeYVVQ7ZDejtQ9fp4YhYckWDEkFfqbVjaT11iM8k6xSAfGFMM+gDpZjMnFssPu8we+mqFw==",
            "requires": {
                "path-parse": "^1.0.6"
            }
        },
        "rimraf": {
            "version": "2.7.1",
            "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
            "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
            "requires": {
                "glob": "^7.1.3"
            }
        },
        "sax": {
            "version": "1.2.4",
            "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
            "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
        },
        "semver": {
            "version": "6.3.0",
            "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
            "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
        },
        "slash": {
            "version": "1.0.0",
            "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
            "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU="
        },
        "source-map": {
            "version": "0.5.7",
            "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
            "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
        },
        "source-map-support": {
            "version": "0.4.18",
            "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
            "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
            "requires": {
                "source-map": "^0.5.6"
            }
        },
        "spdx-correct": {
            "version": "3.1.0",
            "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
            "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
            "requires": {
                "spdx-expression-parse": "^3.0.0",
                "spdx-license-ids": "^3.0.0"
            }
        },
        "spdx-exceptions": {
            "version": "2.2.0",
            "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
            "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA=="
        },
        "spdx-expression-parse": {
            "version": "3.0.0",
            "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
            "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
            "requires": {
                "spdx-exceptions": "^2.1.0",
                "spdx-license-ids": "^3.0.0"
            }
        },
        "spdx-license-ids": {
            "version": "3.0.5",
            "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
            "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q=="
        },
        "string-width": {
            "version": "1.0.2",
            "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
            "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
            "requires": {
                "code-point-at": "^1.0.0",
                "is-fullwidth-code-point": "^1.0.0",
                "strip-ansi": "^3.0.0"
            }
        },
        "string.prototype.trimleft": {
            "version": "2.1.0",
            "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz",
            "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==",
            "requires": {
                "define-properties": "^1.1.3",
                "function-bind": "^1.1.1"
            }
        },
        "string.prototype.trimright": {
            "version": "2.1.0",
            "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz",
            "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==",
            "requires": {
                "define-properties": "^1.1.3",
                "function-bind": "^1.1.1"
            }
        },
        "strip-ansi": {
            "version": "3.0.1",
            "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
            "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
            "requires": {
                "ansi-regex": "^2.0.0"
            }
        },
        "ts-node": {
            "version": "7.0.1",
            "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz",
            "integrity": "sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==",
            "requires": {
                "arrify": "^1.0.0",
                "buffer-from": "^1.1.0",
                "diff": "^3.1.0",
                "make-error": "^1.1.1",
                "minimist": "^1.2.0",
                "mkdirp": "^0.5.1",
                "source-map-support": "^0.5.6",
                "yn": "^2.0.0"
            },
            "dependencies": {
                "source-map": {
                    "version": "0.6.1",
                    "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
                    "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
                },
                "source-map-support": {
                    "version": "0.5.16",
                    "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz",
                    "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==",
                    "requires": {
                        "buffer-from": "^1.0.0",
                        "source-map": "^0.6.0"
                    }
                }
            }
        },
        "typescript": {
            "version": "3.6.3",
            "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.6.3.tgz",
            "integrity": "sha512-N7bceJL1CtRQ2RiG0AQME13ksR7DiuQh/QehubYcghzv20tnh+MQnQIuJddTmsbqYj+dztchykemz0zFzlvdQw=="
        },
        "upath": {
            "version": "1.2.0",
            "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
            "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg=="
        },
        "url": {
            "version": "0.10.3",
            "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz",
            "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=",
            "requires": {
                "punycode": "1.3.2",
                "querystring": "0.2.0"
            }
        },
        "util-promisify": {
            "version": "2.1.0",
            "resolved": "https://registry.npmjs.org/util-promisify/-/util-promisify-2.1.0.tgz",
            "integrity": "sha1-PCI2R2xNMsX/PEcAKt18E7moKlM=",
            "requires": {
                "object.getownpropertydescriptors": "^2.0.3"
            }
        },
        "util.promisify": {
            "version": "1.0.0",
            "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz",
            "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==",
            "requires": {
                "define-properties": "^1.1.2",
                "object.getownpropertydescriptors": "^2.0.3"
            }
        },
        "uuid": {
            "version": "3.3.3",
            "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz",
            "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ=="
        },
        "validate-npm-package-license": {
            "version": "3.0.4",
            "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
            "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
            "requires": {
                "spdx-correct": "^3.0.0",
                "spdx-expression-parse": "^3.0.0"
            }
        },
        "window-size": {
            "version": "0.1.4",
            "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz",
            "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY="
        },
        "wrap-ansi": {
            "version": "2.1.0",
            "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
            "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
            "requires": {
                "string-width": "^1.0.1",
                "strip-ansi": "^3.0.1"
            }
        },
        "wrappy": {
            "version": "1.0.2",
            "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
            "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
        },
        "xml2js": {
            "version": "0.4.22",
            "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.22.tgz",
            "integrity": "sha512-MWTbxAQqclRSTnehWWe5nMKzI3VmJ8ltiJEco8akcC6j3miOhjjfzKum5sId+CWhfxdOs/1xauYr8/ZDBtQiRw==",
            "requires": {
                "sax": ">=0.6.0",
                "util.promisify": "~1.0.0",
                "xmlbuilder": "~11.0.0"
            }
        },
        "xmlbuilder": {
            "version": "11.0.1",
            "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
            "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="
        },
        "y18n": {
            "version": "3.2.1",
            "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
            "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE="
        },
        "yargs": {
            "version": "3.32.0",
            "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz",
            "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=",
            "requires": {
                "camelcase": "^2.0.1",
                "cliui": "^3.0.3",
                "decamelize": "^1.1.1",
                "os-locale": "^1.4.0",
                "string-width": "^1.0.1",
                "window-size": "^0.1.4",
                "y18n": "^3.2.0"
            }
        },
        "yn": {
            "version": "2.0.0",
            "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz",
            "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo="
        }
    }
}

A  => deploy-ec2-cloudinit/package.json +13 -0
@@ 1,13 @@
{
    "name": "aws-typescript",
    "devDependencies": {
        "@types/node": "^8.0.0"
    },
    "dependencies": {
        "@pulumi/pulumi": "^1.0.0",
        "@pulumi/aws": "^1.0.0",
        "@pulumi/awsx": "^0.18.10",
        "pcloudinit": "^0.1.0",
        "@iarna/toml": "^2.2.0"
    }
}

A  => deploy-ec2-cloudinit/tsconfig.json +18 -0
@@ 1,18 @@
{
    "compilerOptions": {
        "strict": true,
        "outDir": "bin",
        "target": "es2016",
        "module": "commonjs",
        "moduleResolution": "node",
        "sourceMap": true,
        "experimentalDecorators": true,
        "pretty": true,
        "noFallthroughCasesInSwitch": true,
        "noImplicitReturns": true,
        "forceConsistentCasingInFileNames": true
    },
    "files": [
        "index.ts"
    ]
}