diff --git a/Dockerfile b/Dockerfile index fd12c3cebe0..1c681bb028e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -17,19 +17,19 @@ RUN git clone https://www.github.com/docker/docker.github.io temp; \ COPY . allv ## Branch to pull from, per ref doc -ENV ENGINE_BRANCH="1.12.x" +ENV ENGINE_BRANCH="1.13.x" ENV DISTRIBUTION_BRANCH="release/2.5" # The statements below pull reference docs from upstream locations, # then build the whole site to static HTML using Jekyll -RUN svn co https://github.com/docker/docker/branches/$ENGINE_BRANCH/docs/reference allv/engine/reference \ - && svn co https://github.com/docker/docker/branches/$ENGINE_BRANCH/docs/extend allv/engine/extend \ +RUN svn co https://github.com/docker/docker/branches/$ENGINE_BRANCH/docs/extend allv/engine/extend \ && wget -O allv/engine/deprecated.md https://raw.githubusercontent.com/docker/docker/$ENGINE_BRANCH/docs/deprecated.md \ && svn co https://github.com/docker/distribution/branches/$DISTRIBUTION_BRANCH/docs/spec allv/registry/spec \ && wget -O allv/registry/configuration.md https://raw.githubusercontent.com/docker/distribution/$DISTRIBUTION_BRANCH/docs/configuration.md \ && rm -rf allv/apidocs/cloud-api-source \ && rm -rf allv/tests \ + && wget -O allv/engine/api/v1.25/swagger.yaml https://raw.githubusercontent.com/docker/docker/$ENGINE_BRANCH/api/swagger.yaml \ && jekyll build -s allv -d allvbuild \ && find allvbuild/engine/reference -type f -name '*.html' -print0 | xargs -0 sed -i 's#href="https://docs.docker.com/#href="/#g' \ && find allvbuild/engine/extend -type f -name '*.html' -print0 | xargs -0 sed -i 's#href="https://docs.docker.com/#href="/#g' \ diff --git a/_data/dockerd-cli/dockerd.yaml b/_data/dockerd-cli/dockerd.yaml new file mode 100644 index 00000000000..85e6078640d --- /dev/null +++ b/_data/dockerd-cli/dockerd.yaml @@ -0,0 +1,1372 @@ +command: dockerd +short: A self-sufficient runtime for containers. +long: | + Options with [] may be specified multiple times. + + dockerd is the persistent process that manages containers. Docker + uses different binaries for the daemon and client. To run the daemon you + type `dockerd`. + + To run the daemon with debug output, use `dockerd -D`. + + ## Daemon socket option + + The Docker daemon can listen for [Docker Remote API](../api/docker_remote_api.md) + requests via three different types of Socket: `unix`, `tcp`, and `fd`. + + By default, a `unix` domain socket (or IPC socket) is created at + `/var/run/docker.sock`, requiring either `root` permission, or `docker` group + membership. + + If you need to access the Docker daemon remotely, you need to enable the `tcp` + Socket. Beware that the default setup provides un-encrypted and + un-authenticated direct access to the Docker daemon - and should be secured + either using the [built in HTTPS encrypted socket](../../security/https.md), or by + putting a secure web proxy in front of it. You can listen on port `2375` on all + network interfaces with `-H tcp://0.0.0.0:2375`, or on a particular network + interface using its IP address: `-H tcp://192.168.59.103:2375`. It is + conventional to use port `2375` for un-encrypted, and port `2376` for encrypted + communication with the daemon. + + > **Note:** + > If you're using an HTTPS encrypted socket, keep in mind that only + > TLS1.0 and greater are supported. Protocols SSLv3 and under are not + > supported anymore for security reasons. + + On Systemd based systems, you can communicate with the daemon via + [Systemd socket activation](http://0pointer.de/blog/projects/socket-activation.html), + use `dockerd -H fd://`. Using `fd://` will work perfectly for most setups but + you can also specify individual sockets: `dockerd -H fd://3`. If the + specified socket activated files aren't found, then Docker will exit. You can + find examples of using Systemd socket activation with Docker and Systemd in the + [Docker source tree](https://github.com/docker/docker/tree/master/contrib/init/systemd/). + + You can configure the Docker daemon to listen to multiple sockets at the same + time using multiple `-H` options: + + ```bash + # listen using the default unix socket, and on 2 specific IP addresses on this host. + $ sudo dockerd -H unix:///var/run/docker.sock -H tcp://192.168.59.106 -H tcp://10.10.10.2 + ``` + + The Docker client will honor the `DOCKER_HOST` environment variable to set the + `-H` flag for the client. + + ```bash + $ docker -H tcp://0.0.0.0:2375 ps + # or + $ export DOCKER_HOST="tcp://0.0.0.0:2375" + $ docker ps + # both are equal + ``` + + Setting the `DOCKER_TLS_VERIFY` environment variable to any value other than + the empty string is equivalent to setting the `--tlsverify` flag. The following + are equivalent: + + ```bash + $ docker --tlsverify ps + # or + $ export DOCKER_TLS_VERIFY=1 + $ docker ps + ``` + + The Docker client will honor the `HTTP_PROXY`, `HTTPS_PROXY`, and `NO_PROXY` + environment variables (or the lowercase versions thereof). `HTTPS_PROXY` takes + precedence over `HTTP_PROXY`. + + ### Bind Docker to another host/port or a Unix socket + + > **Warning**: + > Changing the default `docker` daemon binding to a + > TCP port or Unix *docker* user group will increase your security risks + > by allowing non-root users to gain *root* access on the host. Make sure + > you control access to `docker`. If you are binding + > to a TCP port, anyone with access to that port has full Docker access; + > so it is not advisable on an open network. + + With `-H` it is possible to make the Docker daemon to listen on a + specific IP and port. By default, it will listen on + `unix:///var/run/docker.sock` to allow only local connections by the + *root* user. You *could* set it to `0.0.0.0:2375` or a specific host IP + to give access to everybody, but that is **not recommended** because + then it is trivial for someone to gain root access to the host where the + daemon is running. + + Similarly, the Docker client can use `-H` to connect to a custom port. + The Docker client will default to connecting to `unix:///var/run/docker.sock` + on Linux, and `tcp://127.0.0.1:2376` on Windows. + + `-H` accepts host and port assignment in the following format: + + tcp://[host]:[port][path] or unix://path + + For example: + + - `tcp://` -> TCP connection to `127.0.0.1` on either port `2376` when TLS encryption + is on, or port `2375` when communication is in plain text. + - `tcp://host:2375` -> TCP connection on + host:2375 + - `tcp://host:2375/path` -> TCP connection on + host:2375 and prepend path to all requests + - `unix://path/to/socket` -> Unix socket located + at `path/to/socket` + + `-H`, when empty, will default to the same value as + when no `-H` was passed in. + + `-H` also accepts short form for TCP bindings: `host:` or `host:port` or `:port` + + Run Docker in daemon mode: + + ```bash + $ sudo /dockerd -H 0.0.0.0:5555 & + ``` + + Download an `ubuntu` image: + + ```bash + $ docker -H :5555 pull ubuntu + ``` + + You can use multiple `-H`, for example, if you want to listen on both + TCP and a Unix socket + + ```bash + # Run docker in daemon mode + $ sudo /dockerd -H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock & + # Download an ubuntu image, use default Unix socket + $ docker pull ubuntu + # OR use the TCP port + $ docker -H tcp://127.0.0.1:2375 pull ubuntu + ``` + + ### Daemon storage-driver option + + The Docker daemon has support for several different image layer storage + drivers: `aufs`, `devicemapper`, `btrfs`, `zfs`, `overlay` and `overlay2`. + + The `aufs` driver is the oldest, but is based on a Linux kernel patch-set that + is unlikely to be merged into the main kernel. These are also known to cause + some serious kernel crashes. However, `aufs` allows containers to share + executable and shared library memory, so is a useful choice when running + thousands of containers with the same program or libraries. + + The `devicemapper` driver uses thin provisioning and Copy on Write (CoW) + snapshots. For each devicemapper graph location – typically + `/var/lib/docker/devicemapper` – a thin pool is created based on two block + devices, one for data and one for metadata. By default, these block devices + are created automatically by using loopback mounts of automatically created + sparse files. Refer to [Storage driver options](dockerd.md#storage-driver-options) below + for a way how to customize this setup. + [~jpetazzo/Resizing Docker containers with the Device Mapper plugin](http://jpetazzo.github.io/2014/01/29/docker-device-mapper-resize/) + article explains how to tune your existing setup without the use of options. + + The `btrfs` driver is very fast for `docker build` - but like `devicemapper` + does not share executable memory between devices. Use + `dockerd -s btrfs -g /mnt/btrfs_partition`. + + The `zfs` driver is probably not as fast as `btrfs` but has a longer track record + on stability. Thanks to `Single Copy ARC` shared blocks between clones will be + cached only once. Use `dockerd -s zfs`. To select a different zfs filesystem + set `zfs.fsname` option as described in [Storage driver options](dockerd.md#storage-driver-options). + + The `overlay` is a very fast union filesystem. It is now merged in the main + Linux kernel as of [3.18.0](https://lkml.org/lkml/2014/10/26/137). `overlay` + also supports page cache sharing, this means multiple containers accessing + the same file can share a single page cache entry (or entries), it makes + `overlay` as efficient with memory as `aufs` driver. Call + `dockerd -s overlay` to use it. + + > **Note:** + > As promising as `overlay` is, the feature is still quite young and should not + > be used in production. Most notably, using `overlay` can cause excessive + > inode consumption (especially as the number of images grows), as well as + > being incompatible with the use of RPMs. + + The `overlay2` uses the same fast union filesystem but takes advantage of + [additional features](https://lkml.org/lkml/2015/2/11/106) added in Linux + kernel 4.0 to avoid excessive inode consumption. Call `dockerd -s overlay2` + to use it. + + > **Note:** + > Both `overlay` and `overlay2` are currently unsupported on `btrfs` or any + > Copy on Write filesystem and should only be used over `ext4` partitions. + + ### Storage driver options + + Particular storage-driver can be configured with options specified with + `--storage-opt` flags. Options for `devicemapper` are prefixed with `dm`, + options for `zfs` start with `zfs` and options for `btrfs` start with `btrfs`. + + #### Devicemapper options + + * `dm.thinpooldev` + + Specifies a custom block storage device to use for the thin pool. + + If using a block device for device mapper storage, it is best to use `lvm` + to create and manage the thin-pool volume. This volume is then handed to Docker + to exclusively create snapshot volumes needed for images and containers. + + Managing the thin-pool outside of Engine makes for the most feature-rich + method of having Docker utilize device mapper thin provisioning as the + backing storage for Docker containers. The highlights of the lvm-based + thin-pool management feature include: automatic or interactive thin-pool + resize support, dynamically changing thin-pool features, automatic thinp + metadata checking when lvm activates the thin-pool, etc. + + As a fallback if no thin pool is provided, loopback files are + created. Loopback is very slow, but can be used without any + pre-configuration of storage. It is strongly recommended that you do + not use loopback in production. Ensure your Engine daemon has a + `--storage-opt dm.thinpooldev` argument provided. + + Example use: + + ```bash + $ sudo dockerd --storage-opt dm.thinpooldev=/dev/mapper/thin-pool + ``` + + * `dm.basesize` + + Specifies the size to use when creating the base device, which limits the + size of images and containers. The default value is 10G. Note, thin devices + are inherently "sparse", so a 10G device which is mostly empty doesn't use + 10 GB of space on the pool. However, the filesystem will use more space for + the empty case the larger the device is. + + The base device size can be increased at daemon restart which will allow + all future images and containers (based on those new images) to be of the + new base device size. + + Example use: + + ```bash + $ sudo dockerd --storage-opt dm.basesize=50G + ``` + + This will increase the base device size to 50G. The Docker daemon will throw an + error if existing base device size is larger than 50G. A user can use + this option to expand the base device size however shrinking is not permitted. + + This value affects the system-wide "base" empty filesystem + that may already be initialized and inherited by pulled images. Typically, + a change to this value requires additional steps to take effect: + + ```bash + $ sudo service docker stop + $ sudo rm -rf /var/lib/docker + $ sudo service docker start + ``` + + Example use: + + ```bash + $ sudo dockerd --storage-opt dm.basesize=20G + ``` + + * `dm.loopdatasize` + + > **Note**: + > This option configures devicemapper loopback, which should not + > be used in production. + + Specifies the size to use when creating the loopback file for the + "data" device which is used for the thin pool. The default size is + 100G. The file is sparse, so it will not initially take up this + much space. + + Example use: + + ```bash + $ sudo dockerd --storage-opt dm.loopdatasize=200G + ``` + + * `dm.loopmetadatasize` + + > **Note**: + > This option configures devicemapper loopback, which should not + > be used in production. + + Specifies the size to use when creating the loopback file for the + "metadata" device which is used for the thin pool. The default size + is 2G. The file is sparse, so it will not initially take up + this much space. + + Example use: + + ```bash + $ sudo dockerd --storage-opt dm.loopmetadatasize=4G + ``` + + * `dm.fs` + + Specifies the filesystem type to use for the base device. The supported + options are "ext4" and "xfs". The default is "xfs" + + Example use: + + ```bash + $ sudo dockerd --storage-opt dm.fs=ext4 + ``` + + * `dm.mkfsarg` + + Specifies extra mkfs arguments to be used when creating the base device. + + Example use: + + ```bash + $ sudo dockerd --storage-opt "dm.mkfsarg=-O ^has_journal" + ``` + + * `dm.mountopt` + + Specifies extra mount options used when mounting the thin devices. + + Example use: + + ```bash + $ sudo dockerd --storage-opt dm.mountopt=nodiscard + ``` + + * `dm.datadev` + + (Deprecated, use `dm.thinpooldev`) + + Specifies a custom blockdevice to use for data for the thin pool. + + If using a block device for device mapper storage, ideally both datadev and + metadatadev should be specified to completely avoid using the loopback + device. + + Example use: + + ```bash + $ sudo dockerd \ + --storage-opt dm.datadev=/dev/sdb1 \ + --storage-opt dm.metadatadev=/dev/sdc1 + ``` + + * `dm.metadatadev` + + (Deprecated, use `dm.thinpooldev`) + + Specifies a custom blockdevice to use for metadata for the thin pool. + + For best performance the metadata should be on a different spindle than the + data, or even better on an SSD. + + If setting up a new metadata pool it is required to be valid. This can be + achieved by zeroing the first 4k to indicate empty metadata, like this: + + ```bash + $ dd if=/dev/zero of=$metadata_dev bs=4096 count=1 + ``` + + Example use: + + ```bash + $ sudo dockerd \ + --storage-opt dm.datadev=/dev/sdb1 \ + --storage-opt dm.metadatadev=/dev/sdc1 + ``` + + * `dm.blocksize` + + Specifies a custom blocksize to use for the thin pool. The default + blocksize is 64K. + + Example use: + + ```bash + $ sudo dockerd --storage-opt dm.blocksize=512K + ``` + + * `dm.blkdiscard` + + Enables or disables the use of blkdiscard when removing devicemapper + devices. This is enabled by default (only) if using loopback devices and is + required to resparsify the loopback file on image/container removal. + + Disabling this on loopback can lead to *much* faster container removal + times, but will make the space used in `/var/lib/docker` directory not be + returned to the system for other use when containers are removed. + + Example use: + + ```bash + $ sudo dockerd --storage-opt dm.blkdiscard=false + ``` + + * `dm.override_udev_sync_check` + + Overrides the `udev` synchronization checks between `devicemapper` and `udev`. + `udev` is the device manager for the Linux kernel. + + To view the `udev` sync support of a Docker daemon that is using the + `devicemapper` driver, run: + + ```bash + $ docker info + [...] + Udev Sync Supported: true + [...] + ``` + + When `udev` sync support is `true`, then `devicemapper` and udev can + coordinate the activation and deactivation of devices for containers. + + When `udev` sync support is `false`, a race condition occurs between + the`devicemapper` and `udev` during create and cleanup. The race condition + results in errors and failures. (For information on these failures, see + [docker#4036](https://github.com/docker/docker/issues/4036)) + + To allow the `docker` daemon to start, regardless of `udev` sync not being + supported, set `dm.override_udev_sync_check` to true: + + ```bash + $ sudo dockerd --storage-opt dm.override_udev_sync_check=true + ``` + + When this value is `true`, the `devicemapper` continues and simply warns + you the errors are happening. + + > **Note:** + > The ideal is to pursue a `docker` daemon and environment that does + > support synchronizing with `udev`. For further discussion on this + > topic, see [docker#4036](https://github.com/docker/docker/issues/4036). + > Otherwise, set this flag for migrating existing Docker daemons to + > a daemon with a supported environment. + + * `dm.use_deferred_removal` + + Enables use of deferred device removal if `libdm` and the kernel driver + support the mechanism. + + Deferred device removal means that if device is busy when devices are + being removed/deactivated, then a deferred removal is scheduled on + device. And devices automatically go away when last user of the device + exits. + + For example, when a container exits, its associated thin device is removed. + If that device has leaked into some other mount namespace and can't be + removed, the container exit still succeeds and this option causes the + system to schedule the device for deferred removal. It does not wait in a + loop trying to remove a busy device. + + Example use: + + ```bash + $ sudo dockerd --storage-opt dm.use_deferred_removal=true + ``` + + * `dm.use_deferred_deletion` + + Enables use of deferred device deletion for thin pool devices. By default, + thin pool device deletion is synchronous. Before a container is deleted, + the Docker daemon removes any associated devices. If the storage driver + can not remove a device, the container deletion fails and daemon returns. + + Error deleting container: Error response from daemon: Cannot destroy container + + To avoid this failure, enable both deferred device deletion and deferred + device removal on the daemon. + + ```bash + $ sudo dockerd \ + --storage-opt dm.use_deferred_deletion=true \ + --storage-opt dm.use_deferred_removal=true + ``` + + With these two options enabled, if a device is busy when the driver is + deleting a container, the driver marks the device as deleted. Later, when + the device isn't in use, the driver deletes it. + + In general it should be safe to enable this option by default. It will help + when unintentional leaking of mount point happens across multiple mount + namespaces. + + * `dm.min_free_space` + + Specifies the min free space percent in a thin pool require for new device + creation to succeed. This check applies to both free data space as well + as free metadata space. Valid values are from 0% - 99%. Value 0% disables + free space checking logic. If user does not specify a value for this option, + the Engine uses a default value of 10%. + + Whenever a new a thin pool device is created (during `docker pull` or during + container creation), the Engine checks if the minimum free space is + available. If sufficient space is unavailable, then device creation fails + and any relevant `docker` operation fails. + + To recover from this error, you must create more free space in the thin pool + to recover from the error. You can create free space by deleting some images + and containers from the thin pool. You can also add more storage to the thin + pool. + + To add more space to a LVM (logical volume management) thin pool, just add + more storage to the volume group container thin pool; this should automatically + resolve any errors. If your configuration uses loop devices, then stop the + Engine daemon, grow the size of loop files and restart the daemon to resolve + the issue. + + Example use: + + ```bash + $ sudo dockerd --storage-opt dm.min_free_space=10% + ``` + + #### ZFS options + + * `zfs.fsname` + + Set zfs filesystem under which docker will create its own datasets. + By default docker will pick up the zfs filesystem where docker graph + (`/var/lib/docker`) is located. + + Example use: + + ```bash + $ sudo dockerd -s zfs --storage-opt zfs.fsname=zroot/docker + ``` + + #### Btrfs options + + * `btrfs.min_space` + + Specifies the minimum size to use when creating the subvolume which is used + for containers. If user uses disk quota for btrfs when creating or running + a container with **--storage-opt size** option, docker should ensure the + **size** cannot be smaller than **btrfs.min_space**. + + Example use: + + ```bash + $ sudo dockerd -s btrfs --storage-opt btrfs.min_space=10G + ``` + + #### Overlay2 options + + * `overlay2.override_kernel_check` + + Overrides the Linux kernel version check allowing overlay2. Support for + specifying multiple lower directories needed by overlay2 was added to the + Linux kernel in 4.0.0. However some older kernel versions may be patched + to add multiple lower directory support for OverlayFS. This option should + only be used after verifying this support exists in the kernel. Applying + this option on a kernel without this support will cause failures on mount. + + ## Docker runtime execution options + + The Docker daemon relies on a + [OCI](https://github.com/opencontainers/specs) compliant runtime + (invoked via the `containerd` daemon) as its interface to the Linux + kernel `namespaces`, `cgroups`, and `SELinux`. + + By default, the Docker daemon automatically starts `containerd`. If you want to + control `containerd` startup, manually start `containerd` and pass the path to + the `containerd` socket using the `--containerd` flag. For example: + + ```bash + $ sudo dockerd --containerd /var/run/dev/docker-containerd.sock + ``` + + Runtimes can be registered with the daemon either via the + configuration file or using the `--add-runtime` command line argument. + + The following is an example adding 2 runtimes via the configuration: + + ```json + "default-runtime": "runc", + "runtimes": { + "runc": { + "path": "runc" + }, + "custom": { + "path": "/usr/local/bin/my-runc-replacement", + "runtimeArgs": [ + "--debug" + ] + } + } + ``` + + This is the same example via the command line: + + ```bash + $ sudo dockerd --add-runtime runc=runc --add-runtime custom=/usr/local/bin/my-runc-replacement + ``` + + > **Note**: defining runtime arguments via the command line is not supported. + + ## Options for the runtime + + You can configure the runtime using options specified + with the `--exec-opt` flag. All the flag's options have the `native` prefix. A + single `native.cgroupdriver` option is available. + + The `native.cgroupdriver` option specifies the management of the container's + cgroups. You can specify only specify `cgroupfs` or `systemd`. If you specify + `systemd` and it is not available, the system errors out. If you omit the + `native.cgroupdriver` option,` cgroupfs` is used. + + This example sets the `cgroupdriver` to `systemd`: + + ```bash + $ sudo dockerd --exec-opt native.cgroupdriver=systemd + ``` + + Setting this option applies to all containers the daemon launches. + + Also Windows Container makes use of `--exec-opt` for special purpose. Docker user + can specify default container isolation technology with this, for example: + + ```bash + $ sudo dockerd --exec-opt isolation=hyperv + ``` + + Will make `hyperv` the default isolation technology on Windows. If no isolation + value is specified on daemon start, on Windows client, the default is + `hyperv`, and on Windows server, the default is `process`. + + ## Daemon DNS options + + To set the DNS server for all Docker containers, use: + + ```bash + $ sudo dockerd --dns 8.8.8.8 + ``` + + + To set the DNS search domain for all Docker containers, use: + + ```bash + $ sudo dockerd --dns-search example.com + ``` + + + ## Insecure registries + + Docker considers a private registry either secure or insecure. In the rest of + this section, *registry* is used for *private registry*, and `myregistry:5000` + is a placeholder example for a private registry. + + A secure registry uses TLS and a copy of its CA certificate is placed on the + Docker host at `/etc/docker/certs.d/myregistry:5000/ca.crt`. An insecure + registry is either not using TLS (i.e., listening on plain text HTTP), or is + using TLS with a CA certificate not known by the Docker daemon. The latter can + happen when the certificate was not found under + `/etc/docker/certs.d/myregistry:5000/`, or if the certificate verification + failed (i.e., wrong CA). + + By default, Docker assumes all, but local (see local registries below), + registries are secure. Communicating with an insecure registry is not possible + if Docker assumes that registry is secure. In order to communicate with an + insecure registry, the Docker daemon requires `--insecure-registry` in one of + the following two forms: + + * `--insecure-registry myregistry:5000` tells the Docker daemon that + myregistry:5000 should be considered insecure. + * `--insecure-registry 10.1.0.0/16` tells the Docker daemon that all registries + whose domain resolve to an IP address is part of the subnet described by the + CIDR syntax, should be considered insecure. + + The flag can be used multiple times to allow multiple registries to be marked + as insecure. + + If an insecure registry is not marked as insecure, `docker pull`, + `docker push`, and `docker search` will result in an error message prompting + the user to either secure or pass the `--insecure-registry` flag to the Docker + daemon as described above. + + Local registries, whose IP address falls in the 127.0.0.0/8 range, are + automatically marked as insecure as of Docker 1.3.2. It is not recommended to + rely on this, as it may change in the future. + + Enabling `--insecure-registry`, i.e., allowing un-encrypted and/or untrusted + communication, can be useful when running a local registry. However, + because its use creates security vulnerabilities it should ONLY be enabled for + testing purposes. For increased security, users should add their CA to their + system's list of trusted CAs instead of enabling `--insecure-registry`. + + ## Legacy Registries + + Enabling `--disable-legacy-registry` forces a docker daemon to only interact with registries which support the V2 protocol. Specifically, the daemon will not attempt `push`, `pull` and `login` to v1 registries. The exception to this is `search` which can still be performed on v1 registries. + + ## Running a Docker daemon behind an HTTPS_PROXY + + When running inside a LAN that uses an `HTTPS` proxy, the Docker Hub + certificates will be replaced by the proxy's certificates. These certificates + need to be added to your Docker host's configuration: + + 1. Install the `ca-certificates` package for your distribution + 2. Ask your network admin for the proxy's CA certificate and append them to + `/etc/pki/tls/certs/ca-bundle.crt` + 3. Then start your Docker daemon with `HTTPS_PROXY=http://username:password@proxy:port/ dockerd`. + The `username:` and `password@` are optional - and are only needed if your + proxy is set up to require authentication. + + This will only add the proxy and authentication to the Docker daemon's requests - + your `docker build`s and running containers will need extra configuration to + use the proxy + + ## Default Ulimits + + `--default-ulimit` allows you to set the default `ulimit` options to use for + all containers. It takes the same options as `--ulimit` for `docker run`. If + these defaults are not set, `ulimit` settings will be inherited, if not set on + `docker run`, from the Docker daemon. Any `--ulimit` options passed to + `docker run` will overwrite these defaults. + + Be careful setting `nproc` with the `ulimit` flag as `nproc` is designed by Linux to + set the maximum number of processes available to a user, not to a container. For details + please check the [run](run.md) reference. + + ## Nodes discovery + + The `--cluster-advertise` option specifies the `host:port` or `interface:port` + combination that this particular daemon instance should use when advertising + itself to the cluster. The daemon is reached by remote hosts through this value. + If you specify an interface, make sure it includes the IP address of the actual + Docker host. For Engine installation created through `docker-machine`, the + interface is typically `eth1`. + + The daemon uses [libkv](https://github.com/docker/libkv/) to advertise + the node within the cluster. Some key-value backends support mutual + TLS. To configure the client TLS settings used by the daemon can be configured + using the `--cluster-store-opt` flag, specifying the paths to PEM encoded + files. For example: + + ```bash + $ sudo dockerd \ + --cluster-advertise 192.168.1.2:2376 \ + --cluster-store etcd://192.168.1.2:2379 \ + --cluster-store-opt kv.cacertfile=/path/to/ca.pem \ + --cluster-store-opt kv.certfile=/path/to/cert.pem \ + --cluster-store-opt kv.keyfile=/path/to/key.pem + ``` + + The currently supported cluster store options are: + + * `discovery.heartbeat` + + Specifies the heartbeat timer in seconds which is used by the daemon as a + keepalive mechanism to make sure discovery module treats the node as alive + in the cluster. If not configured, the default value is 20 seconds. + + * `discovery.ttl` + + Specifies the ttl (time-to-live) in seconds which is used by the discovery + module to timeout a node if a valid heartbeat is not received within the + configured ttl value. If not configured, the default value is 60 seconds. + + * `kv.cacertfile` + + Specifies the path to a local file with PEM encoded CA certificates to trust + + * `kv.certfile` + + Specifies the path to a local file with a PEM encoded certificate. This + certificate is used as the client cert for communication with the + Key/Value store. + + * `kv.keyfile` + + Specifies the path to a local file with a PEM encoded private key. This + private key is used as the client key for communication with the + Key/Value store. + + * `kv.path` + + Specifies the path in the Key/Value store. If not configured, the default value is 'docker/nodes'. + + ## Access authorization + + Docker's access authorization can be extended by authorization plugins that your + organization can purchase or build themselves. You can install one or more + authorization plugins when you start the Docker `daemon` using the + `--authorization-plugin=PLUGIN_ID` option. + + ```bash + $ sudo dockerd --authorization-plugin=plugin1 --authorization-plugin=plugin2,... + ``` + + The `PLUGIN_ID` value is either the plugin's name or a path to its specification + file. The plugin's implementation determines whether you can specify a name or + path. Consult with your Docker administrator to get information about the + plugins available to you. + + Once a plugin is installed, requests made to the `daemon` through the command + line or Docker's remote API are allowed or denied by the plugin. If you have + multiple plugins installed, at least one must allow the request for it to + complete. + + For information about how to create an authorization plugin, see [authorization + plugin](../../extend/plugins_authorization.md) section in the Docker extend section of this documentation. + + + ## Daemon user namespace options + + The Linux kernel [user namespace support](http://man7.org/linux/man-pages/man7/user_namespaces.7.html) provides additional security by enabling + a process, and therefore a container, to have a unique range of user and + group IDs which are outside the traditional user and group range utilized by + the host system. Potentially the most important security improvement is that, + by default, container processes running as the `root` user will have expected + administrative privilege (with some restrictions) inside the container but will + effectively be mapped to an unprivileged `uid` on the host. + + When user namespace support is enabled, Docker creates a single daemon-wide mapping + for all containers running on the same engine instance. The mappings will + utilize the existing subordinate user and group ID feature available on all modern + Linux distributions. + The [`/etc/subuid`](http://man7.org/linux/man-pages/man5/subuid.5.html) and + [`/etc/subgid`](http://man7.org/linux/man-pages/man5/subgid.5.html) files will be + read for the user, and optional group, specified to the `--userns-remap` + parameter. If you do not wish to specify your own user and/or group, you can + provide `default` as the value to this flag, and a user will be created on your behalf + and provided subordinate uid and gid ranges. This default user will be named + `dockremap`, and entries will be created for it in `/etc/passwd` and + `/etc/group` using your distro's standard user and group creation tools. + + > **Note**: The single mapping per-daemon restriction is in place for now + > because Docker shares image layers from its local cache across all + > containers running on the engine instance. Since file ownership must be + > the same for all containers sharing the same layer content, the decision + > was made to map the file ownership on `docker pull` to the daemon's user and + > group mappings so that there is no delay for running containers once the + > content is downloaded. This design preserves the same performance for `docker + > pull`, `docker push`, and container startup as users expect with + > user namespaces disabled. + + ### Starting the daemon with user namespaces enabled + + To enable user namespace support, start the daemon with the + `--userns-remap` flag, which accepts values in the following formats: + + - uid + - uid:gid + - username + - username:groupname + + If numeric IDs are provided, translation back to valid user or group names + will occur so that the subordinate uid and gid information can be read, given + these resources are name-based, not id-based. If the numeric ID information + provided does not exist as entries in `/etc/passwd` or `/etc/group`, daemon + startup will fail with an error message. + + > **Note:** On Fedora 22, you have to `touch` the `/etc/subuid` and `/etc/subgid` + > files to have ranges assigned when users are created. This must be done + > *before* the `--userns-remap` option is enabled. Once these files exist, the + > daemon can be (re)started and range assignment on user creation works properly. + + **Example: starting with default Docker user management:** + + ```bash + $ sudo dockerd --userns-remap=default + ``` + + When `default` is provided, Docker will create - or find the existing - user and group + named `dockremap`. If the user is created, and the Linux distribution has + appropriate support, the `/etc/subuid` and `/etc/subgid` files will be populated + with a contiguous 65536 length range of subordinate user and group IDs, starting + at an offset based on prior entries in those files. For example, Ubuntu will + create the following range, based on an existing user named `user1` already owning + the first 65536 range: + + ```bash + $ cat /etc/subuid + user1:100000:65536 + dockremap:165536:65536 + ``` + + If you have a preferred/self-managed user with subordinate ID mappings already + configured, you can provide that username or uid to the `--userns-remap` flag. + If you have a group that doesn't match the username, you may provide the `gid` + or group name as well; otherwise the username will be used as the group name + when querying the system for the subordinate group ID range. + + ### Detailed information on `subuid`/`subgid` ranges + + Given potential advanced use of the subordinate ID ranges by power users, the + following paragraphs define how the Docker daemon currently uses the range entries + found within the subordinate range files. + + The simplest case is that only one contiguous range is defined for the + provided user or group. In this case, Docker will use that entire contiguous + range for the mapping of host uids and gids to the container process. This + means that the first ID in the range will be the remapped root user, and the + IDs above that initial ID will map host ID 1 through the end of the range. + + From the example `/etc/subuid` content shown above, the remapped root + user would be uid 165536. + + If the system administrator has set up multiple ranges for a single user or + group, the Docker daemon will read all the available ranges and use the + following algorithm to create the mapping ranges: + + 1. The range segments found for the particular user will be sorted by *start ID* ascending. + 2. Map segments will be created from each range in increasing value with a length matching the length of each segment. Therefore the range segment with the lowest numeric starting value will be equal to the remapped root, and continue up through host uid/gid equal to the range segment length. As an example, if the lowest segment starts at ID 1000 and has a length of 100, then a map of 1000 -> 0 (the remapped root) up through 1100 -> 100 will be created from this segment. If the next segment starts at ID 10000, then the next map will start with mapping 10000 -> 101 up to the length of this second segment. This will continue until no more segments are found in the subordinate files for this user. + 3. If more than five range segments exist for a single user, only the first five will be utilized, matching the kernel's limitation of only five entries in `/proc/self/uid_map` and `proc/self/gid_map`. + + ### Disable user namespace for a container + + If you enable user namespaces on the daemon, all containers are started + with user namespaces enabled. In some situations you might want to disable + this feature for a container, for example, to start a privileged container (see + [user namespace known restrictions](dockerd.md#user-namespace-known-restrictions)). + To enable those advanced features for a specific container use `--userns=host` + in the `run/exec/create` command. + This option will completely disable user namespace mapping for the container's user. + + ### User namespace known restrictions + + The following standard Docker features are currently incompatible when + running a Docker daemon with user namespaces enabled: + + - sharing PID or NET namespaces with the host (`--pid=host` or `--network=host`) + - A `--read-only` container filesystem (this is a Linux kernel restriction against remounting with modified flags of a currently mounted filesystem when inside a user namespace) + - external (volume or graph) drivers which are unaware/incapable of using daemon user mappings + - Using `--privileged` mode flag on `docker run` (unless also specifying `--userns=host`) + + In general, user namespaces are an advanced feature and will require + coordination with other capabilities. For example, if volumes are mounted from + the host, file ownership will have to be pre-arranged if the user or + administrator wishes the containers to have expected access to the volume + contents. + + Finally, while the `root` user inside a user namespaced container process has + many of the expected admin privileges that go along with being the superuser, the + Linux kernel has restrictions based on internal knowledge that this is a user namespaced + process. The most notable restriction that we are aware of at this time is the + inability to use `mknod`. Permission will be denied for device creation even as + container `root` inside a user namespace. + + ## Miscellaneous options + + IP masquerading uses address translation to allow containers without a public + IP to talk to other machines on the Internet. This may interfere with some + network topologies and can be disabled with `--ip-masq=false`. + + Docker supports softlinks for the Docker data directory (`/var/lib/docker`) and + for `/var/lib/docker/tmp`. The `DOCKER_TMPDIR` and the data directory can be + set like this: + + DOCKER_TMPDIR=/mnt/disk2/tmp /usr/local/bin/dockerd -D -g /var/lib/docker -H unix:// > /var/lib/docker-machine/docker.log 2>&1 + # or + export DOCKER_TMPDIR=/mnt/disk2/tmp + /usr/local/bin/dockerd -D -g /var/lib/docker -H unix:// > /var/lib/docker-machine/docker.log 2>&1 + + ## Default cgroup parent + + The `--cgroup-parent` option allows you to set the default cgroup parent + to use for containers. If this option is not set, it defaults to `/docker` for + fs cgroup driver and `system.slice` for systemd cgroup driver. + + If the cgroup has a leading forward slash (`/`), the cgroup is created + under the root cgroup, otherwise the cgroup is created under the daemon + cgroup. + + Assuming the daemon is running in cgroup `daemoncgroup`, + `--cgroup-parent=/foobar` creates a cgroup in + `/sys/fs/cgroup/memory/foobar`, whereas using `--cgroup-parent=foobar` + creates the cgroup in `/sys/fs/cgroup/memory/daemoncgroup/foobar` + + The systemd cgroup driver has different rules for `--cgroup-parent`. Systemd + represents hierarchy by slice and the name of the slice encodes the location in + the tree. So `--cgroup-parent` for systemd cgroups should be a slice name. A + name can consist of a dash-separated series of names, which describes the path + to the slice from the root slice. For example, `--cgroup-parent=user-a-b.slice` + means the memory cgroup for the container is created in + `/sys/fs/cgroup/memory/user.slice/user-a.slice/user-a-b.slice/docker-.scope`. + + This setting can also be set per container, using the `--cgroup-parent` + option on `docker create` and `docker run`, and takes precedence over + the `--cgroup-parent` option on the daemon. + + ## Daemon configuration file + + The `--config-file` option allows you to set any configuration option + for the daemon in a JSON format. This file uses the same flag names as keys, + except for flags that allow several entries, where it uses the plural + of the flag name, e.g., `labels` for the `label` flag. + + The options set in the configuration file must not conflict with options set + via flags. The docker daemon fails to start if an option is duplicated between + the file and the flags, regardless their value. We do this to avoid + silently ignore changes introduced in configuration reloads. + For example, the daemon fails to start if you set daemon labels + in the configuration file and also set daemon labels via the `--label` flag. + Options that are not present in the file are ignored when the daemon starts. + + ### Linux configuration file + + The default location of the configuration file on Linux is + `/etc/docker/daemon.json`. The `--config-file` flag can be used to specify a + non-default location. + + This is a full example of the allowed configuration options on Linux: + + ```json + { + "api-cors-header": "", + "authorization-plugins": [], + "bip": "", + "bridge": "", + "cgroup-parent": "", + "cluster-store": "", + "cluster-store-opts": {}, + "cluster-advertise": "", + "debug": true, + "default-gateway": "", + "default-gateway-v6": "", + "default-runtime": "runc", + "default-ulimits": {}, + "disable-legacy-registry": false, + "dns": [], + "dns-opts": [], + "dns-search": [], + "exec-opts": [], + "exec-root": "", + "fixed-cidr": "", + "fixed-cidr-v6": "", + "graph": "", + "group": "", + "hosts": [], + "icc": false, + "insecure-registries": [], + "ip": "0.0.0.0", + "iptables": false, + "ipv6": false, + "ip-forward": false, + "ip-masq": false, + "labels": [], + "live-restore": true, + "log-driver": "", + "log-level": "", + "log-opts": {}, + "max-concurrent-downloads": 3, + "max-concurrent-uploads": 5, + "mtu": 0, + "oom-score-adjust": -500, + "pidfile": "", + "raw-logs": false, + "registry-mirrors": [], + "runtimes": { + "runc": { + "path": "runc" + }, + "custom": { + "path": "/usr/local/bin/my-runc-replacement", + "runtimeArgs": [ + "--debug" + ] + } + }, + "selinux-enabled": false, + "storage-driver": "", + "storage-opts": [], + "swarm-default-advertise-addr": "", + "tls": true, + "tlscacert": "", + "tlscert": "", + "tlskey": "", + "tlsverify": true, + "userland-proxy": false, + "userns-remap": "" + } + ``` + + ### Windows configuration file + + The default location of the configuration file on Windows is + `%programdata%\docker\config\daemon.json`. The `--config-file` flag can be + used to specify a non-default location. + + This is a full example of the allowed configuration options on Windows: + + ```json + { + "authorization-plugins": [], + "bridge": "", + "cluster-advertise": "", + "cluster-store": "", + "debug": true, + "default-ulimits": {}, + "disable-legacy-registry": false, + "dns": [], + "dns-opts": [], + "dns-search": [], + "exec-opts": [], + "fixed-cidr": "", + "graph": "", + "group": "", + "hosts": [], + "insecure-registries": [], + "labels": [], + "live-restore": true, + "log-driver": "", + "log-level": "", + "mtu": 0, + "pidfile": "", + "raw-logs": false, + "registry-mirrors": [], + "storage-driver": "", + "storage-opts": [], + "swarm-default-advertise-addr": "", + "tlscacert": "", + "tlscert": "", + "tlskey": "", + "tlsverify": true + } + ``` + + ### Configuration reloading + + Some options can be reconfigured when the daemon is running without requiring + to restart the process. We use the `SIGHUP` signal in Linux to reload, and a global event + in Windows with the key `Global\docker-daemon-config-$PID`. The options can + be modified in the configuration file but still will check for conflicts with + the provided flags. The daemon fails to reconfigure itself + if there are conflicts, but it won't stop execution. + + The list of currently supported options that can be reconfigured is this: + + - `debug`: it changes the daemon to debug mode when set to true. + - `cluster-store`: it reloads the discovery store with the new address. + - `cluster-store-opts`: it uses the new options to reload the discovery store. + - `cluster-advertise`: it modifies the address advertised after reloading. + - `labels`: it replaces the daemon labels with a new set of labels. + - `live-restore`: Enables [keeping containers alive during daemon downtime](../../admin/live-restore.md). + - `max-concurrent-downloads`: it updates the max concurrent downloads for each pull. + - `max-concurrent-uploads`: it updates the max concurrent uploads for each push. + - `default-runtime`: it updates the runtime to be used if not is + specified at container creation. It defaults to "default" which is + the runtime shipped with the official docker packages. + - `runtimes`: it updates the list of available OCI runtimes that can + be used to run containers + + Updating and reloading the cluster configurations such as `--cluster-store`, + `--cluster-advertise` and `--cluster-store-opts` will take effect only if + these configurations were not previously configured. If `--cluster-store` + has been provided in flags and `cluster-advertise` not, `cluster-advertise` + can be added in the configuration file without accompanied by `--cluster-store` + Configuration reload will log a warning message if it detects a change in + previously configured cluster configurations. + + + ## Running multiple daemons + + > **Note:** Running multiple daemons on a single host is considered as "experimental". The user should be aware of + > unsolved problems. This solution may not work properly in some cases. Solutions are currently under development + > and will be delivered in the near future. + + This section describes how to run multiple Docker daemons on a single host. To + run multiple daemons, you must configure each daemon so that it does not + conflict with other daemons on the same host. You can set these options either + by providing them as flags, or by using a [daemon configuration file](dockerd.md#daemon-configuration-file). + + The following daemon options must be configured for each daemon: + + ```bash + -b, --bridge= Attach containers to a network bridge + --exec-root=/var/run/docker Root of the Docker execdriver + -g, --graph=/var/lib/docker Root of the Docker runtime + -p, --pidfile=/var/run/docker.pid Path to use for daemon PID file + -H, --host=[] Daemon socket(s) to connect to + --iptables=true Enable addition of iptables rules + --config-file=/etc/docker/daemon.json Daemon configuration file + --tlscacert="~/.docker/ca.pem" Trust certs signed only by this CA + --tlscert="~/.docker/cert.pem" Path to TLS certificate file + --tlskey="~/.docker/key.pem" Path to TLS key file + ``` + + When your daemons use different values for these flags, you can run them on the same host without any problems. + It is very important to properly understand the meaning of those options and to use them correctly. + + - The `-b, --bridge=` flag is set to `docker0` as default bridge network. It is created automatically when you install Docker. + If you are not using the default, you must create and configure the bridge manually or just set it to 'none': `--bridge=none` + - `--exec-root` is the path where the container state is stored. The default value is `/var/run/docker`. Specify the path for + your running daemon here. + - `--graph` is the path where images are stored. The default value is `/var/lib/docker`. To avoid any conflict with other daemons + set this parameter separately for each daemon. + - `-p, --pidfile=/var/run/docker.pid` is the path where the process ID of the daemon is stored. Specify the path for your + pid file here. + - `--host=[]` specifies where the Docker daemon will listen for client connections. If unspecified, it defaults to `/var/run/docker.sock`. + - `--iptables=false` prevents the Docker daemon from adding iptables rules. If + multiple daemons manage iptables rules, they may overwrite rules set by another + daemon. Be aware that disabling this option requires you to manually add + iptables rules to expose container ports. If you prevent Docker from adding + iptables rules, Docker will also not add IP masquerading rules, even if you set + `--ip-masq` to `true`. Without IP masquerading rules, Docker containers will not be + able to connect to external hosts or the internet when using network other than + default bridge. + - `--config-file=/etc/docker/daemon.json` is the path where configuration file is stored. You can use it instead of + daemon flags. Specify the path for each daemon. + - `--tls*` Docker daemon supports `--tlsverify` mode that enforces encrypted and authenticated remote connections. + The `--tls*` options enable use of specific certificates for individual daemons. + + Example script for a separate “bootstrap” instance of the Docker daemon without network: + + ```bash + $ sudo dockerd \ + -H unix:///var/run/docker-bootstrap.sock \ + -p /var/run/docker-bootstrap.pid \ + --iptables=false \ + --ip-masq=false \ + --bridge=none \ + --graph=/var/lib/docker-bootstrap \ + --exec-root=/var/run/docker-bootstrap + ``` +usage: dockerd [OPTIONS] +pname: dockerd +plink: dockerd.yaml +options: +- option: add-runtime + description: Register an additional OCI compatible runtime +- option: api-cors-header + description: Set CORS headers in the remote API +- option: authorization-plugin + description: Authorization plugins to load +- option: bridge + shorthand: b + description: Attach containers to a network bridge +- option: bip + description: Specify network bridge IP +- option: cgroup-parent + description: Set parent cgroup for all containers +- option: cluster-advertise + description: Address or interface name to advertise +- option: cluster-store + default_value: map[] + description: Set cluster store options +- option: config-file + default_value: /etc/docker/daemon.json + description: Daemon configuration file +- option: containerd + description: Path to containerd socket +- option: debug + shorthand: D + description: Enable debug mode +- option: default-gateway + description: Container default gateway IPv4 address +- option: default-gateway-v6 + description: Container default gateway IPv6 address +- option: default-runtime + default_value: runc + description: Default OCI runtime for containers +- option: default-ulimit + description: Default ulimits for containers +- option: disable-legacy-registry + description: Disable contacting legacy registries +- option: dns + description: DNS server to use +- option: dns-opt + description: DNS options to use +- option: dns-search + description: DNS search domains to use +- option: exec-opt + description: Runtime execution options +- option: exec-root + default_value: /var/run/docker + description: Root directory for execution state files +- option: fixed-cidr + description: IPv4 subnet for fixed IPs +- option: fixed-cidr-v6 + description: IPv6 subnet for fixed IPs +- option: group + shorthand: G + default_value: docker + description: Group for the unix socket +- option: graph + shorthand: g + default_value: /var/lib/docker + description: Root of the Docker runtime +- option: host + shorthand: H + description: Daemon socket(s) to connect to +- option: help + description: Print usage +- option: icc + default_value: true + description: Enable inter-container communication +- option: insecure-registry + description: Enable insecure registry communication +- option: ip + default_value: 0.0.0.0 + description: Default IP when binding container ports +- option: ip-forward + default_value: true + description: Enable net.ipv4.ip_forward +- option: ip-masq + default_value: true + description: Enable IP masquerading +- option: iptables + default_value: true + description: Enable addition of iptables rules +- option: ipv6 + description: Enable IPv6 networking +- option: log-level + shorthand: l + default_value: info + description: Set the logging level +- option: label + description: Set key=value labels to the daemon +- option: live-restore + description: Enables keeping containers alive during daemon downtime +- option: log-driver + default_value: json-file + description: Default driver for container logs +- option: log-opt + default_value: map[] + description: Default log driver options for containers +- option: max-concurrent-downloads + default_value: 3 + description: Set the max concurrent downloads for each pull +- option: max-concurrent-uploads + default_value: 5 + description: Set the max concurrent uploads for each push +- option: mtu + description: Set the containers network MTU +- option: oom-score-adjust + default_value: -500 + description: Set the oom_score_adj for the daemon +- option: pidfile + shorthand: p + default_value: /var/run/docker.pid + description: Path to use for daemon PID file +- option: raw-logs + description: Full timestamps without ANSI coloring +- option: registry-mirror + description: Preferred Docker registry mirror +- option: storage-driver + shorthand: s + description: Storage driver to use +- option: selinux-enabled + description: Enable selinux support +- option: storage-opt + description: Storage driver options +- option: swarm-default-advertise-addr + description: Set default address or interface for swarm advertised address +- option: tls + description: Use TLS; implied by --tlsverify +- option: tlscacert + default_value: ~/.docker/ca.pem + description: Trust certs signed only by this CA +- option: tlscert + default_value: ~/.docker/cert.pem + description: Path to TLS certificate file +- option: tlskey + default_value: ~/.docker/key.pem + description: Path to TLS key file +- option: tlsverify + description: Use TLS and verify the remote +- option: userland-proxy + default_value: true + description: Use userland proxy for loopback traffic +- option: userns-remap + description: User/Group setting for user namespaces +- option: version + shorthand: v + description: Print version information and quit diff --git a/_data/engine-cli/docker.yaml b/_data/engine-cli/docker.yaml new file mode 100644 index 00000000000..c214f7f9ed5 --- /dev/null +++ b/_data/engine-cli/docker.yaml @@ -0,0 +1,109 @@ +command: docker +cname: +- docker attach +- docker build +- docker checkpoint +- docker commit +- docker container +- docker cp +- docker create +- docker deploy +- docker diff +- docker events +- docker exec +- docker export +- docker history +- docker image +- docker images +- docker import +- docker info +- docker inspect +- docker kill +- docker load +- docker login +- docker logout +- docker logs +- docker network +- docker node +- docker pause +- docker plugin +- docker port +- docker ps +- docker pull +- docker push +- docker rename +- docker restart +- docker rm +- docker rmi +- docker run +- docker save +- docker search +- docker secret +- docker service +- docker stack +- docker start +- docker stats +- docker stop +- docker swarm +- docker system +- docker tag +- docker top +- docker unpause +- docker update +- docker version +- docker volume +- docker wait +clink: +- docker_attach.yaml +- docker_build.yaml +- docker_checkpoint.yaml +- docker_commit.yaml +- docker_container.yaml +- docker_cp.yaml +- docker_create.yaml +- docker_deploy.yaml +- docker_diff.yaml +- docker_events.yaml +- docker_exec.yaml +- docker_export.yaml +- docker_history.yaml +- docker_image.yaml +- docker_images.yaml +- docker_import.yaml +- docker_info.yaml +- docker_inspect.yaml +- docker_kill.yaml +- docker_load.yaml +- docker_login.yaml +- docker_logout.yaml +- docker_logs.yaml +- docker_network.yaml +- docker_node.yaml +- docker_pause.yaml +- docker_plugin.yaml +- docker_port.yaml +- docker_ps.yaml +- docker_pull.yaml +- docker_push.yaml +- docker_rename.yaml +- docker_restart.yaml +- docker_rm.yaml +- docker_rmi.yaml +- docker_run.yaml +- docker_save.yaml +- docker_search.yaml +- docker_secret.yaml +- docker_service.yaml +- docker_stack.yaml +- docker_start.yaml +- docker_stats.yaml +- docker_stop.yaml +- docker_swarm.yaml +- docker_system.yaml +- docker_tag.yaml +- docker_top.yaml +- docker_unpause.yaml +- docker_update.yaml +- docker_version.yaml +- docker_volume.yaml +- docker_wait.yaml diff --git a/_data/engine-cli/docker_attach.yaml b/_data/engine-cli/docker_attach.yaml new file mode 100644 index 00000000000..6ce8b4ff285 --- /dev/null +++ b/_data/engine-cli/docker_attach.yaml @@ -0,0 +1,15 @@ +command: docker attach +short: Attach to a running container +long: Attach to a running container +usage: docker attach [OPTIONS] CONTAINER +pname: docker +plink: docker.yaml +options: +- option: detach-keys + description: Override the key sequence for detaching a container +- option: no-stdin + default_value: "false" + description: Do not attach STDIN +- option: sig-proxy + default_value: "true" + description: Proxy all received signals to the process diff --git a/_data/engine-cli/docker_build.yaml b/_data/engine-cli/docker_build.yaml new file mode 100644 index 00000000000..f77ffc43042 --- /dev/null +++ b/_data/engine-cli/docker_build.yaml @@ -0,0 +1,84 @@ +command: docker build +short: Build an image from a Dockerfile +long: Build an image from a Dockerfile +usage: docker build [OPTIONS] PATH | URL | - +pname: docker +plink: docker.yaml +options: +- option: build-arg + default_value: '[]' + description: Set build-time variables +- option: cache-from + default_value: '[]' + description: Images to consider as cache sources +- option: cgroup-parent + description: Optional parent cgroup for the container +- option: compress + default_value: "false" + description: Compress the build context using gzip +- option: cpu-period + default_value: "0" + description: Limit the CPU CFS (Completely Fair Scheduler) period +- option: cpu-quota + default_value: "0" + description: Limit the CPU CFS (Completely Fair Scheduler) quota +- option: cpu-shares + shorthand: c + default_value: "0" + description: CPU shares (relative weight) +- option: cpuset-cpus + description: CPUs in which to allow execution (0-3, 0,1) +- option: cpuset-mems + description: MEMs in which to allow execution (0-3, 0,1) +- option: disable-content-trust + default_value: "true" + description: Skip image verification +- option: file + shorthand: f + description: Name of the Dockerfile (Default is 'PATH/Dockerfile') +- option: force-rm + default_value: "false" + description: Always remove intermediate containers +- option: isolation + description: Container isolation technology +- option: label + default_value: '[]' + description: Set metadata for an image +- option: memory + shorthand: m + description: Memory limit +- option: memory-swap + description: | + Swap limit equal to memory plus swap: '-1' to enable unlimited swap +- option: network + default_value: default + description: | + Set the networking mode for the RUN instructions during build +- option: no-cache + default_value: "false" + description: Do not use cache when building the image +- option: pull + default_value: "false" + description: Always attempt to pull a newer version of the image +- option: quiet + shorthand: q + default_value: "false" + description: Suppress the build output and print image ID on success +- option: rm + default_value: "true" + description: Remove intermediate containers after a successful build +- option: security-opt + default_value: '[]' + description: Security options +- option: shm-size + description: Size of /dev/shm, default value is 64MB +- option: squash + default_value: "false" + description: Squash newly built layers into a single new layer +- option: tag + shorthand: t + default_value: '[]' + description: Name and optionally a tag in the 'name:tag' format +- option: ulimit + default_value: '[]' + description: Ulimit options diff --git a/_data/engine-cli/docker_checkpoint.yaml b/_data/engine-cli/docker_checkpoint.yaml new file mode 100644 index 00000000000..29a4441af10 --- /dev/null +++ b/_data/engine-cli/docker_checkpoint.yaml @@ -0,0 +1,14 @@ +command: docker checkpoint +short: Manage checkpoints +long: Manage checkpoints +usage: docker checkpoint +pname: docker +plink: docker.yaml +cname: +- docker checkpoint create +- docker checkpoint ls +- docker checkpoint rm +clink: +- docker_checkpoint_create.yaml +- docker_checkpoint_ls.yaml +- docker_checkpoint_rm.yaml diff --git a/_data/engine-cli/docker_checkpoint_create.yaml b/_data/engine-cli/docker_checkpoint_create.yaml new file mode 100644 index 00000000000..2e8f0a9529b --- /dev/null +++ b/_data/engine-cli/docker_checkpoint_create.yaml @@ -0,0 +1,12 @@ +command: docker checkpoint create +short: Create a checkpoint from a running container +long: Create a checkpoint from a running container +usage: docker checkpoint create [OPTIONS] CONTAINER CHECKPOINT +pname: docker checkpoint +plink: docker_checkpoint.yaml +options: +- option: checkpoint-dir + description: Use a custom checkpoint storage directory +- option: leave-running + default_value: "false" + description: Leave the container running after checkpoint diff --git a/_data/engine-cli/docker_checkpoint_ls.yaml b/_data/engine-cli/docker_checkpoint_ls.yaml new file mode 100644 index 00000000000..959ddf90c2c --- /dev/null +++ b/_data/engine-cli/docker_checkpoint_ls.yaml @@ -0,0 +1,9 @@ +command: docker checkpoint ls +short: List checkpoints for a container +long: List checkpoints for a container +usage: docker checkpoint ls [OPTIONS] CONTAINER +pname: docker checkpoint +plink: docker_checkpoint.yaml +options: +- option: checkpoint-dir + description: Use a custom checkpoint storage directory diff --git a/_data/engine-cli/docker_checkpoint_rm.yaml b/_data/engine-cli/docker_checkpoint_rm.yaml new file mode 100644 index 00000000000..0534b2d50b0 --- /dev/null +++ b/_data/engine-cli/docker_checkpoint_rm.yaml @@ -0,0 +1,9 @@ +command: docker checkpoint rm +short: Remove a checkpoint +long: Remove a checkpoint +usage: docker checkpoint rm [OPTIONS] CONTAINER CHECKPOINT +pname: docker checkpoint +plink: docker_checkpoint.yaml +options: +- option: checkpoint-dir + description: Use a custom checkpoint storage directory diff --git a/_data/engine-cli/docker_commit.yaml b/_data/engine-cli/docker_commit.yaml new file mode 100644 index 00000000000..3c00e494345 --- /dev/null +++ b/_data/engine-cli/docker_commit.yaml @@ -0,0 +1,21 @@ +command: docker commit +short: Create a new image from a container's changes +long: Create a new image from a container's changes +usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] +pname: docker +plink: docker.yaml +options: +- option: author + shorthand: a + description: Author (e.g., "John Hannibal Smith ") +- option: change + shorthand: c + default_value: '[]' + description: Apply Dockerfile instruction to the created image +- option: message + shorthand: m + description: Commit message +- option: pause + shorthand: p + default_value: "true" + description: Pause container during commit diff --git a/_data/engine-cli/docker_container.yaml b/_data/engine-cli/docker_container.yaml new file mode 100644 index 00000000000..82d287f8580 --- /dev/null +++ b/_data/engine-cli/docker_container.yaml @@ -0,0 +1,58 @@ +command: docker container +short: Manage containers +long: Manage containers +usage: docker container +pname: docker +plink: docker.yaml +cname: +- docker container attach +- docker container commit +- docker container cp +- docker container create +- docker container diff +- docker container exec +- docker container export +- docker container inspect +- docker container kill +- docker container logs +- docker container ls +- docker container pause +- docker container port +- docker container prune +- docker container rename +- docker container restart +- docker container rm +- docker container run +- docker container start +- docker container stats +- docker container stop +- docker container top +- docker container unpause +- docker container update +- docker container wait +clink: +- docker_container_attach.yaml +- docker_container_commit.yaml +- docker_container_cp.yaml +- docker_container_create.yaml +- docker_container_diff.yaml +- docker_container_exec.yaml +- docker_container_export.yaml +- docker_container_inspect.yaml +- docker_container_kill.yaml +- docker_container_logs.yaml +- docker_container_ls.yaml +- docker_container_pause.yaml +- docker_container_port.yaml +- docker_container_prune.yaml +- docker_container_rename.yaml +- docker_container_restart.yaml +- docker_container_rm.yaml +- docker_container_run.yaml +- docker_container_start.yaml +- docker_container_stats.yaml +- docker_container_stop.yaml +- docker_container_top.yaml +- docker_container_unpause.yaml +- docker_container_update.yaml +- docker_container_wait.yaml diff --git a/_data/engine-cli/docker_container_attach.yaml b/_data/engine-cli/docker_container_attach.yaml new file mode 100644 index 00000000000..ff4c77b2fa7 --- /dev/null +++ b/_data/engine-cli/docker_container_attach.yaml @@ -0,0 +1,15 @@ +command: docker container attach +short: Attach to a running container +long: Attach to a running container +usage: docker container attach [OPTIONS] CONTAINER +pname: docker container +plink: docker_container.yaml +options: +- option: detach-keys + description: Override the key sequence for detaching a container +- option: no-stdin + default_value: "false" + description: Do not attach STDIN +- option: sig-proxy + default_value: "true" + description: Proxy all received signals to the process diff --git a/_data/engine-cli/docker_container_commit.yaml b/_data/engine-cli/docker_container_commit.yaml new file mode 100644 index 00000000000..3c5a87bcb2d --- /dev/null +++ b/_data/engine-cli/docker_container_commit.yaml @@ -0,0 +1,21 @@ +command: docker container commit +short: Create a new image from a container's changes +long: Create a new image from a container's changes +usage: docker container commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] +pname: docker container +plink: docker_container.yaml +options: +- option: author + shorthand: a + description: Author (e.g., "John Hannibal Smith ") +- option: change + shorthand: c + default_value: '[]' + description: Apply Dockerfile instruction to the created image +- option: message + shorthand: m + description: Commit message +- option: pause + shorthand: p + default_value: "true" + description: Pause container during commit diff --git a/_data/engine-cli/docker_container_cp.yaml b/_data/engine-cli/docker_container_cp.yaml new file mode 100644 index 00000000000..b437905c37c --- /dev/null +++ b/_data/engine-cli/docker_container_cp.yaml @@ -0,0 +1,18 @@ +command: docker container cp +short: Copy files/folders between a container and the local filesystem +long: |- + Copy files/folders between a container and the local filesystem + + Use '-' as the source to read a tar archive from stdin + and extract it to a directory destination in a container. + Use '-' as the destination to stream a tar archive of a + container source to stdout. +usage: "docker container cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-\n\tdocker cp + [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH" +pname: docker container +plink: docker_container.yaml +options: +- option: follow-link + shorthand: L + default_value: "false" + description: Always follow symbol link in SRC_PATH diff --git a/_data/engine-cli/docker_container_create.yaml b/_data/engine-cli/docker_container_create.yaml new file mode 100644 index 00000000000..a9eac33c40c --- /dev/null +++ b/_data/engine-cli/docker_container_create.yaml @@ -0,0 +1,278 @@ +command: docker container create +short: Create a new container +long: Create a new container +usage: docker container create [OPTIONS] IMAGE [COMMAND] [ARG...] +pname: docker container +plink: docker_container.yaml +options: +- option: add-host + default_value: '[]' + description: Add a custom host-to-IP mapping (host:ip) +- option: attach + shorthand: a + default_value: '[]' + description: Attach to STDIN, STDOUT or STDERR +- option: blkio-weight + default_value: "0" + description: | + Block IO (relative weight), between 10 and 1000, or 0 to disable (default 0) +- option: blkio-weight-device + default_value: '[]' + description: Block IO weight (relative device weight) +- option: cap-add + default_value: '[]' + description: Add Linux capabilities +- option: cap-drop + default_value: '[]' + description: Drop Linux capabilities +- option: cgroup-parent + description: Optional parent cgroup for the container +- option: cidfile + description: Write the container ID to the file +- option: cpu-count + default_value: "0" + description: CPU count (Windows only) +- option: cpu-percent + default_value: "0" + description: CPU percent (Windows only) +- option: cpu-period + default_value: "0" + description: Limit CPU CFS (Completely Fair Scheduler) period +- option: cpu-quota + default_value: "0" + description: Limit CPU CFS (Completely Fair Scheduler) quota +- option: cpu-rt-period + default_value: "0" + description: Limit CPU real-time period in microseconds +- option: cpu-rt-runtime + default_value: "0" + description: Limit CPU real-time runtime in microseconds +- option: cpu-shares + shorthand: c + default_value: "0" + description: CPU shares (relative weight) +- option: cpus + default_value: "0.000" + description: Number of CPUs +- option: cpuset-cpus + description: CPUs in which to allow execution (0-3, 0,1) +- option: cpuset-mems + description: MEMs in which to allow execution (0-3, 0,1) +- option: credentialspec + description: Credential spec for managed service account (Windows only) +- option: device + default_value: '[]' + description: Add a host device to the container +- option: device-read-bps + default_value: '[]' + description: Limit read rate (bytes per second) from a device +- option: device-read-iops + default_value: '[]' + description: Limit read rate (IO per second) from a device +- option: device-write-bps + default_value: '[]' + description: Limit write rate (bytes per second) to a device +- option: device-write-iops + default_value: '[]' + description: Limit write rate (IO per second) to a device +- option: disable-content-trust + default_value: "true" + description: Skip image verification +- option: dns + default_value: '[]' + description: Set custom DNS servers +- option: dns-opt + default_value: '[]' + description: Set DNS options +- option: dns-option + default_value: '[]' + description: Set DNS options +- option: dns-search + default_value: '[]' + description: Set custom DNS search domains +- option: entrypoint + description: Overwrite the default ENTRYPOINT of the image +- option: env + shorthand: e + default_value: '[]' + description: Set environment variables +- option: env-file + default_value: '[]' + description: Read in a file of environment variables +- option: expose + default_value: '[]' + description: Expose a port or a range of ports +- option: group-add + default_value: '[]' + description: Add additional groups to join +- option: health-cmd + description: Command to run to check health +- option: health-interval + default_value: "0" + description: Time between running the check (ns|us|ms|s|m|h) (default 0s) +- option: health-retries + default_value: "0" + description: Consecutive failures needed to report unhealthy +- option: health-timeout + default_value: "0" + description: | + Maximum time to allow one check to run (ns|us|ms|s|m|h) (default 0s) +- option: help + default_value: "false" + description: Print usage +- option: hostname + shorthand: h + description: Container host name +- option: init + default_value: "false" + description: | + Run an init inside the container that forwards signals and reaps processes +- option: init-path + description: Path to the docker-init binary +- option: interactive + shorthand: i + default_value: "false" + description: Keep STDIN open even if not attached +- option: io-maxbandwidth + description: | + Maximum IO bandwidth limit for the system drive (Windows only) +- option: io-maxiops + default_value: "0" + description: Maximum IOps limit for the system drive (Windows only) +- option: ip + description: Container IPv4 address (e.g. 172.30.100.104) +- option: ip6 + description: Container IPv6 address (e.g. 2001:db8::33) +- option: ipc + description: IPC namespace to use +- option: isolation + description: Container isolation technology +- option: kernel-memory + description: Kernel memory limit +- option: label + shorthand: l + default_value: '[]' + description: Set meta data on a container +- option: label-file + default_value: '[]' + description: Read in a line delimited file of labels +- option: link + default_value: '[]' + description: Add link to another container +- option: link-local-ip + default_value: '[]' + description: Container IPv4/IPv6 link-local addresses +- option: log-driver + description: Logging driver for the container +- option: log-opt + default_value: '[]' + description: Log driver options +- option: mac-address + description: Container MAC address (e.g. 92:d0:c6:0a:29:33) +- option: memory + shorthand: m + description: Memory limit +- option: memory-reservation + description: Memory soft limit +- option: memory-swap + description: | + Swap limit equal to memory plus swap: '-1' to enable unlimited swap +- option: memory-swappiness + default_value: "-1" + description: Tune container memory swappiness (0 to 100) +- option: name + description: Assign a name to the container +- option: net + default_value: default + description: Connect a container to a network +- option: net-alias + default_value: '[]' + description: Add network-scoped alias for the container +- option: network + default_value: default + description: Connect a container to a network +- option: network-alias + default_value: '[]' + description: Add network-scoped alias for the container +- option: no-healthcheck + default_value: "false" + description: Disable any container-specified HEALTHCHECK +- option: oom-kill-disable + default_value: "false" + description: Disable OOM Killer +- option: oom-score-adj + default_value: "0" + description: Tune host's OOM preferences (-1000 to 1000) +- option: pid + description: PID namespace to use +- option: pids-limit + default_value: "0" + description: Tune container pids limit (set -1 for unlimited) +- option: privileged + default_value: "false" + description: Give extended privileges to this container +- option: publish + shorthand: p + default_value: '[]' + description: Publish a container's port(s) to the host +- option: publish-all + shorthand: P + default_value: "false" + description: Publish all exposed ports to random ports +- option: read-only + default_value: "false" + description: Mount the container's root filesystem as read only +- option: restart + default_value: "no" + description: Restart policy to apply when a container exits +- option: rm + default_value: "false" + description: Automatically remove the container when it exits +- option: runtime + description: Runtime to use for this container +- option: security-opt + default_value: '[]' + description: Security Options +- option: shm-size + description: Size of /dev/shm, default value is 64MB +- option: stop-signal + default_value: SIGTERM + description: Signal to stop a container, SIGTERM by default +- option: stop-timeout + default_value: "0" + description: Timeout (in seconds) to stop a container +- option: storage-opt + default_value: '[]' + description: Storage driver options for the container +- option: sysctl + default_value: map[] + description: Sysctl options +- option: tmpfs + default_value: '[]' + description: Mount a tmpfs directory +- option: tty + shorthand: t + default_value: "false" + description: Allocate a pseudo-TTY +- option: ulimit + default_value: '[]' + description: Ulimit options +- option: user + shorthand: u + description: 'Username or UID (format: [:])' +- option: userns + description: User namespace to use +- option: uts + description: UTS namespace to use +- option: volume + shorthand: v + default_value: '[]' + description: Bind mount a volume +- option: volume-driver + description: Optional volume driver for the container +- option: volumes-from + default_value: '[]' + description: Mount volumes from the specified container(s) +- option: workdir + shorthand: w + description: Working directory inside the container diff --git a/_data/engine-cli/docker_container_diff.yaml b/_data/engine-cli/docker_container_diff.yaml new file mode 100644 index 00000000000..0e532f24686 --- /dev/null +++ b/_data/engine-cli/docker_container_diff.yaml @@ -0,0 +1,6 @@ +command: docker container diff +short: Inspect changes on a container's filesystem +long: Inspect changes on a container's filesystem +usage: docker container diff CONTAINER +pname: docker container +plink: docker_container.yaml diff --git a/_data/engine-cli/docker_container_exec.yaml b/_data/engine-cli/docker_container_exec.yaml new file mode 100644 index 00000000000..95b544670bc --- /dev/null +++ b/_data/engine-cli/docker_container_exec.yaml @@ -0,0 +1,31 @@ +command: docker container exec +short: Run a command in a running container +long: Run a command in a running container +usage: docker container exec [OPTIONS] CONTAINER COMMAND [ARG...] +pname: docker container +plink: docker_container.yaml +options: +- option: detach + shorthand: d + default_value: "false" + description: 'Detached mode: run command in the background' +- option: detach-keys + description: Override the key sequence for detaching a container +- option: env + shorthand: e + default_value: '[]' + description: Set environment variables +- option: interactive + shorthand: i + default_value: "false" + description: Keep STDIN open even if not attached +- option: privileged + default_value: "false" + description: Give extended privileges to the command +- option: tty + shorthand: t + default_value: "false" + description: Allocate a pseudo-TTY +- option: user + shorthand: u + description: 'Username or UID (format: [:])' diff --git a/_data/engine-cli/docker_container_export.yaml b/_data/engine-cli/docker_container_export.yaml new file mode 100644 index 00000000000..fff2766d2cb --- /dev/null +++ b/_data/engine-cli/docker_container_export.yaml @@ -0,0 +1,10 @@ +command: docker container export +short: Export a container's filesystem as a tar archive +long: Export a container's filesystem as a tar archive +usage: docker container export [OPTIONS] CONTAINER +pname: docker container +plink: docker_container.yaml +options: +- option: output + shorthand: o + description: Write to a file, instead of STDOUT diff --git a/_data/engine-cli/docker_container_inspect.yaml b/_data/engine-cli/docker_container_inspect.yaml new file mode 100644 index 00000000000..6590496cbda --- /dev/null +++ b/_data/engine-cli/docker_container_inspect.yaml @@ -0,0 +1,14 @@ +command: docker container inspect +short: Display detailed information on one or more containers +long: Display detailed information on one or more containers +usage: docker container inspect [OPTIONS] CONTAINER [CONTAINER...] +pname: docker container +plink: docker_container.yaml +options: +- option: format + shorthand: f + description: Format the output using the given Go template +- option: size + shorthand: s + default_value: "false" + description: Display total file sizes diff --git a/_data/engine-cli/docker_container_kill.yaml b/_data/engine-cli/docker_container_kill.yaml new file mode 100644 index 00000000000..421f779e5fe --- /dev/null +++ b/_data/engine-cli/docker_container_kill.yaml @@ -0,0 +1,11 @@ +command: docker container kill +short: Kill one or more running containers +long: Kill one or more running containers +usage: docker container kill [OPTIONS] CONTAINER [CONTAINER...] +pname: docker container +plink: docker_container.yaml +options: +- option: signal + shorthand: s + default_value: KILL + description: Signal to send to the container diff --git a/_data/engine-cli/docker_container_logs.yaml b/_data/engine-cli/docker_container_logs.yaml new file mode 100644 index 00000000000..b1d9d5af214 --- /dev/null +++ b/_data/engine-cli/docker_container_logs.yaml @@ -0,0 +1,23 @@ +command: docker container logs +short: Fetch the logs of a container +long: Fetch the logs of a container +usage: docker container logs [OPTIONS] CONTAINER +pname: docker container +plink: docker_container.yaml +options: +- option: details + default_value: "false" + description: Show extra details provided to logs +- option: follow + shorthand: f + default_value: "false" + description: Follow log output +- option: since + description: Show logs since timestamp +- option: tail + default_value: all + description: Number of lines to show from the end of the logs +- option: timestamps + shorthand: t + default_value: "false" + description: Show timestamps diff --git a/_data/engine-cli/docker_container_ls.yaml b/_data/engine-cli/docker_container_ls.yaml new file mode 100644 index 00000000000..ef425c6be18 --- /dev/null +++ b/_data/engine-cli/docker_container_ls.yaml @@ -0,0 +1,35 @@ +command: docker container ls +short: List containers +long: List containers +usage: docker container ls [OPTIONS] +pname: docker container +plink: docker_container.yaml +options: +- option: all + shorthand: a + default_value: "false" + description: Show all containers (default shows just running) +- option: filter + shorthand: f + description: Filter output based on conditions provided +- option: format + description: Pretty-print containers using a Go template +- option: last + shorthand: "n" + default_value: "-1" + description: Show n last created containers (includes all states) +- option: latest + shorthand: l + default_value: "false" + description: Show the latest created container (includes all states) +- option: no-trunc + default_value: "false" + description: Don't truncate output +- option: quiet + shorthand: q + default_value: "false" + description: Only display numeric IDs +- option: size + shorthand: s + default_value: "false" + description: Display total file sizes diff --git a/_data/engine-cli/docker_container_pause.yaml b/_data/engine-cli/docker_container_pause.yaml new file mode 100644 index 00000000000..e6fabc1f766 --- /dev/null +++ b/_data/engine-cli/docker_container_pause.yaml @@ -0,0 +1,6 @@ +command: docker container pause +short: Pause all processes within one or more containers +long: Pause all processes within one or more containers +usage: docker container pause CONTAINER [CONTAINER...] +pname: docker container +plink: docker_container.yaml diff --git a/_data/engine-cli/docker_container_port.yaml b/_data/engine-cli/docker_container_port.yaml new file mode 100644 index 00000000000..99c0ee6702b --- /dev/null +++ b/_data/engine-cli/docker_container_port.yaml @@ -0,0 +1,6 @@ +command: docker container port +short: List port mappings or a specific mapping for the container +long: List port mappings or a specific mapping for the container +usage: docker container port CONTAINER [PRIVATE_PORT[/PROTO]] +pname: docker container +plink: docker_container.yaml diff --git a/_data/engine-cli/docker_container_prune.yaml b/_data/engine-cli/docker_container_prune.yaml new file mode 100644 index 00000000000..3b433e0d0e0 --- /dev/null +++ b/_data/engine-cli/docker_container_prune.yaml @@ -0,0 +1,11 @@ +command: docker container prune +short: Remove all stopped containers +long: Remove all stopped containers +usage: docker container prune [OPTIONS] +pname: docker container +plink: docker_container.yaml +options: +- option: force + shorthand: f + default_value: "false" + description: Do not prompt for confirmation diff --git a/_data/engine-cli/docker_container_rename.yaml b/_data/engine-cli/docker_container_rename.yaml new file mode 100644 index 00000000000..9a289fe028a --- /dev/null +++ b/_data/engine-cli/docker_container_rename.yaml @@ -0,0 +1,6 @@ +command: docker container rename +short: Rename a container +long: Rename a container +usage: docker container rename CONTAINER NEW_NAME +pname: docker container +plink: docker_container.yaml diff --git a/_data/engine-cli/docker_container_restart.yaml b/_data/engine-cli/docker_container_restart.yaml new file mode 100644 index 00000000000..717e1ce8971 --- /dev/null +++ b/_data/engine-cli/docker_container_restart.yaml @@ -0,0 +1,11 @@ +command: docker container restart +short: Restart one or more containers +long: Restart one or more containers +usage: docker container restart [OPTIONS] CONTAINER [CONTAINER...] +pname: docker container +plink: docker_container.yaml +options: +- option: time + shorthand: t + default_value: "10" + description: Seconds to wait for stop before killing the container diff --git a/_data/engine-cli/docker_container_rm.yaml b/_data/engine-cli/docker_container_rm.yaml new file mode 100644 index 00000000000..6cbc0396a68 --- /dev/null +++ b/_data/engine-cli/docker_container_rm.yaml @@ -0,0 +1,19 @@ +command: docker container rm +short: Remove one or more containers +long: Remove one or more containers +usage: docker container rm [OPTIONS] CONTAINER [CONTAINER...] +pname: docker container +plink: docker_container.yaml +options: +- option: force + shorthand: f + default_value: "false" + description: Force the removal of a running container (uses SIGKILL) +- option: link + shorthand: l + default_value: "false" + description: Remove the specified link +- option: volumes + shorthand: v + default_value: "false" + description: Remove the volumes associated with the container diff --git a/_data/engine-cli/docker_container_run.yaml b/_data/engine-cli/docker_container_run.yaml new file mode 100644 index 00000000000..71e201696f0 --- /dev/null +++ b/_data/engine-cli/docker_container_run.yaml @@ -0,0 +1,287 @@ +command: docker container run +short: Run a command in a new container +long: Run a command in a new container +usage: docker container run [OPTIONS] IMAGE [COMMAND] [ARG...] +pname: docker container +plink: docker_container.yaml +options: +- option: add-host + default_value: '[]' + description: Add a custom host-to-IP mapping (host:ip) +- option: attach + shorthand: a + default_value: '[]' + description: Attach to STDIN, STDOUT or STDERR +- option: blkio-weight + default_value: "0" + description: | + Block IO (relative weight), between 10 and 1000, or 0 to disable (default 0) +- option: blkio-weight-device + default_value: '[]' + description: Block IO weight (relative device weight) +- option: cap-add + default_value: '[]' + description: Add Linux capabilities +- option: cap-drop + default_value: '[]' + description: Drop Linux capabilities +- option: cgroup-parent + description: Optional parent cgroup for the container +- option: cidfile + description: Write the container ID to the file +- option: cpu-count + default_value: "0" + description: CPU count (Windows only) +- option: cpu-percent + default_value: "0" + description: CPU percent (Windows only) +- option: cpu-period + default_value: "0" + description: Limit CPU CFS (Completely Fair Scheduler) period +- option: cpu-quota + default_value: "0" + description: Limit CPU CFS (Completely Fair Scheduler) quota +- option: cpu-rt-period + default_value: "0" + description: Limit CPU real-time period in microseconds +- option: cpu-rt-runtime + default_value: "0" + description: Limit CPU real-time runtime in microseconds +- option: cpu-shares + shorthand: c + default_value: "0" + description: CPU shares (relative weight) +- option: cpus + default_value: "0.000" + description: Number of CPUs +- option: cpuset-cpus + description: CPUs in which to allow execution (0-3, 0,1) +- option: cpuset-mems + description: MEMs in which to allow execution (0-3, 0,1) +- option: credentialspec + description: Credential spec for managed service account (Windows only) +- option: detach + shorthand: d + default_value: "false" + description: Run container in background and print container ID +- option: detach-keys + description: Override the key sequence for detaching a container +- option: device + default_value: '[]' + description: Add a host device to the container +- option: device-read-bps + default_value: '[]' + description: Limit read rate (bytes per second) from a device +- option: device-read-iops + default_value: '[]' + description: Limit read rate (IO per second) from a device +- option: device-write-bps + default_value: '[]' + description: Limit write rate (bytes per second) to a device +- option: device-write-iops + default_value: '[]' + description: Limit write rate (IO per second) to a device +- option: disable-content-trust + default_value: "true" + description: Skip image verification +- option: dns + default_value: '[]' + description: Set custom DNS servers +- option: dns-opt + default_value: '[]' + description: Set DNS options +- option: dns-option + default_value: '[]' + description: Set DNS options +- option: dns-search + default_value: '[]' + description: Set custom DNS search domains +- option: entrypoint + description: Overwrite the default ENTRYPOINT of the image +- option: env + shorthand: e + default_value: '[]' + description: Set environment variables +- option: env-file + default_value: '[]' + description: Read in a file of environment variables +- option: expose + default_value: '[]' + description: Expose a port or a range of ports +- option: group-add + default_value: '[]' + description: Add additional groups to join +- option: health-cmd + description: Command to run to check health +- option: health-interval + default_value: "0" + description: Time between running the check (ns|us|ms|s|m|h) (default 0s) +- option: health-retries + default_value: "0" + description: Consecutive failures needed to report unhealthy +- option: health-timeout + default_value: "0" + description: | + Maximum time to allow one check to run (ns|us|ms|s|m|h) (default 0s) +- option: help + default_value: "false" + description: Print usage +- option: hostname + shorthand: h + description: Container host name +- option: init + default_value: "false" + description: | + Run an init inside the container that forwards signals and reaps processes +- option: init-path + description: Path to the docker-init binary +- option: interactive + shorthand: i + default_value: "false" + description: Keep STDIN open even if not attached +- option: io-maxbandwidth + description: | + Maximum IO bandwidth limit for the system drive (Windows only) +- option: io-maxiops + default_value: "0" + description: Maximum IOps limit for the system drive (Windows only) +- option: ip + description: Container IPv4 address (e.g. 172.30.100.104) +- option: ip6 + description: Container IPv6 address (e.g. 2001:db8::33) +- option: ipc + description: IPC namespace to use +- option: isolation + description: Container isolation technology +- option: kernel-memory + description: Kernel memory limit +- option: label + shorthand: l + default_value: '[]' + description: Set meta data on a container +- option: label-file + default_value: '[]' + description: Read in a line delimited file of labels +- option: link + default_value: '[]' + description: Add link to another container +- option: link-local-ip + default_value: '[]' + description: Container IPv4/IPv6 link-local addresses +- option: log-driver + description: Logging driver for the container +- option: log-opt + default_value: '[]' + description: Log driver options +- option: mac-address + description: Container MAC address (e.g. 92:d0:c6:0a:29:33) +- option: memory + shorthand: m + description: Memory limit +- option: memory-reservation + description: Memory soft limit +- option: memory-swap + description: | + Swap limit equal to memory plus swap: '-1' to enable unlimited swap +- option: memory-swappiness + default_value: "-1" + description: Tune container memory swappiness (0 to 100) +- option: name + description: Assign a name to the container +- option: net + default_value: default + description: Connect a container to a network +- option: net-alias + default_value: '[]' + description: Add network-scoped alias for the container +- option: network + default_value: default + description: Connect a container to a network +- option: network-alias + default_value: '[]' + description: Add network-scoped alias for the container +- option: no-healthcheck + default_value: "false" + description: Disable any container-specified HEALTHCHECK +- option: oom-kill-disable + default_value: "false" + description: Disable OOM Killer +- option: oom-score-adj + default_value: "0" + description: Tune host's OOM preferences (-1000 to 1000) +- option: pid + description: PID namespace to use +- option: pids-limit + default_value: "0" + description: Tune container pids limit (set -1 for unlimited) +- option: privileged + default_value: "false" + description: Give extended privileges to this container +- option: publish + shorthand: p + default_value: '[]' + description: Publish a container's port(s) to the host +- option: publish-all + shorthand: P + default_value: "false" + description: Publish all exposed ports to random ports +- option: read-only + default_value: "false" + description: Mount the container's root filesystem as read only +- option: restart + default_value: "no" + description: Restart policy to apply when a container exits +- option: rm + default_value: "false" + description: Automatically remove the container when it exits +- option: runtime + description: Runtime to use for this container +- option: security-opt + default_value: '[]' + description: Security Options +- option: shm-size + description: Size of /dev/shm, default value is 64MB +- option: sig-proxy + default_value: "true" + description: Proxy received signals to the process +- option: stop-signal + default_value: SIGTERM + description: Signal to stop a container, SIGTERM by default +- option: stop-timeout + default_value: "0" + description: Timeout (in seconds) to stop a container +- option: storage-opt + default_value: '[]' + description: Storage driver options for the container +- option: sysctl + default_value: map[] + description: Sysctl options +- option: tmpfs + default_value: '[]' + description: Mount a tmpfs directory +- option: tty + shorthand: t + default_value: "false" + description: Allocate a pseudo-TTY +- option: ulimit + default_value: '[]' + description: Ulimit options +- option: user + shorthand: u + description: 'Username or UID (format: [:])' +- option: userns + description: User namespace to use +- option: uts + description: UTS namespace to use +- option: volume + shorthand: v + default_value: '[]' + description: Bind mount a volume +- option: volume-driver + description: Optional volume driver for the container +- option: volumes-from + default_value: '[]' + description: Mount volumes from the specified container(s) +- option: workdir + shorthand: w + description: Working directory inside the container diff --git a/_data/engine-cli/docker_container_start.yaml b/_data/engine-cli/docker_container_start.yaml new file mode 100644 index 00000000000..abe60a60a9c --- /dev/null +++ b/_data/engine-cli/docker_container_start.yaml @@ -0,0 +1,21 @@ +command: docker container start +short: Start one or more stopped containers +long: Start one or more stopped containers +usage: docker container start [OPTIONS] CONTAINER [CONTAINER...] +pname: docker container +plink: docker_container.yaml +options: +- option: attach + shorthand: a + default_value: "false" + description: Attach STDOUT/STDERR and forward signals +- option: checkpoint + description: Restore from this checkpoint +- option: checkpoint-dir + description: Use a custom checkpoint storage directory +- option: detach-keys + description: Override the key sequence for detaching a container +- option: interactive + shorthand: i + default_value: "false" + description: Attach container's STDIN diff --git a/_data/engine-cli/docker_container_stats.yaml b/_data/engine-cli/docker_container_stats.yaml new file mode 100644 index 00000000000..55bc855c3f4 --- /dev/null +++ b/_data/engine-cli/docker_container_stats.yaml @@ -0,0 +1,16 @@ +command: docker container stats +short: Display a live stream of container(s) resource usage statistics +long: Display a live stream of container(s) resource usage statistics +usage: docker container stats [OPTIONS] [CONTAINER...] +pname: docker container +plink: docker_container.yaml +options: +- option: all + shorthand: a + default_value: "false" + description: Show all containers (default shows just running) +- option: format + description: Pretty-print images using a Go template +- option: no-stream + default_value: "false" + description: Disable streaming stats and only pull the first result diff --git a/_data/engine-cli/docker_container_stop.yaml b/_data/engine-cli/docker_container_stop.yaml new file mode 100644 index 00000000000..346cd358f6a --- /dev/null +++ b/_data/engine-cli/docker_container_stop.yaml @@ -0,0 +1,11 @@ +command: docker container stop +short: Stop one or more running containers +long: Stop one or more running containers +usage: docker container stop [OPTIONS] CONTAINER [CONTAINER...] +pname: docker container +plink: docker_container.yaml +options: +- option: time + shorthand: t + default_value: "10" + description: Seconds to wait for stop before killing it diff --git a/_data/engine-cli/docker_container_top.yaml b/_data/engine-cli/docker_container_top.yaml new file mode 100644 index 00000000000..2746ea9a9a6 --- /dev/null +++ b/_data/engine-cli/docker_container_top.yaml @@ -0,0 +1,6 @@ +command: docker container top +short: Display the running processes of a container +long: Display the running processes of a container +usage: docker container top CONTAINER [ps OPTIONS] +pname: docker container +plink: docker_container.yaml diff --git a/_data/engine-cli/docker_container_unpause.yaml b/_data/engine-cli/docker_container_unpause.yaml new file mode 100644 index 00000000000..619b6b01baf --- /dev/null +++ b/_data/engine-cli/docker_container_unpause.yaml @@ -0,0 +1,6 @@ +command: docker container unpause +short: Unpause all processes within one or more containers +long: Unpause all processes within one or more containers +usage: docker container unpause CONTAINER [CONTAINER...] +pname: docker container +plink: docker_container.yaml diff --git a/_data/engine-cli/docker_container_update.yaml b/_data/engine-cli/docker_container_update.yaml new file mode 100644 index 00000000000..9cb1b78f609 --- /dev/null +++ b/_data/engine-cli/docker_container_update.yaml @@ -0,0 +1,43 @@ +command: docker container update +short: Update configuration of one or more containers +long: Update configuration of one or more containers +usage: docker container update [OPTIONS] CONTAINER [CONTAINER...] +pname: docker container +plink: docker_container.yaml +options: +- option: blkio-weight + default_value: "0" + description: | + Block IO (relative weight), between 10 and 1000, or 0 to disable (default 0) +- option: cpu-period + default_value: "0" + description: Limit CPU CFS (Completely Fair Scheduler) period +- option: cpu-quota + default_value: "0" + description: Limit CPU CFS (Completely Fair Scheduler) quota +- option: cpu-rt-period + default_value: "0" + description: Limit the CPU real-time period in microseconds +- option: cpu-rt-runtime + default_value: "0" + description: Limit the CPU real-time runtime in microseconds +- option: cpu-shares + shorthand: c + default_value: "0" + description: CPU shares (relative weight) +- option: cpuset-cpus + description: CPUs in which to allow execution (0-3, 0,1) +- option: cpuset-mems + description: MEMs in which to allow execution (0-3, 0,1) +- option: kernel-memory + description: Kernel memory limit +- option: memory + shorthand: m + description: Memory limit +- option: memory-reservation + description: Memory soft limit +- option: memory-swap + description: | + Swap limit equal to memory plus swap: '-1' to enable unlimited swap +- option: restart + description: Restart policy to apply when a container exits diff --git a/_data/engine-cli/docker_container_wait.yaml b/_data/engine-cli/docker_container_wait.yaml new file mode 100644 index 00000000000..b524287d756 --- /dev/null +++ b/_data/engine-cli/docker_container_wait.yaml @@ -0,0 +1,6 @@ +command: docker container wait +short: Block until one or more containers stop, then print their exit codes +long: Block until one or more containers stop, then print their exit codes +usage: docker container wait CONTAINER [CONTAINER...] +pname: docker container +plink: docker_container.yaml diff --git a/_data/engine-cli/docker_cp.yaml b/_data/engine-cli/docker_cp.yaml new file mode 100644 index 00000000000..596fe8ccf13 --- /dev/null +++ b/_data/engine-cli/docker_cp.yaml @@ -0,0 +1,18 @@ +command: docker cp +short: Copy files/folders between a container and the local filesystem +long: |- + Copy files/folders between a container and the local filesystem + + Use '-' as the source to read a tar archive from stdin + and extract it to a directory destination in a container. + Use '-' as the destination to stream a tar archive of a + container source to stdout. +usage: "docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-\n\tdocker cp [OPTIONS] + SRC_PATH|- CONTAINER:DEST_PATH" +pname: docker +plink: docker.yaml +options: +- option: follow-link + shorthand: L + default_value: "false" + description: Always follow symbol link in SRC_PATH diff --git a/_data/engine-cli/docker_create.yaml b/_data/engine-cli/docker_create.yaml new file mode 100644 index 00000000000..5c9eb23150a --- /dev/null +++ b/_data/engine-cli/docker_create.yaml @@ -0,0 +1,278 @@ +command: docker create +short: Create a new container +long: Create a new container +usage: docker create [OPTIONS] IMAGE [COMMAND] [ARG...] +pname: docker +plink: docker.yaml +options: +- option: add-host + default_value: '[]' + description: Add a custom host-to-IP mapping (host:ip) +- option: attach + shorthand: a + default_value: '[]' + description: Attach to STDIN, STDOUT or STDERR +- option: blkio-weight + default_value: "0" + description: | + Block IO (relative weight), between 10 and 1000, or 0 to disable (default 0) +- option: blkio-weight-device + default_value: '[]' + description: Block IO weight (relative device weight) +- option: cap-add + default_value: '[]' + description: Add Linux capabilities +- option: cap-drop + default_value: '[]' + description: Drop Linux capabilities +- option: cgroup-parent + description: Optional parent cgroup for the container +- option: cidfile + description: Write the container ID to the file +- option: cpu-count + default_value: "0" + description: CPU count (Windows only) +- option: cpu-percent + default_value: "0" + description: CPU percent (Windows only) +- option: cpu-period + default_value: "0" + description: Limit CPU CFS (Completely Fair Scheduler) period +- option: cpu-quota + default_value: "0" + description: Limit CPU CFS (Completely Fair Scheduler) quota +- option: cpu-rt-period + default_value: "0" + description: Limit CPU real-time period in microseconds +- option: cpu-rt-runtime + default_value: "0" + description: Limit CPU real-time runtime in microseconds +- option: cpu-shares + shorthand: c + default_value: "0" + description: CPU shares (relative weight) +- option: cpus + default_value: "0.000" + description: Number of CPUs +- option: cpuset-cpus + description: CPUs in which to allow execution (0-3, 0,1) +- option: cpuset-mems + description: MEMs in which to allow execution (0-3, 0,1) +- option: credentialspec + description: Credential spec for managed service account (Windows only) +- option: device + default_value: '[]' + description: Add a host device to the container +- option: device-read-bps + default_value: '[]' + description: Limit read rate (bytes per second) from a device +- option: device-read-iops + default_value: '[]' + description: Limit read rate (IO per second) from a device +- option: device-write-bps + default_value: '[]' + description: Limit write rate (bytes per second) to a device +- option: device-write-iops + default_value: '[]' + description: Limit write rate (IO per second) to a device +- option: disable-content-trust + default_value: "true" + description: Skip image verification +- option: dns + default_value: '[]' + description: Set custom DNS servers +- option: dns-opt + default_value: '[]' + description: Set DNS options +- option: dns-option + default_value: '[]' + description: Set DNS options +- option: dns-search + default_value: '[]' + description: Set custom DNS search domains +- option: entrypoint + description: Overwrite the default ENTRYPOINT of the image +- option: env + shorthand: e + default_value: '[]' + description: Set environment variables +- option: env-file + default_value: '[]' + description: Read in a file of environment variables +- option: expose + default_value: '[]' + description: Expose a port or a range of ports +- option: group-add + default_value: '[]' + description: Add additional groups to join +- option: health-cmd + description: Command to run to check health +- option: health-interval + default_value: "0" + description: Time between running the check (ns|us|ms|s|m|h) (default 0s) +- option: health-retries + default_value: "0" + description: Consecutive failures needed to report unhealthy +- option: health-timeout + default_value: "0" + description: | + Maximum time to allow one check to run (ns|us|ms|s|m|h) (default 0s) +- option: help + default_value: "false" + description: Print usage +- option: hostname + shorthand: h + description: Container host name +- option: init + default_value: "false" + description: | + Run an init inside the container that forwards signals and reaps processes +- option: init-path + description: Path to the docker-init binary +- option: interactive + shorthand: i + default_value: "false" + description: Keep STDIN open even if not attached +- option: io-maxbandwidth + description: | + Maximum IO bandwidth limit for the system drive (Windows only) +- option: io-maxiops + default_value: "0" + description: Maximum IOps limit for the system drive (Windows only) +- option: ip + description: Container IPv4 address (e.g. 172.30.100.104) +- option: ip6 + description: Container IPv6 address (e.g. 2001:db8::33) +- option: ipc + description: IPC namespace to use +- option: isolation + description: Container isolation technology +- option: kernel-memory + description: Kernel memory limit +- option: label + shorthand: l + default_value: '[]' + description: Set meta data on a container +- option: label-file + default_value: '[]' + description: Read in a line delimited file of labels +- option: link + default_value: '[]' + description: Add link to another container +- option: link-local-ip + default_value: '[]' + description: Container IPv4/IPv6 link-local addresses +- option: log-driver + description: Logging driver for the container +- option: log-opt + default_value: '[]' + description: Log driver options +- option: mac-address + description: Container MAC address (e.g. 92:d0:c6:0a:29:33) +- option: memory + shorthand: m + description: Memory limit +- option: memory-reservation + description: Memory soft limit +- option: memory-swap + description: | + Swap limit equal to memory plus swap: '-1' to enable unlimited swap +- option: memory-swappiness + default_value: "-1" + description: Tune container memory swappiness (0 to 100) +- option: name + description: Assign a name to the container +- option: net + default_value: default + description: Connect a container to a network +- option: net-alias + default_value: '[]' + description: Add network-scoped alias for the container +- option: network + default_value: default + description: Connect a container to a network +- option: network-alias + default_value: '[]' + description: Add network-scoped alias for the container +- option: no-healthcheck + default_value: "false" + description: Disable any container-specified HEALTHCHECK +- option: oom-kill-disable + default_value: "false" + description: Disable OOM Killer +- option: oom-score-adj + default_value: "0" + description: Tune host's OOM preferences (-1000 to 1000) +- option: pid + description: PID namespace to use +- option: pids-limit + default_value: "0" + description: Tune container pids limit (set -1 for unlimited) +- option: privileged + default_value: "false" + description: Give extended privileges to this container +- option: publish + shorthand: p + default_value: '[]' + description: Publish a container's port(s) to the host +- option: publish-all + shorthand: P + default_value: "false" + description: Publish all exposed ports to random ports +- option: read-only + default_value: "false" + description: Mount the container's root filesystem as read only +- option: restart + default_value: "no" + description: Restart policy to apply when a container exits +- option: rm + default_value: "false" + description: Automatically remove the container when it exits +- option: runtime + description: Runtime to use for this container +- option: security-opt + default_value: '[]' + description: Security Options +- option: shm-size + description: Size of /dev/shm, default value is 64MB +- option: stop-signal + default_value: SIGTERM + description: Signal to stop a container, SIGTERM by default +- option: stop-timeout + default_value: "0" + description: Timeout (in seconds) to stop a container +- option: storage-opt + default_value: '[]' + description: Storage driver options for the container +- option: sysctl + default_value: map[] + description: Sysctl options +- option: tmpfs + default_value: '[]' + description: Mount a tmpfs directory +- option: tty + shorthand: t + default_value: "false" + description: Allocate a pseudo-TTY +- option: ulimit + default_value: '[]' + description: Ulimit options +- option: user + shorthand: u + description: 'Username or UID (format: [:])' +- option: userns + description: User namespace to use +- option: uts + description: UTS namespace to use +- option: volume + shorthand: v + default_value: '[]' + description: Bind mount a volume +- option: volume-driver + description: Optional volume driver for the container +- option: volumes-from + default_value: '[]' + description: Mount volumes from the specified container(s) +- option: workdir + shorthand: w + description: Working directory inside the container diff --git a/_data/engine-cli/docker_deploy.yaml b/_data/engine-cli/docker_deploy.yaml new file mode 100644 index 00000000000..a7347c7654c --- /dev/null +++ b/_data/engine-cli/docker_deploy.yaml @@ -0,0 +1,15 @@ +command: docker deploy +short: Deploy a new stack or update an existing stack +long: Deploy a new stack or update an existing stack +usage: docker deploy [OPTIONS] STACK +pname: docker +plink: docker.yaml +options: +- option: bundle-file + description: Path to a Distributed Application Bundle file +- option: compose-file + shorthand: c + description: Path to a Compose file +- option: with-registry-auth + default_value: "false" + description: Send registry authentication details to Swarm agents diff --git a/_data/engine-cli/docker_diff.yaml b/_data/engine-cli/docker_diff.yaml new file mode 100644 index 00000000000..6d5385ceaff --- /dev/null +++ b/_data/engine-cli/docker_diff.yaml @@ -0,0 +1,6 @@ +command: docker diff +short: Inspect changes on a container's filesystem +long: Inspect changes on a container's filesystem +usage: docker diff CONTAINER +pname: docker +plink: docker.yaml diff --git a/_data/engine-cli/docker_events.yaml b/_data/engine-cli/docker_events.yaml new file mode 100644 index 00000000000..cd72ef56f8b --- /dev/null +++ b/_data/engine-cli/docker_events.yaml @@ -0,0 +1,16 @@ +command: docker events +short: Get real time events from the server +long: Get real time events from the server +usage: docker events [OPTIONS] +pname: docker +plink: docker.yaml +options: +- option: filter + shorthand: f + description: Filter output based on conditions provided +- option: format + description: Format the output using the given Go template +- option: since + description: Show all events created since timestamp +- option: until + description: Stream events until this timestamp diff --git a/_data/engine-cli/docker_exec.yaml b/_data/engine-cli/docker_exec.yaml new file mode 100644 index 00000000000..1bb3bb33c33 --- /dev/null +++ b/_data/engine-cli/docker_exec.yaml @@ -0,0 +1,31 @@ +command: docker exec +short: Run a command in a running container +long: Run a command in a running container +usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...] +pname: docker +plink: docker.yaml +options: +- option: detach + shorthand: d + default_value: "false" + description: 'Detached mode: run command in the background' +- option: detach-keys + description: Override the key sequence for detaching a container +- option: env + shorthand: e + default_value: '[]' + description: Set environment variables +- option: interactive + shorthand: i + default_value: "false" + description: Keep STDIN open even if not attached +- option: privileged + default_value: "false" + description: Give extended privileges to the command +- option: tty + shorthand: t + default_value: "false" + description: Allocate a pseudo-TTY +- option: user + shorthand: u + description: 'Username or UID (format: [:])' diff --git a/_data/engine-cli/docker_export.yaml b/_data/engine-cli/docker_export.yaml new file mode 100644 index 00000000000..7b9f38eb7e8 --- /dev/null +++ b/_data/engine-cli/docker_export.yaml @@ -0,0 +1,10 @@ +command: docker export +short: Export a container's filesystem as a tar archive +long: Export a container's filesystem as a tar archive +usage: docker export [OPTIONS] CONTAINER +pname: docker +plink: docker.yaml +options: +- option: output + shorthand: o + description: Write to a file, instead of STDOUT diff --git a/_data/engine-cli/docker_history.yaml b/_data/engine-cli/docker_history.yaml new file mode 100644 index 00000000000..e6698aead8f --- /dev/null +++ b/_data/engine-cli/docker_history.yaml @@ -0,0 +1,18 @@ +command: docker history +short: Show the history of an image +long: Show the history of an image +usage: docker history [OPTIONS] IMAGE +pname: docker +plink: docker.yaml +options: +- option: human + shorthand: H + default_value: "true" + description: Print sizes and dates in human readable format +- option: no-trunc + default_value: "false" + description: Don't truncate output +- option: quiet + shorthand: q + default_value: "false" + description: Only show numeric IDs diff --git a/_data/engine-cli/docker_image.yaml b/_data/engine-cli/docker_image.yaml new file mode 100644 index 00000000000..09ecfd7be7f --- /dev/null +++ b/_data/engine-cli/docker_image.yaml @@ -0,0 +1,32 @@ +command: docker image +short: Manage images +long: Manage images +usage: docker image +pname: docker +plink: docker.yaml +cname: +- docker image build +- docker image history +- docker image import +- docker image inspect +- docker image load +- docker image ls +- docker image prune +- docker image pull +- docker image push +- docker image rm +- docker image save +- docker image tag +clink: +- docker_image_build.yaml +- docker_image_history.yaml +- docker_image_import.yaml +- docker_image_inspect.yaml +- docker_image_load.yaml +- docker_image_ls.yaml +- docker_image_prune.yaml +- docker_image_pull.yaml +- docker_image_push.yaml +- docker_image_rm.yaml +- docker_image_save.yaml +- docker_image_tag.yaml diff --git a/_data/engine-cli/docker_image_build.yaml b/_data/engine-cli/docker_image_build.yaml new file mode 100644 index 00000000000..8e35921eae9 --- /dev/null +++ b/_data/engine-cli/docker_image_build.yaml @@ -0,0 +1,84 @@ +command: docker image build +short: Build an image from a Dockerfile +long: Build an image from a Dockerfile +usage: docker image build [OPTIONS] PATH | URL | - +pname: docker image +plink: docker_image.yaml +options: +- option: build-arg + default_value: '[]' + description: Set build-time variables +- option: cache-from + default_value: '[]' + description: Images to consider as cache sources +- option: cgroup-parent + description: Optional parent cgroup for the container +- option: compress + default_value: "false" + description: Compress the build context using gzip +- option: cpu-period + default_value: "0" + description: Limit the CPU CFS (Completely Fair Scheduler) period +- option: cpu-quota + default_value: "0" + description: Limit the CPU CFS (Completely Fair Scheduler) quota +- option: cpu-shares + shorthand: c + default_value: "0" + description: CPU shares (relative weight) +- option: cpuset-cpus + description: CPUs in which to allow execution (0-3, 0,1) +- option: cpuset-mems + description: MEMs in which to allow execution (0-3, 0,1) +- option: disable-content-trust + default_value: "true" + description: Skip image verification +- option: file + shorthand: f + description: Name of the Dockerfile (Default is 'PATH/Dockerfile') +- option: force-rm + default_value: "false" + description: Always remove intermediate containers +- option: isolation + description: Container isolation technology +- option: label + default_value: '[]' + description: Set metadata for an image +- option: memory + shorthand: m + description: Memory limit +- option: memory-swap + description: | + Swap limit equal to memory plus swap: '-1' to enable unlimited swap +- option: network + default_value: default + description: | + Set the networking mode for the RUN instructions during build +- option: no-cache + default_value: "false" + description: Do not use cache when building the image +- option: pull + default_value: "false" + description: Always attempt to pull a newer version of the image +- option: quiet + shorthand: q + default_value: "false" + description: Suppress the build output and print image ID on success +- option: rm + default_value: "true" + description: Remove intermediate containers after a successful build +- option: security-opt + default_value: '[]' + description: Security options +- option: shm-size + description: Size of /dev/shm, default value is 64MB +- option: squash + default_value: "false" + description: Squash newly built layers into a single new layer +- option: tag + shorthand: t + default_value: '[]' + description: Name and optionally a tag in the 'name:tag' format +- option: ulimit + default_value: '[]' + description: Ulimit options diff --git a/_data/engine-cli/docker_image_history.yaml b/_data/engine-cli/docker_image_history.yaml new file mode 100644 index 00000000000..e6688a348a1 --- /dev/null +++ b/_data/engine-cli/docker_image_history.yaml @@ -0,0 +1,18 @@ +command: docker image history +short: Show the history of an image +long: Show the history of an image +usage: docker image history [OPTIONS] IMAGE +pname: docker image +plink: docker_image.yaml +options: +- option: human + shorthand: H + default_value: "true" + description: Print sizes and dates in human readable format +- option: no-trunc + default_value: "false" + description: Don't truncate output +- option: quiet + shorthand: q + default_value: "false" + description: Only show numeric IDs diff --git a/_data/engine-cli/docker_image_import.yaml b/_data/engine-cli/docker_image_import.yaml new file mode 100644 index 00000000000..743d8f9dbee --- /dev/null +++ b/_data/engine-cli/docker_image_import.yaml @@ -0,0 +1,14 @@ +command: docker image import +short: Import the contents from a tarball to create a filesystem image +long: Import the contents from a tarball to create a filesystem image +usage: docker image import [OPTIONS] file|URL|- [REPOSITORY[:TAG]] +pname: docker image +plink: docker_image.yaml +options: +- option: change + shorthand: c + default_value: '[]' + description: Apply Dockerfile instruction to the created image +- option: message + shorthand: m + description: Set commit message for imported image diff --git a/_data/engine-cli/docker_image_inspect.yaml b/_data/engine-cli/docker_image_inspect.yaml new file mode 100644 index 00000000000..f8b6ec854f0 --- /dev/null +++ b/_data/engine-cli/docker_image_inspect.yaml @@ -0,0 +1,10 @@ +command: docker image inspect +short: Display detailed information on one or more images +long: Display detailed information on one or more images +usage: docker image inspect [OPTIONS] IMAGE [IMAGE...] +pname: docker image +plink: docker_image.yaml +options: +- option: format + shorthand: f + description: Format the output using the given Go template diff --git a/_data/engine-cli/docker_image_load.yaml b/_data/engine-cli/docker_image_load.yaml new file mode 100644 index 00000000000..e2ad0ddb93d --- /dev/null +++ b/_data/engine-cli/docker_image_load.yaml @@ -0,0 +1,14 @@ +command: docker image load +short: Load an image from a tar archive or STDIN +long: Load an image from a tar archive or STDIN +usage: docker image load [OPTIONS] +pname: docker image +plink: docker_image.yaml +options: +- option: input + shorthand: i + description: Read from tar archive file, instead of STDIN +- option: quiet + shorthand: q + default_value: "false" + description: Suppress the load output diff --git a/_data/engine-cli/docker_image_ls.yaml b/_data/engine-cli/docker_image_ls.yaml new file mode 100644 index 00000000000..60caf152371 --- /dev/null +++ b/_data/engine-cli/docker_image_ls.yaml @@ -0,0 +1,26 @@ +command: docker image ls +short: List images +long: List images +usage: docker image ls [OPTIONS] [REPOSITORY[:TAG]] +pname: docker image +plink: docker_image.yaml +options: +- option: all + shorthand: a + default_value: "false" + description: Show all images (default hides intermediate images) +- option: digests + default_value: "false" + description: Show digests +- option: filter + shorthand: f + description: Filter output based on conditions provided +- option: format + description: Pretty-print images using a Go template +- option: no-trunc + default_value: "false" + description: Don't truncate output +- option: quiet + shorthand: q + default_value: "false" + description: Only show numeric IDs diff --git a/_data/engine-cli/docker_image_prune.yaml b/_data/engine-cli/docker_image_prune.yaml new file mode 100644 index 00000000000..f8d1fa82289 --- /dev/null +++ b/_data/engine-cli/docker_image_prune.yaml @@ -0,0 +1,15 @@ +command: docker image prune +short: Remove unused images +long: Remove unused images +usage: docker image prune [OPTIONS] +pname: docker image +plink: docker_image.yaml +options: +- option: all + shorthand: a + default_value: "false" + description: Remove all unused images, not just dangling ones +- option: force + shorthand: f + default_value: "false" + description: Do not prompt for confirmation diff --git a/_data/engine-cli/docker_image_pull.yaml b/_data/engine-cli/docker_image_pull.yaml new file mode 100644 index 00000000000..a5697848347 --- /dev/null +++ b/_data/engine-cli/docker_image_pull.yaml @@ -0,0 +1,14 @@ +command: docker image pull +short: Pull an image or a repository from a registry +long: Pull an image or a repository from a registry +usage: docker image pull [OPTIONS] NAME[:TAG|@DIGEST] +pname: docker image +plink: docker_image.yaml +options: +- option: all-tags + shorthand: a + default_value: "false" + description: Download all tagged images in the repository +- option: disable-content-trust + default_value: "true" + description: Skip image verification diff --git a/_data/engine-cli/docker_image_push.yaml b/_data/engine-cli/docker_image_push.yaml new file mode 100644 index 00000000000..d59d7aa5252 --- /dev/null +++ b/_data/engine-cli/docker_image_push.yaml @@ -0,0 +1,10 @@ +command: docker image push +short: Push an image or a repository to a registry +long: Push an image or a repository to a registry +usage: docker image push [OPTIONS] NAME[:TAG] +pname: docker image +plink: docker_image.yaml +options: +- option: disable-content-trust + default_value: "true" + description: Skip image verification diff --git a/_data/engine-cli/docker_image_rm.yaml b/_data/engine-cli/docker_image_rm.yaml new file mode 100644 index 00000000000..349eb32432f --- /dev/null +++ b/_data/engine-cli/docker_image_rm.yaml @@ -0,0 +1,14 @@ +command: docker image rm +short: Remove one or more images +long: Remove one or more images +usage: docker image rm [OPTIONS] IMAGE [IMAGE...] +pname: docker image +plink: docker_image.yaml +options: +- option: force + shorthand: f + default_value: "false" + description: Force removal of the image +- option: no-prune + default_value: "false" + description: Do not delete untagged parents diff --git a/_data/engine-cli/docker_image_save.yaml b/_data/engine-cli/docker_image_save.yaml new file mode 100644 index 00000000000..883f909b615 --- /dev/null +++ b/_data/engine-cli/docker_image_save.yaml @@ -0,0 +1,10 @@ +command: docker image save +short: Save one or more images to a tar archive (streamed to STDOUT by default) +long: Save one or more images to a tar archive (streamed to STDOUT by default) +usage: docker image save [OPTIONS] IMAGE [IMAGE...] +pname: docker image +plink: docker_image.yaml +options: +- option: output + shorthand: o + description: Write to a file, instead of STDOUT diff --git a/_data/engine-cli/docker_image_tag.yaml b/_data/engine-cli/docker_image_tag.yaml new file mode 100644 index 00000000000..dfcd8ec2049 --- /dev/null +++ b/_data/engine-cli/docker_image_tag.yaml @@ -0,0 +1,6 @@ +command: docker image tag +short: Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE +long: Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE +usage: docker image tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG] +pname: docker image +plink: docker_image.yaml diff --git a/_data/engine-cli/docker_images.yaml b/_data/engine-cli/docker_images.yaml new file mode 100644 index 00000000000..6d22bfdd862 --- /dev/null +++ b/_data/engine-cli/docker_images.yaml @@ -0,0 +1,26 @@ +command: docker images +short: List images +long: List images +usage: docker images [OPTIONS] [REPOSITORY[:TAG]] +pname: docker +plink: docker.yaml +options: +- option: all + shorthand: a + default_value: "false" + description: Show all images (default hides intermediate images) +- option: digests + default_value: "false" + description: Show digests +- option: filter + shorthand: f + description: Filter output based on conditions provided +- option: format + description: Pretty-print images using a Go template +- option: no-trunc + default_value: "false" + description: Don't truncate output +- option: quiet + shorthand: q + default_value: "false" + description: Only show numeric IDs diff --git a/_data/engine-cli/docker_import.yaml b/_data/engine-cli/docker_import.yaml new file mode 100644 index 00000000000..862d385f6d6 --- /dev/null +++ b/_data/engine-cli/docker_import.yaml @@ -0,0 +1,14 @@ +command: docker import +short: Import the contents from a tarball to create a filesystem image +long: Import the contents from a tarball to create a filesystem image +usage: docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]] +pname: docker +plink: docker.yaml +options: +- option: change + shorthand: c + default_value: '[]' + description: Apply Dockerfile instruction to the created image +- option: message + shorthand: m + description: Set commit message for imported image diff --git a/_data/engine-cli/docker_info.yaml b/_data/engine-cli/docker_info.yaml new file mode 100644 index 00000000000..312c038684c --- /dev/null +++ b/_data/engine-cli/docker_info.yaml @@ -0,0 +1,10 @@ +command: docker info +short: Display system-wide information +long: Display system-wide information +usage: docker info [OPTIONS] +pname: docker +plink: docker.yaml +options: +- option: format + shorthand: f + description: Format the output using the given Go template diff --git a/_data/engine-cli/docker_inspect.yaml b/_data/engine-cli/docker_inspect.yaml new file mode 100644 index 00000000000..65ee9396f35 --- /dev/null +++ b/_data/engine-cli/docker_inspect.yaml @@ -0,0 +1,16 @@ +command: docker inspect +short: Return low-level information on Docker objects +long: Return low-level information on Docker objects +usage: docker inspect [OPTIONS] NAME|ID [NAME|ID...] +pname: docker +plink: docker.yaml +options: +- option: format + shorthand: f + description: Format the output using the given Go template +- option: size + shorthand: s + default_value: "false" + description: Display total file sizes if the type is container +- option: type + description: Return JSON for specified type diff --git a/_data/engine-cli/docker_kill.yaml b/_data/engine-cli/docker_kill.yaml new file mode 100644 index 00000000000..5c1bcbb5bc4 --- /dev/null +++ b/_data/engine-cli/docker_kill.yaml @@ -0,0 +1,11 @@ +command: docker kill +short: Kill one or more running containers +long: Kill one or more running containers +usage: docker kill [OPTIONS] CONTAINER [CONTAINER...] +pname: docker +plink: docker.yaml +options: +- option: signal + shorthand: s + default_value: KILL + description: Signal to send to the container diff --git a/_data/engine-cli/docker_load.yaml b/_data/engine-cli/docker_load.yaml new file mode 100644 index 00000000000..c0fbdc02d28 --- /dev/null +++ b/_data/engine-cli/docker_load.yaml @@ -0,0 +1,14 @@ +command: docker load +short: Load an image from a tar archive or STDIN +long: Load an image from a tar archive or STDIN +usage: docker load [OPTIONS] +pname: docker +plink: docker.yaml +options: +- option: input + shorthand: i + description: Read from tar archive file, instead of STDIN +- option: quiet + shorthand: q + default_value: "false" + description: Suppress the load output diff --git a/_data/engine-cli/docker_login.yaml b/_data/engine-cli/docker_login.yaml new file mode 100644 index 00000000000..ba7c59590d1 --- /dev/null +++ b/_data/engine-cli/docker_login.yaml @@ -0,0 +1,15 @@ +command: docker login +short: Log in to a Docker registry +long: |- + Log in to a Docker registry. + If no server is specified, the default is defined by the daemon. +usage: docker login [OPTIONS] [SERVER] +pname: docker +plink: docker.yaml +options: +- option: password + shorthand: p + description: Password +- option: username + shorthand: u + description: Username diff --git a/_data/engine-cli/docker_logout.yaml b/_data/engine-cli/docker_logout.yaml new file mode 100644 index 00000000000..61b23dd516b --- /dev/null +++ b/_data/engine-cli/docker_logout.yaml @@ -0,0 +1,8 @@ +command: docker logout +short: Log out from a Docker registry +long: |- + Log out from a Docker registry. + If no server is specified, the default is defined by the daemon. +usage: docker logout [SERVER] +pname: docker +plink: docker.yaml diff --git a/_data/engine-cli/docker_logs.yaml b/_data/engine-cli/docker_logs.yaml new file mode 100644 index 00000000000..c175c19e89b --- /dev/null +++ b/_data/engine-cli/docker_logs.yaml @@ -0,0 +1,23 @@ +command: docker logs +short: Fetch the logs of a container +long: Fetch the logs of a container +usage: docker logs [OPTIONS] CONTAINER +pname: docker +plink: docker.yaml +options: +- option: details + default_value: "false" + description: Show extra details provided to logs +- option: follow + shorthand: f + default_value: "false" + description: Follow log output +- option: since + description: Show logs since timestamp +- option: tail + default_value: all + description: Number of lines to show from the end of the logs +- option: timestamps + shorthand: t + default_value: "false" + description: Show timestamps diff --git a/_data/engine-cli/docker_network.yaml b/_data/engine-cli/docker_network.yaml new file mode 100644 index 00000000000..60b18974dea --- /dev/null +++ b/_data/engine-cli/docker_network.yaml @@ -0,0 +1,22 @@ +command: docker network +short: Manage networks +long: Manage networks +usage: docker network +pname: docker +plink: docker.yaml +cname: +- docker network connect +- docker network create +- docker network disconnect +- docker network inspect +- docker network ls +- docker network prune +- docker network rm +clink: +- docker_network_connect.yaml +- docker_network_create.yaml +- docker_network_disconnect.yaml +- docker_network_inspect.yaml +- docker_network_ls.yaml +- docker_network_prune.yaml +- docker_network_rm.yaml diff --git a/_data/engine-cli/docker_network_connect.yaml b/_data/engine-cli/docker_network_connect.yaml new file mode 100644 index 00000000000..c3e8650cac0 --- /dev/null +++ b/_data/engine-cli/docker_network_connect.yaml @@ -0,0 +1,62 @@ +command: docker network connect +short: Connect a container to a network +long: | + Connects a container to a network. You can connect a container by name + or by ID. Once connected, the container can communicate with other containers in + the same network. + + ```bash + $ docker network connect multi-host-network container1 + ``` + + You can also use the `docker run --net=` option to start a container and immediately connect it to a network. + + ```bash + $ docker run -itd --net=multi-host-network --ip 172.20.88.22 --ip6 2001:db8::8822 busybox + ``` + + You can pause, restart, and stop containers that are connected to a network. + Paused containers remain connected and can be revealed by a `network inspect`. + When the container is stopped, it does not appear on the network until you restart + it. + + If specified, the container's IP address(es) is reapplied when a stopped + container is restarted. If the IP address is no longer available, the container + fails to start. One way to guarantee that the IP address is available is + to specify an `--ip-range` when creating the network, and choose the static IP + address(es) from outside that range. This ensures that the IP address is not + given to another container while this container is not on the network. + + ```bash + $ docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 multi-host-network + ``` + + ```bash + $ docker network connect --ip 172.20.128.2 multi-host-network container2 + ``` + + To verify the container is connected, use the `docker network inspect` command. Use `docker network disconnect` to remove a container from the network. + + Once connected in network, containers can communicate using only another + container's IP address or name. For `overlay` networks or custom plugins that + support multi-host connectivity, containers connected to the same multi-host + network but launched from different Engines can also communicate in this way. + + You can connect a container to one or more networks. The networks need not be the same type. For example, you can connect a single container bridge and overlay networks. +usage: docker network connect [OPTIONS] NETWORK CONTAINER +pname: docker network +plink: docker_network.yaml +options: +- option: alias + default_value: '[]' + description: Add network-scoped alias for the container +- option: ip + description: IP Address +- option: ip6 + description: IPv6 Address +- option: link + default_value: '[]' + description: Add link to another container +- option: link-local-ip + default_value: '[]' + description: Add a link-local address for the container diff --git a/_data/engine-cli/docker_network_create.yaml b/_data/engine-cli/docker_network_create.yaml new file mode 100644 index 00000000000..8c4e507d78a --- /dev/null +++ b/_data/engine-cli/docker_network_create.yaml @@ -0,0 +1,102 @@ +command: docker network create +short: Create a network +long: "Creates a new network. The `DRIVER` accepts `bridge` or `overlay` which are + the\nbuilt-in network drivers. If you have installed a third party or your own custom\nnetwork + driver you can specify that `DRIVER` here also. If you don't specify the\n`--driver` + option, the command automatically creates a `bridge` network for you.\nWhen you + install Docker Engine it creates a `bridge` network automatically. This\nnetwork + corresponds to the `docker0` bridge that Engine has traditionally relied\non. When + launch a new container with `docker run` it automatically connects to\nthis bridge + network. You cannot remove this default bridge network but you can\ncreate new ones + using the `network create` command.\n\n```bash\n$ docker network create -d bridge + my-bridge-network\n```\n\nBridge networks are isolated networks on a single Engine + installation. If you\nwant to create a network that spans multiple Docker hosts + each running an\nEngine, you must create an `overlay` network. Unlike `bridge` networks + overlay\nnetworks require some pre-existing conditions before you can create one. + These\nconditions are:\n\n* Access to a key-value store. Engine supports Consul, + Etcd, and Zookeeper (Distributed store) key-value stores.\n* A cluster of hosts + with connectivity to the key-value store.\n* A properly configured Engine `daemon` + on each host in the cluster.\n\nThe `dockerd` options that support the `overlay` + network are:\n\n* `--cluster-store`\n* `--cluster-store-opt`\n* `--cluster-advertise`\n\nTo + read more about these options and how to configure them, see [\"*Get started\nwith + multi-host\nnetwork*\"](https://docs.docker.com/engine/userguide/networking/get-started-overlay/).\n\nIt + is also a good idea, though not required, that you install Docker Swarm on to\nmanage + the cluster that makes up your network. Swarm provides sophisticated\ndiscovery + and server management that can assist your implementation.\n\nOnce you have prepared + the `overlay` network prerequisites you simply choose a\nDocker host in the cluster + and issue the following to create the network:\n\n```bash\n$ docker network create + -d overlay my-multihost-network\n```\n\nNetwork names must be unique. The Docker + daemon attempts to identify naming\nconflicts but this is not guaranteed. It is + the user's responsibility to avoid\nname conflicts.\n\n## Connect containers\n\nWhen + you start a container use the `--net` flag to connect it to a network.\nThis adds + the `busybox` container to the `mynet` network.\n\n```bash\n$ docker run -itd --net=mynet + busybox\n```\n\nIf you want to add a container to a network after the container + is already\nrunning use the `docker network connect` subcommand.\n\nYou can connect + multiple containers to the same network. Once connected, the\ncontainers can communicate + using only another container's IP address or name.\nFor `overlay` networks or custom + plugins that support multi-host connectivity,\ncontainers connected to the same + multi-host network but launched from different\nEngines can also communicate in + this way.\n\nYou can disconnect a container from a network using the `docker network\ndisconnect` + command.\n\n## Specifying advanced options\n\nWhen you create a network, Engine + creates a non-overlapping subnetwork for the\nnetwork by default. This subnetwork + is not a subdivision of an existing network.\nIt is purely for ip-addressing purposes. + You can override this default and\nspecify subnetwork values directly using the + `--subnet` option. On a\n`bridge` network you can only create a single subnet:\n\n```bash\n$ + docker network create -d bridge --subnet=192.168.0.0/16 br0\n```\n\nAdditionally, + you also specify the `--gateway` `--ip-range` and `--aux-address`\noptions.\n\n```bash\n$ + docker network create \\\n --driver=bridge \\\n --subnet=172.28.0.0/16 \\\n --ip-range=172.28.5.0/24 + \\\n --gateway=172.28.5.254 \\\n br0\n```\n\nIf you omit the `--gateway` flag + the Engine selects one for you from inside a\npreferred pool. For `overlay` networks + and for network driver plugins that\nsupport it you can create multiple subnetworks.\n\n```bash\n$ + docker network create -d overlay \\\n --subnet=192.168.0.0/16 \\\n --subnet=192.170.0.0/16 + \\\n --gateway=192.168.0.100 \\ \n --gateway=192.170.0.100 \\\n --ip-range=192.168.1.0/24 + \\\n --aux-address=\"my-router=192.168.1.5\" --aux-address=\"my-switch=192.168.1.6\" + \\\n --aux-address=\"my-printer=192.170.1.5\" --aux-address=\"my-nas=192.170.1.6\" + \\\n my-multihost-network\n```\n\nBe sure that your subnetworks do not overlap. + If they do, the network create\nfails and Engine returns an error.\n\n### Network + internal mode\n\nBy default, when you connect a container to an `overlay` network, + Docker also\nconnects a bridge network to it to provide external connectivity. If + you want\nto create an externally isolated `overlay` network, you can specify the\n`--internal` + option.\n" +usage: docker network create [OPTIONS] NETWORK +pname: docker network +plink: docker_network.yaml +options: +- option: attachable + default_value: "false" + description: Enable manual container attachment +- option: aux-address + default_value: map[] + description: Auxiliary IPv4 or IPv6 addresses used by Network driver +- option: driver + shorthand: d + default_value: bridge + description: Driver to manage the Network +- option: gateway + default_value: '[]' + description: IPv4 or IPv6 Gateway for the master subnet +- option: internal + default_value: "false" + description: Restrict external access to the network +- option: ip-range + default_value: '[]' + description: Allocate container ip from a sub-range +- option: ipam-driver + default_value: default + description: IP Address Management Driver +- option: ipam-opt + default_value: map[] + description: Set IPAM driver specific options +- option: ipv6 + default_value: "false" + description: Enable IPv6 networking +- option: label + default_value: '[]' + description: Set metadata on a network +- option: opt + shorthand: o + default_value: map[] + description: Set driver specific options +- option: subnet + default_value: '[]' + description: Subnet in CIDR format that represents a network segment diff --git a/_data/engine-cli/docker_network_disconnect.yaml b/_data/engine-cli/docker_network_disconnect.yaml new file mode 100644 index 00000000000..87fca9d5bf5 --- /dev/null +++ b/_data/engine-cli/docker_network_disconnect.yaml @@ -0,0 +1,16 @@ +command: docker network disconnect +short: Disconnect a container from a network +long: | + Disconnects a container from a network. + + ```bash + $ docker network disconnect multi-host-network container1 + ``` +usage: docker network disconnect [OPTIONS] NETWORK CONTAINER +pname: docker network +plink: docker_network.yaml +options: +- option: force + shorthand: f + default_value: "false" + description: Force the container to disconnect from a network diff --git a/_data/engine-cli/docker_network_inspect.yaml b/_data/engine-cli/docker_network_inspect.yaml new file mode 100644 index 00000000000..733ceca4bc3 --- /dev/null +++ b/_data/engine-cli/docker_network_inspect.yaml @@ -0,0 +1,98 @@ +command: docker network inspect +short: Display detailed information on one or more networks +long: | + Returns information about one or more networks. By default, this command renders all results in a JSON object. For example, if you connect two containers to the default `bridge` network: + + ```bash + $ sudo docker run -itd --name=container1 busybox + f2870c98fd504370fb86e59f32cd0753b1ac9b69b7d80566ffc7192a82b3ed27 + + $ sudo docker run -itd --name=container2 busybox + bda12f8922785d1f160be70736f26c1e331ab8aaf8ed8d56728508f2e2fd4727 + ``` + + The `network inspect` command shows the containers, by id, in its + results. You can specify an alternate format to execute a given + template for each result. Go's + [text/template](http://golang.org/pkg/text/template/) package + describes all the details of the format. + + ```bash + $ sudo docker network inspect bridge + [ + { + "Name": "bridge", + "Id": "b2b1a2cba717161d984383fd68218cf70bbbd17d328496885f7c921333228b0f", + "Scope": "local", + "Driver": "bridge", + "IPAM": { + "Driver": "default", + "Config": [ + { + "Subnet": "172.17.42.1/16", + "Gateway": "172.17.42.1" + } + ] + }, + "Internal": false, + "Containers": { + "bda12f8922785d1f160be70736f26c1e331ab8aaf8ed8d56728508f2e2fd4727": { + "Name": "container2", + "EndpointID": "0aebb8fcd2b282abe1365979536f21ee4ceaf3ed56177c628eae9f706e00e019", + "MacAddress": "02:42:ac:11:00:02", + "IPv4Address": "172.17.0.2/16", + "IPv6Address": "" + }, + "f2870c98fd504370fb86e59f32cd0753b1ac9b69b7d80566ffc7192a82b3ed27": { + "Name": "container1", + "EndpointID": "a00676d9c91a96bbe5bcfb34f705387a33d7cc365bac1a29e4e9728df92d10ad", + "MacAddress": "02:42:ac:11:00:01", + "IPv4Address": "172.17.0.1/16", + "IPv6Address": "" + } + }, + "Options": { + "com.docker.network.bridge.default_bridge": "true", + "com.docker.network.bridge.enable_icc": "true", + "com.docker.network.bridge.enable_ip_masquerade": "true", + "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", + "com.docker.network.bridge.name": "docker0", + "com.docker.network.driver.mtu": "1500" + } + } + ] + ``` + + Returns the information about the user-defined network: + + ```bash + $ docker network create simple-network + 69568e6336d8c96bbf57869030919f7c69524f71183b44d80948bd3927c87f6a + $ docker network inspect simple-network + [ + { + "Name": "simple-network", + "Id": "69568e6336d8c96bbf57869030919f7c69524f71183b44d80948bd3927c87f6a", + "Scope": "local", + "Driver": "bridge", + "IPAM": { + "Driver": "default", + "Config": [ + { + "Subnet": "172.22.0.0/16", + "Gateway": "172.22.0.1" + } + ] + }, + "Containers": {}, + "Options": {} + } + ] + ``` +usage: docker network inspect [OPTIONS] NETWORK [NETWORK...] +pname: docker network +plink: docker_network.yaml +options: +- option: format + shorthand: f + description: Format the output using the given Go template diff --git a/_data/engine-cli/docker_network_ls.yaml b/_data/engine-cli/docker_network_ls.yaml new file mode 100644 index 00000000000..b500f1e13fa --- /dev/null +++ b/_data/engine-cli/docker_network_ls.yaml @@ -0,0 +1,78 @@ +command: docker network ls +short: List networks +long: "Lists all the networks the Engine `daemon` knows about. This includes the\nnetworks + that span across multiple hosts in a cluster, for example:\n\n```bash\n $ docker + network ls\n NETWORK ID NAME DRIVER\n 7fca4eb8c647 + \ bridge bridge\n 9f904ee27bf5 none null\n + \ cf03ee007fb4 host host\n 78b03ee04fc4 multi-host + \ overlay\n```\n\nUse the `--no-trunc` option to display the full network + id:\n\n```bash\n$ docker network ls --no-trunc\nNETWORK ID NAME + \ DRIVER\n18a2866682b85619a026c81b98a5e375bd33e1b0936a26cc497c283d27bae9b3 + \ none null \nc288470c46f6c8949c5f7e5099b5b7947b07eabe8d9a27d79a9cbf111adcbf47 + \ host host \n7b369448dccbf865d397c8d2be0cda7cf7edc6b0945f77d2529912ae917a0185 + \ bridge bridge \n95e74588f40db048e86320c6526440c504650a1ff3e9f7d60a497c4d2163e5bd + \ foo bridge \n63d1ff1f77b07ca51070a8c227e962238358bd310bde1529cf62e6c307ade161 + \ dev bridge\n```\n\n## Filtering\n\nThe filtering flag (`-f` or + `--filter`) format is a `key=value` pair. If there\nis more than one filter, then + pass multiple flags (e.g. `--filter \"foo=bar\" --filter \"bif=baz\"`).\nMultiple + filter flags are combined as an `OR` filter. For example, \n`-f type=custom -f type=builtin` + returns both `custom` and `builtin` networks.\n\nThe currently supported filters + are:\n\n* driver\n* id (network's id)\n* label (`label=` or `label==`)\n* + name (network's name)\n* type (custom|builtin)\n\n#### Driver\n\nThe `driver` filter + matches networks based on their driver.\n\nThe following example matches networks + with the `bridge` driver:\n\n```bash\n$ docker network ls --filter driver=bridge\nNETWORK + ID NAME DRIVER\ndb9db329f835 test1 bridge\nf6e212da9dfd + \ test2 bridge\n```\n\n#### ID\n\nThe `id` filter matches on + all or part of a network's ID.\n\nThe following filter matches all networks with + an ID containing the\n`63d1ff1f77b0...` string.\n\n```bash\n$ docker network ls + --filter id=63d1ff1f77b07ca51070a8c227e962238358bd310bde1529cf62e6c307ade161\nNETWORK + ID NAME DRIVER\n63d1ff1f77b0 dev bridge\n```\n\nYou + can also filter for a substring in an ID as this shows:\n\n```bash\n$ docker network + ls --filter id=95e74588f40d\nNETWORK ID NAME DRIVER\n95e74588f40d + \ foo bridge\n\n$ docker network ls --filter id=95e\nNETWORK + ID NAME DRIVER\n95e74588f40d foo bridge\n```\n\n#### + Label\n\nThe `label` filter matches networks based on the presence of a `label` + alone or a `label` and a\nvalue.\n\nThe following filter matches networks with the + `usage` label regardless of its value.\n\n```bash\n$ docker network ls -f \"label=usage\"\nNETWORK + ID NAME DRIVER\ndb9db329f835 test1 bridge + \ \nf6e212da9dfd test2 bridge\n```\n\nThe following + filter matches networks with the `usage` label with the `prod` value.\n\n```bash\n$ + docker network ls -f \"label=usage=prod\"\nNETWORK ID NAME DRIVER\nf6e212da9dfd + \ test2 bridge\n```\n\n#### Name\n\nThe `name` filter matches + on all or part of a network's name.\n\nThe following filter matches all networks + with a name containing the `foobar` string.\n\n```bash\n$ docker network ls --filter + name=foobar\nNETWORK ID NAME DRIVER\n06e7eef0a170 foobar + \ bridge\n```\n\nYou can also filter for a substring in a name as this + shows:\n\n```bash\n$ docker network ls --filter name=foo\nNETWORK ID NAME + \ DRIVER\n95e74588f40d foo bridge\n06e7eef0a170 + \ foobar bridge\n```\n\n#### Type\n\nThe `type` filter supports + two values; `builtin` displays predefined networks\n(`bridge`, `none`, `host`), + whereas `custom` displays user defined networks.\n\nThe following filter matches + all user defined networks:\n\n```bash\n$ docker network ls --filter type=custom\nNETWORK + ID NAME DRIVER\n95e74588f40d foo bridge\n63d1ff1f77b0 + \ dev bridge\n```\n\nBy having this flag it allows for batch + cleanup. For example, use this filter\nto delete all user defined networks:\n\n```bash\n$ + docker network rm `docker network ls --filter type=custom -q`\n```\n\nA warning + will be issued when trying to remove a network that has containers\nattached.\n\n## + Format\n\nFormat uses a Go template to print the output. The following variables + are \nsupported: \n\n* .ID - Network ID\n* .Name - Network name\n* .Driver - Network + driver\n* .Scope - Network scope (local, global)\n* .IPv6 - Whether IPv6 is enabled + on the network or not\n* .Internal - Whether the network is internal or not\n* .Labels + - All labels assigned to the network\n* .Label - Value of a specific label for this + network. For example `{{.Label \"project.version\"}}`\n" +usage: docker network ls [OPTIONS] +pname: docker network +plink: docker_network.yaml +options: +- option: filter + shorthand: f + description: Provide filter values (e.g. 'driver=bridge') +- option: format + description: Pretty-print networks using a Go template +- option: no-trunc + default_value: "false" + description: Do not truncate the output +- option: quiet + shorthand: q + default_value: "false" + description: Only display network IDs diff --git a/_data/engine-cli/docker_network_prune.yaml b/_data/engine-cli/docker_network_prune.yaml new file mode 100644 index 00000000000..3e51e70ac2a --- /dev/null +++ b/_data/engine-cli/docker_network_prune.yaml @@ -0,0 +1,11 @@ +command: docker network prune +short: Remove all unused networks +long: Remove all unused networks +usage: docker network prune [OPTIONS] +pname: docker network +plink: docker_network.yaml +options: +- option: force + shorthand: f + default_value: "false" + description: Do not prompt for confirmation diff --git a/_data/engine-cli/docker_network_rm.yaml b/_data/engine-cli/docker_network_rm.yaml new file mode 100644 index 00000000000..afc3c2f3d14 --- /dev/null +++ b/_data/engine-cli/docker_network_rm.yaml @@ -0,0 +1,26 @@ +command: docker network rm +short: Remove one or more networks +long: | + Removes one or more networks by name or identifier. To remove a network, + you must first disconnect any containers connected to it. + To remove the network named 'my-network': + + ```bash + $ docker network rm my-network + ``` + + To delete multiple networks in a single `docker network rm` command, provide + multiple network names or ids. The following example deletes a network with id + `3695c422697f` and a network named `my-network`: + + ```bash + $ docker network rm 3695c422697f my-network + ``` + + When you specify multiple networks, the command attempts to delete each in turn. + If the deletion of one network fails, the command continues to the next on the + list and tries to delete that. The command reports success or failure for each + deletion. +usage: docker network rm NETWORK [NETWORK...] +pname: docker network +plink: docker_network.yaml diff --git a/_data/engine-cli/docker_node.yaml b/_data/engine-cli/docker_node.yaml new file mode 100644 index 00000000000..c079518a23a --- /dev/null +++ b/_data/engine-cli/docker_node.yaml @@ -0,0 +1,22 @@ +command: docker node +short: Manage Swarm nodes +long: Manage Swarm nodes +usage: docker node +pname: docker +plink: docker.yaml +cname: +- docker node demote +- docker node inspect +- docker node ls +- docker node promote +- docker node ps +- docker node rm +- docker node update +clink: +- docker_node_demote.yaml +- docker_node_inspect.yaml +- docker_node_ls.yaml +- docker_node_promote.yaml +- docker_node_ps.yaml +- docker_node_rm.yaml +- docker_node_update.yaml diff --git a/_data/engine-cli/docker_node_demote.yaml b/_data/engine-cli/docker_node_demote.yaml new file mode 100644 index 00000000000..282c0971faf --- /dev/null +++ b/_data/engine-cli/docker_node_demote.yaml @@ -0,0 +1,6 @@ +command: docker node demote +short: Demote one or more nodes from manager in the swarm +long: Demote one or more nodes from manager in the swarm +usage: docker node demote NODE [NODE...] +pname: docker node +plink: docker_node.yaml diff --git a/_data/engine-cli/docker_node_inspect.yaml b/_data/engine-cli/docker_node_inspect.yaml new file mode 100644 index 00000000000..7b3af8991fe --- /dev/null +++ b/_data/engine-cli/docker_node_inspect.yaml @@ -0,0 +1,13 @@ +command: docker node inspect +short: Display detailed information on one or more nodes +long: Display detailed information on one or more nodes +usage: docker node inspect [OPTIONS] self|NODE [NODE...] +pname: docker node +plink: docker_node.yaml +options: +- option: format + shorthand: f + description: Format the output using the given Go template +- option: pretty + default_value: "false" + description: Print the information in a human friendly format. diff --git a/_data/engine-cli/docker_node_ls.yaml b/_data/engine-cli/docker_node_ls.yaml new file mode 100644 index 00000000000..9c478e2d133 --- /dev/null +++ b/_data/engine-cli/docker_node_ls.yaml @@ -0,0 +1,14 @@ +command: docker node ls +short: List nodes in the swarm +long: List nodes in the swarm +usage: docker node ls [OPTIONS] +pname: docker node +plink: docker_node.yaml +options: +- option: filter + shorthand: f + description: Filter output based on conditions provided +- option: quiet + shorthand: q + default_value: "false" + description: Only display IDs diff --git a/_data/engine-cli/docker_node_promote.yaml b/_data/engine-cli/docker_node_promote.yaml new file mode 100644 index 00000000000..ee12b6d7b6d --- /dev/null +++ b/_data/engine-cli/docker_node_promote.yaml @@ -0,0 +1,6 @@ +command: docker node promote +short: Promote one or more nodes to manager in the swarm +long: Promote one or more nodes to manager in the swarm +usage: docker node promote NODE [NODE...] +pname: docker node +plink: docker_node.yaml diff --git a/_data/engine-cli/docker_node_ps.yaml b/_data/engine-cli/docker_node_ps.yaml new file mode 100644 index 00000000000..e17c1612c71 --- /dev/null +++ b/_data/engine-cli/docker_node_ps.yaml @@ -0,0 +1,16 @@ +command: docker node ps +short: List tasks running on one or more nodes, defaults to current node +long: List tasks running on one or more nodes, defaults to current node +usage: docker node ps [OPTIONS] [NODE...] +pname: docker node +plink: docker_node.yaml +options: +- option: filter + shorthand: f + description: Filter output based on conditions provided +- option: no-resolve + default_value: "false" + description: Do not map IDs to Names +- option: no-trunc + default_value: "false" + description: Do not truncate output diff --git a/_data/engine-cli/docker_node_rm.yaml b/_data/engine-cli/docker_node_rm.yaml new file mode 100644 index 00000000000..e400bbd91c1 --- /dev/null +++ b/_data/engine-cli/docker_node_rm.yaml @@ -0,0 +1,11 @@ +command: docker node rm +short: Remove one or more nodes from the swarm +long: Remove one or more nodes from the swarm +usage: docker node rm [OPTIONS] NODE [NODE...] +pname: docker node +plink: docker_node.yaml +options: +- option: force + shorthand: f + default_value: "false" + description: Force remove a node from the swarm diff --git a/_data/engine-cli/docker_node_update.yaml b/_data/engine-cli/docker_node_update.yaml new file mode 100644 index 00000000000..bf7187c6dd6 --- /dev/null +++ b/_data/engine-cli/docker_node_update.yaml @@ -0,0 +1,17 @@ +command: docker node update +short: Update a node +long: Update a node +usage: docker node update [OPTIONS] NODE +pname: docker node +plink: docker_node.yaml +options: +- option: availability + description: Availability of the node (active/pause/drain) +- option: label-add + default_value: '[]' + description: Add or update a node label (key=value) +- option: label-rm + default_value: '[]' + description: Remove a node label if exists +- option: role + description: Role of the node (worker/manager) diff --git a/_data/engine-cli/docker_pause.yaml b/_data/engine-cli/docker_pause.yaml new file mode 100644 index 00000000000..bd878757f45 --- /dev/null +++ b/_data/engine-cli/docker_pause.yaml @@ -0,0 +1,6 @@ +command: docker pause +short: Pause all processes within one or more containers +long: Pause all processes within one or more containers +usage: docker pause CONTAINER [CONTAINER...] +pname: docker +plink: docker.yaml diff --git a/_data/engine-cli/docker_plugin.yaml b/_data/engine-cli/docker_plugin.yaml new file mode 100644 index 00000000000..bd0e6572e53 --- /dev/null +++ b/_data/engine-cli/docker_plugin.yaml @@ -0,0 +1,26 @@ +command: docker plugin +short: Manage plugins +long: Manage plugins +usage: docker plugin +pname: docker +plink: docker.yaml +cname: +- docker plugin create +- docker plugin disable +- docker plugin enable +- docker plugin inspect +- docker plugin install +- docker plugin ls +- docker plugin push +- docker plugin rm +- docker plugin set +clink: +- docker_plugin_create.yaml +- docker_plugin_disable.yaml +- docker_plugin_enable.yaml +- docker_plugin_inspect.yaml +- docker_plugin_install.yaml +- docker_plugin_ls.yaml +- docker_plugin_push.yaml +- docker_plugin_rm.yaml +- docker_plugin_set.yaml diff --git a/_data/engine-cli/docker_plugin_create.yaml b/_data/engine-cli/docker_plugin_create.yaml new file mode 100644 index 00000000000..88f1d4cbd4a --- /dev/null +++ b/_data/engine-cli/docker_plugin_create.yaml @@ -0,0 +1,10 @@ +command: docker plugin create +short: Create a plugin from a rootfs and config +long: Create a plugin from a rootfs and config +usage: docker plugin create [OPTIONS] PLUGIN[:tag] PATH-TO-ROOTFS(rootfs + config.json) +pname: docker plugin +plink: docker_plugin.yaml +options: +- option: compress + default_value: "false" + description: Compress the context using gzip diff --git a/_data/engine-cli/docker_plugin_disable.yaml b/_data/engine-cli/docker_plugin_disable.yaml new file mode 100644 index 00000000000..b0abd0a379d --- /dev/null +++ b/_data/engine-cli/docker_plugin_disable.yaml @@ -0,0 +1,6 @@ +command: docker plugin disable +short: Disable a plugin +long: Disable a plugin +usage: docker plugin disable PLUGIN +pname: docker plugin +plink: docker_plugin.yaml diff --git a/_data/engine-cli/docker_plugin_enable.yaml b/_data/engine-cli/docker_plugin_enable.yaml new file mode 100644 index 00000000000..1ba94b4185f --- /dev/null +++ b/_data/engine-cli/docker_plugin_enable.yaml @@ -0,0 +1,10 @@ +command: docker plugin enable +short: Enable a plugin +long: Enable a plugin +usage: docker plugin enable [OPTIONS] PLUGIN +pname: docker plugin +plink: docker_plugin.yaml +options: +- option: timeout + default_value: "0" + description: HTTP client timeout (in seconds) diff --git a/_data/engine-cli/docker_plugin_inspect.yaml b/_data/engine-cli/docker_plugin_inspect.yaml new file mode 100644 index 00000000000..1a13a415f92 --- /dev/null +++ b/_data/engine-cli/docker_plugin_inspect.yaml @@ -0,0 +1,10 @@ +command: docker plugin inspect +short: Display detailed information on one or more plugins +long: Display detailed information on one or more plugins +usage: docker plugin inspect [OPTIONS] PLUGIN|ID [PLUGIN|ID...] +pname: docker plugin +plink: docker_plugin.yaml +options: +- option: format + shorthand: f + description: Format the output using the given Go template diff --git a/_data/engine-cli/docker_plugin_install.yaml b/_data/engine-cli/docker_plugin_install.yaml new file mode 100644 index 00000000000..44e345248ec --- /dev/null +++ b/_data/engine-cli/docker_plugin_install.yaml @@ -0,0 +1,13 @@ +command: docker plugin install +short: Install a plugin +long: Install a plugin +usage: docker plugin install [OPTIONS] PLUGIN [KEY=VALUE...] +pname: docker plugin +plink: docker_plugin.yaml +options: +- option: disable + default_value: "false" + description: Do not enable the plugin on install +- option: grant-all-permissions + default_value: "false" + description: Grant all permissions necessary to run the plugin diff --git a/_data/engine-cli/docker_plugin_ls.yaml b/_data/engine-cli/docker_plugin_ls.yaml new file mode 100644 index 00000000000..d3c030429ca --- /dev/null +++ b/_data/engine-cli/docker_plugin_ls.yaml @@ -0,0 +1,10 @@ +command: docker plugin ls +short: List plugins +long: List plugins +usage: docker plugin ls [OPTIONS] +pname: docker plugin +plink: docker_plugin.yaml +options: +- option: no-trunc + default_value: "false" + description: Don't truncate output diff --git a/_data/engine-cli/docker_plugin_push.yaml b/_data/engine-cli/docker_plugin_push.yaml new file mode 100644 index 00000000000..79f8bda7b5e --- /dev/null +++ b/_data/engine-cli/docker_plugin_push.yaml @@ -0,0 +1,6 @@ +command: docker plugin push +short: Push a plugin to a registry +long: Push a plugin to a registry +usage: docker plugin push PLUGIN[:TAG] +pname: docker plugin +plink: docker_plugin.yaml diff --git a/_data/engine-cli/docker_plugin_rm.yaml b/_data/engine-cli/docker_plugin_rm.yaml new file mode 100644 index 00000000000..c131692ce37 --- /dev/null +++ b/_data/engine-cli/docker_plugin_rm.yaml @@ -0,0 +1,11 @@ +command: docker plugin rm +short: Remove one or more plugins +long: Remove one or more plugins +usage: docker plugin rm [OPTIONS] PLUGIN [PLUGIN...] +pname: docker plugin +plink: docker_plugin.yaml +options: +- option: force + shorthand: f + default_value: "false" + description: Force the removal of an active plugin diff --git a/_data/engine-cli/docker_plugin_set.yaml b/_data/engine-cli/docker_plugin_set.yaml new file mode 100644 index 00000000000..2aa6ff26b4b --- /dev/null +++ b/_data/engine-cli/docker_plugin_set.yaml @@ -0,0 +1,6 @@ +command: docker plugin set +short: Change settings for a plugin +long: Change settings for a plugin +usage: docker plugin set PLUGIN KEY=VALUE [KEY=VALUE...] +pname: docker plugin +plink: docker_plugin.yaml diff --git a/_data/engine-cli/docker_port.yaml b/_data/engine-cli/docker_port.yaml new file mode 100644 index 00000000000..2427702df7d --- /dev/null +++ b/_data/engine-cli/docker_port.yaml @@ -0,0 +1,6 @@ +command: docker port +short: List port mappings or a specific mapping for the container +long: List port mappings or a specific mapping for the container +usage: docker port CONTAINER [PRIVATE_PORT[/PROTO]] +pname: docker +plink: docker.yaml diff --git a/_data/engine-cli/docker_ps.yaml b/_data/engine-cli/docker_ps.yaml new file mode 100644 index 00000000000..2836a4bdbff --- /dev/null +++ b/_data/engine-cli/docker_ps.yaml @@ -0,0 +1,35 @@ +command: docker ps +short: List containers +long: List containers +usage: docker ps [OPTIONS] +pname: docker +plink: docker.yaml +options: +- option: all + shorthand: a + default_value: "false" + description: Show all containers (default shows just running) +- option: filter + shorthand: f + description: Filter output based on conditions provided +- option: format + description: Pretty-print containers using a Go template +- option: last + shorthand: "n" + default_value: "-1" + description: Show n last created containers (includes all states) +- option: latest + shorthand: l + default_value: "false" + description: Show the latest created container (includes all states) +- option: no-trunc + default_value: "false" + description: Don't truncate output +- option: quiet + shorthand: q + default_value: "false" + description: Only display numeric IDs +- option: size + shorthand: s + default_value: "false" + description: Display total file sizes diff --git a/_data/engine-cli/docker_pull.yaml b/_data/engine-cli/docker_pull.yaml new file mode 100644 index 00000000000..86bada6b54e --- /dev/null +++ b/_data/engine-cli/docker_pull.yaml @@ -0,0 +1,14 @@ +command: docker pull +short: Pull an image or a repository from a registry +long: Pull an image or a repository from a registry +usage: docker pull [OPTIONS] NAME[:TAG|@DIGEST] +pname: docker +plink: docker.yaml +options: +- option: all-tags + shorthand: a + default_value: "false" + description: Download all tagged images in the repository +- option: disable-content-trust + default_value: "true" + description: Skip image verification diff --git a/_data/engine-cli/docker_push.yaml b/_data/engine-cli/docker_push.yaml new file mode 100644 index 00000000000..be641b24aa6 --- /dev/null +++ b/_data/engine-cli/docker_push.yaml @@ -0,0 +1,10 @@ +command: docker push +short: Push an image or a repository to a registry +long: Push an image or a repository to a registry +usage: docker push [OPTIONS] NAME[:TAG] +pname: docker +plink: docker.yaml +options: +- option: disable-content-trust + default_value: "true" + description: Skip image verification diff --git a/_data/engine-cli/docker_rename.yaml b/_data/engine-cli/docker_rename.yaml new file mode 100644 index 00000000000..3935d3e0a20 --- /dev/null +++ b/_data/engine-cli/docker_rename.yaml @@ -0,0 +1,6 @@ +command: docker rename +short: Rename a container +long: Rename a container +usage: docker rename CONTAINER NEW_NAME +pname: docker +plink: docker.yaml diff --git a/_data/engine-cli/docker_restart.yaml b/_data/engine-cli/docker_restart.yaml new file mode 100644 index 00000000000..b2795c0ab44 --- /dev/null +++ b/_data/engine-cli/docker_restart.yaml @@ -0,0 +1,11 @@ +command: docker restart +short: Restart one or more containers +long: Restart one or more containers +usage: docker restart [OPTIONS] CONTAINER [CONTAINER...] +pname: docker +plink: docker.yaml +options: +- option: time + shorthand: t + default_value: "10" + description: Seconds to wait for stop before killing the container diff --git a/_data/engine-cli/docker_rm.yaml b/_data/engine-cli/docker_rm.yaml new file mode 100644 index 00000000000..d7ddef45069 --- /dev/null +++ b/_data/engine-cli/docker_rm.yaml @@ -0,0 +1,19 @@ +command: docker rm +short: Remove one or more containers +long: Remove one or more containers +usage: docker rm [OPTIONS] CONTAINER [CONTAINER...] +pname: docker +plink: docker.yaml +options: +- option: force + shorthand: f + default_value: "false" + description: Force the removal of a running container (uses SIGKILL) +- option: link + shorthand: l + default_value: "false" + description: Remove the specified link +- option: volumes + shorthand: v + default_value: "false" + description: Remove the volumes associated with the container diff --git a/_data/engine-cli/docker_rmi.yaml b/_data/engine-cli/docker_rmi.yaml new file mode 100644 index 00000000000..e558864ee9a --- /dev/null +++ b/_data/engine-cli/docker_rmi.yaml @@ -0,0 +1,14 @@ +command: docker rmi +short: Remove one or more images +long: Remove one or more images +usage: docker rmi [OPTIONS] IMAGE [IMAGE...] +pname: docker +plink: docker.yaml +options: +- option: force + shorthand: f + default_value: "false" + description: Force removal of the image +- option: no-prune + default_value: "false" + description: Do not delete untagged parents diff --git a/_data/engine-cli/docker_run.yaml b/_data/engine-cli/docker_run.yaml new file mode 100644 index 00000000000..560ef60bc49 --- /dev/null +++ b/_data/engine-cli/docker_run.yaml @@ -0,0 +1,287 @@ +command: docker run +short: Run a command in a new container +long: Run a command in a new container +usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...] +pname: docker +plink: docker.yaml +options: +- option: add-host + default_value: '[]' + description: Add a custom host-to-IP mapping (host:ip) +- option: attach + shorthand: a + default_value: '[]' + description: Attach to STDIN, STDOUT or STDERR +- option: blkio-weight + default_value: "0" + description: | + Block IO (relative weight), between 10 and 1000, or 0 to disable (default 0) +- option: blkio-weight-device + default_value: '[]' + description: Block IO weight (relative device weight) +- option: cap-add + default_value: '[]' + description: Add Linux capabilities +- option: cap-drop + default_value: '[]' + description: Drop Linux capabilities +- option: cgroup-parent + description: Optional parent cgroup for the container +- option: cidfile + description: Write the container ID to the file +- option: cpu-count + default_value: "0" + description: CPU count (Windows only) +- option: cpu-percent + default_value: "0" + description: CPU percent (Windows only) +- option: cpu-period + default_value: "0" + description: Limit CPU CFS (Completely Fair Scheduler) period +- option: cpu-quota + default_value: "0" + description: Limit CPU CFS (Completely Fair Scheduler) quota +- option: cpu-rt-period + default_value: "0" + description: Limit CPU real-time period in microseconds +- option: cpu-rt-runtime + default_value: "0" + description: Limit CPU real-time runtime in microseconds +- option: cpu-shares + shorthand: c + default_value: "0" + description: CPU shares (relative weight) +- option: cpus + default_value: "0.000" + description: Number of CPUs +- option: cpuset-cpus + description: CPUs in which to allow execution (0-3, 0,1) +- option: cpuset-mems + description: MEMs in which to allow execution (0-3, 0,1) +- option: credentialspec + description: Credential spec for managed service account (Windows only) +- option: detach + shorthand: d + default_value: "false" + description: Run container in background and print container ID +- option: detach-keys + description: Override the key sequence for detaching a container +- option: device + default_value: '[]' + description: Add a host device to the container +- option: device-read-bps + default_value: '[]' + description: Limit read rate (bytes per second) from a device +- option: device-read-iops + default_value: '[]' + description: Limit read rate (IO per second) from a device +- option: device-write-bps + default_value: '[]' + description: Limit write rate (bytes per second) to a device +- option: device-write-iops + default_value: '[]' + description: Limit write rate (IO per second) to a device +- option: disable-content-trust + default_value: "true" + description: Skip image verification +- option: dns + default_value: '[]' + description: Set custom DNS servers +- option: dns-opt + default_value: '[]' + description: Set DNS options +- option: dns-option + default_value: '[]' + description: Set DNS options +- option: dns-search + default_value: '[]' + description: Set custom DNS search domains +- option: entrypoint + description: Overwrite the default ENTRYPOINT of the image +- option: env + shorthand: e + default_value: '[]' + description: Set environment variables +- option: env-file + default_value: '[]' + description: Read in a file of environment variables +- option: expose + default_value: '[]' + description: Expose a port or a range of ports +- option: group-add + default_value: '[]' + description: Add additional groups to join +- option: health-cmd + description: Command to run to check health +- option: health-interval + default_value: "0" + description: Time between running the check (ns|us|ms|s|m|h) (default 0s) +- option: health-retries + default_value: "0" + description: Consecutive failures needed to report unhealthy +- option: health-timeout + default_value: "0" + description: | + Maximum time to allow one check to run (ns|us|ms|s|m|h) (default 0s) +- option: help + default_value: "false" + description: Print usage +- option: hostname + shorthand: h + description: Container host name +- option: init + default_value: "false" + description: | + Run an init inside the container that forwards signals and reaps processes +- option: init-path + description: Path to the docker-init binary +- option: interactive + shorthand: i + default_value: "false" + description: Keep STDIN open even if not attached +- option: io-maxbandwidth + description: | + Maximum IO bandwidth limit for the system drive (Windows only) +- option: io-maxiops + default_value: "0" + description: Maximum IOps limit for the system drive (Windows only) +- option: ip + description: Container IPv4 address (e.g. 172.30.100.104) +- option: ip6 + description: Container IPv6 address (e.g. 2001:db8::33) +- option: ipc + description: IPC namespace to use +- option: isolation + description: Container isolation technology +- option: kernel-memory + description: Kernel memory limit +- option: label + shorthand: l + default_value: '[]' + description: Set meta data on a container +- option: label-file + default_value: '[]' + description: Read in a line delimited file of labels +- option: link + default_value: '[]' + description: Add link to another container +- option: link-local-ip + default_value: '[]' + description: Container IPv4/IPv6 link-local addresses +- option: log-driver + description: Logging driver for the container +- option: log-opt + default_value: '[]' + description: Log driver options +- option: mac-address + description: Container MAC address (e.g. 92:d0:c6:0a:29:33) +- option: memory + shorthand: m + description: Memory limit +- option: memory-reservation + description: Memory soft limit +- option: memory-swap + description: | + Swap limit equal to memory plus swap: '-1' to enable unlimited swap +- option: memory-swappiness + default_value: "-1" + description: Tune container memory swappiness (0 to 100) +- option: name + description: Assign a name to the container +- option: net + default_value: default + description: Connect a container to a network +- option: net-alias + default_value: '[]' + description: Add network-scoped alias for the container +- option: network + default_value: default + description: Connect a container to a network +- option: network-alias + default_value: '[]' + description: Add network-scoped alias for the container +- option: no-healthcheck + default_value: "false" + description: Disable any container-specified HEALTHCHECK +- option: oom-kill-disable + default_value: "false" + description: Disable OOM Killer +- option: oom-score-adj + default_value: "0" + description: Tune host's OOM preferences (-1000 to 1000) +- option: pid + description: PID namespace to use +- option: pids-limit + default_value: "0" + description: Tune container pids limit (set -1 for unlimited) +- option: privileged + default_value: "false" + description: Give extended privileges to this container +- option: publish + shorthand: p + default_value: '[]' + description: Publish a container's port(s) to the host +- option: publish-all + shorthand: P + default_value: "false" + description: Publish all exposed ports to random ports +- option: read-only + default_value: "false" + description: Mount the container's root filesystem as read only +- option: restart + default_value: "no" + description: Restart policy to apply when a container exits +- option: rm + default_value: "false" + description: Automatically remove the container when it exits +- option: runtime + description: Runtime to use for this container +- option: security-opt + default_value: '[]' + description: Security Options +- option: shm-size + description: Size of /dev/shm, default value is 64MB +- option: sig-proxy + default_value: "true" + description: Proxy received signals to the process +- option: stop-signal + default_value: SIGTERM + description: Signal to stop a container, SIGTERM by default +- option: stop-timeout + default_value: "0" + description: Timeout (in seconds) to stop a container +- option: storage-opt + default_value: '[]' + description: Storage driver options for the container +- option: sysctl + default_value: map[] + description: Sysctl options +- option: tmpfs + default_value: '[]' + description: Mount a tmpfs directory +- option: tty + shorthand: t + default_value: "false" + description: Allocate a pseudo-TTY +- option: ulimit + default_value: '[]' + description: Ulimit options +- option: user + shorthand: u + description: 'Username or UID (format: [:])' +- option: userns + description: User namespace to use +- option: uts + description: UTS namespace to use +- option: volume + shorthand: v + default_value: '[]' + description: Bind mount a volume +- option: volume-driver + description: Optional volume driver for the container +- option: volumes-from + default_value: '[]' + description: Mount volumes from the specified container(s) +- option: workdir + shorthand: w + description: Working directory inside the container diff --git a/_data/engine-cli/docker_save.yaml b/_data/engine-cli/docker_save.yaml new file mode 100644 index 00000000000..5d8ee319a83 --- /dev/null +++ b/_data/engine-cli/docker_save.yaml @@ -0,0 +1,10 @@ +command: docker save +short: Save one or more images to a tar archive (streamed to STDOUT by default) +long: Save one or more images to a tar archive (streamed to STDOUT by default) +usage: docker save [OPTIONS] IMAGE [IMAGE...] +pname: docker +plink: docker.yaml +options: +- option: output + shorthand: o + description: Write to a file, instead of STDOUT diff --git a/_data/engine-cli/docker_search.yaml b/_data/engine-cli/docker_search.yaml new file mode 100644 index 00000000000..337c5f1afdb --- /dev/null +++ b/_data/engine-cli/docker_search.yaml @@ -0,0 +1,23 @@ +command: docker search +short: Search the Docker Hub for images +long: Search the Docker Hub for images +usage: docker search [OPTIONS] TERM +pname: docker +plink: docker.yaml +options: +- option: automated + default_value: "false" + description: Only show automated builds +- option: filter + shorthand: f + description: Filter output based on conditions provided +- option: limit + default_value: "25" + description: Max number of search results +- option: no-trunc + default_value: "false" + description: Don't truncate output +- option: stars + shorthand: s + default_value: "0" + description: Only displays with at least x stars diff --git a/_data/engine-cli/docker_secret.yaml b/_data/engine-cli/docker_secret.yaml new file mode 100644 index 00000000000..bad1030e0e4 --- /dev/null +++ b/_data/engine-cli/docker_secret.yaml @@ -0,0 +1,16 @@ +command: docker secret +short: Manage Docker secrets +long: Manage Docker secrets +usage: docker secret +pname: docker +plink: docker.yaml +cname: +- docker secret create +- docker secret inspect +- docker secret ls +- docker secret rm +clink: +- docker_secret_create.yaml +- docker_secret_inspect.yaml +- docker_secret_ls.yaml +- docker_secret_rm.yaml diff --git a/_data/engine-cli/docker_secret_create.yaml b/_data/engine-cli/docker_secret_create.yaml new file mode 100644 index 00000000000..8094c584eec --- /dev/null +++ b/_data/engine-cli/docker_secret_create.yaml @@ -0,0 +1,11 @@ +command: docker secret create +short: Create a secret using stdin as content +long: Create a secret using stdin as content +usage: docker secret create [OPTIONS] SECRET +pname: docker secret +plink: docker_secret.yaml +options: +- option: label + shorthand: l + default_value: '[]' + description: Secret labels diff --git a/_data/engine-cli/docker_secret_inspect.yaml b/_data/engine-cli/docker_secret_inspect.yaml new file mode 100644 index 00000000000..64657022313 --- /dev/null +++ b/_data/engine-cli/docker_secret_inspect.yaml @@ -0,0 +1,10 @@ +command: docker secret inspect +short: Display detailed information on one or more secrets +long: Display detailed information on one or more secrets +usage: docker secret inspect [OPTIONS] SECRET [SECRET...] +pname: docker secret +plink: docker_secret.yaml +options: +- option: format + shorthand: f + description: Format the output using the given Go template diff --git a/_data/engine-cli/docker_secret_ls.yaml b/_data/engine-cli/docker_secret_ls.yaml new file mode 100644 index 00000000000..05aaa778492 --- /dev/null +++ b/_data/engine-cli/docker_secret_ls.yaml @@ -0,0 +1,11 @@ +command: docker secret ls +short: List secrets +long: List secrets +usage: docker secret ls [OPTIONS] +pname: docker secret +plink: docker_secret.yaml +options: +- option: quiet + shorthand: q + default_value: "false" + description: Only display IDs diff --git a/_data/engine-cli/docker_secret_rm.yaml b/_data/engine-cli/docker_secret_rm.yaml new file mode 100644 index 00000000000..69ea4cb8f02 --- /dev/null +++ b/_data/engine-cli/docker_secret_rm.yaml @@ -0,0 +1,6 @@ +command: docker secret rm +short: Remove one or more secrets +long: Remove one or more secrets +usage: docker secret rm SECRET [SECRET...] +pname: docker secret +plink: docker_secret.yaml diff --git a/_data/engine-cli/docker_service.yaml b/_data/engine-cli/docker_service.yaml new file mode 100644 index 00000000000..9e919b0fc81 --- /dev/null +++ b/_data/engine-cli/docker_service.yaml @@ -0,0 +1,24 @@ +command: docker service +short: Manage services +long: Manage services +usage: docker service +pname: docker +plink: docker.yaml +cname: +- docker service create +- docker service inspect +- docker service logs +- docker service ls +- docker service ps +- docker service rm +- docker service scale +- docker service update +clink: +- docker_service_create.yaml +- docker_service_inspect.yaml +- docker_service_logs.yaml +- docker_service_ls.yaml +- docker_service_ps.yaml +- docker_service_rm.yaml +- docker_service_scale.yaml +- docker_service_update.yaml diff --git a/_data/engine-cli/docker_service_create.yaml b/_data/engine-cli/docker_service_create.yaml new file mode 100644 index 00000000000..363252542a7 --- /dev/null +++ b/_data/engine-cli/docker_service_create.yaml @@ -0,0 +1,137 @@ +command: docker service create +short: Create a new service +long: Create a new service +usage: docker service create [OPTIONS] IMAGE [COMMAND] [ARG...] +pname: docker service +plink: docker_service.yaml +options: +- option: constraint + default_value: '[]' + description: Placement constraints +- option: container-label + default_value: '[]' + description: Container labels +- option: dns + default_value: '[]' + description: Set custom DNS servers +- option: dns-option + default_value: '[]' + description: Set DNS options +- option: dns-search + default_value: '[]' + description: Set custom DNS search domains +- option: endpoint-mode + description: Endpoint mode (vip or dnsrr) +- option: env + shorthand: e + default_value: '[]' + description: Set environment variables +- option: env-file + default_value: '[]' + description: Read in a file of environment variables +- option: group + default_value: '[]' + description: Set one or more supplementary user groups for the container +- option: health-cmd + description: Command to run to check health +- option: health-interval + default_value: none + description: Time between running the check (ns|us|ms|s|m|h) +- option: health-retries + default_value: "0" + description: Consecutive failures needed to report unhealthy +- option: health-timeout + default_value: none + description: Maximum time to allow one check to run (ns|us|ms|s|m|h) +- option: host + default_value: '[]' + description: Set one or more custom host-to-IP mappings (host:ip) +- option: hostname + description: Container hostname +- option: label + shorthand: l + default_value: '[]' + description: Service labels +- option: limit-cpu + default_value: "0.000" + description: Limit CPUs +- option: limit-memory + default_value: 0 B + description: Limit Memory +- option: log-driver + description: Logging driver for service +- option: log-opt + default_value: '[]' + description: Logging driver options +- option: mode + default_value: replicated + description: Service mode (replicated or global) +- option: mount + description: Attach a filesystem mount to the service +- option: name + description: Service name +- option: network + default_value: '[]' + description: Network attachments +- option: no-healthcheck + default_value: "false" + description: Disable any container-specified HEALTHCHECK +- option: publish + shorthand: p + description: Publish a port as a node port +- option: replicas + default_value: none + description: Number of tasks +- option: reserve-cpu + default_value: "0.000" + description: Reserve CPUs +- option: reserve-memory + default_value: 0 B + description: Reserve Memory +- option: restart-condition + description: Restart when condition is met (none, on-failure, or any) +- option: restart-delay + default_value: none + description: Delay between restart attempts (ns|us|ms|s|m|h) +- option: restart-max-attempts + default_value: none + description: Maximum number of restarts before giving up +- option: restart-window + default_value: none + description: Window used to evaluate the restart policy (ns|us|ms|s|m|h) +- option: secret + description: Specify secrets to expose to the service +- option: stop-grace-period + default_value: none + description: | + Time to wait before force killing a container (ns|us|ms|s|m|h) +- option: tty + shorthand: t + default_value: "false" + description: Allocate a pseudo-TTY +- option: update-delay + default_value: "0" + description: Delay between updates (ns|us|ms|s|m|h) (default 0s) +- option: update-failure-action + default_value: pause + description: Action on update failure (pause|continue) +- option: update-max-failure-ratio + default_value: "0" + description: Failure rate to tolerate during an update +- option: update-monitor + default_value: "0" + description: | + Duration after each task update to monitor for failure (ns|us|ms|s|m|h) (default 0s) +- option: update-parallelism + default_value: "1" + description: | + Maximum number of tasks updated simultaneously (0 to update all at once) +- option: user + shorthand: u + description: 'Username or UID (format: [:])' +- option: with-registry-auth + default_value: "false" + description: Send registry authentication details to swarm agents +- option: workdir + shorthand: w + description: Working directory inside the container diff --git a/_data/engine-cli/docker_service_inspect.yaml b/_data/engine-cli/docker_service_inspect.yaml new file mode 100644 index 00000000000..05a93786874 --- /dev/null +++ b/_data/engine-cli/docker_service_inspect.yaml @@ -0,0 +1,13 @@ +command: docker service inspect +short: Display detailed information on one or more services +long: Display detailed information on one or more services +usage: docker service inspect [OPTIONS] SERVICE [SERVICE...] +pname: docker service +plink: docker_service.yaml +options: +- option: format + shorthand: f + description: Format the output using the given Go template +- option: pretty + default_value: "false" + description: Print the information in a human friendly format. diff --git a/_data/engine-cli/docker_service_logs.yaml b/_data/engine-cli/docker_service_logs.yaml new file mode 100644 index 00000000000..adbacd1a4b5 --- /dev/null +++ b/_data/engine-cli/docker_service_logs.yaml @@ -0,0 +1,26 @@ +command: docker service logs +short: Fetch the logs of a service +long: Fetch the logs of a service +usage: docker service logs [OPTIONS] SERVICE +pname: docker service +plink: docker_service.yaml +options: +- option: details + default_value: "false" + description: Show extra details provided to logs +- option: follow + shorthand: f + default_value: "false" + description: Follow log output +- option: no-resolve + default_value: "false" + description: Do not map IDs to Names +- option: since + description: Show logs since timestamp +- option: tail + default_value: all + description: Number of lines to show from the end of the logs +- option: timestamps + shorthand: t + default_value: "false" + description: Show timestamps diff --git a/_data/engine-cli/docker_service_ls.yaml b/_data/engine-cli/docker_service_ls.yaml new file mode 100644 index 00000000000..1fe576c38d5 --- /dev/null +++ b/_data/engine-cli/docker_service_ls.yaml @@ -0,0 +1,14 @@ +command: docker service ls +short: List services +long: List services +usage: docker service ls [OPTIONS] +pname: docker service +plink: docker_service.yaml +options: +- option: filter + shorthand: f + description: Filter output based on conditions provided +- option: quiet + shorthand: q + default_value: "false" + description: Only display IDs diff --git a/_data/engine-cli/docker_service_ps.yaml b/_data/engine-cli/docker_service_ps.yaml new file mode 100644 index 00000000000..384e118dff8 --- /dev/null +++ b/_data/engine-cli/docker_service_ps.yaml @@ -0,0 +1,20 @@ +command: docker service ps +short: List the tasks of a service +long: List the tasks of a service +usage: docker service ps [OPTIONS] SERVICE +pname: docker service +plink: docker_service.yaml +options: +- option: filter + shorthand: f + description: Filter output based on conditions provided +- option: no-resolve + default_value: "false" + description: Do not map IDs to Names +- option: no-trunc + default_value: "false" + description: Do not truncate output +- option: quiet + shorthand: q + default_value: "false" + description: Only display task IDs diff --git a/_data/engine-cli/docker_service_rm.yaml b/_data/engine-cli/docker_service_rm.yaml new file mode 100644 index 00000000000..2a62ac01ded --- /dev/null +++ b/_data/engine-cli/docker_service_rm.yaml @@ -0,0 +1,6 @@ +command: docker service rm +short: Remove one or more services +long: Remove one or more services +usage: docker service rm SERVICE [SERVICE...] +pname: docker service +plink: docker_service.yaml diff --git a/_data/engine-cli/docker_service_scale.yaml b/_data/engine-cli/docker_service_scale.yaml new file mode 100644 index 00000000000..aa546312259 --- /dev/null +++ b/_data/engine-cli/docker_service_scale.yaml @@ -0,0 +1,6 @@ +command: docker service scale +short: Scale one or multiple replicated services +long: Scale one or multiple replicated services +usage: docker service scale SERVICE=REPLICAS [SERVICE=REPLICAS...] +pname: docker service +plink: docker_service.yaml diff --git a/_data/engine-cli/docker_service_update.yaml b/_data/engine-cli/docker_service_update.yaml new file mode 100644 index 00000000000..c227c16b54e --- /dev/null +++ b/_data/engine-cli/docker_service_update.yaml @@ -0,0 +1,169 @@ +command: docker service update +short: Update a service +long: Update a service +usage: docker service update [OPTIONS] SERVICE +pname: docker service +plink: docker_service.yaml +options: +- option: args + description: Service command args +- option: constraint-add + default_value: '[]' + description: Add or update a placement constraint +- option: constraint-rm + default_value: '[]' + description: Remove a constraint +- option: container-label-add + default_value: '[]' + description: Add or update a container label +- option: container-label-rm + default_value: '[]' + description: Remove a container label by its key +- option: dns-add + default_value: '[]' + description: Add or update a custom DNS server +- option: dns-option-add + default_value: '[]' + description: Add or update a DNS option +- option: dns-option-rm + default_value: '[]' + description: Remove a DNS option +- option: dns-rm + default_value: '[]' + description: Remove a custom DNS server +- option: dns-search-add + default_value: '[]' + description: Add or update a custom DNS search domain +- option: dns-search-rm + default_value: '[]' + description: Remove a DNS search domain +- option: endpoint-mode + description: Endpoint mode (vip or dnsrr) +- option: env-add + default_value: '[]' + description: Add or update an environment variable +- option: env-rm + default_value: '[]' + description: Remove an environment variable +- option: force + default_value: "false" + description: Force update even if no changes require it +- option: group-add + default_value: '[]' + description: Add an additional supplementary user group to the container +- option: group-rm + default_value: '[]' + description: | + Remove a previously added supplementary user group from the container +- option: health-cmd + description: Command to run to check health +- option: health-interval + default_value: none + description: Time between running the check (ns|us|ms|s|m|h) +- option: health-retries + default_value: "0" + description: Consecutive failures needed to report unhealthy +- option: health-timeout + default_value: none + description: Maximum time to allow one check to run (ns|us|ms|s|m|h) +- option: host-add + default_value: '[]' + description: Add or update a custom host-to-IP mapping (host:ip) +- option: host-rm + default_value: '[]' + description: Remove a custom host-to-IP mapping (host:ip) +- option: hostname + description: Container hostname +- option: image + description: Service image tag +- option: label-add + default_value: '[]' + description: Add or update a service label +- option: label-rm + default_value: '[]' + description: Remove a label by its key +- option: limit-cpu + default_value: "0.000" + description: Limit CPUs +- option: limit-memory + default_value: 0 B + description: Limit Memory +- option: log-driver + description: Logging driver for service +- option: log-opt + default_value: '[]' + description: Logging driver options +- option: mount-add + description: Add or update a mount on a service +- option: mount-rm + default_value: '[]' + description: Remove a mount by its target path +- option: no-healthcheck + default_value: "false" + description: Disable any container-specified HEALTHCHECK +- option: publish-add + description: Add or update a published port +- option: publish-rm + description: Remove a published port by its target port +- option: replicas + default_value: none + description: Number of tasks +- option: reserve-cpu + default_value: "0.000" + description: Reserve CPUs +- option: reserve-memory + default_value: 0 B + description: Reserve Memory +- option: restart-condition + description: Restart when condition is met (none, on-failure, or any) +- option: restart-delay + default_value: none + description: Delay between restart attempts (ns|us|ms|s|m|h) +- option: restart-max-attempts + default_value: none + description: Maximum number of restarts before giving up +- option: restart-window + default_value: none + description: Window used to evaluate the restart policy (ns|us|ms|s|m|h) +- option: rollback + default_value: "false" + description: Rollback to previous specification +- option: secret-add + description: Add or update a secret on a service +- option: secret-rm + default_value: '[]' + description: Remove a secret +- option: stop-grace-period + default_value: none + description: | + Time to wait before force killing a container (ns|us|ms|s|m|h) +- option: tty + shorthand: t + default_value: "false" + description: Allocate a pseudo-TTY +- option: update-delay + default_value: "0" + description: Delay between updates (ns|us|ms|s|m|h) (default 0s) +- option: update-failure-action + default_value: pause + description: Action on update failure (pause|continue) +- option: update-max-failure-ratio + default_value: "0" + description: Failure rate to tolerate during an update +- option: update-monitor + default_value: "0" + description: | + Duration after each task update to monitor for failure (ns|us|ms|s|m|h) (default 0s) +- option: update-parallelism + default_value: "1" + description: | + Maximum number of tasks updated simultaneously (0 to update all at once) +- option: user + shorthand: u + description: 'Username or UID (format: [:])' +- option: with-registry-auth + default_value: "false" + description: Send registry authentication details to swarm agents +- option: workdir + shorthand: w + description: Working directory inside the container diff --git a/_data/engine-cli/docker_stack.yaml b/_data/engine-cli/docker_stack.yaml new file mode 100644 index 00000000000..59f04a610d8 --- /dev/null +++ b/_data/engine-cli/docker_stack.yaml @@ -0,0 +1,18 @@ +command: docker stack +short: Manage Docker stacks +long: Manage Docker stacks +usage: docker stack +pname: docker +plink: docker.yaml +cname: +- docker stack deploy +- docker stack ls +- docker stack ps +- docker stack rm +- docker stack services +clink: +- docker_stack_deploy.yaml +- docker_stack_ls.yaml +- docker_stack_ps.yaml +- docker_stack_rm.yaml +- docker_stack_services.yaml diff --git a/_data/engine-cli/docker_stack_deploy.yaml b/_data/engine-cli/docker_stack_deploy.yaml new file mode 100644 index 00000000000..95bcba3474e --- /dev/null +++ b/_data/engine-cli/docker_stack_deploy.yaml @@ -0,0 +1,15 @@ +command: docker stack deploy +short: Deploy a new stack or update an existing stack +long: Deploy a new stack or update an existing stack +usage: docker stack deploy [OPTIONS] STACK +pname: docker stack +plink: docker_stack.yaml +options: +- option: bundle-file + description: Path to a Distributed Application Bundle file +- option: compose-file + shorthand: c + description: Path to a Compose file +- option: with-registry-auth + default_value: "false" + description: Send registry authentication details to Swarm agents diff --git a/_data/engine-cli/docker_stack_ls.yaml b/_data/engine-cli/docker_stack_ls.yaml new file mode 100644 index 00000000000..3176bcff3d0 --- /dev/null +++ b/_data/engine-cli/docker_stack_ls.yaml @@ -0,0 +1,6 @@ +command: docker stack ls +short: List stacks +long: List stacks +usage: docker stack ls +pname: docker stack +plink: docker_stack.yaml diff --git a/_data/engine-cli/docker_stack_ps.yaml b/_data/engine-cli/docker_stack_ps.yaml new file mode 100644 index 00000000000..3f46f59e39f --- /dev/null +++ b/_data/engine-cli/docker_stack_ps.yaml @@ -0,0 +1,20 @@ +command: docker stack ps +short: List the tasks in the stack +long: List the tasks in the stack +usage: docker stack ps [OPTIONS] STACK +pname: docker stack +plink: docker_stack.yaml +options: +- option: all + shorthand: a + default_value: "false" + description: Display all tasks +- option: filter + shorthand: f + description: Filter output based on conditions provided +- option: no-resolve + default_value: "false" + description: Do not map IDs to Names +- option: no-trunc + default_value: "false" + description: Do not truncate output diff --git a/_data/engine-cli/docker_stack_rm.yaml b/_data/engine-cli/docker_stack_rm.yaml new file mode 100644 index 00000000000..b6626648ca3 --- /dev/null +++ b/_data/engine-cli/docker_stack_rm.yaml @@ -0,0 +1,6 @@ +command: docker stack rm +short: Remove the stack +long: Remove the stack +usage: docker stack rm STACK +pname: docker stack +plink: docker_stack.yaml diff --git a/_data/engine-cli/docker_stack_services.yaml b/_data/engine-cli/docker_stack_services.yaml new file mode 100644 index 00000000000..40f2462815d --- /dev/null +++ b/_data/engine-cli/docker_stack_services.yaml @@ -0,0 +1,14 @@ +command: docker stack services +short: List the services in the stack +long: List the services in the stack +usage: docker stack services [OPTIONS] STACK +pname: docker stack +plink: docker_stack.yaml +options: +- option: filter + shorthand: f + description: Filter output based on conditions provided +- option: quiet + shorthand: q + default_value: "false" + description: Only display IDs diff --git a/_data/engine-cli/docker_start.yaml b/_data/engine-cli/docker_start.yaml new file mode 100644 index 00000000000..83554192050 --- /dev/null +++ b/_data/engine-cli/docker_start.yaml @@ -0,0 +1,21 @@ +command: docker start +short: Start one or more stopped containers +long: Start one or more stopped containers +usage: docker start [OPTIONS] CONTAINER [CONTAINER...] +pname: docker +plink: docker.yaml +options: +- option: attach + shorthand: a + default_value: "false" + description: Attach STDOUT/STDERR and forward signals +- option: checkpoint + description: Restore from this checkpoint +- option: checkpoint-dir + description: Use a custom checkpoint storage directory +- option: detach-keys + description: Override the key sequence for detaching a container +- option: interactive + shorthand: i + default_value: "false" + description: Attach container's STDIN diff --git a/_data/engine-cli/docker_stats.yaml b/_data/engine-cli/docker_stats.yaml new file mode 100644 index 00000000000..14010bfd096 --- /dev/null +++ b/_data/engine-cli/docker_stats.yaml @@ -0,0 +1,16 @@ +command: docker stats +short: Display a live stream of container(s) resource usage statistics +long: Display a live stream of container(s) resource usage statistics +usage: docker stats [OPTIONS] [CONTAINER...] +pname: docker +plink: docker.yaml +options: +- option: all + shorthand: a + default_value: "false" + description: Show all containers (default shows just running) +- option: format + description: Pretty-print images using a Go template +- option: no-stream + default_value: "false" + description: Disable streaming stats and only pull the first result diff --git a/_data/engine-cli/docker_stop.yaml b/_data/engine-cli/docker_stop.yaml new file mode 100644 index 00000000000..6be109b2fe6 --- /dev/null +++ b/_data/engine-cli/docker_stop.yaml @@ -0,0 +1,11 @@ +command: docker stop +short: Stop one or more running containers +long: Stop one or more running containers +usage: docker stop [OPTIONS] CONTAINER [CONTAINER...] +pname: docker +plink: docker.yaml +options: +- option: time + shorthand: t + default_value: "10" + description: Seconds to wait for stop before killing it diff --git a/_data/engine-cli/docker_swarm.yaml b/_data/engine-cli/docker_swarm.yaml new file mode 100644 index 00000000000..b8935bd2309 --- /dev/null +++ b/_data/engine-cli/docker_swarm.yaml @@ -0,0 +1,22 @@ +command: docker swarm +short: Manage Swarm +long: Manage Swarm +usage: docker swarm +pname: docker +plink: docker.yaml +cname: +- docker swarm init +- docker swarm join +- docker swarm join-token +- docker swarm leave +- docker swarm unlock +- docker swarm unlock-key +- docker swarm update +clink: +- docker_swarm_init.yaml +- docker_swarm_join.yaml +- docker_swarm_join-token.yaml +- docker_swarm_leave.yaml +- docker_swarm_unlock.yaml +- docker_swarm_unlock-key.yaml +- docker_swarm_update.yaml diff --git a/_data/engine-cli/docker_swarm_init.yaml b/_data/engine-cli/docker_swarm_init.yaml new file mode 100644 index 00000000000..6a2f9305571 --- /dev/null +++ b/_data/engine-cli/docker_swarm_init.yaml @@ -0,0 +1,36 @@ +command: docker swarm init +short: Initialize a swarm +long: Initialize a swarm +usage: docker swarm init [OPTIONS] +pname: docker swarm +plink: docker_swarm.yaml +options: +- option: advertise-addr + description: 'Advertised address (format: [:port])' +- option: autolock + default_value: "false" + description: | + Enable manager autolocking (requiring an unlock key to start a stopped manager) +- option: cert-expiry + default_value: 2160h0m0s + description: Validity period for node certificates (ns|us|ms|s|m|h) +- option: dispatcher-heartbeat + default_value: 5s + description: Dispatcher heartbeat period (ns|us|ms|s|m|h) +- option: external-ca + description: Specifications of one or more certificate signing endpoints +- option: force-new-cluster + default_value: "false" + description: Force create a new cluster from current state +- option: listen-addr + default_value: 0.0.0.0:2377 + description: 'Listen address (format: [:port])' +- option: max-snapshots + default_value: "0" + description: Number of additional Raft snapshots to retain +- option: snapshot-interval + default_value: "10000" + description: Number of log entries between Raft snapshots +- option: task-history-limit + default_value: "5" + description: Task history retention limit diff --git a/_data/engine-cli/docker_swarm_join-token.yaml b/_data/engine-cli/docker_swarm_join-token.yaml new file mode 100644 index 00000000000..a334eb1dd79 --- /dev/null +++ b/_data/engine-cli/docker_swarm_join-token.yaml @@ -0,0 +1,14 @@ +command: docker swarm join-token +short: Manage join tokens +long: Manage join tokens +usage: docker swarm join-token [OPTIONS] (worker|manager) +pname: docker swarm +plink: docker_swarm.yaml +options: +- option: quiet + shorthand: q + default_value: "false" + description: Only display token +- option: rotate + default_value: "false" + description: Rotate join token diff --git a/_data/engine-cli/docker_swarm_join.yaml b/_data/engine-cli/docker_swarm_join.yaml new file mode 100644 index 00000000000..57d27329f1f --- /dev/null +++ b/_data/engine-cli/docker_swarm_join.yaml @@ -0,0 +1,14 @@ +command: docker swarm join +short: Join a swarm as a node and/or manager +long: Join a swarm as a node and/or manager +usage: docker swarm join [OPTIONS] HOST:PORT +pname: docker swarm +plink: docker_swarm.yaml +options: +- option: advertise-addr + description: 'Advertised address (format: [:port])' +- option: listen-addr + default_value: 0.0.0.0:2377 + description: 'Listen address (format: [:port])' +- option: token + description: Token for entry into the swarm diff --git a/_data/engine-cli/docker_swarm_leave.yaml b/_data/engine-cli/docker_swarm_leave.yaml new file mode 100644 index 00000000000..d22cbd21b5e --- /dev/null +++ b/_data/engine-cli/docker_swarm_leave.yaml @@ -0,0 +1,11 @@ +command: docker swarm leave +short: Leave the swarm +long: Leave the swarm +usage: docker swarm leave [OPTIONS] +pname: docker swarm +plink: docker_swarm.yaml +options: +- option: force + shorthand: f + default_value: "false" + description: Force this node to leave the swarm, ignoring warnings diff --git a/_data/engine-cli/docker_swarm_unlock-key.yaml b/_data/engine-cli/docker_swarm_unlock-key.yaml new file mode 100644 index 00000000000..a5534d60a8f --- /dev/null +++ b/_data/engine-cli/docker_swarm_unlock-key.yaml @@ -0,0 +1,14 @@ +command: docker swarm unlock-key +short: Manage the unlock key +long: Manage the unlock key +usage: docker swarm unlock-key [OPTIONS] +pname: docker swarm +plink: docker_swarm.yaml +options: +- option: quiet + shorthand: q + default_value: "false" + description: Only display token +- option: rotate + default_value: "false" + description: Rotate unlock key diff --git a/_data/engine-cli/docker_swarm_unlock.yaml b/_data/engine-cli/docker_swarm_unlock.yaml new file mode 100644 index 00000000000..5155a4961b4 --- /dev/null +++ b/_data/engine-cli/docker_swarm_unlock.yaml @@ -0,0 +1,6 @@ +command: docker swarm unlock +short: Unlock swarm +long: Unlock swarm +usage: docker swarm unlock +pname: docker swarm +plink: docker_swarm.yaml diff --git a/_data/engine-cli/docker_swarm_update.yaml b/_data/engine-cli/docker_swarm_update.yaml new file mode 100644 index 00000000000..0380cb850e3 --- /dev/null +++ b/_data/engine-cli/docker_swarm_update.yaml @@ -0,0 +1,27 @@ +command: docker swarm update +short: Update the swarm +long: Update the swarm +usage: docker swarm update [OPTIONS] +pname: docker swarm +plink: docker_swarm.yaml +options: +- option: autolock + default_value: "false" + description: Change manager autolocking setting (true|false) +- option: cert-expiry + default_value: 2160h0m0s + description: Validity period for node certificates (ns|us|ms|s|m|h) +- option: dispatcher-heartbeat + default_value: 5s + description: Dispatcher heartbeat period (ns|us|ms|s|m|h) +- option: external-ca + description: Specifications of one or more certificate signing endpoints +- option: max-snapshots + default_value: "0" + description: Number of additional Raft snapshots to retain +- option: snapshot-interval + default_value: "10000" + description: Number of log entries between Raft snapshots +- option: task-history-limit + default_value: "5" + description: Task history retention limit diff --git a/_data/engine-cli/docker_system.yaml b/_data/engine-cli/docker_system.yaml new file mode 100644 index 00000000000..9b3a9fa7247 --- /dev/null +++ b/_data/engine-cli/docker_system.yaml @@ -0,0 +1,16 @@ +command: docker system +short: Manage Docker +long: Manage Docker +usage: docker system +pname: docker +plink: docker.yaml +cname: +- docker system df +- docker system events +- docker system info +- docker system prune +clink: +- docker_system_df.yaml +- docker_system_events.yaml +- docker_system_info.yaml +- docker_system_prune.yaml diff --git a/_data/engine-cli/docker_system_df.yaml b/_data/engine-cli/docker_system_df.yaml new file mode 100644 index 00000000000..bef13871a4b --- /dev/null +++ b/_data/engine-cli/docker_system_df.yaml @@ -0,0 +1,11 @@ +command: docker system df +short: Show docker disk usage +long: Show docker disk usage +usage: docker system df [OPTIONS] +pname: docker system +plink: docker_system.yaml +options: +- option: verbose + shorthand: v + default_value: "false" + description: Show detailed information on space usage diff --git a/_data/engine-cli/docker_system_events.yaml b/_data/engine-cli/docker_system_events.yaml new file mode 100644 index 00000000000..7ac3a687a23 --- /dev/null +++ b/_data/engine-cli/docker_system_events.yaml @@ -0,0 +1,16 @@ +command: docker system events +short: Get real time events from the server +long: Get real time events from the server +usage: docker system events [OPTIONS] +pname: docker system +plink: docker_system.yaml +options: +- option: filter + shorthand: f + description: Filter output based on conditions provided +- option: format + description: Format the output using the given Go template +- option: since + description: Show all events created since timestamp +- option: until + description: Stream events until this timestamp diff --git a/_data/engine-cli/docker_system_info.yaml b/_data/engine-cli/docker_system_info.yaml new file mode 100644 index 00000000000..2636cfc87ad --- /dev/null +++ b/_data/engine-cli/docker_system_info.yaml @@ -0,0 +1,10 @@ +command: docker system info +short: Display system-wide information +long: Display system-wide information +usage: docker system info [OPTIONS] +pname: docker system +plink: docker_system.yaml +options: +- option: format + shorthand: f + description: Format the output using the given Go template diff --git a/_data/engine-cli/docker_system_prune.yaml b/_data/engine-cli/docker_system_prune.yaml new file mode 100644 index 00000000000..953ea7eb42f --- /dev/null +++ b/_data/engine-cli/docker_system_prune.yaml @@ -0,0 +1,15 @@ +command: docker system prune +short: Remove unused data +long: Remove unused data +usage: docker system prune [OPTIONS] +pname: docker system +plink: docker_system.yaml +options: +- option: all + shorthand: a + default_value: "false" + description: Remove all unused images not just dangling ones +- option: force + shorthand: f + default_value: "false" + description: Do not prompt for confirmation diff --git a/_data/engine-cli/docker_tag.yaml b/_data/engine-cli/docker_tag.yaml new file mode 100644 index 00000000000..1f99378ccae --- /dev/null +++ b/_data/engine-cli/docker_tag.yaml @@ -0,0 +1,6 @@ +command: docker tag +short: Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE +long: Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE +usage: docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG] +pname: docker +plink: docker.yaml diff --git a/_data/engine-cli/docker_top.yaml b/_data/engine-cli/docker_top.yaml new file mode 100644 index 00000000000..5082a5a5b7e --- /dev/null +++ b/_data/engine-cli/docker_top.yaml @@ -0,0 +1,17 @@ +command: docker top +short: Display the running processes of a container +long: | + Display the running process of the container. ps-OPTION can be any of the options you would pass to a Linux ps command. + + All displayed information is from host's point of view. + + # EXAMPLES + + Run **docker top** with the ps option of -x: + + $ docker top 8601afda2b -x + PID TTY STAT TIME COMMAND + 16623 ? Ss 0:00 sleep 99999 +usage: docker top CONTAINER [ps OPTIONS] +pname: docker +plink: docker.yaml diff --git a/_data/engine-cli/docker_unpause.yaml b/_data/engine-cli/docker_unpause.yaml new file mode 100644 index 00000000000..3e3de8cdc83 --- /dev/null +++ b/_data/engine-cli/docker_unpause.yaml @@ -0,0 +1,6 @@ +command: docker unpause +short: Unpause all processes within one or more containers +long: Unpause all processes within one or more containers +usage: docker unpause CONTAINER [CONTAINER...] +pname: docker +plink: docker.yaml diff --git a/_data/engine-cli/docker_update.yaml b/_data/engine-cli/docker_update.yaml new file mode 100644 index 00000000000..d129771c0a9 --- /dev/null +++ b/_data/engine-cli/docker_update.yaml @@ -0,0 +1,43 @@ +command: docker update +short: Update configuration of one or more containers +long: Update configuration of one or more containers +usage: docker update [OPTIONS] CONTAINER [CONTAINER...] +pname: docker +plink: docker.yaml +options: +- option: blkio-weight + default_value: "0" + description: | + Block IO (relative weight), between 10 and 1000, or 0 to disable (default 0) +- option: cpu-period + default_value: "0" + description: Limit CPU CFS (Completely Fair Scheduler) period +- option: cpu-quota + default_value: "0" + description: Limit CPU CFS (Completely Fair Scheduler) quota +- option: cpu-rt-period + default_value: "0" + description: Limit the CPU real-time period in microseconds +- option: cpu-rt-runtime + default_value: "0" + description: Limit the CPU real-time runtime in microseconds +- option: cpu-shares + shorthand: c + default_value: "0" + description: CPU shares (relative weight) +- option: cpuset-cpus + description: CPUs in which to allow execution (0-3, 0,1) +- option: cpuset-mems + description: MEMs in which to allow execution (0-3, 0,1) +- option: kernel-memory + description: Kernel memory limit +- option: memory + shorthand: m + description: Memory limit +- option: memory-reservation + description: Memory soft limit +- option: memory-swap + description: | + Swap limit equal to memory plus swap: '-1' to enable unlimited swap +- option: restart + description: Restart policy to apply when a container exits diff --git a/_data/engine-cli/docker_version.yaml b/_data/engine-cli/docker_version.yaml new file mode 100644 index 00000000000..61451ec84d2 --- /dev/null +++ b/_data/engine-cli/docker_version.yaml @@ -0,0 +1,21 @@ +command: docker version +short: Show the Docker version information +long: "This command displays version information for both the Docker client and \ndaemon. + \n\n# EXAMPLES\n\n## Display Docker version information\n\nThe default output:\n\n + \ $ docker version\n\tClient:\n\t Version: 1.8.0\n\t API version: 1.20\n\t + Go version: go1.4.2\n\t Git commit: f5bae0a\n\t Built: Tue Jun 23 17:56:00 + UTC 2015\n\t OS/Arch: linux/amd64\n\n\tServer:\n\t Version: 1.8.0\n\t + API version: 1.20\n\t Go version: go1.4.2\n\t Git commit: f5bae0a\n\t Built: + \ Tue Jun 23 17:56:00 UTC 2015\n\t OS/Arch: linux/amd64\n\nGet server + version:\n\n $ docker version --format '{{.Server.Version}}'\n\t1.8.0\n\nDump + raw data:\n\nTo view all available fields, you can use the format `{{json .}}`.\n\n + \ $ docker version --format '{{json .}}'\n {\"Client\":{\"Version\":\"1.8.0\",\"ApiVersion\":\"1.20\",\"GitCommit\":\"f5bae0a\",\"GoVersion\":\"go1.4.2\",\"Os\":\"linux\",\"Arch\":\"amd64\",\"BuildTime\":\"Tue + Jun 23 17:56:00 UTC 2015\"},\"ServerOK\":true,\"Server\":{\"Version\":\"1.8.0\",\"ApiVersion\":\"1.20\",\"GitCommit\":\"f5bae0a\",\"GoVersion\":\"go1.4.2\",\"Os\":\"linux\",\"Arch\":\"amd64\",\"KernelVersion\":\"3.13.2-gentoo\",\"BuildTime\":\"Tue + Jun 23 17:56:00 UTC 2015\"}}\n" +usage: docker version [OPTIONS] +pname: docker +plink: docker.yaml +options: +- option: format + shorthand: f + description: Format the output using the given Go template diff --git a/_data/engine-cli/docker_volume.yaml b/_data/engine-cli/docker_volume.yaml new file mode 100644 index 00000000000..6903a13fa7e --- /dev/null +++ b/_data/engine-cli/docker_volume.yaml @@ -0,0 +1,32 @@ +command: docker volume +short: Manage volumes +long: | + The `docker volume` command has subcommands for managing data volumes. A data + volume is a specially-designated directory that by-passes storage driver + management. + + Data volumes persist data independent of a container's life cycle. When you + delete a container, the Engine daemon does not delete any data volumes. You can + share volumes across multiple containers. Moreover, you can share data volumes + with other computing resources in your system. + + To see help for a subcommand, use: + + docker volume CMD help + + For full details on using docker volume visit Docker's online documentation. +usage: docker volume COMMAND +pname: docker +plink: docker.yaml +cname: +- docker volume create +- docker volume inspect +- docker volume ls +- docker volume prune +- docker volume rm +clink: +- docker_volume_create.yaml +- docker_volume_inspect.yaml +- docker_volume_ls.yaml +- docker_volume_prune.yaml +- docker_volume_rm.yaml diff --git a/_data/engine-cli/docker_volume_create.yaml b/_data/engine-cli/docker_volume_create.yaml new file mode 100644 index 00000000000..4e813009897 --- /dev/null +++ b/_data/engine-cli/docker_volume_create.yaml @@ -0,0 +1,55 @@ +command: docker volume create +short: Create a volume +long: | + Creates a new volume that containers can consume and store data in. If a name + is not specified, Docker generates a random name. You create a volume and then + configure the container to use it, for example: + + $ docker volume create hello + hello + $ docker run -d -v hello:/world busybox ls /world + + The mount is created inside the container's `/src` directory. Docker doesn't + not support relative paths for mount points inside the container. + + Multiple containers can use the same volume in the same time period. This is + useful if two containers need access to shared data. For example, if one + container writes and the other reads the data. + + ## Driver specific options + + Some volume drivers may take options to customize the volume creation. Use the + `-o` or `--opt` flags to pass driver options: + + $ docker volume create --driver fake --opt tardis=blue --opt timey=wimey + + These options are passed directly to the volume driver. Options for different + volume drivers may do different things (or nothing at all). + + The built-in `local` driver on Windows does not support any options. + + The built-in `local` driver on Linux accepts options similar to the linux + `mount` command: + + $ docker volume create --driver local --opt type=tmpfs --opt device=tmpfs --opt o=size=100m,uid=1000 + + Another example: + + $ docker volume create --driver local --opt type=btrfs --opt device=/dev/sda2 +usage: docker volume create [OPTIONS] [VOLUME] +pname: docker volume +plink: docker_volume.yaml +options: +- option: driver + shorthand: d + default_value: local + description: Specify volume driver name +- option: label + default_value: '[]' + description: Set metadata for a volume +- option: name + description: Specify volume name +- option: opt + shorthand: o + default_value: map[] + description: Set driver specific options diff --git a/_data/engine-cli/docker_volume_inspect.yaml b/_data/engine-cli/docker_volume_inspect.yaml new file mode 100644 index 00000000000..4ab9a7c847f --- /dev/null +++ b/_data/engine-cli/docker_volume_inspect.yaml @@ -0,0 +1,14 @@ +command: docker volume inspect +short: Display detailed information on one or more volumes +long: | + Returns information about one or more volumes. By default, this command renders + all results in a JSON array. You can specify an alternate format to execute a + given template is executed for each result. Go's https://golang.org/pkg/text/template/ + package describes all the details of the format. +usage: docker volume inspect [OPTIONS] VOLUME [VOLUME...] +pname: docker volume +plink: docker_volume.yaml +options: +- option: format + shorthand: f + description: Format the output using the given Go template diff --git a/_data/engine-cli/docker_volume_ls.yaml b/_data/engine-cli/docker_volume_ls.yaml new file mode 100644 index 00000000000..72899aa4af1 --- /dev/null +++ b/_data/engine-cli/docker_volume_ls.yaml @@ -0,0 +1,27 @@ +command: docker volume ls +short: List volumes +long: | + Lists all the volumes Docker knows about. You can filter using the `-f` or + `--filter` flag. The filtering format is a `key=value` pair. To specify + more than one filter, pass multiple flags (for example, + `--filter "foo=bar" --filter "bif=baz"`) + + The currently supported filters are: + + * `dangling` (boolean - `true` or `false`, `1` or `0`) + * `driver` (a volume driver's name) + * `label` (`label=` or `label==`) + * `name` (a volume's name) +usage: docker volume ls [OPTIONS] +pname: docker volume +plink: docker_volume.yaml +options: +- option: filter + shorthand: f + description: Provide filter values (e.g. 'dangling=true') +- option: format + description: Pretty-print volumes using a Go template +- option: quiet + shorthand: q + default_value: "false" + description: Only display volume names diff --git a/_data/engine-cli/docker_volume_prune.yaml b/_data/engine-cli/docker_volume_prune.yaml new file mode 100644 index 00000000000..e9facac4977 --- /dev/null +++ b/_data/engine-cli/docker_volume_prune.yaml @@ -0,0 +1,11 @@ +command: docker volume prune +short: Remove all unused volumes +long: Remove all unused volumes +usage: docker volume prune [OPTIONS] +pname: docker volume +plink: docker_volume.yaml +options: +- option: force + shorthand: f + default_value: "false" + description: Do not prompt for confirmation diff --git a/_data/engine-cli/docker_volume_rm.yaml b/_data/engine-cli/docker_volume_rm.yaml new file mode 100644 index 00000000000..e316229bd4c --- /dev/null +++ b/_data/engine-cli/docker_volume_rm.yaml @@ -0,0 +1,17 @@ +command: docker volume rm +short: Remove one or more volumes +long: |2 + + Remove one or more volumes. You cannot remove a volume that is in use by a container. +usage: docker volume rm [OPTIONS] VOLUME [VOLUME...] +pname: docker volume +plink: docker_volume.yaml +options: +- option: force + shorthand: f + default_value: "false" + description: Force the removal of one or more volumes +example: |2 + + $ docker volume rm hello + hello diff --git a/_data/engine-cli/docker_wait.yaml b/_data/engine-cli/docker_wait.yaml new file mode 100644 index 00000000000..a45f9cd074a --- /dev/null +++ b/_data/engine-cli/docker_wait.yaml @@ -0,0 +1,6 @@ +command: docker wait +short: Block until one or more containers stop, then print their exit codes +long: Block until one or more containers stop, then print their exit codes +usage: docker wait CONTAINER [CONTAINER...] +pname: docker +plink: docker.yaml diff --git a/_data/toc.yaml b/_data/toc.yaml index f8f38ce1cc4..3cf2ac57af3 100644 --- a/_data/toc.yaml +++ b/_data/toc.yaml @@ -1,50 +1,104 @@ toc: - title: Welcome to the Docs path: / +- sectiontitle: Get Docker + section: + - path: /engine/installation/ + title: Install Docker Engine + - sectiontitle: Docker for Mac + section: + - path: /docker-for-mac/ + title: Getting Started + - path: /docker-for-mac/docker-toolbox/ + title: Docker for Mac vs. Docker Toolbox + - path: /docker-for-mac/multi-arch/ + title: Leveraging Multi-CPU Architecture Support + - path: /docker-for-mac/networking/ + title: Networking + - path: /docker-for-mac/osxfs/ + title: File system sharing + - path: /docker-for-mac/troubleshoot/ + title: Logs and Troubleshooting + - path: /docker-for-mac/faqs/ + title: FAQs + - path: /docker-for-mac/examples/ + title: Example Applications + - path: /docker-for-mac/opensource/ + title: Open Source Licensing + - path: /docker-for-mac/release-notes/ + title: Release Notes + - sectiontitle: Docker for Windows + section: + - path: /docker-for-windows/ + title: Getting Started + - path: /docker-for-windows/troubleshoot/ + title: Logs and Troubleshooting + - path: /docker-for-windows/faqs/ + title: FAQs + - path: /docker-for-windows/examples/ + title: Example Applications + - path: /docker-for-windows/opensource/ + title: Open Source Licensing + - path: /docker-for-windows/release-notes/ + title: Release Notes + - sectiontitle: Docker for Linux + section: + - path: /engine/installation/linux/ubuntu/ + title: Ubuntu + - path: /engine/installation/linux/rhel/ + title: Red Hat Enterprise Linux + - path: /engine/installation/linux/centos/ + title: CentOS + - path: /engine/installation/linux/fedora/ + title: Fedora + - path: /engine/installation/linux/debian/ + title: Debian + - path: /engine/installation/linux/oracle/ + title: Oracle Linux + - path: /engine/installation/linux/suse/ + title: OpenSuSE and SuSE Linux Enterprise + - path: /engine/installation/linux/other/ + title: Other Linux distributions + - path: /engine/installation/binaries/ + title: Installation from binaries + - path: /engine/installation/linux-postinstall/ + title: Optional post-installation steps + - sectiontitle: Docker for AWS + section: + - path: /docker-for-aws/ + title: Setup & Prerequisites + - path: /docker-for-aws/iam-permissions/ + title: IAM Permissions + - path: /docker-for-aws/scaling/ + title: Scaling + - path: /docker-for-aws/upgrade/ + title: Upgrading + - path: /docker-for-aws/faqs/ + title: FAQs + - path: /docker-for-aws/opensource/ + title: Open Source Licensing + - path: /docker-for-aws/release-notes/ + title: Release Notes + - sectiontitle: Docker for Azure + section: + - path: /docker-for-azure/ + title: Setup & Prerequisites + - path: /docker-for-azure/upgrade/ + title: Upgrading + - path: /docker-for-azure/faqs/ + title: FAQs + - path: /docker-for-azure/opensource/ + title: Open Source Licensing + - path: /docker-for-azure/release-notes/ + title: Release Notes - sectiontitle: Docker ID section: - path: /docker-id/ title: Docker ID accounts + - path: /docker-id/api-reference/ + title: API Reference - sectiontitle: Docker Engine section: - - sectiontitle: Install - section: - - path: /engine/installation/mac/ - title: Installation on macOS - - path: /engine/installation/windows/ - title: Installation on Windows - - sectiontitle: On Linux distributions - section: - - path: /engine/installation/linux/ubuntulinux/ - title: Installation on Ubuntu - - path: /engine/installation/linux/rhel/ - title: Installation on Red Hat Enterprise Linux - - path: /engine/installation/linux/centos/ - title: Installation on CentOS - - path: /engine/installation/linux/fedora/ - title: Installation on Fedora - - path: /engine/installation/linux/debian/ - title: Installation on Debian - - path: /engine/installation/linux/archlinux/ - title: Installation on Arch Linux - - path: /engine/installation/linux/cruxlinux/ - title: Installation on CRUX Linux - - path: /engine/installation/linux/gentoolinux/ - title: Installation on Gentoo - - path: /engine/installation/linux/oracle/ - title: Installation on Oracle Linux - - path: /engine/installation/linux/SUSE/ - title: Installation on openSUSE and SUSE Linux Enterprise - - sectiontitle: On cloud providers - section: - - path: /engine/installation/cloud/overview/ - title: Choose how to install - - path: /engine/installation/cloud/cloud-ex-aws/ - title: "Example: Manual install on cloud provider" - - path: /engine/installation/cloud/cloud-ex-machine-ocean/ - title: "Example: Use Docker Machine to provision cloud hosts" - - path: /engine/installation/binaries/ - title: Installation from binaries - sectiontitle: Get Started with Docker section: - path: /engine/getstarted/ @@ -161,6 +215,8 @@ toc: title: Configuring Logging Drivers - path: /engine/admin/logging/log_tags/ title: Log tags for logging driver + - path: engine/admin/logging/logentries/ + title: Logentries logging driver - path: /engine/admin/logging/awslogs/ title: Amazon CloudWatch Logs logging driver - path: /engine/admin/logging/etwlogs/ @@ -233,6 +289,8 @@ toc: title: Manage nodes in a swarm - path: /engine/swarm/services/ title: Deploy services to a swarm + - path: /engine/swarm/secrets/ + title: Manage sensitive data with Docker secrets - path: /engine/swarm/networking/ title: Attach services to an overlay network - path: /engine/swarm/admin_guide/ @@ -299,246 +357,362 @@ toc: title: Dockerizing an SSH service - path: /engine/examples/apt-cacher-ng/ title: Dockerizing an apt-cacher-ng service - - sectiontitle: Engine reference + - path: /engine/reference/builder/ + title: Dockerfile reference + - path: /engine/reference/run/ + title: Docker run reference + - path: /engine/reference/commandline/cli/ + title: Use the Docker command line + - path: /engine/reference/commandline/dockerd/ + title: Daemon CLI reference + - sectiontitle: Engine CLI reference section: - - path: /engine/reference/builder/ - title: Dockerfile reference - - path: /engine/reference/run/ - title: Docker run reference - - sectiontitle: Command line reference + - path: /engine/reference/commandline/docker/ + title: docker (base command) + - path: /engine/reference/commandline/attach/ + title: docker attach + - path: /engine/reference/commandline/build/ + title: docker build + - path: /engine/reference/commandline/commit/ + title: docker commit + - sectiontitle: docker container * section: - - path: /engine/reference/commandline/ - title: Docker commands - - path: /engine/reference/commandline/cli/ - title: Use the Docker command line - - path: /engine/reference/commandline/dockerd/ - title: dockerd - - path: /engine/reference/commandline/attach/ - title: attach - - path: /engine/reference/commandline/build/ - title: build - - path: /engine/reference/commandline/commit/ - title: commit - - path: /engine/reference/commandline/cp/ - title: cp - - path: /engine/reference/commandline/create/ - title: create - - path: /engine/reference/commandline/deploy/ - title: deploy - - path: /engine/reference/commandline/diff/ - title: diff - - path: /engine/reference/commandline/events/ - title: events - - path: /engine/reference/commandline/exec/ - title: exec - - path: /engine/reference/commandline/export/ - title: export - - path: /engine/reference/commandline/history/ - title: history - - path: /engine/reference/commandline/images/ - title: images - - path: /engine/reference/commandline/import/ - title: import - - path: /engine/reference/commandline/info/ - title: info - - path: /engine/reference/commandline/inspect/ - title: inspect - - path: /engine/reference/commandline/kill/ - title: kill - - path: /engine/reference/commandline/load/ - title: load - - path: /engine/reference/commandline/login/ - title: login - - path: /engine/reference/commandline/logout/ - title: logout - - path: /engine/reference/commandline/logs/ - title: logs + - path: /engine/reference/commandline/container/ + title: docker container + - path: /engine/reference/commandline/container_attach/ + title: docker container attach + - path: /engine/reference/commandline/container_commit/ + title: docker container commit + - path: /engine/reference/commandline/container_cp/ + title: docker container cp + - path: /engine/reference/commandline/container_create/ + title: docker container create + - path: /engine/reference/commandline/container_diff/ + title: docker container diff + - path: /engine/reference/commandline/container_exec/ + title: docker container exec + - path: /engine/reference/commandline/container_export/ + title: docker container export + - path: /engine/reference/commandline/container_inspect/ + title: docker container inspect + - path: /engine/reference/commandline/container_kill/ + title: docker container kill + - path: /engine/reference/commandline/container_logs/ + title: docker container logs + - path: /engine/reference/commandline/container_ls/ + title: docker container ls + - path: /engine/reference/commandline/container_pause/ + title: docker container pause + - path: /engine/reference/commandline/container_port/ + title: docker container port + - path: /engine/reference/commandline/container_prune/ + title: docker container prune + - path: /engine/reference/commandline/container_rename/ + title: docker container rename + - path: /engine/reference/commandline/container_restart/ + title: docker container restart + - path: /engine/reference/commandline/container_rm/ + title: docker container rm + - path: /engine/reference/commandline/container_run/ + title: docker container run + - path: /engine/reference/commandline/container_start/ + title: docker container start + - path: /engine/reference/commandline/container_stats/ + title: docker container stats + - path: /engine/reference/commandline/container_stop/ + title: docker container stop + - path: /engine/reference/commandline/container_top/ + title: docker container top + - path: /engine/reference/commandline/container_unpause/ + title: docker container unpause + - path: /engine/reference/commandline/container_update/ + title: docker container update + - path: /engine/reference/commandline/container_wait/ + title: docker container wait + - path: /engine/reference/commandline/cp/ + title: docker cp + - path: /engine/reference/commandline/create/ + title: docker create + - path: /engine/reference/commandline/deploy/ + title: docker deploy + - path: /engine/reference/commandline/diff/ + title: docker diff + - path: /engine/reference/commandline/events/ + title: docker events + - path: /engine/reference/commandline/exec/ + title: docker exec + - path: /engine/reference/commandline/export/ + title: docker export + - path: /engine/reference/commandline/history/ + title: docker history + - sectiontitle: docker image * + section: + - path: /engine/reference/commandline/image/ + title: docker image + - path: /engine/reference/commandline/image_build/ + title: docker image build + - path: /engine/reference/commandline/image_history/ + title: docker image history + - path: /engine/reference/commandline/image_import/ + title: docker image import + - path: /engine/reference/commandline/image_inspect/ + title: docker image inspect + - path: /engine/reference/commandline/image_load/ + title: docker image load + - path: /engine/reference/commandline/image_ls/ + title: docker image ls + - path: /engine/reference/commandline/image_prune/ + title: docker image prune + - path: /engine/reference/commandline/image_pull/ + title: docker image pull + - path: /engine/reference/commandline/image_push/ + title: docker image push + - path: /engine/reference/commandline/image_rm/ + title: docker image rm + - path: /engine/reference/commandline/image_save/ + title: docker image save + - path: /engine/reference/commandline/image_tag/ + title: docker image tag + - path: /engine/reference/commandline/images/ + title: docker images + - path: /engine/reference/commandline/import/ + title: docker import + - path: /engine/reference/commandline/info/ + title: docker info + - path: /engine/reference/commandline/inspect/ + title: docker inspect + - path: /engine/reference/commandline/kill/ + title: docker kill + - path: /engine/reference/commandline/load/ + title: docker load + - path: /engine/reference/commandline/login/ + title: docker login + - path: /engine/reference/commandline/logout/ + title: docker logout + - path: /engine/reference/commandline/logs/ + title: docker logs + - sectiontitle: docker network * + section: + - path: /engine/reference/commandline/network/ + title: docker network - path: /engine/reference/commandline/network_connect/ - title: network connect + title: docker network connect - path: /engine/reference/commandline/network_create/ - title: network create + title: docker network create - path: /engine/reference/commandline/network_disconnect/ - title: network disconnect + title: docker network disconnect - path: /engine/reference/commandline/network_inspect/ - title: network inspect + title: docker network inspect - path: /engine/reference/commandline/network_ls/ - title: network ls + title: docker network ls + - path: /engine/reference/commandline/network_prune/ + title: docker network prune - path: /engine/reference/commandline/network_rm/ - title: network rm + title: docker network rm + - sectiontitle: docker node * + section: + - path: /engine/reference/commandline/node/ + title: docker node - path: /engine/reference/commandline/node_demote/ - title: node demote + title: docker node demote - path: /engine/reference/commandline/node_inspect/ - title: node inspect + title: docker node inspect - path: /engine/reference/commandline/node_ls/ - title: node ls + title: docker node ls - path: /engine/reference/commandline/node_promote/ - title: node promote + title: docker node promote - path: /engine/reference/commandline/node_ps/ - title: node ps + title: docker node ps - path: /engine/reference/commandline/node_rm/ - title: node rm + title: docker node rm - path: /engine/reference/commandline/node_update/ - title: node update - - path: /engine/reference/commandline/pause/ - title: pause + title: docker node update + - path: /engine/reference/commandline/pause/ + title: docker pause + - sectiontitle: docker plugin * + section: + - path: /engine/reference/commandline/plugin/ + title: docker plugin + - path: /engine/reference/commandline/plugin_create/ + title: docker plugin disable - path: /engine/reference/commandline/plugin_disable/ - title: plugin disable + title: docker plugin disable - path: /engine/reference/commandline/plugin_enable/ - title: plugin enable + title: docker plugin enable - path: /engine/reference/commandline/plugin_inspect/ - title: plugin inspect + title: docker plugin inspect - path: /engine/reference/commandline/plugin_install/ - title: plugin install + title: docker plugin install - path: /engine/reference/commandline/plugin_ls/ - title: plugin ls + title: docker plugin ls - path: /engine/reference/commandline/plugin_rm/ - title: plugin rm - - path: /engine/reference/commandline/port/ - title: port - - path: /engine/reference/commandline/ps/ - title: ps - - path: /engine/reference/commandline/pull/ - title: pull - - path: /engine/reference/commandline/push/ - title: push - - path: /engine/reference/commandline/rename/ - title: rename - - path: /engine/reference/commandline/restart/ - title: restart - - path: /engine/reference/commandline/rm/ - title: rm - - path: /engine/reference/commandline/rmi/ - title: rmi - - path: /engine/reference/commandline/run/ - title: run - - path: /engine/reference/commandline/save/ - title: save - - path: /engine/reference/commandline/search/ - title: search + title: docker plugin rm + - path: /engine/reference/commandline/plugin_set/ + title: docker plugin set + - path: /engine/reference/commandline/port/ + title: docker port + - path: /engine/reference/commandline/ps/ + title: docker ps + - path: /engine/reference/commandline/pull/ + title: docker pull + - path: /engine/reference/commandline/push/ + title: docker push + - path: /engine/reference/commandline/rename/ + title: docker rename + - path: /engine/reference/commandline/restart/ + title: docker restart + - path: /engine/reference/commandline/rm/ + title: docker rm + - path: /engine/reference/commandline/rmi/ + title: docker rmi + - path: /engine/reference/commandline/run/ + title: docker run + - path: /engine/reference/commandline/save/ + title: docker save + - path: /engine/reference/commandline/search/ + title: docker search + - sectiontitle: docker secret * + section: + - path: /engine/reference/commandline/secret/ + title: docker secret + - path: /engine/reference/commandline/secret_create/ + title: docker secret create + - path: /engine/reference/commandline/secret_inspect/ + title: docker secret inspect + - path: /engine/reference/commandline/secret_ls/ + title: docker secret ls + - path: /engine/reference/commandline/secret_rm/ + title: docker secret rm + - sectiontitle: docker service * + section: + - path: /engine/reference/commandline/service/ + title: docker service - path: /engine/reference/commandline/service_create/ - title: service create + title: docker service create - path: /engine/reference/commandline/service_inspect/ - title: service inspect + title: docker service inspect + - path: /engine/reference/commandline/service_logs/ + title: docker service logs - path: /engine/reference/commandline/service_ls/ - title: service ls + title: docker service ls - path: /engine/reference/commandline/service_ps/ - title: service ps + title: docker service ps - path: /engine/reference/commandline/service_rm/ - title: service rm + title: docker service rm - path: /engine/reference/commandline/service_scale/ - title: service scale + title: docker service scale - path: /engine/reference/commandline/service_update/ - title: service update + title: docker service update + - sectiontitle: docker stack * + section: + - path: /engine/reference/commandline/stack/ + title: docker stack - path: /engine/reference/commandline/stack_config/ - title: stack config + title: docker stack config - path: /engine/reference/commandline/stack_deploy/ - title: stack deploy + title: docker stack deploy - path: /engine/reference/commandline/stack_rm/ - title: stack rm + title: docker stack rm - path: /engine/reference/commandline/stack_services/ - title: stack services - - path: /engine/reference/commandline/start/ - title: start - - path: /engine/reference/commandline/stats/ - title: stats - - path: /engine/reference/commandline/stop/ - title: stop + title: docker stack services + - path: /engine/reference/commandline/stack_tasks/ + title: docker stack tasks + - path: /engine/reference/commandline/start/ + title: docker start + - path: /engine/reference/commandline/stats/ + title: docker stats + - path: /engine/reference/commandline/stop/ + title: docker stop + - sectiontitle: docker swarm * + setcion: + - path: /engine/reference/commandline/swarm/ + title: docker swarm - path: /engine/reference/commandline/swarm_init/ - title: swarm init + title: docker swarm init + - path: /engine/reference/commandline/swarm_join-token/ + title: docker swarm join-token - path: /engine/reference/commandline/swarm_join/ - title: swarm join - - path: /engine/reference/commandline/swarm_join_token/ - title: swarm join-token + title: docker swarm join - path: /engine/reference/commandline/swarm_leave/ - title: swarm leave + title: docker swarm leave + - path: /engine/reference/commandline/swarm_unlock-key/ + title: docker swarm unlock-key + - path: /engine/reference/commandline/swarm_unlock/ + title: docker swarm unlock - path: /engine/reference/commandline/swarm_update/ - title: swarm update - - path: /engine/reference/commandline/tag/ - title: tag - - path: /engine/reference/commandline/top/ - title: top - - path: /engine/reference/commandline/unpause/ - title: unpause - - path: /engine/reference/commandline/update/ - title: update - - path: /engine/reference/commandline/version/ - title: version + title: docker swarm update + - sectiontitle: docker system * + section: + - path: /engine/reference/commandline/system/ + title: docker system + - path: /engine/reference/commandline/system_df/ + title: docker system df + - path: /engine/reference/commandline/system_events/ + title: docker system events + - path: /engine/reference/commandline/system_info/ + title: docker system info + - path: /engine/reference/commandline/system_prune/ + title: docker system prune + - path: /engine/reference/commandline/tag/ + title: docker tag + - path: /engine/reference/commandline/top/ + title: docker top + - path: /engine/reference/commandline/unpause/ + title: docker unpause + - path: /engine/reference/commandline/update/ + title: docker update + - path: /engine/reference/commandline/version/ + title: docker version + - sectiontitle: docker volume * + section: - path: /engine/reference/commandline/volume_create/ - title: volume create + title: docker volume create - path: /engine/reference/commandline/volume_inspect/ - title: volume inspect + title: docker volume inspect - path: /engine/reference/commandline/volume_ls/ - title: volume ls + title: docker volume ls + - path: /engine/reference/commandline/volume_prune/ + title: docker volume ls - path: /engine/reference/commandline/volume_rm/ - title: volume rm - - path: /engine/reference/commandline/wait/ - title: wait - - sectiontitle: API Reference + title: docker volume rm + - path: /engine/reference/commandline/wait/ + title: docker wait + - sectiontitle: Engine API + section: + - path: /engine/api/ + title: Overview + - path: /engine/api/getting-started/ + title: Getting started + - path: /engine/api/sdks/ + title: SDKs + - path: /engine/api/v1.25/ + title: Reference + - sectiontitle: Version history section: - - path: /engine/reference/api/docker_remote_api/ - title: Remote API - - path: /engine/reference/api/docker_remote_api_v1.24/ - title: Remote API v1.24 - - path: /engine/reference/api/docker_remote_api_v1.23/ - title: Remote API v1.23 - - path: /engine/reference/api/docker_remote_api_v1.22/ - title: Remote API v1.22 - - path: /engine/reference/api/docker_remote_api_v1.21/ - title: Remote API v1.21 - - path: /engine/reference/api/docker_remote_api_v1.20/ - title: Remote API v1.20 - - path: /engine/reference/api/docker_remote_api_v1.19/ - title: Remote API v1.19 - - path: /engine/reference/api/docker_remote_api_v1.18/ - title: Remote API v1.18 - - path: /engine/reference/api/remote_api_client_libraries/ - title: Remote API client libraries - - path: /engine/reference/api/docker_io_accounts_api/ - title: docker.io accounts API - - path: /engine/migration/ - title: Migrate to Engine 1.10 - - path: /engine/breaking_changes/ - title: Breaking changes - - path: /engine/deprecated/ - title: Deprecated Engine Features - - path: /engine/faq/ - title: FAQ -- sectiontitle: Docker for Mac - section: - - path: /docker-for-mac/ - title: Getting Started - - path: /docker-for-mac/docker-toolbox/ - title: Docker for Mac vs. Docker Toolbox - - path: /docker-for-mac/multi-arch/ - title: Leveraging Multi-CPU Architecture Support - - path: /docker-for-mac/networking/ - title: Networking - - path: /docker-for-mac/osxfs/ - title: File system sharing - - path: /docker-for-mac/troubleshoot/ - title: Logs and Troubleshooting - - path: /docker-for-mac/faqs/ - title: FAQs - - path: /docker-for-mac/examples/ - title: Example Applications - - path: /docker-for-mac/opensource/ - title: Open Source Licensing - - path: /docker-for-mac/release-notes/ - title: Release Notes -- sectiontitle: Docker for Windows - section: - - path: /docker-for-windows/ - title: Getting Started - - path: /docker-for-windows/troubleshoot/ - title: Logs and Troubleshooting - - path: /docker-for-windows/faqs/ - title: FAQs - - path: /docker-for-windows/examples/ - title: Example Applications - - path: /docker-for-windows/opensource/ - title: Open Source Licensing - - path: /docker-for-windows/release-notes/ - title: Release Notes + - path: /engine/api/version-history/ + title: Overview + - path: /engine/api/v1.24/ + title: v1.24 reference + - path: /engine/api/v1.23/ + title: v1.23 reference + - path: /engine/api/v1.22/ + title: v1.22 reference + - path: /engine/api/v1.21/ + title: v1.21 reference + - path: /engine/api/v1.20/ + title: v1.20 reference + - path: /engine/api/v1.19/ + title: v1.19 reference + - path: /engine/api/v1.18/ + title: v1.18 reference + - path: /engine/migration/ + title: Migrate to Engine 1.10 + - path: /engine/breaking_changes/ + title: Breaking changes + - path: /engine/deprecated/ + title: Deprecated Engine Features + - path: /engine/faq/ + title: FAQ - sectiontitle: Docker Compose section: - path: /compose/overview/ diff --git a/_includes/cli.md b/_includes/cli.md new file mode 100644 index 00000000000..4ffe339c5cc --- /dev/null +++ b/_includes/cli.md @@ -0,0 +1,69 @@ +{% capture tabChar %} {% endcapture %} +{% capture dockerBaseDesc %}The base command for the Docker CLI.{% endcapture %} +{% if page.datafolder and page.datafile %} + +## Description + +{% if page.datafile=="docker" %} +{{ dockerBaseDesc }} +{% else %} +{{ site.data[page.datafolder][page.datafile].short }} +{% endif %} + +{% if site.data[page.datafolder][page.datafile].usage %} + +## Usage + +```shell +{{ site.data[page.datafolder][page.datafile].usage | replace: tabChar,"" | strip }}{% if site.data[page.datafolder][page.datafile].cname %} COMMAND{% endif %} +``` + +{% endif %} +{% if site.data[page.datafolder][page.datafile].options %} + +## Options + +| Name, shorthand | Default | Description | +| ---- | ------- | ----------- |{% for option in site.data[page.datafolder][page.datafile].options %} +| `--{{ option.option }}{% if option.shorthand %}, -{{ option.shorthand }}{% endif %}` | {% if option.default_value and option.default_value != "[]" %}`{{ option.default_value }}`{% endif %} | {{ option.description | replace: "|","|" | strip }} | {% endfor %} + +{% endif %} + +{% if site.data[page.datafolder][page.datafile].cname %} + +## Child commands + +| Command | Description | +| ------- | ----------- |{% for command in site.data[page.datafolder][page.datafile].cname %}{% capture dataFileName %}{{ command | strip | replace: " ","_" }}{% endcapture %} +| [{{ command }}]({{ dataFileName | replace: "docker_","" }}/) | {{ site.data[page.datafolder][dataFileName].short }} |{% endfor %} + +{% endif %} + +{% if site.data[page.datafolder][page.datafile].pname and site.data[page.datafolder][page.datafile].pname != page.datafile %} + +## Parent command + +{% capture parentfile %}{{ site.data[page.datafolder][page.datafile].plink | replace: ".yaml", "" | replace: "docker_","" }}{% endcapture %} +{% capture parentdatafile %}{{ site.data[page.datafolder][page.datafile].plink | replace: ".yaml", "" }}{% endcapture %} + +{% if site.data[page.datafolder][page.datafile].pname == "docker" %} +{% capture parentDesc %}{{ dockerBaseDesc }}{% endcapture %} +{% else %} +{% capture parentDesc %}{{ site.data[page.datafolder][parentdatafile].short }}{% endcapture %} +{% endif %} + +| Command | Description | +| ------- | ----------- | +| [{{ site.data[page.datafolder][page.datafile].pname }}]({{ parentfile }}) | {{ parentDesc }}| + +{% endif %} + +{% if site.data[page.datafolder][page.datafile].long != site.data[page.datafolder][page.datafile].short %} + +## Extended description + +{{ site.data[page.datafolder][page.datafile].long }} + +{% endif %} + +{% endif %} diff --git a/datacenter/ucp/1.1/install-sandbox-2.md b/datacenter/ucp/1.1/install-sandbox-2.md index b2f901c0b77..c4da8242d1a 100644 --- a/datacenter/ucp/1.1/install-sandbox-2.md +++ b/datacenter/ucp/1.1/install-sandbox-2.md @@ -169,7 +169,7 @@ UCP allows you to deploy and manage "Dockerized" applications in production. An application is built using Docker objects, such as images and containers, and Docker resources, such as volumes and networks. -UCP deploys and manages these objects and resources using remote API calls to +UCP deploys and manages these objects and resources using Engine API calls to the Engine daemons running on the nodes. For example, the `run` action may deploy an image in a Docker container. That image might define a service such as an Nginx web server or a database like Postgres. diff --git a/docker-cloud/index.md b/docker-cloud/index.md index 8c53e3d7774..29d5af0bc8c 100644 --- a/docker-cloud/index.md +++ b/docker-cloud/index.md @@ -1,9 +1,16 @@ --- description: Docker Cloud -keywords: Docker, cloud, overview +keywords: Docker, cloud +notoc: true +title: Welcome to the Docker Cloud docs! redirect_from: - - docker-cloud/overview -title: Docker Cloud Documentation +- /engine/installation/cloud/cloud/ +- /engine/installation/cloud/ +- /engine/installation/cloud/overview/ +- /engine/installation/google/ +- /engine/installation/softlayer/ +- /engine/installation/rackspace/ +- /engine/installation/joyent/ ---
-
Docker Cloud logo
+
Docker Cloud logo
Docker Cloud provides a hosted [registry service](builds/repos.md) with diff --git a/docker-cloud/infrastructure/link-do.md b/docker-cloud/infrastructure/link-do.md index 097fe6a582e..668da01ff3d 100644 --- a/docker-cloud/infrastructure/link-do.md +++ b/docker-cloud/infrastructure/link-do.md @@ -4,6 +4,7 @@ keywords: link, DigitalOcean, account redirect_from: - /docker-cloud/getting-started/beginner/link-do/ - /docker-cloud/getting-started/link-do/ +- /engine/installation/cloud/cloud-ex-machine-ocean/ title: Link a DigitalOcean account --- diff --git a/docker-for-aws/deploy.md b/docker-for-aws/deploy.md new file mode 100644 index 00000000000..44df2c333cf --- /dev/null +++ b/docker-for-aws/deploy.md @@ -0,0 +1,169 @@ +--- +description: Deploying Apps on Docker for AWS +keywords: aws, amazon, iaas, deploy +title: Deploy your app on Docker for AWS +--- + +## Connecting to your manager nodes + +This section will walk you through connecting to your installation and deploying +applications. Instructions are included for both AWS and Azure, so be sure to +follow the instructions for the cloud provider of your choice in each section. + +First, you will obtain the public IP address for a manager node. Any manager +node can be used for administrating the swarm. + +##### Manager Public IP on AWS + +Once you've deployed Docker on AWS, go to the "Outputs" tab for the stack in +CloudFormation. + +The "Managers" output is a URL you can use to see the available manager nodes of +the swarm in your AWS console. Once present on this page, you can see the +"Public IP" of each manager node in the table and/or "Description" tab if you +click on the instance. + +![](img/managers.png) + +## Connecting via SSH + +#### Manager nodes + +Obtain the public IP and/or port for the manager node as instructed above and +using the provided SSH key to begin administrating your swarm: + + $ ssh -i docker@ + Welcome to Docker! + +Once you are logged into the container you can run Docker commands on the swarm: + + $ docker info + $ docker node ls + +You can also tunnel the Docker socket over SSH to remotely run commands on the cluster (requires [OpenSSH 6.7](https://lwn.net/Articles/609321/) or later): + + $ ssh -NL localhost:2374:/var/run/docker.sock docker@ & + $ docker -H localhost:2374 info + +If you don't want to pass `-H` when using the tunnel, you can set the `DOCKER_HOST` environment variable to point to the localhost tunnel opening. + +### Worker nodes + +As of Beta 13, the worker nodes also have SSH enabled when connecting from +manager nodes. SSH access is not possible to the worker nodes from the public +Internet. To access the worker nodes, you will need to first connect to a +manager node (see above). + +On the manager node you can then `ssh` to the worker node, over the private +network. Make sure you have SSH agent forwarding enabled (see below). If you run +the `docker node ls` command you can see the full list of nodes in your swarm. +You can then `ssh docker@` to get access to that node. + +##### AWS + +Use the `HOSTNAME` reported in `docker node ls` directly. + +``` +$ docker node ls +ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS +a3d4vdn9b277p7bszd0lz8grp * ip-172-31-31-40.us-east-2.compute.internal Ready Active Reachable +... + +$ ssh docker@ip-172-31-31-40.us-east-2.compute.internal +``` + +##### Using SSH agent forwarding + +SSH agent forwarding allows you to forward along your ssh keys when connecting from one node to another. This eliminates the need for installing your private key on all nodes you might want to connect from. + +You can use this feature to SSH into worker nodes from a manager node without +installing keys directly on the manager. + +If your haven't added your ssh key to the `ssh-agent` you will also need to do this first. + +To see the keys in the agent already, run: + +``` +$ ssh-add -L +``` + +If you don't see your key, add it like this. + +``` +$ ssh-add ~/.ssh/your_key +``` + +On Mac OS X, the `ssh-agent` will forget this key, once it gets restarted. But you can import your SSH key into your Keychain like this. This will have your key survive restarts. + +``` +$ ssh-add -K ~/.ssh/your_key +``` + +You can then enable SSH forwarding per-session using the `-A` flag for the ssh command. + +Connecting to the Manager. +``` +$ ssh -A docker@ +``` + +To always have it turned on for a given host, you can edit your ssh config file +(`/etc/ssh_config`, `~/.ssh/config`, etc) to add the `ForwardAgent yes` option. + +Example configuration: + +``` +Host manager0 + HostName + ForwardAgent yes +``` + +To SSH in to the manager with the above settings: + +``` +$ ssh docker@manager0 +``` + +## Running apps + +You can now start creating containers and services. + + $ docker run hello-world + +You can run websites too. Ports exposed with `-p` are automatically exposed through the platform load balancer: + + $ docker service create --name nginx -p 80:80 nginx + +Once up, find the `DefaultDNSTarget` output in either the AWS or Azure portals to access the site. + +### Execute docker commands in all swarm nodes + +There are cases (such as installing a volume plugin) wherein a docker command may need to be executed in all the nodes across the cluster. You can use the `swarm-exec` tool to achieve that. + +Usage : `swarm-exec {Docker command}` + +The following will install a test plugin in all the nodes in the cluster + +Example : `swarm-exec docker plugin install --grant-all-permissions mavenugo/test-docker-netplugin` + +This tool internally makes use of docker global-mode service that runs a task on each of the nodes in the cluster. This task in turn executes your docker command. The global-mode service also guarantees that when a new node is added to the cluster or during upgrades, a new task is executed on that node and hence the docker command will be automatically executed. + +### Distributed Application Bundles + +To deploy complex multi-container apps, you can use [distributed application bundles](https://github.com/docker/docker/blob/master/experimental/docker-stacks-and-bundles.md). You can either run `docker deploy` to deploy a bundle on your machine over an SSH tunnel, or copy the bundle (for example using `scp`) to a manager node, SSH into the manager and then run `docker deploy` (if you have multiple managers, you have to ensure that your session is on one that has the bundle file). + +A good sample app to test application bundles is the [Docker voting app](https://github.com/docker/example-voting-app). + +By default, apps deployed with bundles do not have ports publicly exposed. Update port mappings for services, and Docker will automatically wire up the underlying platform load balancers: + + docker service update --publish-add 80:80 + +### Images in private repos + +To create swarm services using images in private repos, first make sure you're authenticated and have access to the private repo, then create the service with the `--with-registry-auth` flag (the example below assumes you're using Docker Hub): + + docker login + ... + docker service create --with-registry-auth user/private-repo + ... + +This will cause swarm to cache and use the cached registry credentials when creating containers for the service. diff --git a/docker-for-aws/faqs.md b/docker-for-aws/faqs.md new file mode 100644 index 00000000000..d3e662bfb62 --- /dev/null +++ b/docker-for-aws/faqs.md @@ -0,0 +1,92 @@ +--- +description: Frequently asked questions +keywords: aws faqs +title: Docker for AWS Frequently asked questions (FAQ) +--- + +## Can I use my own AMI? + +No, at this time we only support the default Docker for AWS AMI. + +## How to use Docker for AWS with an AWS account in an EC2-Classic region. + +If you have an AWS account that was created before **December 4th, 2013** you have what is known as an **EC2-Classic** account on regions where you have previously deployed resources. **EC2-Classic** accounts don't have default VPC's or the associated subnets, etc. This causes a problem when using our CloudFormation template because we are using the [Fn:GetAZs](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-getavailabilityzones.html) function they provide to determine which availability zones you have access too. When used in a region where you have **EC2-Classic**, this function will return all availability zones for a region, even ones you don't have access too. When you have an **EC2-VPC** account, it will return only the availability zones you have access to. + +This will cause an error like the following: + +> "Value (us-east-1a) for parameter availabilityZone is invalid. Subnets can currently only be created in the following availability zones: us-east-1d, us-east-1c, us-east-1b, us-east-1e." + +If you have an **EC2-Classic** account, and you don't have access to the `a` and `b` availability zones for that region. + +There isn't anything we can do right now to fix this issue, we have contacted Amazon, and we are hoping they will be able to provide us with a way to determine if an account is either **EC2-Classic** or **EC2-VPC**, so we can act accordingly. + +#### How to tell if you have this issue. + +This AWS documentation page will describe how you can tell if you have EC2-Classic, EC2-VPC or both. http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-supported-platforms.html + +#### How to fix: +There are a few work arounds that you can try to get Docker for AWS up and running for you. + +1. Use a region that doesn't have **EC2-Classic**. The most common region with this issue is `us-east-1`. So try another region, `us-west-1`, `us-west-2`, or the new `us-east-2`. These regions will more then likely be setup with **EC2-VPC** and you will not longer have this issue. +2. Create an new AWS account, all new accounts will be setup using **EC2-VPC** and will not have this problem. +3. You can try and contact AWS support to convert your **EC2-Classic** account to a **EC2-VPC** account. For more information checkout the following answer for **"Q. I really want a default VPC for my existing EC2 account. Is that possible?"** on https://aws.amazon.com/vpc/faqs/#Default_VPCs + +#### Helpful links: +- http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/default-vpc.html +- http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-supported-platforms.html +- http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-vpc.html +- https://aws.amazon.com/vpc/faqs/#Default_VPCs +- https://aws.amazon.com/blogs/aws/amazon-ec2-update-virtual-private-clouds-for-everyone/ + + +## Can I use my existing VPC? + +Not at this time, but it is on our roadmap for future releases. + +## Which AWS regions will this work with. + +Docker for AWS should work with all regions except for AWS China, which is a little different than the other regions. + +## How many Availability Zones does Docker for AWS use? + +All of Amazons regions have at least 2 AZ's, and some have more. To make sure Docker for AWS works in all regions, only 2 AZ's are used even if more are available. + +## What do I do if I get "KeyPair error" on AWS? +As part of the prerequisites, you need to have an SSH key uploaded to the AWS region you are trying to deploy to. +For more information about adding an SSH key pair to your account, please refer to the [Amazon EC2 Key Pairs docs](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html) + +## Where are my container logs? + +All container logs are aggregated within [AWS CloudWatch](https://aws.amazon.com/cloudwatch/). + +## I have a problem/bug where do I report it? + +Send an email to or post to the [Docker for AWS](https://github.com/docker/for-aws) GitHub repositories. + +In AWS, if your stack is misbehaving, please run the following diagnostic tool from one of the managers - this will collect your docker logs and send them to Docker: + +``` +$ docker-diagnose +OK hostname=manager1 +OK hostname=worker1 +OK hostname=worker2 +Done requesting diagnostics. +Your diagnostics session ID is 1234567890-xxxxxxxxxxxxxx +Please provide this session ID to the maintainer debugging your issue. +``` + +_Please note that your output will be slightly different from the above, depending on your swarm configuration_ + +## Analytics + +Docker for AWS sends anonymized minimal analytics to Docker (heartbeat). These analytics are used to monitor adoption and are critical to improve Docker for AWS. + +## How to run administrative commands? + +By default when you SSH into a manager, you will be logged in as the regular username: `docker` - It is possible however to run commands with elevated privileges by using `sudo`. +For example to ping one of the nodes, after finding its IP via the Azure/AWS portal (e.g. 10.0.0.4), you could run: +``` +$ sudo ping 10.0.0.4 +``` + +Note that access to Docker for AWS and Azure happens through a shell container that itself runs on Docker. diff --git a/docker-for-aws/iam-permissions.md b/docker-for-aws/iam-permissions.md new file mode 100644 index 00000000000..26ba8d8cd3f --- /dev/null +++ b/docker-for-aws/iam-permissions.md @@ -0,0 +1,314 @@ +--- +description: IAM permissions +keywords: aws iam permissions +title: Docker for AWS IAM permissions +--- + +The following IAM permissions are required to use Docker for AWS. + +Before you deploy Docker for AWS, your account needs these permissions for the stack to deploy correctly. +If you create and use an IAM role with these permissions for creating the stack, CloudFormation will use the role's permissions instead of your own, using the AWS CloudFormation Service Role feature. + +This feature is called [AWS CloudFormation Service Role](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-servicerole.html?icmpid=docs_cfn_console) +follow the link for more information. + +```none +{% raw %} +{ + "Version": "2012-10-17", + "Statement": [ + { + "Sid": "Stmt1481924239005", + "Effect": "Allow", + "Action": [ + "cloudformation:CancelUpdateStack", + "cloudformation:ContinueUpdateRollback", + "cloudformation:CreateChangeSet", + "cloudformation:CreateStack", + "cloudformation:CreateUploadBucket", + "cloudformation:DeleteStack", + "cloudformation:DescribeAccountLimits", + "cloudformation:DescribeChangeSet", + "cloudformation:DescribeStackEvents", + "cloudformation:DescribeStackResource", + "cloudformation:DescribeStackResources", + "cloudformation:DescribeStacks", + "cloudformation:EstimateTemplateCost", + "cloudformation:ExecuteChangeSet", + "cloudformation:GetStackPolicy", + "cloudformation:GetTemplate", + "cloudformation:GetTemplateSummary", + "cloudformation:ListChangeSets", + "cloudformation:ListStackResources", + "cloudformation:ListStacks", + "cloudformation:PreviewStackUpdate", + "cloudformation:SetStackPolicy", + "cloudformation:SignalResource", + "cloudformation:UpdateStack", + "cloudformation:ValidateTemplate" + ], + "Resource": [ + "*" + ] + }, + { + "Sid": "Stmt1481924344000", + "Effect": "Allow", + "Action": [ + "ec2:AllocateHosts", + "ec2:AssignPrivateIpAddresses", + "ec2:AssociateRouteTable", + "ec2:AttachInternetGateway", + "ec2:AttachNetworkInterface", + "ec2:AttachVolume", + "ec2:CreateInternetGateway", + "ec2:CreateNatGateway", + "ec2:CreateNetworkAcl", + "ec2:CreateNetworkAclEntry", + "ec2:CreateNetworkInterface", + "ec2:CreateRoute", + "ec2:CreateRouteTable", + "ec2:CreateSecurityGroup", + "ec2:CreateSubnet", + "ec2:CreateTags", + "ec2:CreateVolume", + "ec2:CreateVpc", + "ec2:DeleteInternetGateway", + "ec2:DeleteNatGateway", + "ec2:DeleteNetworkAcl", + "ec2:DeleteNetworkAclEntry", + "ec2:DeleteNetworkInterface", + "ec2:DeleteRoute", + "ec2:DeleteRouteTable", + "ec2:DeleteSecurityGroup", + "ec2:DeleteSubnet", + "ec2:DeleteTags", + "ec2:DeleteVolume", + "ec2:DeleteVpc", + "ec2:DescribeAccountAttributes", + "ec2:DescribeAvailabilityZones", + "ec2:DescribeHosts", + "ec2:DescribeImageAttribute", + "ec2:DescribeImages", + "ec2:DescribeInstanceStatus", + "ec2:DescribeInstances", + "ec2:DescribeInternetGateways", + "ec2:DescribeKeyPairs", + "ec2:DescribeNetworkInterfaces", + "ec2:DescribeRegions", + "ec2:DescribeRouteTables", + "ec2:DescribeSecurityGroups", + "ec2:DescribeSubnets", + "ec2:DescribeTags", + "ec2:DescribeVolumeAttribute", + "ec2:DescribeVolumeStatus", + "ec2:DescribeVolumes", + "ec2:DescribeVpcAttribute", + "ec2:DescribeVpcs", + "ec2:DetachInternetGateway", + "ec2:DetachNetworkInterface", + "ec2:DetachVolume", + "ec2:DisassociateAddress", + "ec2:DisassociateRouteTable", + "ec2:GetConsoleOutput", + "ec2:GetConsoleScreenshot", + "ec2:ModifyVpcAttribute", + "ec2:RebootInstances", + "ec2:ReleaseAddress", + "ec2:ReleaseHosts", + "ec2:RevokeSecurityGroupEgress", + "ec2:RevokeSecurityGroupIngress", + "ec2:RunInstances", + "ec2:StartInstances", + "ec2:StopInstances", + "ec2:TerminateInstances" + ], + "Resource": [ + "*" + ] + }, + { + "Sid": "Stmt1481924651000", + "Effect": "Allow", + "Action": [ + "autoscaling:AttachInstances", + "autoscaling:AttachLoadBalancers", + "autoscaling:CompleteLifecycleAction", + "autoscaling:CreateAutoScalingGroup", + "autoscaling:CreateLaunchConfiguration", + "autoscaling:CreateOrUpdateTags", + "autoscaling:DeleteAutoScalingGroup", + "autoscaling:DeleteLaunchConfiguration", + "autoscaling:DeleteLifecycleHook", + "autoscaling:DeleteNotificationConfiguration", + "autoscaling:DeletePolicy", + "autoscaling:DeleteScheduledAction", + "autoscaling:DeleteTags", + "autoscaling:DescribeAccountLimits", + "autoscaling:DescribeAutoScalingGroups", + "autoscaling:DescribeAutoScalingInstances", + "autoscaling:DescribeAutoScalingNotificationTypes", + "autoscaling:DescribeLaunchConfigurations", + "autoscaling:DescribeLifecycleHookTypes", + "autoscaling:DescribeLifecycleHooks", + "autoscaling:DescribeLoadBalancers", + "autoscaling:DescribeScalingActivities", + "autoscaling:DescribeTags", + "autoscaling:DetachInstances", + "autoscaling:DetachLoadBalancers", + "autoscaling:DisableMetricsCollection", + "autoscaling:EnableMetricsCollection", + "autoscaling:EnterStandby", + "autoscaling:ExecutePolicy", + "autoscaling:ExitStandby", + "autoscaling:PutLifecycleHook", + "autoscaling:PutNotificationConfiguration", + "autoscaling:PutScalingPolicy", + "autoscaling:PutScheduledUpdateGroupAction", + "autoscaling:RecordLifecycleActionHeartbeat", + "autoscaling:ResumeProcesses", + "autoscaling:SetDesiredCapacity", + "autoscaling:SetInstanceHealth", + "autoscaling:SetInstanceProtection", + "autoscaling:SuspendProcesses", + "autoscaling:TerminateInstanceInAutoScalingGroup", + "autoscaling:UpdateAutoScalingGroup" + ], + "Resource": [ + "*" + ] + }, + { + "Sid": "Stmt1481924759004", + "Effect": "Allow", + "Action": [ + "dynamodb:CreateTable", + "dynamodb:DeleteItem", + "dynamodb:DeleteTable", + "dynamodb:DescribeTable", + "dynamodb:GetItem", + "dynamodb:ListTables", + "dynamodb:PutItem", + "dynamodb:Query", + "dynamodb:UpdateItem", + "dynamodb:UpdateTable" + ], + "Resource": [ + "*" + ] + }, + { + "Sid": "Stmt1481924854000", + "Effect": "Allow", + "Action": [ + "logs:CreateLogGroup", + "logs:CreateLogStream", + "logs:DeleteLogGroup", + "logs:DeleteLogStream", + "logs:DescribeLogGroups", + "logs:GetLogEvents", + "logs:PutLogEvents", + "logs:PutRetentionPolicy" + ], + "Resource": [ + "*" + ] + }, + { + "Sid": "Stmt1481924989003", + "Effect": "Allow", + "Action": [ + "sqs:ChangeMessageVisibility", + "sqs:CreateQueue", + "sqs:DeleteMessage", + "sqs:DeleteQueue", + "sqs:GetQueueAttributes", + "sqs:GetQueueUrl", + "sqs:ListQueues", + "sqs:ReceiveMessage", + "sqs:SendMessage", + "sqs:SetQueueAttributes" + ], + "Resource": [ + "*" + ] + }, + { + "Sid": "Stmt1481924989002", + "Effect": "Allow", + "Action": [ + "iam:AddRoleToInstanceProfile", + "iam:CreateInstanceProfile", + "iam:CreateRole", + "iam:DeleteInstanceProfile", + "iam:DeleteRole", + "iam:DeleteRolePolicy", + "iam:GetRole", + "iam:PassRole", + "iam:PutRolePolicy", + "iam:RemoveRoleFromInstanceProfile" + ], + "Resource": [ + "*" + ] + }, + { + "Sid": "Stmt1481924989001", + "Effect": "Allow", + "Action": [ + "elasticloadbalancing:AddTags", + "elasticloadbalancing:ApplySecurityGroupsToLoadBalancer", + "elasticloadbalancing:AttachLoadBalancerToSubnets", + "elasticloadbalancing:ConfigureHealthCheck", + "elasticloadbalancing:CreateListener", + "elasticloadbalancing:CreateLoadBalancer", + "elasticloadbalancing:CreateLoadBalancerListeners", + "elasticloadbalancing:CreateLoadBalancerPolicy", + "elasticloadbalancing:CreateRule", + "elasticloadbalancing:CreateTargetGroup", + "elasticloadbalancing:DeleteListener", + "elasticloadbalancing:DeleteLoadBalancer", + "elasticloadbalancing:DeleteLoadBalancerListeners", + "elasticloadbalancing:DeleteLoadBalancerPolicy", + "elasticloadbalancing:DeleteRule", + "elasticloadbalancing:DeleteTargetGroup", + "elasticloadbalancing:DeregisterInstancesFromLoadBalancer", + "elasticloadbalancing:DeregisterTargets", + "elasticloadbalancing:DescribeInstanceHealth", + "elasticloadbalancing:DescribeListeners", + "elasticloadbalancing:DescribeLoadBalancerAttributes", + "elasticloadbalancing:DescribeLoadBalancerPolicyTypes", + "elasticloadbalancing:DescribeLoadBalancerPolicies", + "elasticloadbalancing:DescribeLoadBalancers", + "elasticloadbalancing:DescribeRules", + "elasticloadbalancing:DescribeSSLPolicies", + "elasticloadbalancing:DescribeTags", + "elasticloadbalancing:DescribeTargetGroupAttributes", + "elasticloadbalancing:DescribeTargetGroups", + "elasticloadbalancing:DescribeTargetHealth", + "elasticloadbalancing:DetachLoadBalancerFromSubnets", + "elasticloadbalancing:DisableAvailabilityZonesForLoadBalancer", + "elasticloadbalancing:EnableAvailabilityZonesForLoadBalancer", + "elasticloadbalancing:ModifyListener", + "elasticloadbalancing:ModifyLoadBalancerAttributes", + "elasticloadbalancing:ModifyRule", + "elasticloadbalancing:ModifyTargetGroup", + "elasticloadbalancing:ModifyTargetGroupAttributes", + "elasticloadbalancing:RegisterTargets", + "elasticloadbalancing:RegisterInstancesWithLoadBalancer", + "elasticloadbalancing:RemoveTags", + "elasticloadbalancing:SetLoadBalancerListenerSSLCertificate", + "elasticloadbalancing:SetLoadBalancerPoliciesForBackendServer", + "elasticloadbalancing:SetLoadBalancerPoliciesOfListener", + "elasticloadbalancing:SetRulePriorities", + "elasticloadbalancing:SetSecurityGroups", + "elasticloadbalancing:SetSubnets" + ], + "Resource": [ + "*" + ] + } + ] +} +{% endraw %} +``` diff --git a/docker-for-aws/img/autoscale_save.png b/docker-for-aws/img/autoscale_save.png new file mode 100644 index 00000000000..2eaebfe2182 Binary files /dev/null and b/docker-for-aws/img/autoscale_save.png differ diff --git a/docker-for-aws/img/autoscale_update.png b/docker-for-aws/img/autoscale_update.png new file mode 100644 index 00000000000..aa4bd3368bd Binary files /dev/null and b/docker-for-aws/img/autoscale_update.png differ diff --git a/docker-for-aws/img/aws-stack-update.PNG b/docker-for-aws/img/aws-stack-update.PNG new file mode 100644 index 00000000000..a9bcdc0de71 Binary files /dev/null and b/docker-for-aws/img/aws-stack-update.PNG differ diff --git a/docker-for-aws/img/aws_account_number.png b/docker-for-aws/img/aws_account_number.png new file mode 100644 index 00000000000..da36f457ce6 Binary files /dev/null and b/docker-for-aws/img/aws_account_number.png differ diff --git a/docker-for-aws/img/aws_support_center_link.png b/docker-for-aws/img/aws_support_center_link.png new file mode 100644 index 00000000000..672ac9528c4 Binary files /dev/null and b/docker-for-aws/img/aws_support_center_link.png differ diff --git a/docker-for-aws/img/cloudformation_update.png b/docker-for-aws/img/cloudformation_update.png new file mode 100644 index 00000000000..95cfd1dd22a Binary files /dev/null and b/docker-for-aws/img/cloudformation_update.png differ diff --git a/docker-for-aws/img/managers.png b/docker-for-aws/img/managers.png new file mode 100644 index 00000000000..6ec68b8dd93 Binary files /dev/null and b/docker-for-aws/img/managers.png differ diff --git a/docker-for-aws/index.md b/docker-for-aws/index.md new file mode 100644 index 00000000000..6e1631e6410 --- /dev/null +++ b/docker-for-aws/index.md @@ -0,0 +1,110 @@ +--- +description: Setup & Prerequisites +keywords: aws, amazon, iaas, tutorial +title: Docker for AWS Setup & Prerequisites +redirect_from: +- /engine/installation/cloud/cloud-ex-aws/ +- /engine/installation/amazon/ +--- + + +## Prerequisites + +- Access to an AWS account with permissions to use CloudFormation and creating the following objects. [Full set of required permissions](iam-permissions.md). + - EC2 instances + Auto Scaling groups + - IAM profiles + - DynamoDB Tables + - SQS Queue + - VPC + subnets and security groups + - ELB + - CloudWatch Log Group +- SSH key in AWS in the region where you want to deploy (required to access the completed Docker install) +- AWS account that support EC2-VPC (See the [FAQ for details about EC2-Classic](faqs.md)) + +For more information about adding an SSH key pair to your account, please refer to the [Amazon EC2 Key Pairs docs](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html) + +## Configuration + +Docker for AWS is installed with a CloudFormation template that configures Docker in swarm-mode, running on instances backed custom AMIs. There are two ways you can deploy Docker for AWS. You can use the AWS Management Console (browser based), or use the AWS CLI. Both have the following configuration options. + +### Configuration options + +#### KeyName +Pick the SSH key that will be used when you SSH into the manager nodes. + +#### InstanceType +The EC2 instance type for your worker nodes. + +#### ManagerInstanceType +The EC2 instance type for your manager nodes. The larger your swarm, the larger the instance size you should use. + +#### ClusterSize +The number of workers you want in your swarm (0-1000). + +#### ManagerSize +The number of Managers in your swarm. You can pick either 1, 3 or 5 managers. We only recommend 1 manager for testing and dev setups. There are no failover guarantees with 1 manager — if the single manager fails the swarm will go down as well. Additionally, upgrading single-manager swarms is not currently guaranteed to succeed. + +We recommend at least 3 managers, and if you have a lot of workers, you should pick 5 managers. + +#### EnableSystemPrune + +Enable if you want Docker for AWS to automatically cleanup unused space on your swarm nodes. + +When enabled, `docker system prune` will run staggered every day, starting at 1:42AM UTC on both workers and managers. The prune times are staggered slightly so that not all nodes will be pruned at the same time. This limits resource spikes on the swarm. + +Pruning removes the following: +- All stopped containers +- All volumes not used by at least one container +- All dangling images +- All unused networks + +#### EnableCloudWatchLogs +Enable if you want Docker to send your container logs to CloudWatch. ("yes", "no") Defaults to yes. + +#### WorkerDiskSize +Size of Workers's ephemeral storage volume in GiB (20 - 1024). + +#### WorkerDiskType +Worker ephemeral storage volume type ("standard", "gp2"). + +#### ManagerDiskSize +Size of Manager's ephemeral storage volume in GiB (20 - 1024) + +#### ManagerDiskType +Manager ephemeral storage volume type ("standard", "gp2") + +### Installing with the AWS Management Console +The simplest way to use the template is with the CloudFormation section of the AWS Management Console. + +Go to the [Release Notes](release-notes.md) page, and click on the "launch stack" button to start the deployment process. + +### Installing with the CLI +You can also invoke the Docker for AWS CloudFormation template from the AWS CLI: + +Here is an example of how to use the CLI. Make sure you populate all of the parameters and their values: + +```bash +$ aws cloudformation create-stack --stack-name teststack --template-url --parameters ParameterKey=KeyName,ParameterValue= ParameterKey=InstanceType,ParameterValue=t2.micro ParameterKey=ManagerInstanceType,ParameterValue=t2.micro ParameterKey=ClusterSize,ParameterValue=1 --capabilities CAPABILITY_IAM +``` + +To fully automate installs, you can use the [AWS Cloudformation API](http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/Welcome.html). + +## How it works + +Docker for AWS starts with a CloudFormation template that will create everything that you need from scratch. There are only a few prerequisites that are listed above. + +The CloudFormation template first creates a new VPC along with subnets and security groups. After the networking set-up completes, two Auto Scaling Groups are created, one for the managers and one for the workers, and the configured capacity setting is applied. Managers start first and create a quorum using Raft, then the workers start and join the swarm one at a time. At this point, the swarm is comprised of X number of managers and Y number of workers, and you can deploy your applications. See the [deployment](deploy.md) docs for your next steps. + +If you increase the number of instances running in your worker Auto Scaling Group (via the AWS console, or updating the CloudFormation configuration), the new nodes that will start up will automatically join the swarm. + +Elastic Load Balancers (ELBs) are set up to help with routing traffic to your swarm. + +## Logging + +Docker for AWS automatically configures logging to Cloudwatch for containers you run on Docker for AWS. A Log Group is created for each Docker for AWS install, and a log stream for each container. + +`docker logs` and `docker service logs` are not supported on Docker for AWS. Instead, you should check container in CloudWatch. + +## System containers + +Each node will have a few system containers running on them to help run your swarm cluster. In order for everything to run smoothly, please keep those containers running, and don't make any changes. If you make any changes, Docker for AWS will not work correctly. diff --git a/docker-for-aws/opensource.md b/docker-for-aws/opensource.md new file mode 100644 index 00000000000..b6502ec1be6 --- /dev/null +++ b/docker-for-aws/opensource.md @@ -0,0 +1,11 @@ +--- +description: Docker's use of Open Source +keywords: docker, opensource +title: Open source components and licensing +--- + +Docker for AWS and Azure Editions are built using open source software. + +Docker for AWS and Azure Editions distribute some components that are licensed under the GNU General Public License. You can download the source for these components [here](https://download.docker.com/opensource/License.tar.gz). + +The sources for qemu-img can be obtained [here](http://wiki.qemu-project.org/download/qemu-2.4.1.tar.bz2). The sources for the gettext and glib libraries that qemu-img requires were obtained from [Homebrew](https://brew.sh/) and may be retrieved using `brew install --build-from-source gettext glib`. \ No newline at end of file diff --git a/docker-for-aws/release-notes.md b/docker-for-aws/release-notes.md new file mode 100644 index 00000000000..64d581f4592 --- /dev/null +++ b/docker-for-aws/release-notes.md @@ -0,0 +1,164 @@ +--- +description: Release notes +keywords: aws, amazon, iaas, release +title: Docker for AWS Release Notes +--- + +## 1.13.0-1 +Release date: 1/18/2017 + +![Docker for AWS](https://s3.amazonaws.com/cloudformation-examples/cloudformation-launch-stack.png) + +### New +- Docker Engine upgraded to [Docker 1.13.0](https://github.com/docker/docker/blob/master/CHANGELOG.md) +- Change ELB health check from TCP to HTTP + +## 1.13.0-rc3-beta13 +Release date: 12/06/2016 + +### New +- Docker Engine upgraded to [Docker 1.13.0-rc3](https://github.com/docker/docker/blob/master/CHANGELOG.md) +- New option to decide if you want to send container logs to CloudWatch. (previously it was always on) +- SSH access has been added to the worker nodes +- The Docker daemon no longer listens on port 2375 +- Added a `swarm-exec` to execute a docker command across all of the swarm nodes. See [Executing Docker commands in all swarm nodes](deploy.md#execute-docker-commands-in-all-swarm-nodes) for more details. + +## 1.13.0-rc2-beta12 +Release date: 11/23/2016 + +### New +- Docker Engine upgraded to [Docker 1.13.0-rc2](https://github.com/docker/docker/blob/master/CHANGELOG.md) +- New option to cleanup unused resources on your Swarm using new Docker prune command available in 1.13 +- New option to pick the size of the ephemeral storage volume size on workers and managers +- New option to pick the disk type for the ephemeral storage on workers and managers +- Changed the Cloud Watch container log name from container "ID" to "Container Name-ID" + + +## 1.13.0-rc1-beta11 + +Release date: 11/17/2016 + +### New + +- Docker Engine upgraded to [Docker 1.13.0-rc1](https://github.com/docker/docker/blob/master/CHANGELOG.md) +- Changes to port 2375 access. For security reasons we locked down access to port 2375 in the following ways. + - You can't connect to port 2375 on managers from workers (changed) + - You can't connect to port 2375 on workers from other workers (changed) + - You can't connect to port 2375 on managers and workers from the public internet (no change) + - You can connect to port 2375 on workers from managers (no change) + - You can connect to port 2375 on managers from other managers (no change) +- Added changes to the way we manage swarm tokens to make it more secure. + +### Important +- Due to some changes with the IP ranges in the subnets in Beta10, it will not be possible to upgrade from beta 10 to beta 11. You will need to start from scratch using beta11. We are sorry for any issues this might cause. We needed to make the change, and it was decided it was best to do it now, while still in private beta to limit the impact. + + +## 1.12.3-beta10 + +Release date: 10/27/2016 + +### New + +- Docker Engine upgraded to Docker 1.12.3 +- Fixed the shell container that runs on the managers, to remove a ssh host key that was accidentally added to the image. +This could have led to a potential man in the middle (MITM) attack. The ssh host key is now generated on host startup, so that each host has its own key. +- The SSH ELB for SSH'ing into the managers has been removed because it is no longer possible to SSH into the managers without getting a security warning +- Each Manager can be SSH'd into by following our deploy [guide](../deploy) +- Added new region us-east-2 (Ohio) +- Fixed some bugs related to upgrading the swarm +- SSH keypair is now a required field in CloudFormation +- Fixed networking dependency issues in CloudFormation template that could result in a stack failure. + +## 1.12.2-beta9 + +Release date: 10/12/2016 + +### New + +- Docker Engine upgraded to Docker 1.12.2 +- Can better handle scaling swarm nodes down and back up again +- Container logs are now sent to CloudWatch +- Added a diagnostic command (docker-diagnose), to more easily send us diagnostic information in case of errors for troubleshooting +- Added sudo support to the shell container on manager nodes +- Change SQS default message timeout to 12 hours from 4 days +- Added support for region 'ap-south-1': Asia Pacific (Mumbai) + +### Deprecated: +- Port 2375 will be closed in next release. If you relay on this being open, please plan accordingly. + +## 1.12.2-RC3-beta8 + +Release date: 10/06/2016 + + * Docker Engine upgraded to 1.12.2-RC3 + +## 1.12.2-RC2-beta7 + +Release date: 10/04/2016 + + * Docker Engine upgraded to 1.12.2-RC2 + +## 1.12.2-RC1-beta6 + +Release date: 9/29/2016 + +### New + + * Docker Engine upgraded to 1.12.2-RC1 + + +## 1.12.1-beta5 + +Release date: 8/18/2016 + +### New + + * Docker Engine upgraded to 1.12.1 + +### Errata + + * Upgrading from previous Docker for AWS versions to 1.12.0-beta4 is not possible because of RC-incompatibilities between Docker 1.12.0 release candidate 5 and previous release candidates. + +## 1.12.0-beta4 + +Release date: 7/28/2016 + +### New + + * Docker Engine upgraded to 1.12.0 + +### Errata + + * Upgrading from previous Docker for AWS versions to 1.12.0-beta4 is not possible because of RC-incompatibilities between Docker 1.12.0 release candidate 5 and previous release candidates. + +## 1.12.0-rc5-beta3 + +(internal release) + +## 1.12.0-rc4-beta2 + +Release date: 7/13/2016 + +### New + + * Docker Engine upgraded to 1.12.0-rc4 + * EC2 instance tags + * Beta Docker for AWS sends anonymous analytics + +### Errata + * When upgrading, old Docker nodes may not be removed from the swarm and show up when running `docker node ls`. Marooned nodes can be removed with `docker node rm` + +## 1.12.0-rc3-beta1 + +### New + + * First release of Docker for AWS! + * CloudFormation based installer + * ELB integration for running public-facing services + * Swarm access with SSH + * Worker scaling using AWS ASG + +### Errata + + * To assist with debugging, the Docker Engine API is available internally in the AWS VPC on TCP port 2375. These ports cannot be accessed from outside the cluster, but could be used from within the cluster to obtain privileged access on other cluster nodes. In future releases, direct remote access to the Docker API will not be available. + * Likewise, swarm-mode is configured to auto-accept both manager and worker nodes inside the VPC. This policy will be changed to be more restrictive by default in the future. diff --git a/docker-for-aws/scaling.md b/docker-for-aws/scaling.md new file mode 100644 index 00000000000..cbc9604c3f2 --- /dev/null +++ b/docker-for-aws/scaling.md @@ -0,0 +1,33 @@ +--- +description: Scaling your stack +keywords: aws, amazon, iaas, tutorial +title: Modifying Docker install on AWS +--- + +## Scaling workers + +You can scale the worker count using the AWS Auto Scaling group. Docker will automatically join or remove new instances to the Swarm. + +There are currently two ways to scale your worker group. You can "update" your stack, and change the number of workers in the CloudFormation template parameters, or you can manually update the Auto Scaling group in the AWS console for EC2 auto scaling groups. + +Changing manager count live is _not_ currently supported. + +### AWS Console +Login to the AWS console, and go to the EC2 dashboard. On the lower left hand side select the "Auto Scaling Groups" link. + +Look for the Auto Scaling group with the name that looks like $STACK_NAME-NodeASG-* Where `$STACK_NAME` is the name of the stack you created when filling out the CloudFormation template for Docker for AWS. Once you find it, click the checkbox, next to the name. Then Click on the "Edit" button on the lower detail pane. + + + +Change the "Desired" field to the size of the worker pool that you would like, and hit "Save". + + + +This will take a few minutes and add the new workers to your swarm automatically. To lower the number of workers back down, you just need to update "Desired" again, with the lower number, and it will shrink the worker pool until it reaches the new size. + +### CloudFormation Update +Go to the CloudFormation management page, and click the checkbox next to the stack you want to update. Then Click on the action button at the top, and select "Update Stack". + + + +Pick "Use current template", and then click "Next". Fill out the same parameters you have specified before, but this time, change your worker count to the new count, click "Next". Answer the rest of the form questions. CloudFormation will show you a preview of the changes it will make. Review the changes and if they look good, click "Update". CloudFormation will change the worker pool size to the new value you specified. It will take a few minutes (longer for a larger increase / decrease of nodes), but when complete you will have your swarm with the new worker pool size. diff --git a/docker-for-aws/upgrade.md b/docker-for-aws/upgrade.md new file mode 100644 index 00000000000..a372dbbd929 --- /dev/null +++ b/docker-for-aws/upgrade.md @@ -0,0 +1,30 @@ +--- +description: Upgrading your stack +keywords: aws, amazon, iaas, tutorial +title: Docker for AWS Upgrades +--- + +To upgrade, apply a new version of the AWS Cloudformation template that powers Docker for Azure. Depending on changes in the next version, an upgrade involves: + + * Changing the AMI backing manager and worker nodes (the Docker engine ships in the AMI) + * Upgrading service containers + * Changing the resource setup in the VPC that hosts Docker for AWS + +## Prerequisites + + * We recommend only attempting upgrades of swarms with at least 3 managers. A 1-manager swarm may not be able to maintain quorum during the upgrade + * You can only upgrade one version at a time. Skipping a version during an upgrade is not supported. Downgrades are not tested. + +## Upgrading + +New releases are announced on [Release Notes](release-notes.md) page. + +To initiate an update, use either the AWS Console of the AWS cli to initiate a stack update. Use the S3 template URL for the new release and complete the update wizard. This will initiate a rolling upgrade of the Docker swarm, and service state will be maintained during and after the upgrade. Appropriately scaled services should not experience downtime during an upgrade. + +![Upgrade in AWS console](img/cloudformation_update.png) + +Note that single containers started (for example) with `docker run -d` are **not** preserved during an upgrade. This is because the're not Docker Swarm objects, but are known only to the individual Docker engines. + +## Changing instance sizes and other template parameters + +In addition to upgrading Docker for AWS from one version to the next you can also use the AWS Update Stack feature to change template parameters such as worker count and instance type. Changing manager count is **not** supported. diff --git a/docker-for-azure/deploy.md b/docker-for-azure/deploy.md new file mode 100644 index 00000000000..6e50a19713e --- /dev/null +++ b/docker-for-azure/deploy.md @@ -0,0 +1,178 @@ +--- +description: Deploying Apps on Docker for Azure +keywords: azure, microsoft, iaas, deploy +title: Deploy your app on Docker for Azure +--- + +## Connecting to your manager nodes + +This section will walk you through connecting to your installation and deploying +applications. Instructions are included for both AWS and Azure, so be sure to +follow the instructions for the cloud provider of your choice in each section. + +First, you will obtain the public IP address for a manager node. Any manager +node can be used for administrating the swarm. + +##### Manager Public IP and SSH ports on Azure + +Once you've deployed Docker on Azure, go to the "Outputs" section of the +resource group deployment. + +![](img/sshtargets.png) + +The "SSH Targets" output is a URL to a blade that describes the IP address +(common across all the manager nodes) and the SSH port (unique for each manager +node) that you can use to log in to each manager node. + +![](img/managers.png) + +## Connecting via SSH + +#### Manager nodes + +Obtain the public IP and/or port for the manager node as instructed above and +using the provided SSH key to begin administrating your swarm and the unique port associated with a manager: + + $ ssh -i -p docker@ + Welcome to Docker! + +Once you are logged into the container you can run Docker commands on the swarm: + + $ docker info + $ docker node ls + +You can also tunnel the Docker socket over SSH to remotely run commands on the cluster (requires [OpenSSH 6.7](https://lwn.net/Articles/609321/) or later): + + $ ssh -NL localhost:2374:/var/run/docker.sock docker@ & + $ docker -H localhost:2374 info + +If you don't want to pass `-H` when using the tunnel, you can set the `DOCKER_HOST` environment variable to point to the localhost tunnel opening. + +### Worker nodes + +As of Beta 13, the worker nodes also have SSH enabled when connecting from +manager nodes. SSH access is not possible to the worker nodes from the public +Internet. To access the worker nodes, you will need to first connect to a +manager node (see above). + +On the manager node you can then `ssh` to the worker node, over the private +network. Make sure you have SSH agent forwarding enabled (see below). If you run +the `docker node ls` command you can see the full list of nodes in your swarm. +You can then `ssh docker@` to get access to that node. + +##### Azure + +Prepend the domain from `/etc/resolv.conf` to the returned `HOSTNAME` in +`docker node ls`. + +``` +$ docker node ls +ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS +e5grdng229oazh79252fpbgcc swarm-worker000000 Ready Active +... + +$ cat /etc/resolv.conf +# Generated by dhcpcd from eth0.dhcp +# /etc/resolv.conf.head can replace this line +domain 2ct34bzag3fejkndbh0ypx4nnb.gx.internal.cloudapp.net +nameserver 168.63.129.16 +# /etc/resolv.conf.tail can replace this line + +$ ssh docker@swarm-worker000000.2ct34bzag3fejkndbh0ypx4nnb.gx.internal.cloudapp.net +``` + +##### Using SSH agent forwarding + +SSH agent forwarding allows you to forward along your ssh keys when connecting from one node to another. This eliminates the need for installing your private key on all nodes you might want to connect from. + +You can use this feature to SSH into worker nodes from a manager node without +installing keys directly on the manager. + +If your haven't added your ssh key to the `ssh-agent` you will also need to do this first. + +To see the keys in the agent already, run: + +``` +$ ssh-add -L +``` + +If you don't see your key, add it like this. + +``` +$ ssh-add ~/.ssh/your_key +``` + +On Mac OS X, the `ssh-agent` will forget this key, once it gets restarted. But you can import your SSH key into your Keychain like this. This will have your key survive restarts. + +``` +$ ssh-add -K ~/.ssh/your_key +``` + +You can then enable SSH forwarding per-session using the `-A` flag for the ssh command. + +Connecting to the Manager. +``` +$ ssh -A docker@ +``` + +To always have it turned on for a given host, you can edit your ssh config file +(`/etc/ssh_config`, `~/.ssh/config`, etc) to add the `ForwardAgent yes` option. + +Example configuration: + +``` +Host manager0 + HostName + ForwardAgent yes +``` + +To SSH in to the manager with the above settings: + +``` +$ ssh docker@manager0 +``` + +## Running apps + +You can now start creating containers and services. + + $ docker run hello-world + +You can run websites too. Ports exposed with `-p` are automatically exposed through the platform load balancer: + + $ docker service create --name nginx -p 80:80 nginx + +Once up, find the `DefaultDNSTarget` output in either the AWS or Azure portals to access the site. + +### Execute docker commands in all swarm nodes + +There are cases (such as installing a volume plugin) wherein a docker command may need to be executed in all the nodes across the cluster. You can use the `swarm-exec` tool to achieve that. + +Usage : `swarm-exec {Docker command}` + +The following will install a test plugin in all the nodes in the cluster + +Example : `swarm-exec docker plugin install --grant-all-permissions mavenugo/test-docker-netplugin` + +This tool internally makes use of docker global-mode service that runs a task on each of the nodes in the cluster. This task in turn executes your docker command. The global-mode service also guarantees that when a new node is added to the cluster or during upgrades, a new task is executed on that node and hence the docker command will be automatically executed. + +### Distributed Application Bundles + +To deploy complex multi-container apps, you can use [distributed application bundles](https://github.com/docker/docker/blob/master/experimental/docker-stacks-and-bundles.md). You can either run `docker deploy` to deploy a bundle on your machine over an SSH tunnel, or copy the bundle (for example using `scp`) to a manager node, SSH into the manager and then run `docker deploy` (if you have multiple managers, you have to ensure that your session is on one that has the bundle file). + +A good sample app to test application bundles is the [Docker voting app](https://github.com/docker/example-voting-app). + +By default, apps deployed with bundles do not have ports publicly exposed. Update port mappings for services, and Docker will automatically wire up the underlying platform load balancers: + + docker service update --publish-add 80:80 + +### Images in private repos + +To create swarm services using images in private repos, first make sure you're authenticated and have access to the private repo, then create the service with the `--with-registry-auth` flag (the example below assumes you're using Docker Hub): + + docker login + ... + docker service create --with-registry-auth user/private-repo + ... + +This will cause swarm to cache and use the cached registry credentials when creating containers for the service. diff --git a/docker-for-azure/faqs.md b/docker-for-azure/faqs.md new file mode 100644 index 00000000000..8ff759a2bfe --- /dev/null +++ b/docker-for-azure/faqs.md @@ -0,0 +1,52 @@ +--- +description: Frequently asked questions +keywords: azure faqs +title: Docker for Azure Frequently asked questions (FAQ) +--- + +## Can I use my own VHD? +No, at this time we only support the default Docker for Azure VHD. + +## Can I specify the type of Storage Account I use for my VM instances? + +Not at this time, but it is on our roadmap for future releases. + +## Which Azure regions will Docker for Azure work with. + +Docker for Azure should work with all supported Azure Marketplace regions. + +## Where are my container logs? + +All container logs are aggregated within the `xxxxlog` storage account. + +## I have a problem/bug where do I report it? + +Send an email to or post to the [Docker for Azure](https://github.com/docker/for-azure) GitHub repositories. + +In Azure, if your resource group is misbehaving, please run the following diagnostic tool from one of the managers - this will collect your docker logs and send them to Docker: + +``` +$ docker-diagnose +OK hostname=manager1 +OK hostname=worker1 +OK hostname=worker2 +Done requesting diagnostics. +Your diagnostics session ID is 1234567890-xxxxxxxxxxxxxx +Please provide this session ID to the maintainer debugging your issue. +``` + +_Please note that your output will be slightly different from the above, depending on your swarm configuration_ + +## Analytics + +Docker for Azure sends anonymized minimal analytics to Docker (heartbeat). These analytics are used to monitor adoption and are critical to improve Docker for Azure. + +## How to run administrative commands? + +By default when you SSH into a manager, you will be logged in as the regular username: `docker` - It is possible however to run commands with elevated privileges by using `sudo`. +For example to ping one of the nodes, after finding its IP via the Azure/AWS portal (e.g. 10.0.0.4), you could run: +``` +$ sudo ping 10.0.0.4 +``` + +Note that access to Docker for AWS and Azure happens through a shell container that itself runs on Docker. diff --git a/docker-for-azure/img/managers.png b/docker-for-azure/img/managers.png new file mode 100644 index 00000000000..f4c68de91bc Binary files /dev/null and b/docker-for-azure/img/managers.png differ diff --git a/docker-for-azure/img/sshtargets.png b/docker-for-azure/img/sshtargets.png new file mode 100644 index 00000000000..d1f94245654 Binary files /dev/null and b/docker-for-azure/img/sshtargets.png differ diff --git a/docker-for-azure/img/subscription.png b/docker-for-azure/img/subscription.png new file mode 100644 index 00000000000..a7cfeba19d7 Binary files /dev/null and b/docker-for-azure/img/subscription.png differ diff --git a/docker-for-azure/index.md b/docker-for-azure/index.md new file mode 100644 index 00000000000..f1adaba528b --- /dev/null +++ b/docker-for-azure/index.md @@ -0,0 +1,78 @@ +--- +description: Setup & Prerequisites +keywords: azure, microsoft, iaas, tutorial +title: Docker for Azure Setup & Prerequisites +redirect_from: +- /engine/installation/azure/ +--- + +## Prerequisites + +- Access to an Azure account with admin privileges +- SSH key that you want to use when accessing your completed Docker install on Azure + +## Configuration + +Docker for Azure is installed with an Azure template that configures Docker in swarm-mode, running on VMs backed by a custom VHD. There are two ways you can deploy Docker for Azure. You can use the Azure Portal (browser based), or use the Azure CLI. Both have the following configuration options. + +### Configuration options + +#### Manager Count +The number of Managers in your swarm. You can pick either 1, 3 or 5 managers. We only recommend 1 manager for testing and dev setups. There are no failover guarantees with 1 manager — if the single manager fails the swarm will go down as well. Additionally, upgrading single-manager swarms is not currently guaranteed to succeed. + +We recommend at least 3 managers, and if you have a lot of workers, you should pick 5 managers. + +#### Manager VM size +The VM type for your manager nodes. The larger your swarm, the larger the VM size you should use. + +#### Worker VM size +The VM type for your worker nodes. + +#### Worker Count +The number of workers you want in your swarm (1-100). + +### Service Principal + +To set up Docker for Azure, a [Service Principal](https://azure.microsoft.com/en-us/documentation/articles/active-directory-application-objects/) is required. Docker for Azure uses the principal to operate Azure APIs as you scale up and down or deploy apps on your swarm. Docker provides a containerized helper-script to help create the Service Principal - `docker4x/create-sp-azure`. + +Ensure the latest version of `docker4x/create-sp-azure` has been downloaded to your local environment: `docker pull docker4x/create-sp-azure:latest` + +Then run the sp-azure script with the following arguments: + +```bash +$ docker run -ti docker4x/create-sp-azure sp-name rg-name rg-region + +... +Your access credentials ============================= +AD App ID: +AD App Secret: +AD Tenant ID: +``` + +If you have multiple Azure subscriptions, make sure you're creating the Service Principal with subscription ID that you shared with Docker when signing up for the beta. + +* `sp-name` is the name of the authentication app that the script creates with Azure. The name is not important, simply choose something you'll recognize in the Azure portal. Example: `sp1`. +* `rg-name` is the name of the new resource group that will be created to deploy the resources (VMs, networks, storage accounts) associated with the swarm. The Service Principal will be scoped to this resource group. Example: `swarm1`. +* `rg-region` is the name of Azure's region/location where the resource group will be created. This needs to be one of the regions supported by Azure e.g. `westus`, `centralus`, `eastus`. + +While `rg-name` and `rg-region` are optional, it's highly recommended that you create the resource group up front and scope the service principal to that specific resource group. + +If the script fails, it's typically because your Azure user account doesn't have sufficient privileges. Contact your Azure administrator. + +When setting up the ARM template, you will be prompted for the App ID (a UUID) and the app secret. If you specified the resource group name and location parameters, please choose the option to deploy the template into an existing resource group and pass the same name and region/location that were passed above to create-sp-azure. + +### SSH Key + +Docker for Azure uses SSH for accessing the Docker swarm once it's deployed. During setup, you will be prompted for a SSH public key. If you don't have a SSH key, you can generate one with `puttygen` or `ssh-keygen`. You only need the public key component to set up Docker for Azure. Here's how to get the public key from a .pem file: + + ssh-keygen -y -f my-key.pem + +### Installing with the CLI + +You can also invoke the Docker for Azure template from the Azure CLI: + +Here is an example of how to use the CLI. Make sure you populate all of the parameters and their values: + +```bash +$ azure group create --name DockerGroup --location centralus --deployment-name docker.template --template-file +``` diff --git a/docker-for-azure/opensource.md b/docker-for-azure/opensource.md new file mode 100644 index 00000000000..b6502ec1be6 --- /dev/null +++ b/docker-for-azure/opensource.md @@ -0,0 +1,11 @@ +--- +description: Docker's use of Open Source +keywords: docker, opensource +title: Open source components and licensing +--- + +Docker for AWS and Azure Editions are built using open source software. + +Docker for AWS and Azure Editions distribute some components that are licensed under the GNU General Public License. You can download the source for these components [here](https://download.docker.com/opensource/License.tar.gz). + +The sources for qemu-img can be obtained [here](http://wiki.qemu-project.org/download/qemu-2.4.1.tar.bz2). The sources for the gettext and glib libraries that qemu-img requires were obtained from [Homebrew](https://brew.sh/) and may be retrieved using `brew install --build-from-source gettext glib`. \ No newline at end of file diff --git a/docker-for-azure/release-notes.md b/docker-for-azure/release-notes.md new file mode 100644 index 00000000000..98907397763 --- /dev/null +++ b/docker-for-azure/release-notes.md @@ -0,0 +1,77 @@ +--- +description: Release notes +keywords: azure, microsoft, iaas, tutorial +title: Docker for Azure Release Notes +--- + +## 1.13.0-1 +Release date: 1/18/2017 + +![Docker for Azure](http://azuredeploy.net/deploybutton.png) + +### New + +- Docker Engine upgraded to [Docker 1.13.0](https://github.com/docker/docker/blob/master/CHANGELOG.md) +- Writing to home directory no longer requires `sudo` +- Added support to perform fine grained monitoring of health status of swarm nodes, destroy unhealthy nodes and create replacement nodes +- Added support to scale the number of nodes in manager and worker vm scale sets through Azure UI/CLI for managing the number of nodes in a scale set +- Improved logging and remote diagnostics mechanisms for system containers + +## 1.13.0-beta12 + +Release date: 12/09/2016 + +### New + +- Docker Engine upgraded to [Docker 1.13.0-rc2](https://github.com/docker/docker/blob/master/CHANGELOG.md) +- SSH access has been added to the worker nodes +- The Docker daemon no longer listens on port 2375 +- Added a `swarm-exec` to execute a docker command across all of the swarm nodes. See [Executing Docker commands in all swarm nodes](deploy.md#execute-docker-commands-in-all-swarm-nodes) for more details. + +## 1.12.3-beta10 + +Release date: 11/08/2016 + +### New + +- Docker Engine upgraded to Docker 1.12.3 +- Fixed the shell container that runs on the managers, to remove a ssh host key that was accidentally added to the image. +This could have led to a potential man in the middle (MITM) attack. The ssh host key is now generated on host startup, so that each host has its own key. +- The SSH ELB for SSH'ing into the managers has been removed because it is no longer possible to SSH into the managers without getting a security warning +- Multiple managers can be deployed +- All container logs can be found in the `xxxxlog` storage account +- You can connect to each manager using SSH by following our deploy [guide](deploy.md) + +## 1.12.2-beta9 + +Release date: 10/17/2016 + +### New + +- Docker Engine upgraded to Docker 1.12.2 +- Manager behind its own LB +- Added sudo support to the shell container on manager nodes + +## 1.12.1-beta5 + +Release date: 8/19/2016 + +### New + + * Docker Engine upgraded to 1.12.1 + +### Errata + + * To assist with debugging, the Docker Engine API is available internally in the Azure VPC on TCP port 2375. These ports cannot be accessed from outside the cluster, but could be used from within the cluster to obtain privileged access on other cluster nodes. In future releases, direct remote access to the Docker API will not be available. + +## 1.12.0-beta4 + +Release date: 8/9/2016 + +### New + + * First release + +### Errata + + * To assist with debugging, the Docker Engine API is available internally in the Azure VPC on TCP port 2375. These ports cannot be accessed from outside the cluster, but could be used from within the cluster to obtain privileged access on other cluster nodes. In future releases, direct remote access to the Docker API will not be available. diff --git a/docker-for-azure/upgrade.md b/docker-for-azure/upgrade.md new file mode 100644 index 00000000000..1cb1c324334 --- /dev/null +++ b/docker-for-azure/upgrade.md @@ -0,0 +1,45 @@ +--- +description: Upgrading your stack +keywords: azure, microsoft, iaas, tutorial +title: Docker for Azure Upgrades +--- + +Docker for Azure supports upgrading from one version to the next. To upgrade, apply a new version of the Azure ARM template that powers Docker for Azure. An upgrade of Docker for Azure involves: + + * Upgrading the VHD backing the manager and worker nodes (the Docker engine ships in the VHD) + * Upgrading service containers in the manager and worker nodes + * Changing any other resources in the Azure Resource Group that hosts Docker for Azure + +## Prerequisites + + * We recommend only attempting upgrades of swarms with at least 3 managers. A 1-manager swarm may not be able to maintain quorum during the upgrade + * You can only upgrade one version at a time. Skipping a version during an upgrade is not supported. Downgrades are not tested. + * Ensure there are no nodes in the swarm in "down" status. If there are such nodes in the swarm, please remove them from the swarm using `docker node rm node-id` + +## Upgrading + +New releases are announced on the [Release Notes](release-notes.md) page. + +To initiate an upgrade, SSH into a manager node and issue the following command: + + upgrade.sh url_to_template.json + +This will initiate a rolling upgrade of the Docker swarm and service state will be maintained during and after the upgrade. Appropriately scaled services should not experience downtime during an upgrade. Note that single containers started (for example) with `docker run -d` are **not** preserved during an upgrade. This is because they are not Docker Swarm services but are known only to the individual Docker engines. + +## Monitoring + +The upgrade process may take several minutes to complete. You can follow the progress of the upgrade either from the output of the upgrade command or from the Azure UI by going to the Azure UI blades corresponding to the Virtual Machine Scale Sets hosting your manager and worker nodes. The URL for the Azure UI blades corresponding to your subscription and resource group is printed in the output of upgrade command above. They follow the following format: + +https://portal.azure.com/#resource/subscriptions/[subscription-id]/resourceGroups/[resource-group]/providers/Microsoft.Compute/virtualMachineScaleSets/swarm-manager-vmss/instances + +https://portal.azure.com/#resource/subscriptions/[subscription-id]/resourceGroups/[resource-group]/providers/Microsoft.Compute/virtualMachineScaleSets/swarm-worker-vmss/instances + +Note that in the last stage of the upgrade, the manager node where the upgrade is initiated from needs to be shut down, upgraded and reimaged. During this time, you won't be able to access the node and if you were logged in, your SSH connection will drop. + +## Post Upgrade + +After the upgrade, the IP address and the port needed to SSH into the manager nodes do not change. However, the host identity of the manager nodes does change as the VMs get reimaged. So when you try to SSH in after a successful upgrade, your SSH client may suspect a Man-In-The-Middle attack. You will need to delete the old entries in your SSH client's store [typically `~/.ssh/known_hosts`] for new SSH connections to succeed to the upgraded manager nodes. + +## Changing instance sizes and other template parameters + +This is not supported for Azure at the moment. diff --git a/docker-for-mac/faqs.md b/docker-for-mac/faqs.md index 3e5eb42effb..811f64b06e7 100644 --- a/docker-for-mac/faqs.md +++ b/docker-for-mac/faqs.md @@ -84,11 +84,11 @@ experiment a multi-node swarm. Check out the tutorial at [Get started with swarm ### How do I connect to the remote Docker Engine API? -You might need to provide the location of the remote API for Docker clients and development tools. +You might need to provide the location of the Engine API for Docker clients and development tools. On Docker for Mac, clients can connect to the Docker Engine through a Unix socket: `unix:///var/run/docker.sock`. -See also [Docker Remote API](/engine/reference/api/docker_remote_api.md) and Docker for Mac forums topic [Using pycharm Docker plugin..](https://forums.docker.com/t/using-pycharm-docker-plugin-with-docker-beta/8617). +See also [Docker Engine API](/engine/reference/api/docker_remote_api.md) and Docker for Mac forums topic [Using pycharm Docker plugin..](https://forums.docker.com/t/using-pycharm-docker-plugin-with-docker-beta/8617). If you are working with applications like [Apache Maven](https://maven.apache.org/) that expect settings for `DOCKER_HOST` and `DOCKER_CERT_PATH` environment variables, specify these to connect to Docker instances through Unix sockets. For example: diff --git a/docker-for-mac/index.md b/docker-for-mac/index.md index e2d0288a5e0..420ad00bd50 100644 --- a/docker-for-mac/index.md +++ b/docker-for-mac/index.md @@ -8,6 +8,7 @@ redirect_from: - /mac/started/ - /docker-for-mac/started/ - /installation/mac/ +- /engine/installation/mac/ title: Get started with Docker for Mac --- diff --git a/docker-for-windows/faqs.md b/docker-for-windows/faqs.md index cc7684af6ca..44073e9100e 100644 --- a/docker-for-windows/faqs.md +++ b/docker-for-windows/faqs.md @@ -103,13 +103,13 @@ swarm mode](/engine/swarm/swarm-tutorial/index.md). ### How do I connect to the remote Docker Engine API? -You might need to provide the location of the remote API for Docker clients and development tools. +You might need to provide the location of the Engine API for Docker clients and development tools. On Docker for Windows, clients can connect to the Docker Engine through a **named pipe**: `npipe:////./pipe/docker_engine`, or **TCP socket** at this URL: `http://localhost:2375`. This sets `DOCKER_HOST` and `DOCKER_CERT_PATH` environment variables to the given values (for the named pipe or TCP socket, whichever you use). -See also [Docker Remote API](/engine/reference/api/docker_remote_api.md) and the Docker for Windows forums topic [How to find the remote API](https://forums.docker.com/t/how-to-find-the-remote-api/20988). +See also [Docker Engine API](/engine/reference/api/) and the Docker for Windows forums topic [How to find the remote API](https://forums.docker.com/t/how-to-find-the-remote-api/20988). ### Why doesn't `nodemon` pick up file changes in a container mounted on a shared drive? diff --git a/docker-for-windows/index.md b/docker-for-windows/index.md index 5a8b0acbadb..3ef834f1836 100644 --- a/docker-for-windows/index.md +++ b/docker-for-windows/index.md @@ -8,6 +8,7 @@ redirect_from: - /windows/started/ - /docker-for-windows/started/ - /installation/windows/ +- /engine/installation/windows/ title: Get started with Docker for Windows --- Welcome to Docker for Windows! diff --git a/docker-id/api-reference.md b/docker-id/api-reference.md new file mode 100644 index 00000000000..6fd08d4a7b6 --- /dev/null +++ b/docker-id/api-reference.md @@ -0,0 +1,277 @@ +--- +title: "docker.io accounts API" +description: "API Documentation for docker.io accounts." +keywords: "API, Docker, accounts, REST, documentation" +redirect_from: + - /reference/api/docker_io_accounts_api/ + - /engine/reference/api/docker_io_accounts_api/ +--- + +# Docker ID accounts API + +The accounts API is an API for accessing and updating Docker ID accounts. + +## Get a single user + +`GET /api/v1.1/users/:username/` + +Get profile info for the specified user. + +Parameters: + +- **username** – username of the user whose profile info is being + requested. + +Request Headers: + +- **Authorization** – required authentication credentials of + either type HTTP Basic or OAuth Bearer Token. + +Status Codes: + +- **200** – success, user data returned. +- **401** – authentication error. +- **403** – permission error, authenticated user must be the user + whose data is being requested, OAuth access tokens must have + `profile_read` scope. +- **404** – the specified username does not exist. + +**Example request**: + + GET /api/v1.1/users/janedoe/ HTTP/1.1 + Host: www.docker.io + Accept: application/json + Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ= + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/json + + { + "id": 2, + "username": "janedoe", + "url": "https://www.docker.io/api/v1.1/users/janedoe/", + "date_joined": "2014-02-12T17:58:01.431312Z", + "type": "User", + "full_name": "Jane Doe", + "location": "San Francisco, CA", + "company": "Success, Inc.", + "profile_url": "https://docker.io/", + "gravatar_url": "https://secure.gravatar.com/avatar/0212b397124be4acd4e7dea9aa357.jpg?s=80&r=g&d=mm" + "email": "jane.doe@example.com", + "is_active": true + } + +## Update a single user + +`PATCH /api/v1.1/users/:username/` + +Update profile info for the specified user. + +Parameters: + +- **username** – username of the user whose profile info is being + updated. + +Json Parameters: + +- **full_name** (*string*) – (optional) the new name of the user. +- **location** (*string*) – (optional) the new location. +- **company** (*string*) – (optional) the new company of the user. +- **profile_url** (*string*) – (optional) the new profile url. +- **gravatar_email** (*string*) – (optional) the new Gravatar + email address. + +Request Headers: + +- **Authorization** – required authentication credentials of + either type HTTP Basic or OAuth Bearer Token. +- **Content-Type** – MIME Type of post data. JSON, url-encoded + form data, etc. + +Status Codes: + +- **200** – success, user data updated. +- **400** – post data validation error. +- **401** – authentication error. +- **403** – permission error, authenticated user must be the user + whose data is being updated, OAuth access tokens must have + `profile_write` scope. +- **404** – the specified username does not exist. + +**Example request**: + + PATCH /api/v1.1/users/janedoe/ HTTP/1.1 + Host: www.docker.io + Accept: application/json + Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ= + + { + "location": "Private Island", + "profile_url": "http://janedoe.com/", + "company": "Retired", + } + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/json + + { + "id": 2, + "username": "janedoe", + "url": "https://www.docker.io/api/v1.1/users/janedoe/", + "date_joined": "2014-02-12T17:58:01.431312Z", + "type": "User", + "full_name": "Jane Doe", + "location": "Private Island", + "company": "Retired", + "profile_url": "http://janedoe.com/", + "gravatar_url": "https://secure.gravatar.com/avatar/0212b397124be4acd4e7dea9aa357.jpg?s=80&r=g&d=mm" + "email": "jane.doe@example.com", + "is_active": true + } + +## List email addresses for a user + +`GET /api/v1.1/users/:username/emails/` + +List email info for the specified user. + +Parameters: + +- **username** – username of the user whose profile info is being + updated. + +Request Headers: + +- **Authorization** – required authentication credentials of + either type HTTP Basic or OAuth Bearer Token + +Status Codes: + +- **200** – success, user data updated. +- **401** – authentication error. +- **403** – permission error, authenticated user must be the user + whose data is being requested, OAuth access tokens must have + `email_read` scope. +- **404** – the specified username does not exist. + +**Example request**: + + GET /api/v1.1/users/janedoe/emails/ HTTP/1.1 + Host: www.docker.io + Accept: application/json + Authorization: Bearer zAy0BxC1wDv2EuF3tGs4HrI6qJp6KoL7nM + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/json + + [ + { + "email": "jane.doe@example.com", + "verified": true, + "primary": true + } + ] + +## Add email address for a user + +`POST /api/v1.1/users/:username/emails/` + +Add a new email address to the specified user's account. The email +address must be verified separately, a confirmation email is not +automatically sent. + +Json Parameters: + +- **email** (*string*) – email address to be added. + +Request Headers: + +- **Authorization** – required authentication credentials of + either type HTTP Basic or OAuth Bearer Token. +- **Content-Type** – MIME Type of post data. JSON, url-encoded + form data, etc. + +Status Codes: + +- **201** – success, new email added. +- **400** – data validation error. +- **401** – authentication error. +- **403** – permission error, authenticated user must be the user + whose data is being requested, OAuth access tokens must have + `email_write` scope. +- **404** – the specified username does not exist. + +**Example request**: + + POST /api/v1.1/users/janedoe/emails/ HTTP/1.1 + Host: www.docker.io + Accept: application/json + Content-Type: application/json + Authorization: Bearer zAy0BxC1wDv2EuF3tGs4HrI6qJp6KoL7nM + + { + "email": "jane.doe+other@example.com" + } + +**Example response**: + + HTTP/1.1 201 Created + Content-Type: application/json + + { + "email": "jane.doe+other@example.com", + "verified": false, + "primary": false + } + +## Delete email address for a user + +`DELETE /api/v1.1/users/:username/emails/` + +Delete an email address from the specified user's account. You +cannot delete a user's primary email address. + +Json Parameters: + +- **email** (*string*) – email address to be deleted. + +Request Headers: + +- **Authorization** – required authentication credentials of + either type HTTP Basic or OAuth Bearer Token. +- **Content-Type** – MIME Type of post data. JSON, url-encoded + form data, etc. + +Status Codes: + +- **204** – success, email address removed. +- **400** – validation error. +- **401** – authentication error. +- **403** – permission error, authenticated user must be the user + whose data is being requested, OAuth access tokens must have + `email_write` scope. +- **404** – the specified username or email address does not + exist. + +**Example request**: + + DELETE /api/v1.1/users/janedoe/emails/ HTTP/1.1 + Host: www.docker.io + Accept: application/json + Content-Type: application/json + Authorization: Bearer zAy0BxC1wDv2EuF3tGs4HrI6qJp6KoL7nM + + { + "email": "jane.doe+other@example.com" + } + +**Example response**: + + HTTP/1.1 204 NO CONTENT + Content-Length: 0 diff --git a/engine/admin/ambassador_pattern_linking.md b/engine/admin/ambassador_pattern_linking.md index 172eac676a7..72b55bdeb0a 100644 --- a/engine/admin/ambassador_pattern_linking.md +++ b/engine/admin/ambassador_pattern_linking.md @@ -150,4 +150,4 @@ case `192.168.1.52:6379`. apk add socat && \ rm -r /var/cache/ - CMD env | grep _TCP= | (sed 's/.*_PORT_\([0-9]*\)_TCP=tcp:\/\/\(.*\):\(.*\)/socat -t 100000000 TCP4-LISTEN:\1,fork,reuseaddr TCP4:\2:\3 \&/' && echo wait) | sh \ No newline at end of file + CMD env | grep _TCP= | (sed 's/.*_PORT_\([0-9]*\)_TCP=tcp:\/\/\(.*\):\(.*\)/socat -t 100000000 TCP4-LISTEN:\1,fork,reuseaddr TCP4:\2:\3 \&/' && echo wait) | sh diff --git a/engine/admin/b2d_volume_resize.md b/engine/admin/b2d_volume_resize.md index da7889797d4..d7724b9a700 100644 --- a/engine/admin/b2d_volume_resize.md +++ b/engine/admin/b2d_volume_resize.md @@ -158,4 +158,4 @@ VirtualBox. -You're done! \ No newline at end of file +You're done! diff --git a/engine/admin/chef.md b/engine/admin/chef.md index 707a9b49072..770936cc081 100644 --- a/engine/admin/chef.md +++ b/engine/admin/chef.md @@ -67,4 +67,4 @@ docker_container 'my_nginx' do env 'FOO=bar' subscribes :redeploy, 'docker_image[nginx]' end -``` \ No newline at end of file +``` diff --git a/engine/admin/dsc.md b/engine/admin/dsc.md index f35f946f650..2b75ee72a4a 100644 --- a/engine/admin/dsc.md +++ b/engine/admin/dsc.md @@ -166,4 +166,4 @@ container: ```powershell $containerProps = @{Name="web"; Image="node:latest"; Port="80:80"; ` Env="PORT=80"; Link="db:db"; Command="grunt"} -``` \ No newline at end of file +``` diff --git a/engine/admin/formatting.md b/engine/admin/formatting.md index 0378cc74b71..e637355359a 100644 --- a/engine/admin/formatting.md +++ b/engine/admin/formatting.md @@ -13,6 +13,7 @@ list of elements they support in their templates: - [Docker Log Tag formatting](logging/log_tags.md) - [Docker Network Inspect formatting](../reference/commandline/network_inspect.md) - [Docker PS formatting](../reference/commandline/ps.md#formatting) +- [Docker Stats formatting](../reference/commandline/stats.md#formatting) - [Docker Volume Inspect formatting](../reference/commandline/volume_inspect.md) - [Docker Version formatting](../reference/commandline/version.md#examples) @@ -21,51 +22,51 @@ list of elements they support in their templates: Docker provides a set of basic functions to manipulate template elements. This is the complete list of the available functions with examples: -### Join +### `join` -Join concatenates a list of strings to create a single string. +`join` concatenates a list of strings to create a single string. It puts a separator between each element in the list. {% raw %} $ docker ps --format '{{join .Names " or "}}' {% endraw %} -### Json +### `json` -Json encodes an element as a json string. +`json` encodes an element as a json string. {% raw %} $ docker inspect --format '{{json .Mounts}}' container {% endraw %} -### Lower +### `lower` -Lower turns a string into its lower case representation. +`lower` transforms a string into its lowercase representation. {% raw %} $ docker inspect --format "{{lower .Name}}" container {% endraw %} -### Split +### `split` -Split slices a string into a list of strings separated by a separator. +`split` slices a string into a list of strings separated by a separator. {% raw %} $ docker inspect --format '{{split (join .Names "/") "/"}}' container - {% endraw %} + {% endraw %} -### Title +### `title` -Title capitalizes a string. +`title` capitalizes the first character of a string. {% raw %} $ docker inspect --format "{{title .Name}}" container {% endraw %} -### Upper +### `upper` -Upper turns a string into its upper case representation. +`upper` transforms a string into its uppercase representation. {% raw %} $ docker inspect --format "{{upper .Name}}" container - {% endraw %} \ No newline at end of file + {% endraw %} diff --git a/engine/admin/logging/awslogs.md b/engine/admin/logging/awslogs.md index 488585ed9ef..d88add4411f 100644 --- a/engine/admin/logging/awslogs.md +++ b/engine/admin/logging/awslogs.md @@ -58,6 +58,16 @@ specified, the container ID is used as the log stream. > at a time. Using the same log stream for multiple containers concurrently > can cause reduced logging performance. +### tag + +Specify `tag` as an alternative to the `awslogs-stream` option. `tag` interprets template markup (e.g., `{% raw %}{{.ID}}{% endraw %}`, `{% raw %}{{.FullID}}{% endraw %}` or `{% raw %}{{.Name}}{% endraw %}` `{% raw %}docker.{{.ID}}{% endraw %}`). +See the [tag option documentation](log_tags.md) for details on all supported template substitutions. + +When both `awslogs-stream` and `tag` are specified, the value supplied for `awslogs-stream` will override the template specified with `tag`. + +If not specified, the container ID is used as the log stream. + + ## Credentials You must provide AWS credentials to the Docker daemon to use the `awslogs` @@ -82,4 +92,4 @@ and `logs:PutLogEvents` actions, as shown in the following example. "Resource": "*" } ] - } \ No newline at end of file + } diff --git a/engine/admin/logging/etwlogs.md b/engine/admin/logging/etwlogs.md index 6d222429285..74868b23619 100644 --- a/engine/admin/logging/etwlogs.md +++ b/engine/admin/logging/etwlogs.md @@ -1,8 +1,6 @@ --- description: Describes how to use the etwlogs logging driver. keywords: ETW, docker, logging, driver -title: ETW logging driver ---- The ETW logging driver forwards container logs as ETW events. ETW stands for Event Tracing in Windows, and is the common framework @@ -58,4 +56,4 @@ context information. Note that the time stamp is also available within the ETW e **Note** This ETW provider emits only a message string, and not a specially structured ETW event. Therefore, it is not required to register a manifest file -with the system to read and interpret its ETW events. \ No newline at end of file +with the system to read and interpret its ETW events. diff --git a/engine/admin/logging/fluentd.md b/engine/admin/logging/fluentd.md index b2e756cbde1..83db0ba72b8 100644 --- a/engine/admin/logging/fluentd.md +++ b/engine/admin/logging/fluentd.md @@ -28,10 +28,8 @@ The `docker logs` command is not available for this logging driver. Some options are supported by specifying `--log-opt` as many times as needed: - {% raw %} - - `fluentd-address`: specify `host:port` to connect `localhost:24224` - - `tag`: specify tag for fluentd message, which interpret some markup, ex `{{.ID}}`, `{{.FullID}}` or `{{.Name}}` `docker.{{.ID}}` - {% endraw %} + - `fluentd-address`: specify a socket address to connect to the Fluentd daemon, ex `fluentdhost:24224` or `unix:///path/to/fluentd.sock` + - `tag`: specify tag for fluentd message, which interpret some markup, ex {% raw %}`{{.ID}}`, `{{.FullID}}` or `{{.Name}}` `docker.{{.ID}}`{% endraw %} Configure the default logging driver by passing the @@ -48,7 +46,7 @@ Before using this logging driver, launch a Fluentd daemon. The logging driver connects to this daemon through `localhost:24224` by default. Use the `fluentd-address` option to connect to a different address. - docker run --log-driver=fluentd --log-opt fluentd-address=myhost.local:24224 + docker run --log-driver=fluentd --log-opt fluentd-address=fluentdhost:24224 If container cannot connect to the Fluentd daemon, the container stops immediately unless the `fluentd-async-connect` option is used. @@ -60,9 +58,13 @@ Users can use the `--log-opt NAME=VALUE` flag to specify additional Fluentd logg ### fluentd-address By default, the logging driver connects to `localhost:24224`. Supply the -`fluentd-address` option to connect to a different address. +`fluentd-address` option to connect to a different address. `tcp`(default) and `unix` sockets are supported. + + docker run --log-driver=fluentd --log-opt fluentd-address=fluentdhost:24224 + docker run --log-driver=fluentd --log-opt fluentd-address=tcp://fluentdhost:24224 + docker run --log-driver=fluentd --log-opt fluentd-address=unix:///path/to/fluentd.sock - docker run --log-driver=fluentd --log-opt fluentd-address=myhost.local:24224 +Two of the above specify the same address, because `tcp` is default. ### tag @@ -109,4 +111,4 @@ aggregate store. 3. Start one or more containers with the `fluentd` logging driver: - $ docker run --log-driver=fluentd your/application \ No newline at end of file + $ docker run --log-driver=fluentd your/application diff --git a/engine/admin/logging/gcplogs.md b/engine/admin/logging/gcplogs.md index b33f63ec4d5..474fb00544d 100644 --- a/engine/admin/logging/gcplogs.md +++ b/engine/admin/logging/gcplogs.md @@ -34,6 +34,10 @@ takes precedence over information discovered from the metadata server so a Docker daemon running in a Google Cloud Project can be overridden to log to a different Google Cloud Project using `--gcp-project`. +Docker fetches the values for zone, instance name and instance id from Google +Cloud metadata server. Those values can be provided via options if metadata +server is not available. They will not override the values from metadata server. + ## gcplogs options You can use the `--log-opt NAME=VALUE` flag to specify these additional Google @@ -45,6 +49,9 @@ Cloud Logging driver options: | `gcp-log-cmd` | optional | Whether to log the command that the container was started with. Defaults to false. | | `labels` | optional | Comma-separated list of keys of labels, which should be included in message, if these labels are specified for container. | | `env` | optional | Comma-separated list of keys of environment variables, which should be included in message, if these variables are specified for container. | +| `gcp-meta-zone` | optional | Zone name for the instance. | +| `gcp-meta-name` | optional | Instance name. | +| `gcp-meta-id` | optional | Instance ID. | If there is collision between `label` and `env` keys, the value of the `env` takes precedence. Both options add additional fields to the attributes of a @@ -54,6 +61,8 @@ Below is an example of the logging options required to log to the default logging destination which is discovered by querying the GCE metadata server. docker run --log-driver=gcplogs \ + --log-opt labels=location \ + --log-opt env=TEST \ --log-opt gcp-log-cmd=true \ --env "TEST=false" \ --label location=west \ @@ -62,3 +71,12 @@ logging destination which is discovered by querying the GCE metadata server. This configuration also directs the driver to include in the payload the label `location`, the environment variable `ENV`, and the command used to start the container. + +An example of the logging options for running outside of GCE (the daemon must be +configured with GOOGLE_APPLICATION_CREDENTIALS): + + docker run --log-driver=gcplogs \ + --log-opt gcp-project=test-project + --log-opt gcp-meta-zone=west1 \ + --log-opt gcp-meta-name=`hostname` \ + your/application diff --git a/engine/admin/logging/index.md b/engine/admin/logging/index.md index d77c56fb8d4..1a5a63f488c 100644 --- a/engine/admin/logging/index.md +++ b/engine/admin/logging/index.md @@ -13,4 +13,5 @@ title: Logging drivers * [Amazon CloudWatch Logs logging driver](awslogs.md) * [Splunk logging driver](splunk.md) * [ETW logging driver](etwlogs.md) -* [Google Cloud Logging driver](gcplogs.md) \ No newline at end of file +* [Google Cloud Logging driver](gcplogs.md) +* [NATS Logging driver](nats.md) diff --git a/engine/admin/logging/journald.md b/engine/admin/logging/journald.md index 2afd70f056f..e14e319b17b 100644 --- a/engine/admin/logging/journald.md +++ b/engine/admin/logging/journald.md @@ -97,18 +97,5 @@ import systemd.journal reader = systemd.journal.Reader() reader.add_match('CONTAINER_NAME=web') -for msg in reader: - print '{CONTAINER_ID_FULL}: {MESSAGE}'.format(**msg) -``` - -## `journald` configuration - -Docker hosts with many containers may produce large amounts of logging data. -By default, `journald` limits the number of messages stored per service per -time-unit. - -If your application needs large-scale logging, configure `RateLimitIntervalSec` -and `RateLimitBurst` in the `journald` configuration file. By default, -`systemd` drops messages in excess of 1000 messages per service per 30 seconds. -For more information about configuring `journald`, see the -[`journald` documentation](https://www.freedesktop.org/software/systemd/man/journald.conf.html). + for msg in reader: + print '{CONTAINER_ID_FULL}: {MESSAGE}'.format(**msg) diff --git a/engine/admin/logging/log_tags.md b/engine/admin/logging/log_tags.md index 5e61690184a..91a8cf444d5 100644 --- a/engine/admin/logging/log_tags.md +++ b/engine/admin/logging/log_tags.md @@ -10,8 +10,8 @@ The `tag` log option specifies how to format a tag that identifies the container's log messages. By default, the system uses the first 12 characters of the container id. To override this behavior, specify a `tag` option: -``` -docker run --log-driver=fluentd --log-opt fluentd-address=myhost.local:24224 --log-opt tag="mailer" +```bash +$ docker run --log-driver=fluentd --log-opt fluentd-address=myhost.local:24224 --log-opt tag="mailer" ``` Docker supports some special template markup you can use when specifying a tag's value: @@ -27,38 +27,38 @@ Docker supports some special template markup you can use when specifying a tag's | `{{.ImageName}}` | The name of the image used by the container. | | `{{.DaemonName}}` | The name of the docker program (`docker`). | -For example, specifying a `--log-opt tag="{{.ImageName}}/{{.Name}}/{{.ID}}"` value yields `syslog` log lines like: {% endraw %} -``` +For example, specifying a {% raw %}`--log-opt tag="{{.ImageName}}/{{.Name}}/{{.ID}}"`{% endraw %} value yields `syslog` log lines like: + +```none Aug 7 18:33:19 HOSTNAME docker/hello-world/foobar/5790672ab6a0[9103]: Hello from Docker. ``` -{% raw %} -At startup time, the system sets the `container_name` field and `{{.Name}}` in +At startup time, the system sets the `container_name` field and {% raw %}`{{.Name}}`{% endraw %} in the tags. If you use `docker rename` to rename a container, the new name is not reflected in the log messages. Instead, these messages continue to use the original container name. -{% endraw %} For advanced usage, the generated tag's use [go templates](http://golang.org/pkg/text/template/) and the container's [logging context](https://github.com/docker/docker/blob/master/daemon/logger/context.go). -As an example of what is possible with the syslog logger: +As an example of what is possible with the syslog logger, if you use the following +command, you get the output that follows: -```{% raw %} +```bash +{% raw %} $ docker run -it --rm \ --log-driver syslog \ --log-opt tag="{{ (.ExtraAttributes nil).SOME_ENV_VAR }}" \ --log-opt env=SOME_ENV_VAR \ -e SOME_ENV_VAR=logtester.1234 \ flyinprogrammer/logtester -{% endraw %}``` - -Results in logs like this: - +{% endraw %} ``` + +```none Apr 1 15:22:17 ip-10-27-39-73 docker/logtester.1234[45499]: + exec app Apr 1 15:22:17 ip-10-27-39-73 docker/logtester.1234[45499]: 2016-04-01 15:22:17.075416751 +0000 UTC stderr msg: 1 -``` \ No newline at end of file +``` diff --git a/engine/admin/logging/logentries.md b/engine/admin/logging/logentries.md new file mode 100644 index 00000000000..551aa1b11ec --- /dev/null +++ b/engine/admin/logging/logentries.md @@ -0,0 +1,48 @@ +--- +title: Logentries logging driver +description: Describes how to use the logentries logging driver. +keywords: logentries, docker, logging, driver +--- + +The `logentries` logging driver sends container logs to the +[Logentries](https://logentries.com/) server. + +## Usage + +Some options are supported by specifying `--log-opt` as many times as needed: + + - `logentries-token`: specify the logentries log set token + +Configure the default logging driver by passing the +`--log-driver` option to the Docker daemon: + +```bash +$ dockerd --log-driver=logentries +``` + +To set the logging driver for a specific container, pass the +`--log-driver` option to `docker run`: + +```bash +$ docker run --log-driver=logentries ... +``` + +Before using this logging driver, you'll need to create a new Log Set in the +Logentries web interface. Then, you'll need to pass the token of that log set +to Docker: + +```bash +$ docker run --log-driver=logentries --log-opt logentries-token=abcd1234-12ab-34cd-5678-0123456789ab +``` + +## Options + +Users can use the `--log-opt NAME=VALUE` flag to specify additional Logentries logging driver options. + +### logentries-token + +You need to provide your log set token for logentries driver to work: + +```bash +$ docker run --log-driver=logentries --log-opt logentries-token=abcd1234-12ab-34cd-5678-0123456789ab +``` diff --git a/engine/admin/logging/nats.md b/engine/admin/logging/nats.md new file mode 100644 index 00000000000..81f11ccb007 --- /dev/null +++ b/engine/admin/logging/nats.md @@ -0,0 +1,88 @@ +--- +description: Describes how to use NATS for publishing log entries +keywords: NATS, nats.io, messaging, docker, logging, driver +title: NATS logging driver +--- + +Docker logging driver for sending container the logs as events published to NATS in JSON format. + +## Usage + +You can configure the default logging driver by passing the `--log-driver` +option to the Docker daemon: + +```bash +$ dockerd --log-driver=nats +``` + +You can set the logging driver for a specific container by using the +`--log-driver` option to `docker run`: + +```bash +$ docker run --log-driver=nats ... +``` + +This log driver does not implement a reader so it is incompatible with `docker logs`. + +## nats options + +You can use the `--log-opt NAME=VALUE` flag to customize the logging driver +for NATS: + +| Option | Required | Description | +|-----------------------------|----------|---------------------------------------------------------------------------------------------------------------------------------------------| +| `labels` | optional | Comma-separated list of keys of labels, which should be included in message, if these labels are specified for container. | +| `env` | optional | Comma-separated list of keys of environment variables, which should be included in message, if these variables are specified for container. | +| `tag` | optional | Specify tag for message. Refer to the [log tag option documentation](log_tags.md) for customizing the log tag format. | +| `nats-servers` | optional | NATS cluster nodes separated by commas. e.g. `nats://127.0.0.1:4222,nats://127.0.0.1:4223`. Defaults to `localhost:4222` | +| `nats-max-reconnect` | optional | Maximum attempts that the driver will try to connect before giving up. Defaults to infinite (`-1`) | +| `nats-subject` | optional | Specific subject to which logs will be published. Defaults to using `tag` if not specified | +| `nats-user` | optional | Specify user in case of authentication required | +| `nats-pass` | optional | Specify password in case of authentication required | +| `nats-token` | optional | Specify token in case of authentication required | +| `nats-tls-ca-cert` | optional | Specified the absolute path to the trust certificates signed by the CA | +| `nats-tls-cert` | optional | Specifies the absolute path to the TLS certificate file | +| `nats-tls-key` | optional | Specifies the absolute path to the TLS key file | +| `nats-tls-skip-verify` | optional | Specifies whether to skip verification by setting it to `true` | + +Below is an example usage of the driver for sending logs to a node in a +NATS cluster to the `docker.logs` subject: + +```bash +$ docker run --log-driver=nats \ + --log-opt nats-subject=docker.logs \ + --log-opt nats-servers=nats://nats-node-1:4222,nats://nats-node-2:4222,nats://nats-node-3:4222 \ + your/application +``` + +By default, the tag is used as the subject for NATS, so it has to be a valid +subject in case subject it is left unspecified: + +```bash +{% raw %} +$ docker run --log-driver nats \ + --log-opt tag="docker.{{.ID}}.{{.ImageName}}" + your/application +{% endraw %} +``` + +Secure connection to NATS using TLS can be customized by setting `tls://` scheme +in the URI and absolute paths to the certs and key files: + +```bash +docker run --log-driver nats \ + --log-opt nats-tls-key=/srv/configs/certs/client-key.pem \ + --log-opt nats-tls-cert=/srv/configs/certs/client-cert.pem \ + --log-opt nats-tls-ca-cert=/srv/configs/certs/ca.pem \ + --log-opt nats-servers="tls://127.0.0.1:4223,tls://127.0.0.1:4222" \ + your/application +``` + +Skip verify is enabled by default, in order to deactivate we can specify `nats-tls-skip-verify`: + +```bash + docker run --log-driver nats \ + --log-opt nats-tls-skip-verify \ + --log-opt nats-servers="tls://127.0.0.1:4223,tls://127.0.0.1:4222" \ + your/application +``` diff --git a/engine/admin/logging/overview.md b/engine/admin/logging/overview.md index b6c1d761e2f..890939acd2a 100644 --- a/engine/admin/logging/overview.md +++ b/engine/admin/logging/overview.md @@ -2,7 +2,6 @@ description: Configure logging driver. keywords: docker, logging, driver, Fluentd redirect_from: -- /engine/reference/logging/overview/ title: Configure logging drivers --- @@ -46,9 +45,11 @@ is using the `json-file` logging driver, run the following `docker inspect` command, substituting the container name or ID for ``: ```bash +{% raw %} $ docker inspect -f '{{.HostConfig.LogConfig.Type}}' json-file +{% endraw %} ``` ## Supported logging drivers @@ -68,14 +69,13 @@ for its configurable options, if applicable. | `splunk` | Writes log messages to `splunk` using the HTTP Event Collector.| | `etwlogs` | Writes log messages as Event Tracing for Windows (ETW) events. Only available on Windows platforms. | | `gcplogs` | Writes log messages to Google Cloud Platform (GCP) Logging. | +| `nats` | NATS logging driver for Docker. Publishes log entries to a NATS server.| ## Limitations of logging drivers - The `docker logs` command is not available for drivers other than `json-file` and `journald`. -- - ## Examples ### Configure the logging driver using labels or environment variables @@ -273,18 +273,13 @@ of each message. ```bash {% raw %} $ docker run -dit \ - --log-driver=fluentd \ - --log-opt fluentd-address=localhost:24224 \ - --log-opt tag="docker.{{.Name}}" \ - alpine sh + --log-driver=fluentd \ + --log-opt fluentd-address=localhost:24224 \ + --log-opt tag="docker.{{.Name}}" \ + alpine sh {% endraw %} ``` -> **Note**: If the container cannot connect to the Fluentd daemon on the -specified address and `fluentd-async-connect` is set to `false`, the container -stops immediately. - - For detailed information on working with the `fluentd` logging driver, see [the fluentd logging driver](fluentd.md) @@ -334,7 +329,6 @@ The `splunk` logging driver **requires** the following options: | `splunk-token` | The Splunk HTTP Event Collector token. | `--log-opt splunk-token=` | | `splunk-url` | Path to your Splunk Enterprise or Splunk Cloud instance (including port and scheme used by HTTP Event Collector).| `--log-opt splunk-url=https://your_splunk_instance:8088` | - The `splunk` logging driver **allows** the following options: | Option | Description | Example value | @@ -345,7 +339,7 @@ The `splunk` logging driver **allows** the following options: | `splunk-capath` | Path to root certificate. | `--log-opt splunk-capath=/path/to/cert/cacert.pem` | | `splunk-caname` | Name to use for validating server certificate. Defaults to the hostname of the `splunk-url`. | `--log-opt splunk-caname=SplunkServerDefaultCert` | | `splunk-insecureskipverify` | Ignore server certificate validation. | `--log-opt splunk-insecureskipverify=false` | -| `tag` | Specify tag for message, which interpret some markup. Default value is `{{.ID}}` (12 characters of the container ID). Refer to the [log tag option documentation](log_tags.md) for information about customizing the log tag format. | {% raw %}`--log-opt tag="{{.Name}}/{{.FullID}}"`{% endraw %} | +| `tag` | Specify tag for message, which interpret some markup. Default value is {% raw %}`{{.ID}}`{% endraw %} (12 characters of the container ID). Refer to the [log tag option documentation](log_tags.md) for information about customizing the log tag format. | {% raw %}`--log-opt tag="{{.Name}}/{{.FullID}}"`{% endraw %} | | `labels` | Applies when starting the Docker daemon. A comma-separated list of logging-related labels this daemon will accept. Adds additional key on the `extra` fields, prefixed by an underscore (`_`). Used for advanced [log tag options](log_tags.md).| `--log-opt labels=production_status,geo` | | `env` | Applies when starting the Docker daemon. A comma-separated list of logging-related environment variables this daemon will accept. Adds additional key on the `extra` fields, prefixed by an underscore (`_`). Used for advanced [log tag options](log_tags.md). | `--log-opt env=os,customer` | @@ -378,9 +372,9 @@ For detailed information about working with the `splunk` logging driver, see the ### Options -The etwlogs logging driver does not require any options to be specified. This -logging driver forwards each log message as an ETW event. An ETW listener -can then be created to listen for these events. +The `etwlogs` logging driver forwards each log message as an ETW event. An ETW +listener can then be created to listen for these events. This driver does not +accept any options. ### Examples @@ -391,7 +385,7 @@ $ docker run \ ``` The ETW logging driver is only available on Windows. For detailed information -on working with this logging driver, see [the ETW logging driver](etwlogs.md) +about working with this logging driver, see [the ETW logging driver](etwlogs.md) reference documentation. ## `gcplogs` @@ -408,7 +402,6 @@ options: | `labels` | Applies when starting the Docker daemon. A comma-separated list of logging-related labels this daemon will accept. Adds additional key on the `extra` fields, prefixed by an underscore (`_`). Used for advanced [log tag options](log_tags.md).| `--log-opt labels=production_status,geo` | | `env` | Applies when starting the Docker daemon. A comma-separated list of logging-related environment variables this daemon will accept. Adds additional key on the `extra` fields, prefixed by an underscore (`_`). Used for advanced [log tag options](log_tags.md). | `--log-opt env=os,customer` | - ### Examples This example logs the start command and sets a label and an environment @@ -423,5 +416,25 @@ $ docker run --log-driver=gcplogs \ your/application \ ``` -For detailed information about working with this logging driver, see the -[Google Cloud Logging driver](gcplogs.md). reference documentation. +For detailed information about working with the Google Cloud logging driver, see +the [Google Cloud Logging driver](gcplogs.md). reference documentation. + +## NATS logging options + +The NATS logging driver supports the following options: + +```none +--log-opt labels=, +--log-opt env=, +--log-opt tag= +--log-opt nats-servers="" +--log-opt nats-max-reconnect="" +--log-opt nats-subject="" +--log-opt nats-tls-ca-cert="" +--log-opt nats-tls-cert="" +--log-opt nats-tls-key="" +--log-opt nats-tls-skip-verify="" +``` + +For detailed information, see [the NATS logging driver](nats.md) reference +documentation. diff --git a/engine/admin/logging/splunk.md b/engine/admin/logging/splunk.md index 46a769fa3f1..b7a0653f306 100644 --- a/engine/admin/logging/splunk.md +++ b/engine/admin/logging/splunk.md @@ -27,21 +27,23 @@ You can set the logging driver for a specific container by using the You can use the `--log-opt NAME=VALUE` flag to specify these additional Splunk logging driver options: -{% raw %} -| Option | Required | Description | -|-----------------------------|----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `splunk-token` | required | Splunk HTTP Event Collector token. | -| `splunk-url` | required | Path to your Splunk Enterprise or Splunk Cloud instance (including port and scheme used by HTTP Event Collector) `https://your_splunk_instance:8088`. | -| `splunk-source` | optional | Event source. | -| `splunk-sourcetype` | optional | Event source type. | -| `splunk-index` | optional | Event index. | -| `splunk-capath` | optional | Path to root certificate. | -| `splunk-caname` | optional | Name to use for validating server certificate; by default the hostname of the `splunk-url` will be used. | -| `splunk-insecureskipverify` | optional | Ignore server certificate validation. | -| `tag` | optional | Specify tag for message, which interpret some markup. Default value is `{{.ID}}` (12 characters of the container ID). Refer to the [log tag option documentation](log_tags.md) for customizing the log tag format. | -| `labels` | optional | Comma-separated list of keys of labels, which should be included in message, if these labels are specified for container. | -| `env` | optional | Comma-separated list of keys of environment variables, which should be included in message, if these variables are specified for container. | -{% endraw %} +| Option | Required | Description | +|-----------------------------|----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `splunk-token` | required | Splunk HTTP Event Collector token. | +| `splunk-url` | required | Path to your Splunk Enterprise or Splunk Cloud instance (including port and scheme used by HTTP Event Collector) `https://your_splunk_instance:8088`. | +| `splunk-source` | optional | Event source. | +| `splunk-sourcetype` | optional | Event source type. | +| `splunk-index` | optional | Event index. | +| `splunk-capath` | optional | Path to root certificate. | +| `splunk-caname` | optional | Name to use for validating server certificate; by default the hostname of the `splunk-url` will be used. | +| `splunk-insecureskipverify` | optional | Ignore server certificate validation. | +| `splunk-format` | optional | Message format. Can be `inline`, `json` or `raw`. Defaults to `inline`. | +| `splunk-verify-connection` | optional | Verify on start, that docker can connect to Splunk server. Defaults to true. | +| `splunk-gzip` | optional | Enable/disable gzip compression to send events to Splunk Enterprise or Splunk Cloud instance. Defaults to false. | +| `splunk-gzip-level` | optional | Set compression level for gzip. Valid values are -1 (default), 0 (no compression), 1 (best speed) ... 9 (best compression). Defaults to [DefaultCompression](https://golang.org/pkg/compress/gzip/#DefaultCompression). | +| `tag` | optional | Specify tag for message, which interpret some markup. Default value is {% raw %}`{{.ID}}`{% endraw %} (12 characters of the container ID). Refer to the [log tag option documentation](log_tags.md) for customizing the log tag format. | +| `labels` | optional | Comma-separated list of keys of labels, which should be included in message, if these labels are specified for container. | +| `env` | optional | Comma-separated list of keys of environment variables, which should be included in message, if these variables are specified for container. | If there is collision between `label` and `env` keys, the value of the `env` takes precedence. Both options add additional fields to the attributes of a logging message. @@ -52,16 +54,93 @@ Docker daemon is running. The path to the root certificate and Common Name is specified using an HTTPS scheme. This is used for verification. The `SplunkServerDefaultCert` is automatically generated by Splunk certificates. - {% raw %} - docker run --log-driver=splunk \ - --log-opt splunk-token=176FCEBF-4CF5-4EDF-91BC-703796522D20 \ - --log-opt splunk-url=https://splunkhost:8088 \ - --log-opt splunk-capath=/path/to/cert/cacert.pem \ - --log-opt splunk-caname=SplunkServerDefaultCert \ - --log-opt tag="{{.Name}}/{{.FullID}}" \ - --log-opt labels=location \ - --log-opt env=TEST \ - --env "TEST=false" \ - --label location=west \ - your/application - {% endraw %} +```bash +{% raw %} +$ docker run --log-driver=splunk \ + --log-opt splunk-token=176FCEBF-4CF5-4EDF-91BC-703796522D20 \ + --log-opt splunk-url=https://splunkhost:8088 \ + --log-opt splunk-capath=/path/to/cert/cacert.pem \ + --log-opt splunk-caname=SplunkServerDefaultCert \ + --log-opt tag="{{.Name}}/{{.FullID}}" \ + --log-opt labels=location \ + --log-opt env=TEST \ + --env "TEST=false" \ + --label location=west \ + your/application +{% endraw %} +``` + +### Message formats + +By default Logging Driver sends messages as `inline` format, where each message +will be embedded as a string, for example + +```none +{ + "attrs": { + "env1": "val1", + "label1": "label1" + }, + "tag": "MyImage/MyContainer", + "source": "stdout", + "line": "my message" +} +{ + "attrs": { + "env1": "val1", + "label1": "label1" + }, + "tag": "MyImage/MyContainer", + "source": "stdout", + "line": "{\"foo\": \"bar\"}" +} +``` + +In case if your messages are JSON objects you may want to embed them in the +message we send to Splunk. By specifying `--log-opt splunk-format=json` driver +will try to parse every line as a JSON object and send it as embedded object. In +case if it cannot parse it - message will be send as `inline`. For example + + +```none +{ + "attrs": { + "env1": "val1", + "label1": "label1" + }, + "tag": "MyImage/MyContainer", + "source": "stdout", + "line": "my message" +} +{ + "attrs": { + "env1": "val1", + "label1": "label1" + }, + "tag": "MyImage/MyContainer", + "source": "stdout", + "line": { + "foo": "bar" + } +} +``` + +Third format is a `raw` message. You can specify it by using +`--log-opt splunk-format=raw`. Attributes (environment variables and labels) and +tag will be prefixed to the message. For example + +```none +MyImage/MyContainer env1=val1 label1=label1 my message +MyImage/MyContainer env1=val1 label1=label1 {"foo": "bar"} +``` + +## Advanced options + +Splunk Logging Driver allows you to configure few advanced options by specifying next environment variables for the Docker daemon. + +| Environment variable name | Default value | Description | +|--------------------------------------------------|---------------|----------------------------------------------------------------------------------------------------------------------------------------------------| +| `SPLUNK_LOGGING_DRIVER_POST_MESSAGES_FREQUENCY` | `5s` | If there is nothing to batch how often driver will post messages. You can think about this as the maximum time to wait for more messages to batch. | +| `SPLUNK_LOGGING_DRIVER_POST_MESSAGES_BATCH_SIZE` | `1000` | How many messages driver should wait before sending them in one batch. | +| `SPLUNK_LOGGING_DRIVER_BUFFER_MAX` | `10 * 1000` | If driver cannot connect to remote server, what is the maximum amount of messages it can hold in buffer for retries. | +| `SPLUNK_LOGGING_DRIVER_CHANNEL_SIZE` | `4 * 1000` | How many pending messages can be in the channel which is used to send messages to background logger worker, which batches them. | diff --git a/engine/admin/puppet.md b/engine/admin/puppet.md index c72603f27c0..cd9e85dec33 100644 --- a/engine/admin/puppet.md +++ b/engine/admin/puppet.md @@ -92,4 +92,4 @@ Run also contains a number of optional parameters: > *Note:* > The `ports`, `env`, `dns` and `volumes` attributes can be set with either a single -> string or as above with an array of values. \ No newline at end of file +> string or as above with an array of values. diff --git a/engine/admin/registry_mirror.md b/engine/admin/registry_mirror.md index d78f8cb735d..55beb20284f 100644 --- a/engine/admin/registry_mirror.md +++ b/engine/admin/registry_mirror.md @@ -10,4 +10,4 @@ The original content was deprecated. [An archived version](/v1.6/articles/registry_mirror) is available in the 1.7 documentation. For information about configuring mirrors with the latest Docker Registry version, please file a support request with [the Distribution -project](https://github.com/docker/distribution/issues). \ No newline at end of file +project](https://github.com/docker/distribution/issues). diff --git a/engine/admin/resource_constraints.md b/engine/admin/resource_constraints.md index 78dbb9ebeb0..d4de6978ec2 100644 --- a/engine/admin/resource_constraints.md +++ b/engine/admin/resource_constraints.md @@ -88,85 +88,93 @@ by viewing `/proc//status` on the host machine. By default, each container's access to the host machine's CPU cycles is unlimited. You can set various constraints to limit a given container's access to the host -machine's CPU cycles. +machine's CPU cycles. Most users will use and configure the +[default CFS scheduler](#configure-the-default-cfs-scheduler). In Docker 1.13 +and higher, you can also configure the +[realtime scheduler](#configure-the-realtime-scheduler). + +### Configure the default CFS scheduler + +The CFS is the Linux kernel CPU scheduler for normal Linux processes. Several +runtime flags allow you to configure the amount of access to CPU resources your +container has. When you use these settings, Docker modifies the settings for the +the container's cgroup on the host machine. | Option | Description | |-----------------------|-----------------------------| +| `--cpus=` | Specify how much of the available CPU resources a container can use. For instance, if the host machine has two CPUs and you set `--cpus="1.5"`, the container will be guaranteed to be able to access at most one and a half of the CPUs. This is the equivalent of setting `--cpu-period="100000"` and `--cpu-quota="150000"`. Available in Docker 1.13 and higher. | +| `--cpu-period=`| Specify the CPU CFS scheduler period, which is used alongside `--cpu-quota`. Defaults to 1 second, expressed in micro-seconds. Most users do not change this from the default. If you use Docker 1.13 or higher, use `--cpus` instead. | +| `--cpu-quota=`: impose a CPU CFS quota on the container. The number of microseconds per `--cpu-period` that the container is guaranteed CPU access. In other words, `cpu-quota / cpu-period`. If you use Docker 1.13 or higher, use `--cpus` instead. | +| `--cpuset-cpus`: limit the specific CPUs or cores a container can use. A comma-separated list or hyphen-separated range of CPUs a container can use, if you have more than one CPU. The first CPU is numbered 0. A valid value might be `0-3` (to use the first, second, third, and fourth CPU) or `1,3` (to use the second and fourth CPU). | | `--cpu-shares` | Set this flag to a value greater or less than the default of 1024 to increase or reduce the container's weight, and give it access to a greater or lesser proportion of the host machine's CPU cycles. This is only enforced when CPU cycles are constrained. When plenty of CPU cycles are available, all containers use as much CPU as they need. In that way, this is a soft limit. `--cpu-shares` does not prevent containers from being scheduled in swarm mode. It prioritizes container CPU resources for the available CPU cycles. It does not guarantee or reserve any specific CPU access. | -| `--cpu-period` | The scheduling period of one logical CPU on a container. `--cpu-period` defaults to a time value of 100000 (100 ms). | -| `--cpu-quota` | maximum amount of time that a container can be scheduled during the period set by `--cpu-period`. | -| `--cpuset-cpus` | Use this option to pin your container to one or more CPU cores, separated by commas. | -### Example with `--cpu-period` and `--cpu-qota` +If you have 1 CPU, each of the following commands will guarantee the container at +most 50% of the CPU every second. -If you have 1 vCPU system and your container runs with `--cpu-period=100000` and -`--cpu-quota=50000`, the container can consume up to 50% of 1 CPU. +**Docker 1.13 and higher**: ```bash -$ docker run -ti --cpu-period=10000 --cpu-quota=50000 busybox +docker run -it --cpus=".5" ubuntu /bin/bash ``` -If you have a 4 vCPU system your container runs with `--cpu-period=100000` and -`--cpu-quota=200000`, your container can consume up to 2 logical CPUs (200% of -`--cpu-period`). - -```bash -$ docker run -ti --cpu-period=100000 --cpu-quota=200000 -``` - -### Example with `--cpuset-cpus` - -To give a container access to exactly 4 CPUs, issue a command like the -following: +**Docker 1.12 and lower**: ```bash -$ docker run -ti --cpuset-cpus=4 busybox +$ docker run -it --cpu-period=100000 --cpu-quota=50000 ubuntu /bin/bash ``` -## Block IO (blkio) +### Configure the realtime scheduler -Two option are available for tuning a given container's access to direct block IO -devices. You can also specify bandwidth limits in terms of bytes per second or -IO operations per second. +In Docker 1.13 and higher, you can configure your container to use the +realtime scheduler, for tasks which cannot use the CFS scheduler. You need to +[make sure the host machine's kernel is configured correctly](#configure-the-host-machines-kernel) +before you can [configure the Docker daemon](#configure-the-docker-daemon) or +[configure individuyal containers](#configure-individual-containers). -| Option | Description | -|-----------------------|-----------------------------| -| `blkio-weight` | By default, each container can use the same proportion of block IO bandwidth (blkio). The default weight is 500. To raise or lower the proportion of blkio used by a given container, set the `--blkio-weight` flag to a value between 10 and 1000. This setting affects all block IO devices equally. | -| `blkio-weight-device` | The same as `--blkio-weight`, but you can set a weight per device, using the syntax `--blkio-weight-device="DEVICE_NAME:WEIGHT"` The DEVICE_NAME:WEIGHT is a string containing a colon-separated device name and weight. | -| `--device-read-bps` and `--device-write-bps` | Limits the read or write rate to or from a device by size, using a suffix of `kb`, `mb`, or `gb`. | -| `--device-read-iops` or `--device-write-iops` | Limits the read or write rate to or from a device by IO operations per second. | +>**Warning**: CPU scheduling and prioritization are advanced kernel-level +features. Most users do not need to change these values from their defaults. +Setting these values incorrectly can cause your host system to become unstable +or unusable. +#### Configure the host machine's kernel -### Block IO weight examples +Verify that `CONFIG_RT_GROUP_SCHED` is enabled in the Linux kernel by running +`zcat /proc/config.gz | grep CONFIG_RT_GROUP_SCHED` or by checking for the +existence of the file `/sys/fs/cgroup/cpu.rt_runtime_us`. For guidance on +configuring the kernel realtime scheduler, consult the documentation for your +operating system. ->**Note**: The `--blkio-weight` flag only affects direct IO and has no effect on -buffered IO. +#### Configure the Docker daemon -If you specify both the `--blkio-weight` and `--blkio-weight-device`, Docker -uses `--blkio-weight` as the default weight and uses `--blkio-weight-device` to -override the default on the named device. +To run containers using the realtime scheduler, run the Docker daemon with +the `--cpu-rt-runtime` flag set to the maximum number of microseconds reserved +for realtime tasks per runtime period. For instance, with the default period of +10000 microseconds (1 second), setting `--cpu-rt-runtime=95000` ensures that +containers using the realtime scheduler can run for 95000 microseconds for every +10000-microsecond period, leaving at least 5000 microseconds available for +non-realtime tasks. To make this configuration permanent on systems which use +`systemd`, see [Control and configure Docker with systemd](systemd.md). -To set a container's device weight for `/dev/sda` to 200 and not specify a -default `blkio-weight`: +#### Configure individual containers -```bash -$ docker run -it \ - --blkio-weight-device "/dev/sda:200" \ - ubuntu -``` +You can pass several flags to control a container's CPU priority when you +start the container using `docker run`. Consult your operating system's +documentation or the `ulimit` command for information on appropriate values. -### Block bandwidth limit examples +| Option | Description | +|---------------------------|-----------------------------| +| `--cap-add=sys_nice` | Grants the container the `CAP_SYS_NICE` capability, which allows the container to raise process `nice` values, set real-time scheduling policies, set CPU affinity, and other operations. | +| `--cpu-rt-runtime=`| The maximum number of microseconds the container can run at realtime priority within the Docker daemon's realtime scheduler period. You also need the `--cap-add=sys_nice` flag. | +| `--ulimit rtprio=` | The maximum realtime priority allowed for the container. You also need the `--cap-add=sys_nice` flag. | -This example limits the `ubuntu` container to a maximum write speed of 1mbps to -`/dev/sda`: +The following example command sets each of these three flags on a `debian:jessie` +container. ```bash -$ docker run -it --device-write-bps /dev/sda:1mb ubuntu +$ docker run --it --cpu-rt-runtime=95000 \ + --ulimit rtprio=99 \ + --cap-add=sys_nice \ + debian:jessie ``` -This example limits the `ubuntu` container to a maximum read rate of 1000 IO -operations per second from `/dev/sda`: - -```bash -$ docker run -ti --device-read-iops /dev/sda:1000 ubuntu -``` +If the kernel or Docker daemon is not configured correctly, an error will occur. diff --git a/engine/admin/runmetrics.md b/engine/admin/runmetrics.md index 886cf0f369b..7325c33b644 100644 --- a/engine/admin/runmetrics.md +++ b/engine/admin/runmetrics.md @@ -59,8 +59,8 @@ known to the system, the hierarchy they belong to, and how many groups they cont You can also look at `/proc//cgroup` to see which control groups a process belongs to. The control group will be shown as a path relative to the root of -the hierarchy mountpoint; e.g., `/` means “this process has not been assigned into -a particular group”, while `/lxc/pumpkin` means that the process is likely to be +the hierarchy mountpoint; e.g., `/` means "this process has not been assigned into +a particular group", while `/lxc/pumpkin` means that the process is likely to be a member of a container named `pumpkin`. ## Finding the cgroup for a given container @@ -273,7 +273,7 @@ program (present in the host system) within any network namespace visible to the current process. This means that your host will be able to enter the network namespace of your containers, but your containers won't be able to access the host, nor their sibling containers. -Containers will be able to “see” and affect their sub-containers, +Containers will be able to "see" and affect their sub-containers, though. The exact format of the command is: @@ -307,7 +307,7 @@ container, we need to: - Create a symlink from `/var/run/netns/` to `/proc//ns/net` - Execute `ip netns exec ....` -Please review [Enumerating Cgroups](runmetrics.md#enumerating-cgroups) to learn how to find +Please review [Enumerating Cgroups](#enumerating-cgroups) to learn how to find the cgroup of a process running in the container of which you want to measure network usage. From there, you can examine the pseudo-file named `tasks`, which contains the PIDs that are in the @@ -382,4 +382,4 @@ and remove the container control group. To remove a control group, just `rmdir` its directory. It's counter-intuitive to `rmdir` a directory as it still contains files; but remember that this is a pseudo-filesystem, so usual rules don't apply. -After the cleanup is done, the collection process can exit safely. \ No newline at end of file +After the cleanup is done, the collection process can exit safely. diff --git a/engine/admin/systemd.md b/engine/admin/systemd.md index 01a018c4225..3413d863c41 100644 --- a/engine/admin/systemd.md +++ b/engine/admin/systemd.md @@ -200,4 +200,4 @@ When installing the binary without a package, you may want to integrate Docker with systemd. For this, simply install the two unit files (service and socket) from [the github repository](https://github.com/docker/docker/tree/master/contrib/init/systemd) -to `/etc/systemd/system`. \ No newline at end of file +to `/etc/systemd/system`. diff --git a/engine/admin/using_supervisord.md b/engine/admin/using_supervisord.md index 36361284b59..3102790d245 100644 --- a/engine/admin/using_supervisord.md +++ b/engine/admin/using_supervisord.md @@ -147,4 +147,4 @@ You launched a new container interactively using the `docker run` command. That container has run Supervisor and launched the SSH and Apache daemons with it. We've specified the `-p` flag to expose ports 22 and 80. From here we can now identify the exposed ports and connect to one or both of the SSH and Apache -daemons. \ No newline at end of file +daemons. diff --git a/engine/api/getting-started.md b/engine/api/getting-started.md new file mode 100644 index 00000000000..80ff41cda42 --- /dev/null +++ b/engine/api/getting-started.md @@ -0,0 +1,547 @@ +--- +title: Getting started with the Engine API +--- + +To try out the Docker Engine API in development, [you first need to install Docker](https://docs.docker.com/engine/installation/). + +Next, you need to install an SDK for the language you are using. There are official ones available for Python and Go, and a number of community maintained libraries for other languages. [Head to the SDKs page to find and install them.](sdks.md) + +## Running a container + +The most basic thing you can do with Docker is running a container. On the command line, you would use the `docker run` command, but this is just as easy to do from your own apps too. + +This is the equivalent of doing `docker run alpine echo hello world`: + +
+
Python
+
Go
+
curl
+
+
+
+{% highlight python %} +import docker +client = docker.from_env() +print client.containers.run("alpine", ["echo", "hello", "world"]) +{% endhighlight %} +
+
+{% highlight go %} +package main + +import ( + "io" + "os" + + "github.com/docker/engine-api/client" + "github.com/docker/engine-api/types" + "github.com/docker/engine-api/types/container" + "golang.org/x/net/context" +) + +func main() { + ctx := context.Background() + cli, err := client.NewEnvClient() + if err != nil { + panic(err) + } + + _, err = cli.ImagePull(ctx, "alpine", types.ImagePullOptions{}) + if err != nil { + panic(err) + } + + resp, err := cli.ContainerCreate(ctx, &container.Config{ + Image: "alpine", + Cmd: []string{"echo", "hello world"}, + }, nil, nil, "") + if err != nil { + panic(err) + } + + if err := cli.ContainerStart(ctx, resp.ID, types.ContainerStartOptions{}); err != nil { + panic(err) + } + + if _, err = cli.ContainerWait(ctx, resp.ID); err != nil { + panic(err) + } + + out, err := cli.ContainerLogs(ctx, resp.ID, types.ContainerLogsOptions{ShowStdout: true}) + if err != nil { + panic(err) + } + + io.Copy(os.Stdout, out) +} +{% endhighlight %} +
+
+{% highlight bash %} +$ curl --unix-socket /var/run/docker.sock -H "Content-Type: application/json" \ + -d '{"Image": "alpine", "Cmd": ["echo", "hello world"]}' \ + -X POST http:/v1.24/containers/create +{"Id":"1c6594faf5","Warnings":null} + +$ curl --unix-socket /var/run/docker.sock -X POST http:/v1.24/containers/1c6594faf5/start + +$ curl --unix-socket /var/run/docker.sock -X POST http:/v1.24/containers/1c6594faf5/wait +{"StatusCode":0} + +$ curl --unix-socket /var/run/docker.sock "http:/v1.24/containers/1c6594faf5/logs?stdout=1" +hello world +{% endhighlight %} +
+
+ +You can also run containers in the background, the equivalent of `docker run -d bfirsh/reticulate-splines`: + +
+
Python
+
Go
+
curl
+
+
+
+{% highlight python %} +import docker +client = docker.from_env() +container = client.containers.run("bfirsh/reticulate-splines", detach=True) +print container.id +{% endhighlight %} +
+
+{% highlight go %} +package main + +import ( + "fmt" + "io" + "os" + + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/container" + "github.com/docker/docker/client" + "golang.org/x/net/context" +) + +func main() { + ctx := context.Background() + cli, err := client.NewEnvClient() + if err != nil { + panic(err) + } + + imageName := "bfirsh/reticulate-splines" + + out, err := cli.ImagePull(ctx, imageName, types.ImagePullOptions{}) + if err != nil { + panic(err) + } + io.Copy(os.Stdout, out) + + resp, err := cli.ContainerCreate(ctx, &container.Config{ + Image: imageName, + }, nil, nil, "") + if err != nil { + panic(err) + } + + if err := cli.ContainerStart(ctx, resp.ID, types.ContainerStartOptions{}); err != nil { + panic(err) + } + + fmt.Println(resp.ID) +} +{% endhighlight %} +
+
+{% highlight bash %} +$ curl --unix-socket /var/run/docker.sock -H "Content-Type: application/json" \ + -d '{"Image": "bfirsh/reticulate-splines"}' \ + -X POST http:/v1.24/containers/create +{"Id":"1c6594faf5","Warnings":null} + +$ curl --unix-socket /var/run/docker.sock -X POST http:/v1.24/containers/1c6594faf5/start +{% endhighlight %} +
+
+ +## Listing and managing containers + +Like `docker ps`, we can use the API to list containers that are running: + +
+
Python
+
Go
+
curl
+
+
+
+{% highlight python %} +import docker +client = docker.from_env() +for container in client.containers.list(): + print container.id +{% endhighlight %} +
+
+{% highlight go %} +package main + +import ( + "context" + "fmt" + + "github.com/docker/docker/api/types" + "github.com/docker/docker/client" +) + +func main() { + cli, err := client.NewEnvClient() + if err != nil { + panic(err) + } + + containers, err := cli.ContainerList(context.Background(), types.ContainerListOptions{}) + if err != nil { + panic(err) + } + + for _, container := range containers { + fmt.Println(container.ID) + } +} +{% endhighlight %} +
+
+{% highlight bash %} +$ curl --unix-socket /var/run/docker.sock http:/v1.24/containers/json +[{ + "Id":"ae63e8b89a26f01f6b4b2c9a7817c31a1b6196acf560f66586fbc8809ffcd772", + "Names":["/tender_wing"], + "Image":"bfirsh/reticulate-splines", + ... +}] + +{% endhighlight %} +
+
+ +Now we know what containers exist, we can perform operations on them. For example, we can stop all running containers: + +
+
Python
+
Go
+
curl
+
+
+
+{% highlight python %} +import docker +client = docker.from_env() +for container in client.containers.list(): + container.stop() +{% endhighlight %} +
+
+{% highlight go %} +package main + +import ( + "context" + + "github.com/docker/docker/api/types" + "github.com/docker/docker/client" +) + +func main() { + ctx := context.Background() + cli, err := client.NewEnvClient() + if err != nil { + panic(err) + } + + containers, err := cli.ContainerList(ctx, types.ContainerListOptions{}) + if err != nil { + panic(err) + } + + for _, container := range containers { + if err := cli.ContainerStop(ctx, container.ID, nil); err != nil { + panic(err) + } + } +} +{% endhighlight %} +
+
+{% highlight bash %} +$ curl --unix-socket /var/run/docker.sock http:/v1.24/containers/json +[{ + "Id":"ae63e8b89a26f01f6b4b2c9a7817c31a1b6196acf560f66586fbc8809ffcd772", + "Names":["/tender_wing"], + "Image":"bfirsh/reticulate-splines", + ... +}] + +$ curl --unix-socket /var/run/docker.sock \ + -X POST http:/v1.24/containers/ae63e8b89a26/stop + +{% endhighlight %} +
+
+ +We can also perform actions on individual containers. For example, to print the logs of a container given its ID: + +
+
Python
+
Go
+
curl
+
+
+
+{% highlight python %} +import docker +client = docker.from_env() +container = client.containers.get('f1064a8a4c82') +print container.logs() +{% endhighlight %} +
+
+{% highlight go %} +package main + +import ( + "context" + "io" + "os" + + "github.com/docker/docker/api/types" + "github.com/docker/docker/client" +) + +func main() { + ctx := context.Background() + cli, err := client.NewEnvClient() + if err != nil { + panic(err) + } + + options := types.ContainerLogsOptions{ShowStdout: true} + out, err := cli.ContainerLogs(ctx, "f1064a8a4c82", options) + if err != nil { + panic(err) + } + + io.Copy(os.Stdout, out) +} +{% endhighlight %} +
+
+{% highlight bash %} +$ curl --unix-socket /var/run/docker.sock "http:/v1.24/containers/ca5f55cdb/logs?stdout=1" +Reticulating spline 1... +Reticulating spline 2... +Reticulating spline 3... +Reticulating spline 4... +Reticulating spline 5... +{% endhighlight %} +
+
+ +## Managing images + +Images are the basis of containers, and can be managed in a similar way. You can list the images on your Engine, similar to `docker images`: + +
+
Python
+
Go
+
curl
+
+
+
+{% highlight python %} +import docker +client = docker.from_env() +for image in client.images.list(): + print image.id +{% endhighlight %} +
+
+{% highlight go %} +package main + +import ( + "context" + "fmt" + + "github.com/docker/docker/api/types" + "github.com/docker/docker/client" +) + +func main() { + cli, err := client.NewEnvClient() + if err != nil { + panic(err) + } + + images, err := cli.ImageList(context.Background(), types.ImageListOptions{}) + if err != nil { + panic(err) + } + + for _, image := range images { + fmt.Println(image.ID) + } +} +{% endhighlight %} +
+
+{% highlight bash %} +$ curl --unix-socket /var/run/docker.sock http:/v1.24/images/json +[{ + "Id":"sha256:31d9a31e1dd803470c5a151b8919ef1988ac3efd44281ac59d43ad623f275dcd", + "ParentId":"sha256:ee4603260daafe1a8c2f3b78fd760922918ab2441cbb2853ed5c439e59c52f96", + ... +}] +{% endhighlight %} +
+
+ +You can pull images, like `docker pull`: + +
+
Python
+
Go
+
curl
+
+
+
+{% highlight python %} +import docker +client = docker.from_env() +image = client.images.pull("alpine") +print image.id +{% endhighlight %} +
+
+{% highlight go %} +package main + +import ( + "io" + "os" + + "github.com/docker/docker/api/types" + "github.com/docker/docker/client" + "golang.org/x/net/context" +) + +func main() { + ctx := context.Background() + cli, err := client.NewEnvClient() + if err != nil { + panic(err) + } + + out, err := cli.ImagePull(ctx, "alpine", types.ImagePullOptions{}) + if err != nil { + panic(err) + } + + io.Copy(os.Stdout, out) +} +{% endhighlight %} +
+
+{% highlight bash %} +$ curl --unix-socket /var/run/docker.sock \ + -X POST "http:/v1.24/images/create?fromImage=alpine" +{"status":"Pulling from library/alpine","id":"3.1"} +{"status":"Pulling fs layer","progressDetail":{},"id":"8f13703509f7"} +{"status":"Downloading","progressDetail":{"current":32768,"total":2244027},"progress":"[\u003e ] 32.77 kB/2.244 MB","id":"8f13703509f7"} +... +{% endhighlight %} +
+
+ +And commit containers to create images from their contents: + +
+
Python
+
Go
+
curl
+
+
+
+{% highlight python %} +import docker +client = docker.from_env() +container = client.run("alpine", ["touch", "/helloworld"], detached=True) +container.wait() +image = container.commit("helloworld") +print image.id +{% endhighlight %} +
+
+{% highlight go %} +package main + +import ( + "fmt" + + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/container" + "github.com/docker/docker/client" + "golang.org/x/net/context" +) + +func main() { + ctx := context.Background() + cli, err := client.NewEnvClient() + if err != nil { + panic(err) + } + + createResp, err := cli.ContainerCreate(ctx, &container.Config{ + Image: "alpine", + Cmd: []string{"touch", "/helloworld"}, + }, nil, nil, "") + if err != nil { + panic(err) + } + + if err := cli.ContainerStart(ctx, createResp.ID, types.ContainerStartOptions{}); err != nil { + panic(err) + } + + if _, err = cli.ContainerWait(ctx, createResp.ID); err != nil { + panic(err) + } + + commitResp, err := cli.ContainerCommit(ctx, createResp.ID, types.ContainerCommitOptions{Reference: "helloworld"}) + if err != nil { + panic(err) + } + + fmt.Println(commitResp.ID) +} +{% endhighlight %} +
+
+{% highlight bash %} +$ docker run -d alpine touch /helloworld +0888269a9d584f0fa8fc96b3c0d8d57969ceea3a64acf47cd34eebb4744dbc52 +$ curl --unix-socket /var/run/docker.sock\ + -X POST "http:/v1.24/commit?container=0888269a9d&repo=helloworld" +{"Id":"sha256:6c86a5cd4b87f2771648ce619e319f3e508394b5bfc2cdbd2d60f59d52acda6c"} +{% endhighlight %} +
+
+ +## What next? + + - [Full documentation for the Python SDK.](https://docker-py.readthedocs.io) + - [Full documentation for the Go SDK.](https://godoc.org/github.com/docker/docker/client) + - [Full documentation for the HTTP API.](/engine/api/v1.25/) diff --git a/engine/api/index.md b/engine/api/index.md new file mode 100644 index 00000000000..693d57c4f3c --- /dev/null +++ b/engine/api/index.md @@ -0,0 +1,109 @@ +--- +title: Docker Engine API and SDKs +redirect_from: + - /engine/reference/api/ + - /engine/reference/api/docker_remote_api/ + - /reference/api/ + - /reference/api/docker_remote_api/ +--- + +# Docker Engine API and SDKs + +The Engine API is the API served by Docker Engine. It allows you to control every aspect of Docker from within your own applications. You to build tools to manage and monitor applications running on Docker, and even use it to build apps on Docker itself. + +It is the API the Docker client uses to communicate with the Engine, so everything the Docker client can do can be done with the API. For example: + +* Running and managing containers +* Managing Swarm nodes and services +* Reading logs and metrics +* Creating and managing Swarms +* Pulling and managing images +* Managing networks and volumes + +The API can be accessed with any HTTP client, but we also provide [SDKs](sdks.md) in Python and Go to make it easier to use from programming languages. + +As an example, the `docker run` command can be easily implemented in various programming languages and by hitting the API directly with `curl`: + +
+
Python
+
Go
+
curl
+
+
+
+{% highlight python %} +import docker +client = docker.from_env() +print client.containers.run("alpine", ["echo", "hello", "world"]) +{% endhighlight %} +
+
+{% highlight go %} +package main + +import ( + "io" + "os" + + "github.com/docker/docker/client" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/container" + "golang.org/x/net/context" +) + +func main() { + ctx := context.Background() + cli, err := client.NewEnvClient() + if err != nil { + panic(err) + } + + _, err = cli.ImagePull(ctx, "alpine", types.ImagePullOptions{}) + if err != nil { + panic(err) + } + + resp, err := cli.ContainerCreate(ctx, &container.Config{ + Image: "alpine", + Cmd: []string{"echo", "hello world"}, + }, nil, nil, "") + if err != nil { + panic(err) + } + + if err := cli.ContainerStart(ctx, resp.ID, types.ContainerStartOptions{}); err != nil { + panic(err) + } + + if _, err = cli.ContainerWait(ctx, resp.ID); err != nil { + panic(err) + } + + out, err := cli.ContainerLogs(ctx, resp.ID, types.ContainerLogsOptions{ShowStdout: true}) + if err != nil { + panic(err) + } + + io.Copy(os.Stdout, out) +} +{% endhighlight %} +
+
+{% highlight bash %} +$ curl --unix-socket /var/run/docker.sock -H "Content-Type: application/json" \ + -d '{"Image": "alpine", "Cmd": ["echo", "hello world"]}' \ + -X POST http:/v1.24/containers/create +{"Id":"1c6594faf5","Warnings":null} + +$ curl --unix-socket /var/run/docker.sock -X POST http:/v1.24/containers/1c6594faf5/start + +$ curl --unix-socket /var/run/docker.sock -X POST http:/v1.24/containers/1c6594faf5/wait +{"StatusCode":0} + +$ curl --unix-socket /var/run/docker.sock "http:/v1.24/containers/1c6594faf5/logs?stdout=1" +hello world +{% endhighlight %} +
+
+ +To learn more, take a look at the [getting started guide](getting-started.md) diff --git a/engine/api/sdks.md b/engine/api/sdks.md new file mode 100644 index 00000000000..642e6f1fafa --- /dev/null +++ b/engine/api/sdks.md @@ -0,0 +1,61 @@ +--- +title: SDKs for Docker Engine API +description: Client libraries for the Docker Engine API. +keywords: +- API, SDK, library, Docker, index, registry, REST, documentation, clients, C#, Erlang, Go, Groovy, Java, JavaScript, Perl, PHP, Python, Ruby, Rust, Scala +redirect_from: + - /engine/api/client-libraries/ + - /engine/reference/api/remote_api_client_libraries/ + - /reference/api/remote_api_client_libraries/ +--- + +The Docker SDKs allow you to build applications that can control and manage the Docker Engine. They are interfaces for the [Docker Engine API](index.md), but also contain a number of tools to make it easier to work with the API. + +There are official libraries available in Python and Go, and there are a number of community supported libraries for other languages. + +## Python + +The Docker SDK for Python is available on the Python Package Index (PyPI), and can be installed with PIP: + + $ pip install docker + +To see how to start using it, [head to the getting started guide](getting-started.md). + +For a full reference, see the [Docker SDK for Python documentation](https://docker-py.readthedocs.io). + +## Go + +The Docker SDK for Go is a package inside the Docker Engine repository. To use it, you import it: + +{% highlight go %} +import "github.com/docker/docker/client" +{% endhighlight %} + +To see how to start using it, [head to the getting started guide](getting-started.md). + +[A full reference is available on GoDoc.](https://godoc.org/github.com/docker/docker/client) + +## Other languages + +There a number of community supported libraries available for other languages. They have not been tested by the Docker maintainers for compatibility, so if you run into any issues, file them with the library maintainers. + +| Language | Library | +| ------------- |---------| +| C# | [Docker.DotNet](https://github.com/ahmetalpbalkan/Docker.DotNet) | +| C++ | [lasote/docker_client](https://github.com/lasote/docker_client) | +| Dart | [bwu_docker](https://github.com/bwu-dart/bwu_docker) | +| Erlang | [erldocker](https://github.com/proger/erldocker) | +| Gradle | [gradle-docker-plugin](https://github.com/gesellix/gradle-docker-plugin) | +| Groovy | [docker-client](https://github.com/gesellix/docker-client) | +| Haskell | [docker-hs](https://github.com/denibertovic/docker-hs) | +| HTML (Web Components) | [docker-elements](https://github.com/kapalhq/docker-elements) | +| Java | [docker-client](https://github.com/spotify/docker-client) | +| Java | [docker-java](https://github.com/docker-java/docker-java) | +| NodeJS | [dockerode](https://github.com/apocas/dockerode) | +| Perl | [Eixo::Docker](https://github.com/alambike/eixo-docker) | +| PHP | [Docker-PHP](https://github.com/docker-php/docker-php) | +| Ruby | [docker-api](https://github.com/swipely/docker-api) | +| Rust | [docker-rust](https://github.com/abh1nav/docker-rust) | +| Rust | [shiplist](https://github.com/softprops/shiplift) | +| Scala | [tugboat](https://github.com/softprops/tugboat) | +| Scala | [reactive-docker](https://github.com/almoehi/reactive-docker) | diff --git a/engine/api/v1.25/index.html b/engine/api/v1.25/index.html new file mode 100644 index 00000000000..5070f045f6f --- /dev/null +++ b/engine/api/v1.25/index.html @@ -0,0 +1,37 @@ +--- +layout: null +redirect_from: + - /engine/reference/api/docker_remote_api_v1.25/ +--- + + + + Docker Engine API v1.25 Reference + + + + + + + + + + + + diff --git a/engine/api/v1.25/redoc.1.6.2.min.js b/engine/api/v1.25/redoc.1.6.2.min.js new file mode 100644 index 00000000000..0f54fe41d48 --- /dev/null +++ b/engine/api/v1.25/redoc.1.6.2.min.js @@ -0,0 +1,48 @@ +/*! + * ReDoc - OpenAPI/Swagger-generated API Reference Documentation + * ------------------------------------------------------------- + * Version: "1.6.2" + * Repo: https://github.com/Rebilly/ReDoc + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(function(){try{return require("esprima")}catch(t){}}(),function(){try{return require("jquery")}catch(t){}}()):"function"==typeof define&&define.amd?define("Redoc",["esprima","jquery"],e):"object"==typeof exports?exports.Redoc=e(function(){try{return require("esprima")}catch(t){}}(),function(){try{return require("jquery")}catch(t){}}()):t.Redoc=e(t.esprima,t.jquery)}(this,function(t,e){return function(t){function e(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,e),i.l=!0,i.exports}var n={};return e.m=t,e.c=n,e.i=function(t){return t},e.d=function(t,e,n){Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:n})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=1081)}([function(t,e,n){"use strict";var r=n(38),i=n(1059),o=n(185),s=function(){function t(t){this._isScalar=!1,t&&(this._subscribe=t)}return t.prototype.lift=function(e){var n=new t;return n.source=this,n.operator=e,n},t.prototype.subscribe=function(t,e,n){var r=this.operator,o=i.toSubscriber(t,e,n);if(r?r.call(o,this):o.add(this._subscribe(o)),o.syncErrorThrowable&&(o.syncErrorThrowable=!1,o.syncErrorThrown))throw o.syncErrorValue;return o},t.prototype.forEach=function(t,e){var n=this;if(e||(r.root.Rx&&r.root.Rx.config&&r.root.Rx.config.Promise?e=r.root.Rx.config.Promise:r.root.Promise&&(e=r.root.Promise)),!e)throw new Error("no Promise impl found");return new e(function(e,r){var i=n.subscribe(function(e){if(i)try{t(e)}catch(t){r(t),i.unsubscribe()}else t(e)},r,e)})},t.prototype._subscribe=function(t){return this.source.subscribe(t)},t.prototype[o.$$observable]=function(){return this},t.create=function(e){return new t(e)},t}();e.Observable=s},function(t,e,n){var r=n(14),i=n(17),o=n(51),s=n(47),a=n(92),c="prototype",u=function(t,e,n){var l,h,p,f,_=t&u.F,d=t&u.G,y=t&u.S,m=t&u.P,g=t&u.B,v=d?r:y?r[e]||(r[e]={}):(r[e]||{})[c],b=d?i:i[e]||(i[e]={}),w=b[c]||(b[c]={});d&&(n=e);for(l in n)h=!_&&v&&void 0!==v[l],p=(h?v:n)[l],f=g&&h?a(p,r):m&&"function"==typeof p?a(Function.call,p):p,v&&s(v,l,p,t&u.U),b[l]!=p&&o(b,l,f),m&&w[l]!=p&&(w[l]=p)};r.core=i,u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,u.U=64,u.R=128,t.exports=u},function(t,e,n){"use strict";var r=n(420);n.d(e,"assertPlatform",function(){return r.a}),n.d(e,"destroyPlatform",function(){return r.b}),n.d(e,"getPlatform",function(){return r.c}),n.d(e,"createPlatform",function(){return r.d}),n.d(e,"ApplicationRef",function(){return r.e}),n.d(e,"enableProdMode",function(){return r.f}),n.d(e,"isDevMode",function(){return r.g}),n.d(e,"createPlatformFactory",function(){return r.h}),n.d(e,"PlatformRef",function(){return r.i}),n.d(e,"APP_ID",function(){return r.j}),n.d(e,"PACKAGE_ROOT_URL",function(){return r.k}),n.d(e,"APP_BOOTSTRAP_LISTENER",function(){return r.l}),n.d(e,"PLATFORM_INITIALIZER",function(){return r.m}),n.d(e,"ApplicationInitStatus",function(){return r.n}),n.d(e,"APP_INITIALIZER",function(){return r.o}),n.d(e,"DebugElement",function(){return r.p}),n.d(e,"DebugNode",function(){return r.q}),n.d(e,"asNativeElements",function(){return r.r}),n.d(e,"getDebugNode",function(){return r.s}),n.d(e,"Testability",function(){return r.t}),n.d(e,"TestabilityRegistry",function(){return r.u}),n.d(e,"setTestabilityGetter",function(){return r.v}),n.d(e,"TRANSLATIONS",function(){return r.w}),n.d(e,"TRANSLATIONS_FORMAT",function(){return r.x}),n.d(e,"LOCALE_ID",function(){return r.y}),n.d(e,"ApplicationModule",function(){return r.z}),n.d(e,"wtfCreateScope",function(){return r.A}),n.d(e,"wtfLeave",function(){return r.B}),n.d(e,"wtfStartTimeRange",function(){return r.C}),n.d(e,"wtfEndTimeRange",function(){return r.D}),n.d(e,"Type",function(){return r.E}),n.d(e,"EventEmitter",function(){return r.F}),n.d(e,"ErrorHandler",function(){return r.G}),n.d(e,"AnimationTransitionEvent",function(){return r.H}),n.d(e,"AnimationPlayer",function(){return r.I}),n.d(e,"Sanitizer",function(){return r.J}),n.d(e,"SecurityContext",function(){return r.K}),n.d(e,"Attribute",function(){return r.L}),n.d(e,"ContentChild",function(){return r.M}),n.d(e,"ContentChildren",function(){return r.N}),n.d(e,"Query",function(){return r.O}),n.d(e,"ViewChild",function(){return r.P}),n.d(e,"ViewChildren",function(){return r.Q}),n.d(e,"ANALYZE_FOR_ENTRY_COMPONENTS",function(){return r.R}),n.d(e,"Component",function(){return r.S}),n.d(e,"Directive",function(){return r.T}),n.d(e,"HostBinding",function(){return r.U}),n.d(e,"HostListener",function(){return r.V}),n.d(e,"Input",function(){return r.W}),n.d(e,"Output",function(){return r.X}),n.d(e,"Pipe",function(){return r.Y}),n.d(e,"OnDestroy",function(){return r.Z}),n.d(e,"AfterContentInit",function(){return r._0}),n.d(e,"AfterViewChecked",function(){return r._1}),n.d(e,"AfterViewInit",function(){return r._2}),n.d(e,"DoCheck",function(){return r._3}),n.d(e,"OnChanges",function(){return r._4}),n.d(e,"AfterContentChecked",function(){return r._5}),n.d(e,"OnInit",function(){return r._6}),n.d(e,"CUSTOM_ELEMENTS_SCHEMA",function(){return r._7}),n.d(e,"NO_ERRORS_SCHEMA",function(){return r._8}),n.d(e,"NgModule",function(){return r._9}),n.d(e,"ViewEncapsulation",function(){return r._10}),n.d(e,"Class",function(){return r._11}),n.d(e,"forwardRef",function(){return r._12}),n.d(e,"resolveForwardRef",function(){return r._13}),n.d(e,"Injector",function(){return r._14}),n.d(e,"ReflectiveInjector",function(){return r._15}),n.d(e,"ResolvedReflectiveFactory",function(){return r._16}),n.d(e,"ReflectiveKey",function(){return r._17}),n.d(e,"OpaqueToken",function(){return r._18}),n.d(e,"NgZone",function(){return r._19}),n.d(e,"RenderComponentType",function(){return r._20}),n.d(e,"Renderer",function(){return r._21}),n.d(e,"RootRenderer",function(){return r._22}),n.d(e,"COMPILER_OPTIONS",function(){return r._23}),n.d(e,"CompilerFactory",function(){return r._24}),n.d(e,"ModuleWithComponentFactories",function(){return r._25}),n.d(e,"Compiler",function(){return r._26}),n.d(e,"ComponentFactory",function(){return r._27}),n.d(e,"ComponentRef",function(){return r._28}),n.d(e,"ComponentFactoryResolver",function(){return r._29}),n.d(e,"ElementRef",function(){return r._30}),n.d(e,"NgModuleFactory",function(){return r._31}),n.d(e,"NgModuleRef",function(){return r._32}),n.d(e,"NgModuleFactoryLoader",function(){return r._33}),n.d(e,"getModuleFactory",function(){return r._34}),n.d(e,"QueryList",function(){return r._35}),n.d(e,"SystemJsNgModuleLoader",function(){return r._36}),n.d(e,"SystemJsNgModuleLoaderConfig",function(){return r._37}),n.d(e,"TemplateRef",function(){return r._38}),n.d(e,"ViewContainerRef",function(){return r._39}),n.d(e,"EmbeddedViewRef",function(){return r._40}),n.d(e,"ViewRef",function(){return r._41}),n.d(e,"ChangeDetectionStrategy",function(){return r._42}),n.d(e,"ChangeDetectorRef",function(){return r._43}),n.d(e,"CollectionChangeRecord",function(){return r._44}),n.d(e,"DefaultIterableDiffer",function(){return r._45}),n.d(e,"IterableDiffers",function(){return r._46}),n.d(e,"KeyValueChangeRecord",function(){return r._47}),n.d(e,"KeyValueDiffers",function(){return r._48}),n.d(e,"SimpleChange",function(){return r._49}),n.d(e,"WrappedValue",function(){return r._50}),n.d(e,"platformCore",function(){return r._51}),n.d(e,"__core_private__",function(){return r._52}),n.d(e,"AUTO_STYLE",function(){return r._53}),n.d(e,"AnimationEntryMetadata",function(){return r._54}),n.d(e,"AnimationStateMetadata",function(){return r._55}),n.d(e,"AnimationStateDeclarationMetadata",function(){return r._56}),n.d(e,"AnimationStateTransitionMetadata",function(){return r._57}),n.d(e,"AnimationMetadata",function(){return r._58}),n.d(e,"AnimationKeyframesSequenceMetadata",function(){return r._59}),n.d(e,"AnimationStyleMetadata",function(){return r._60}),n.d(e,"AnimationAnimateMetadata",function(){return r._61}),n.d(e,"AnimationWithStepsMetadata",function(){return r._62}),n.d(e,"AnimationSequenceMetadata",function(){return r._63}),n.d(e,"AnimationGroupMetadata",function(){return r._64}),n.d(e,"animate",function(){return r._65}),n.d(e,"group",function(){return r._66}),n.d(e,"sequence",function(){return r._67}),n.d(e,"style",function(){return r._68}),n.d(e,"state",function(){return r._69}),n.d(e,"keyframes",function(){return r._70}),n.d(e,"transition",function(){return r._71}),n.d(e,"trigger",function(){return r._72}),n.d(e,"Inject",function(){return r._73}),n.d(e,"Optional",function(){return r._74}),n.d(e,"Injectable",function(){return r._75}),n.d(e,"Self",function(){return r._76}),n.d(e,"SkipSelf",function(){return r._77}),n.d(e,"Host",function(){return r._78})},function(t,e,n){"use strict";var r=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},i=n(269),o=n(30),s=n(781),a=n(186),c=function(t){function e(n,r,i){switch(t.call(this),this.syncErrorValue=null,this.syncErrorThrown=!1,this.syncErrorThrowable=!1,this.isStopped=!1,arguments.length){case 0:this.destination=s.empty;break;case 1:if(!n){this.destination=s.empty;break}if("object"==typeof n){n instanceof e?(this.destination=n,this.destination.add(this)):(this.syncErrorThrowable=!0,this.destination=new u(this,n));break}default:this.syncErrorThrowable=!0,this.destination=new u(this,n,r,i)}}return r(e,t),e.prototype[a.$$rxSubscriber]=function(){return this},e.create=function(t,n,r){var i=new e(t,n,r);return i.syncErrorThrowable=!1,i},e.prototype.next=function(t){this.isStopped||this._next(t)},e.prototype.error=function(t){this.isStopped||(this.isStopped=!0,this._error(t))},e.prototype.complete=function(){this.isStopped||(this.isStopped=!0,this._complete())},e.prototype.unsubscribe=function(){this.closed||(this.isStopped=!0,t.prototype.unsubscribe.call(this))},e.prototype._next=function(t){this.destination.next(t)},e.prototype._error=function(t){this.destination.error(t),this.unsubscribe()},e.prototype._complete=function(){this.destination.complete(),this.unsubscribe()},e}(o.Subscription);e.Subscriber=c;var u=function(t){function e(e,n,r,o){t.call(this),this._parent=e;var s,a=this;i.isFunction(n)?s=n:n&&(a=n,s=n.next,r=n.error,o=n.complete,i.isFunction(a.unsubscribe)&&this.add(a.unsubscribe.bind(a)),a.unsubscribe=this.unsubscribe.bind(this)),this._context=a,this._next=s,this._error=r,this._complete=o}return r(e,t),e.prototype.next=function(t){if(!this.isStopped&&this._next){var e=this._parent;e.syncErrorThrowable?this.__tryOrSetError(e,this._next,t)&&this.unsubscribe():this.__tryOrUnsub(this._next,t)}},e.prototype.error=function(t){if(!this.isStopped){var e=this._parent;if(this._error)e.syncErrorThrowable?(this.__tryOrSetError(e,this._error,t),this.unsubscribe()):(this.__tryOrUnsub(this._error,t),this.unsubscribe());else{if(!e.syncErrorThrowable)throw this.unsubscribe(),t;e.syncErrorValue=t,e.syncErrorThrown=!0,this.unsubscribe()}}},e.prototype.complete=function(){if(!this.isStopped){var t=this._parent;this._complete?t.syncErrorThrowable?(this.__tryOrSetError(t,this._complete),this.unsubscribe()):(this.__tryOrUnsub(this._complete),this.unsubscribe()):this.unsubscribe()}},e.prototype.__tryOrUnsub=function(t,e){try{t.call(this._context,e)}catch(t){throw this.unsubscribe(),t}},e.prototype.__tryOrSetError=function(t,e,n){try{e.call(this._context,n)}catch(e){return t.syncErrorValue=e,t.syncErrorThrown=!0,!0}return!1},e.prototype._unsubscribe=function(){var t=this._parent;this._context=null,this._parent=null,t.unsubscribe()},e}(c)},function(t,e,n){"use strict";var r=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},i=n(3),o=function(t){function e(){t.apply(this,arguments)}return r(e,t),e.prototype.notifyNext=function(t,e,n,r,i){this.destination.next(e)},e.prototype.notifyError=function(t,e){this.destination.error(t)},e.prototype.notifyComplete=function(t){this.destination.complete()},e}(i.Subscriber);e.OuterSubscriber=o},function(t,e,n){"use strict";function r(t,e,n,r){var h=new u.InnerSubscriber(t,n,r);if(h.closed)return null;if(e instanceof a.Observable)return e._isScalar?(h.next(e.value),h.complete(),null):e.subscribe(h);if(o.isArray(e)){for(var p=0,f=e.length;p=o())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+o().toString(16)+" bytes");return 0|t}function y(e){return+e!=e&&(e=0),t.alloc(+e)}function m(e,n){if(t.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var r=e.length;if(0===r)return 0;for(var i=!1;;)switch(n){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return W(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return G(e).length;default:if(i)return W(e).length;n=(""+n).toLowerCase(),i=!0}}function g(t,e,n){var r=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if(n>>>=0,e>>>=0,n<=e)return"";for(t||(t="utf8");;)switch(t){case"hex":return P(this,e,n);case"utf8":case"utf-8":return O(this,e,n);case"ascii":return A(this,e,n);case"latin1":case"binary":return N(this,e,n);case"base64":return S(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return M(this,e,n);default:if(r)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),r=!0}}function v(t,e,n){var r=t[e];t[e]=t[n],t[n]=r}function b(e,n,r,i,o){if(0===e.length)return-1;if("string"==typeof r?(i=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=o?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(o)return-1;r=e.length-1}else if(r<0){if(!o)return-1;r=0}if("string"==typeof n&&(n=t.from(n,i)),t.isBuffer(n))return 0===n.length?-1:w(e,n,r,i,o);if("number"==typeof n)return n=255&n,t.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,n,r):Uint8Array.prototype.lastIndexOf.call(e,n,r):w(e,[n],r,i,o);throw new TypeError("val must be string, number or Buffer"); +}function w(t,e,n,r,i){function o(t,e){return 1===s?t[e]:t.readUInt16BE(e*s)}var s=1,a=t.length,c=e.length;if(void 0!==r&&(r=String(r).toLowerCase(),"ucs2"===r||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(t.length<2||e.length<2)return-1;s=2,a/=2,c/=2,n/=2}var u;if(i){var l=-1;for(u=n;ua&&(n=a-c),u=n;u>=0;u--){for(var h=!0,p=0;pi&&(r=i)):r=i;var o=e.length;if(o%2!==0)throw new TypeError("Invalid hex string");r>o/2&&(r=o/2);for(var s=0;s239?4:o>223?3:o>191?2:1;if(i+a<=n){var c,u,l,h;switch(a){case 1:o<128&&(s=o);break;case 2:c=t[i+1],128===(192&c)&&(h=(31&o)<<6|63&c,h>127&&(s=h));break;case 3:c=t[i+1],u=t[i+2],128===(192&c)&&128===(192&u)&&(h=(15&o)<<12|(63&c)<<6|63&u,h>2047&&(h<55296||h>57343)&&(s=h));break;case 4:c=t[i+1],u=t[i+2],l=t[i+3],128===(192&c)&&128===(192&u)&&128===(192&l)&&(h=(15&o)<<18|(63&c)<<12|(63&u)<<6|63&l,h>65535&&h<1114112&&(s=h))}}null===s?(s=65533,a=1):s>65535&&(s-=65536,r.push(s>>>10&1023|55296),s=56320|1023&s),r.push(s),i+=a}return R(r)}function R(t){var e=t.length;if(e<=tt)return String.fromCharCode.apply(String,t);for(var n="",r=0;rr)&&(n=r);for(var i="",o=e;on)throw new RangeError("Trying to access beyond buffer length")}function V(e,n,r,i,o,s){if(!t.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(n>o||ne.length)throw new RangeError("Index out of range")}function j(t,e,n,r){e<0&&(e=65535+e+1);for(var i=0,o=Math.min(t.length-n,2);i>>8*(r?i:1-i)}function L(t,e,n,r){e<0&&(e=4294967295+e+1);for(var i=0,o=Math.min(t.length-n,4);i>>8*(r?i:3-i)&255}function F(t,e,n,r,i,o){if(n+r>t.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function B(t,e,n,r,i){return i||F(t,e,n,4,3.4028234663852886e38,-3.4028234663852886e38),X.write(t,e,n,r,23,4),n+4}function U(t,e,n,r,i){return i||F(t,e,n,8,1.7976931348623157e308,-1.7976931348623157e308),X.write(t,e,n,r,52,8),n+8}function z(t){if(t=H(t).replace(et,""),t.length<2)return"";for(;t.length%4!==0;)t+="=";return t}function H(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}function q(t){return t<16?"0"+t.toString(16):t.toString(16)}function W(t,e){e=e||1/0;for(var n,r=t.length,i=null,o=[],s=0;s55295&&n<57344){if(!i){if(n>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===r){(e-=3)>-1&&o.push(239,191,189);continue}i=n;continue}if(n<56320){(e-=3)>-1&&o.push(239,191,189),i=n;continue}n=(i-55296<<10|n-56320)+65536}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,n<128){if((e-=1)<0)break;o.push(n)}else if(n<2048){if((e-=2)<0)break;o.push(n>>6|192,63&n|128)}else if(n<65536){if((e-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return o}function Y(t){for(var e=[],n=0;n>8,i=n%256,o.push(i),o.push(r);return o}function G(t){return K.toByteArray(z(t))}function Z(t,e,n,r){for(var i=0;i=e.length||i>=t.length);++i)e[i+n]=t[i];return i}function J(t){return t!==t}var K=n(487),X=n(655),Q=n(255);e.Buffer=t,e.SlowBuffer=y,e.INSPECT_MAX_BYTES=50,t.TYPED_ARRAY_SUPPORT=void 0!==r.TYPED_ARRAY_SUPPORT?r.TYPED_ARRAY_SUPPORT:i(),e.kMaxLength=o(),t.poolSize=8192,t._augment=function(e){return e.__proto__=t.prototype,e},t.from=function(t,e,n){return a(null,t,e,n)},t.TYPED_ARRAY_SUPPORT&&(t.prototype.__proto__=Uint8Array.prototype,t.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&t[Symbol.species]===t&&Object.defineProperty(t,Symbol.species,{value:null,configurable:!0})),t.alloc=function(t,e,n){return u(null,t,e,n)},t.allocUnsafe=function(t){return l(null,t)},t.allocUnsafeSlow=function(t){return l(null,t)},t.isBuffer=function(t){return!(null==t||!t._isBuffer)},t.compare=function(e,n){if(!t.isBuffer(e)||!t.isBuffer(n))throw new TypeError("Arguments must be Buffers");if(e===n)return 0;for(var r=e.length,i=n.length,o=0,s=Math.min(r,i);o0&&(t=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(t+=" ... ")),""},t.prototype.compare=function(e,n,r,i,o){if(!t.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===n&&(n=0),void 0===r&&(r=e?e.length:0),void 0===i&&(i=0),void 0===o&&(o=this.length),n<0||r>e.length||i<0||o>this.length)throw new RangeError("out of range index");if(i>=o&&n>=r)return 0;if(i>=o)return-1;if(n>=r)return 1;if(n>>>=0,r>>>=0,i>>>=0,o>>>=0,this===e)return 0;for(var s=o-i,a=r-n,c=Math.min(s,a),u=this.slice(i,o),l=e.slice(n,r),h=0;hi)&&(n=i),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var o=!1;;)switch(r){case"hex":return x(this,t,e,n);case"utf8":case"utf-8":return I(this,t,e,n);case"ascii":return C(this,t,e,n);case"latin1":case"binary":return k(this,t,e,n);case"base64":return T(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return E(this,t,e,n);default:if(o)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),o=!0}},t.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var tt=4096;t.prototype.slice=function(e,n){var r=this.length;e=~~e,n=void 0===n?r:~~n,e<0?(e+=r,e<0&&(e=0)):e>r&&(e=r),n<0?(n+=r,n<0&&(n=0)):n>r&&(n=r),n0&&(i*=256);)r+=this[t+--e]*i;return r},t.prototype.readUInt8=function(t,e){return e||D(t,1,this.length),this[t]},t.prototype.readUInt16LE=function(t,e){return e||D(t,2,this.length),this[t]|this[t+1]<<8},t.prototype.readUInt16BE=function(t,e){return e||D(t,2,this.length),this[t]<<8|this[t+1]},t.prototype.readUInt32LE=function(t,e){return e||D(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},t.prototype.readUInt32BE=function(t,e){return e||D(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},t.prototype.readIntLE=function(t,e,n){t=0|t,e=0|e,n||D(t,e,this.length);for(var r=this[t],i=1,o=0;++o=i&&(r-=Math.pow(2,8*e)),r},t.prototype.readIntBE=function(t,e,n){t=0|t,e=0|e,n||D(t,e,this.length);for(var r=e,i=1,o=this[t+--r];r>0&&(i*=256);)o+=this[t+--r]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*e)),o},t.prototype.readInt8=function(t,e){return e||D(t,1,this.length),128&this[t]?(255-this[t]+1)*-1:this[t]},t.prototype.readInt16LE=function(t,e){e||D(t,2,this.length);var n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},t.prototype.readInt16BE=function(t,e){e||D(t,2,this.length);var n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},t.prototype.readInt32LE=function(t,e){return e||D(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},t.prototype.readInt32BE=function(t,e){return e||D(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},t.prototype.readFloatLE=function(t,e){return e||D(t,4,this.length),X.read(this,t,!0,23,4)},t.prototype.readFloatBE=function(t,e){return e||D(t,4,this.length),X.read(this,t,!1,23,4)},t.prototype.readDoubleLE=function(t,e){return e||D(t,8,this.length),X.read(this,t,!0,52,8)},t.prototype.readDoubleBE=function(t,e){return e||D(t,8,this.length),X.read(this,t,!1,52,8)},t.prototype.writeUIntLE=function(t,e,n,r){if(t=+t,e=0|e,n=0|n,!r){var i=Math.pow(2,8*n)-1;V(this,t,e,n,i,0)}var o=1,s=0;for(this[e]=255&t;++s=0&&(s*=256);)this[e+o]=t/s&255;return e+n},t.prototype.writeUInt8=function(e,n,r){return e=+e,n=0|n,r||V(this,e,n,1,255,0),t.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[n]=255&e,n+1},t.prototype.writeUInt16LE=function(e,n,r){return e=+e,n=0|n,r||V(this,e,n,2,65535,0),t.TYPED_ARRAY_SUPPORT?(this[n]=255&e,this[n+1]=e>>>8):j(this,e,n,!0),n+2},t.prototype.writeUInt16BE=function(e,n,r){return e=+e,n=0|n,r||V(this,e,n,2,65535,0),t.TYPED_ARRAY_SUPPORT?(this[n]=e>>>8,this[n+1]=255&e):j(this,e,n,!1),n+2},t.prototype.writeUInt32LE=function(e,n,r){return e=+e,n=0|n,r||V(this,e,n,4,4294967295,0),t.TYPED_ARRAY_SUPPORT?(this[n+3]=e>>>24,this[n+2]=e>>>16,this[n+1]=e>>>8,this[n]=255&e):L(this,e,n,!0),n+4},t.prototype.writeUInt32BE=function(e,n,r){return e=+e,n=0|n,r||V(this,e,n,4,4294967295,0),t.TYPED_ARRAY_SUPPORT?(this[n]=e>>>24,this[n+1]=e>>>16,this[n+2]=e>>>8,this[n+3]=255&e):L(this,e,n,!1),n+4},t.prototype.writeIntLE=function(t,e,n,r){if(t=+t,e=0|e,!r){var i=Math.pow(2,8*n-1);V(this,t,e,n,i-1,-i)}var o=0,s=1,a=0;for(this[e]=255&t;++o>0)-a&255;return e+n},t.prototype.writeIntBE=function(t,e,n,r){if(t=+t,e=0|e,!r){var i=Math.pow(2,8*n-1);V(this,t,e,n,i-1,-i)}var o=n-1,s=1,a=0;for(this[e+o]=255&t;--o>=0&&(s*=256);)t<0&&0===a&&0!==this[e+o+1]&&(a=1),this[e+o]=(t/s>>0)-a&255;return e+n},t.prototype.writeInt8=function(e,n,r){return e=+e,n=0|n,r||V(this,e,n,1,127,-128),t.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[n]=255&e,n+1},t.prototype.writeInt16LE=function(e,n,r){return e=+e,n=0|n,r||V(this,e,n,2,32767,-32768),t.TYPED_ARRAY_SUPPORT?(this[n]=255&e,this[n+1]=e>>>8):j(this,e,n,!0),n+2},t.prototype.writeInt16BE=function(e,n,r){return e=+e,n=0|n,r||V(this,e,n,2,32767,-32768),t.TYPED_ARRAY_SUPPORT?(this[n]=e>>>8,this[n+1]=255&e):j(this,e,n,!1),n+2},t.prototype.writeInt32LE=function(e,n,r){return e=+e,n=0|n,r||V(this,e,n,4,2147483647,-2147483648),t.TYPED_ARRAY_SUPPORT?(this[n]=255&e,this[n+1]=e>>>8,this[n+2]=e>>>16,this[n+3]=e>>>24):L(this,e,n,!0),n+4},t.prototype.writeInt32BE=function(e,n,r){return e=+e,n=0|n,r||V(this,e,n,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),t.TYPED_ARRAY_SUPPORT?(this[n]=e>>>24,this[n+1]=e>>>16,this[n+2]=e>>>8,this[n+3]=255&e):L(this,e,n,!1),n+4},t.prototype.writeFloatLE=function(t,e,n){return B(this,t,e,!0,n)},t.prototype.writeFloatBE=function(t,e,n){return B(this,t,e,!1,n)},t.prototype.writeDoubleLE=function(t,e,n){return U(this,t,e,!0,n)},t.prototype.writeDoubleBE=function(t,e,n){return U(this,t,e,!1,n)},t.prototype.copy=function(e,n,r,i){if(r||(r=0),i||0===i||(i=this.length),n>=e.length&&(n=e.length),n||(n=0),i>0&&i=this.length)throw new RangeError("sourceStart out of bounds");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),e.length-n=0;--o)e[o+n]=this[o+r];else if(s<1e3||!t.TYPED_ARRAY_SUPPORT)for(o=0;o>>=0,r=void 0===r?this.length:r>>>0,e||(e=0);var s;if("number"==typeof e)for(s=n;s=e.length-1?e.pop():e.splice(n,1)}this.viewContainer=null,this.dirtyParentQueriesInternal()},t.prototype._renderDetach=function(){this._directRenderer?this.visitRootNodesInternal(this._directRenderer.remove,null):this.renderer.detachView(this.flatRootNodes)},t.prototype.attachAfter=function(t,e){this._renderAttach(t,e),this.viewContainer=t,this.declaredViewContainer&&this.declaredViewContainer!==t&&(this.declaredViewContainer.projectedViews||(this.declaredViewContainer.projectedViews=[]),this.declaredViewContainer.projectedViews.push(this)),this.dirtyParentQueriesInternal()},t.prototype.moveAfter=function(t,e){this._renderAttach(t,e),this.dirtyParentQueriesInternal()},t.prototype._renderAttach=function(t,e){var n=e?e.lastRootNode:t.nativeElement;if(this._directRenderer){var r=this._directRenderer.nextSibling(n);if(r)this.visitRootNodesInternal(this._directRenderer.insertBefore,r);else{var i=this._directRenderer.parentElement(n);i&&this.visitRootNodesInternal(this._directRenderer.appendChild,i)}}else this.renderer.attachViewAfter(n,this.flatRootNodes)},Object.defineProperty(t.prototype,"changeDetectorRef",{get:function(){return this.ref},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"flatRootNodes",{get:function(){var t=[];return this.visitRootNodesInternal(f.addToArray,t),t},enumerable:!0,configurable:!0}),t.prototype.projectNodes=function(t,e){if(this._directRenderer)this.visitProjectedNodes(e,this._directRenderer.appendChild,t);else{var n=[];this.visitProjectedNodes(e,f.addToArray,n),this.renderer.projectNodes(t,n)}},t.prototype.visitProjectedNodes=function(t,e,n){switch(this.type){case p.ViewType.EMBEDDED:this.parentView.visitProjectedNodes(t,e,n);break;case p.ViewType.COMPONENT:if(this.parentView.type===p.ViewType.HOST)for(var r=this.parentView._hostProjectableNodes[t]||[],i=0;i=0&&(t="https")):t=e.protocol?e.protocol.slice(0,-1):"http";var r=this._schema.host||e.host;this.basePath=this._schema.basePath||"/",this.apiUrl=t+"://"+r+this.basePath,this.apiUrl.endsWith("/")&&(this.apiUrl=this.apiUrl.substr(0,this.apiUrl.length-1)),this.preprocess()},t.prototype.preprocess=function(){var t=new a.MdRenderer;if(this._schema.info.description||(this._schema.info.description=""),this._schema.securityDefinitions){var e=n(159).SecurityDefinitions;t.addPreprocessor(e.insertTagIntoDescription)}this._schema.info["x-redoc-html-description"]=t.renderMd(this._schema.info.description),this._schema.info["x-redoc-markdown-headers"]=t.firstLevelHeadings},Object.defineProperty(t.prototype,"schema",{get:function(){return this._schema},set:function(t){this._schema=t,this.spec.next(this._schema)},enumerable:!0,configurable:!0}),t.prototype.byPointer=function(t){var e=null;if(void 0==t)return null;try{e=i.JsonPointer.get(this._schema,decodeURIComponent(t))}catch(n){"#"!==t.charAt(0)&&(t="#"+t);try{e=this.parser.$refs.get(decodeURIComponent(t))}catch(t){}}return e},t.prototype.resolveRefs=function(t){var e=this;return Object.keys(t).forEach(function(n){if(t[n].$ref){var r=e.byPointer(t[n].$ref);r._pointer=t[n].$ref,t[n]=r}}),t},t.prototype.getMethodParams=function(t,e){function n(t,e){if(!Array.isArray(t))throw new Error("parameters must be an array. Got "+typeof t+" at "+e);return t.map(function(t,n){return t._pointer=i.JsonPointer.join(e,n),t})}"parameters"===i.JsonPointer.baseName(t)&&(t=i.JsonPointer.dirName(t));var r=i.JsonPointer.join(i.JsonPointer.dirName(t),["parameters"]),o=this.byPointer(r)||[],s=i.JsonPointer.join(t,["parameters"]),a=this.byPointer(s)||[];return o=n(o,r),a=n(a,s),e&&(a=this.resolveRefs(a),o=this.resolveRefs(o)),a.concat(o)},t.prototype.getTagsMap=function(){for(var t=this._schema.tags||[],e={},n=0,r=t;n0?r[e-1]:null;t.moveAfter(this,i)},t.prototype.attachView=function(t,e){if(t.type===o.ViewType.COMPONENT)throw new Error("Component views can't be moved!");var n=this.nestedViews;null==n&&(n=[],this.nestedViews=n),e>=n.length?n.push(t):n.splice(e,0,t);var r=e>0?n[e-1]:null;t.attachAfter(this,r)},t.prototype.detachView=function(t){var e=this.nestedViews[t];if(t>=this.nestedViews.length-1?this.nestedViews.pop():this.nestedViews.splice(t,1),e.type===o.ViewType.COMPONENT)throw new Error("Component views can't be moved!");return e.detach(),e},t}()},function(t,e,n){var r=n(6),i=n(328),o=n(84),s=Object.defineProperty;e.f=n(29)?Object.defineProperty:function(t,e,n){ +if(r(t),e=o(e,!0),r(n),i)try{return s(t,e,n)}catch(t){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(t[e]=n.value),t}},function(t,e,n){"use strict";var r=n(22);n.d(e,"TemplateRef",function(){return o}),n.d(e,"TemplateRef_",function(){return s});var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=function(){function t(){}return Object.defineProperty(t.prototype,"elementRef",{get:function(){return null},enumerable:!0,configurable:!0}),t}(),s=function(t){function e(e,n,r){t.call(this),this._parentView=e,this._nodeIndex=n,this._nativeElement=r}return i(e,t),e.prototype.createEmbeddedView=function(t){var e=this._parentView.createEmbeddedViewInternal(this._nodeIndex);return e.create(t||{}),e.ref},Object.defineProperty(e.prototype,"elementRef",{get:function(){return new r.ElementRef(this._nativeElement)},enumerable:!0,configurable:!0}),e}(o)},function(t,e,n){"use strict";function r(t){var e={};return null!==t&&Object.keys(t).forEach(function(n){t[n].forEach(function(t){e[String(t)]=n})}),e}function i(t,e){if(e=e||{},Object.keys(e).forEach(function(e){if(s.indexOf(e)===-1)throw new o('Unknown option "'+e+'" is met in definition of "'+t+'" YAML type.')}),this.tag=t,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(t){return t},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.defaultStyle=e.defaultStyle||null,this.styleAliases=r(e.styleAliases||null),a.indexOf(this.kind)===-1)throw new o('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}var o=n(132),s=["kind","resolve","construct","instanceOf","predicate","represent","defaultStyle","styleAliases"],a=["scalar","sequence","mapping"];t.exports=i},function(t,e){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e,n){"use strict";var r=n(2);n.d(e,"NgIf",function(){return i});var i=function(){function t(t,e){this._viewContainer=t,this._template=e,this._hasView=!1}return Object.defineProperty(t.prototype,"ngIf",{set:function(t){t&&!this._hasView?(this._hasView=!0,this._viewContainer.createEmbeddedView(this._template)):!t&&this._hasView&&(this._hasView=!1,this._viewContainer.clear())},enumerable:!0,configurable:!0}),t.decorators=[{type:r.Directive,args:[{selector:"[ngIf]"}]}],t.ctorParameters=[{type:r.ViewContainerRef},{type:r.TemplateRef}],t.propDecorators={ngIf:[{type:r.Input}]},t}()},function(t,e,n){t.exports=!n(10)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e,n){"use strict";var r=n(66),i=n(1057),o=n(269),s=n(33),a=n(31),c=n(385),u=function(){function t(t){this.closed=!1,t&&(this._unsubscribe=t)}return t.prototype.unsubscribe=function(){var t,e=!1;if(!this.closed){this.closed=!0;var n=this,u=n._unsubscribe,l=n._subscriptions;if(this._subscriptions=null,o.isFunction(u)){var h=s.tryCatch(u).call(this);h===a.errorObject&&(e=!0,(t=t||[]).push(a.errorObject.e))}if(r.isArray(l))for(var p=-1,f=l.length;++p0?i(r(t),9007199254740991):0}},function(t,e,n){"use strict";(function(t){var n={boolean:!1,function:!0,object:!0,number:!1,string:!1,undefined:!1};e.root=n[typeof self]&&self||n[typeof window]&&window;var r=n[typeof t]&&t;!r||r.global!==r&&r.window!==r||(e.root=r)}).call(e,n(27))},function(t,e,n){"use strict";n.d(e,"SecurityContext",function(){return r}),n.d(e,"Sanitizer",function(){return i});var r;!function(t){t[t.NONE=0]="NONE",t[t.HTML=1]="HTML",t[t.STYLE=2]="STYLE",t[t.SCRIPT=3]="SCRIPT",t[t.URL=4]="URL",t[t.RESOURCE_URL=5]="RESOURCE_URL"}(r||(r={}));var i=function(){function t(){}return t}()},function(t,e,n){"use strict";var r=n(20);e.SpecManager=r.SpecManager;var i=function(){function t(t){this.specMgr=t,this.componentSchema=null,this.dereferencedCache={}}return t.prototype.ngOnInit=function(){this.preinit()},t.prototype.preinit=function(){this.componentSchema=this.specMgr.byPointer(this.pointer||""),this.init()},t.prototype.ngOnDestroy=function(){this.destroy()},t.prototype.init=function(){},t.prototype.destroy=function(){},t}();e.BaseComponent=i},function(t,e){var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},function(t,e){"function"==typeof Object.create?t.exports=function(t,e){t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}})}:t.exports=function(t,e){t.super_=e;var n=function(){};n.prototype=e.prototype,t.prototype=new n,t.prototype.constructor=t}},function(t,e){function n(){throw new Error("setTimeout has not been defined")}function r(){throw new Error("clearTimeout has not been defined")}function i(t){if(l===setTimeout)return setTimeout(t,0);if((l===n||!l)&&setTimeout)return l=setTimeout,setTimeout(t,0);try{return l(t,0)}catch(e){try{return l.call(null,t,0)}catch(e){return l.call(this,t,0)}}}function o(t){if(h===clearTimeout)return clearTimeout(t);if((h===r||!h)&&clearTimeout)return h=clearTimeout,clearTimeout(t);try{return h(t)}catch(e){try{return h.call(null,t)}catch(e){return h.call(this,t)}}}function s(){d&&f&&(d=!1,f.length?_=f.concat(_):y=-1,_.length&&a())}function a(){if(!d){var t=i(s);d=!0;for(var e=_.length;e;){for(f=_,_=[];++y1)for(var n=1;n=55296&&t<=57343)&&(!(t>=64976&&t<=65007)&&(65535!==(65535&t)&&65534!==(65535&t)&&(!(t>=0&&t<=8)&&(11!==t&&(!(t>=14&&t<=31)&&(!(t>=127&&t<=159)&&!(t>1114111)))))))}function u(t){if(t>65535){t-=65536;var e=55296+(t>>10),n=56320+(1023&t);return String.fromCharCode(e,n)}return String.fromCharCode(t)}function l(t,e){var n=0;return o(g,e)?g[e]:35===e.charCodeAt(0)&&m.test(e)&&(n="x"===e[1].toLowerCase()?parseInt(e.slice(2),16):parseInt(e.slice(1),10),c(n))?u(n):t}function h(t){return t.indexOf("&")<0?t:t.replace(y,l)}function p(t){return w[t]}function f(t){return v.test(t)?t.replace(b,p):t}var _=Object.prototype.hasOwnProperty,d=/\\([\\!"#$%&'()*+,.\/:;<=>?@[\]^_`{|}~-])/g,y=/&([a-z#][a-z0-9]{1,31});/gi,m=/^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i,g=n(360),v=/[&<>"]/,b=/[&<>"]/g,w={"&":"&","<":"<",">":">",'"':"""};e.assign=s,e.isString=i,e.has=o,e.unescapeMd=a,e.isValidEntityCode=c,e.fromCodePoint=u,e.replaceEntities=h,e.escapeHtml=f},function(t,e,n){"use strict";var r=n(135),i=n(136);e.async=new i.AsyncScheduler(r.AsyncAction)},function(t,e,n){"use strict";var r=n(2),i=n(49);n.d(e,"NgForRow",function(){return o}),n.d(e,"NgFor",function(){return s});var o=function(){function t(t,e,n){this.$implicit=t,this.index=e,this.count=n}return Object.defineProperty(t.prototype,"first",{get:function(){return 0===this.index},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"last",{get:function(){return this.index===this.count-1},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"even",{get:function(){return this.index%2===0},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"odd",{get:function(){return!this.even},enumerable:!0,configurable:!0}),t}(),s=function(){function t(t,e,n,r){this._viewContainer=t,this._template=e,this._differs=n,this._cdr=r,this._differ=null}return Object.defineProperty(t.prototype,"ngForTemplate",{set:function(t){t&&(this._template=t)},enumerable:!0,configurable:!0}),t.prototype.ngOnChanges=function(t){if("ngForOf"in t){var e=t.ngForOf.currentValue;if(!this._differ&&e)try{this._differ=this._differs.find(e).create(this._cdr,this.ngForTrackBy)}catch(t){throw new Error("Cannot find a differ supporting object '"+e+"' of type '"+n.i(i.f)(e)+"'. NgFor only supports binding to Iterables such as Arrays.")}}},t.prototype.ngDoCheck=function(){if(this._differ){var t=this._differ.diff(this.ngForOf);t&&this._applyChanges(t)}},t.prototype._applyChanges=function(t){var e=this,n=[];t.forEachOperation(function(t,r,i){if(null==t.previousIndex){var s=e._viewContainer.createEmbeddedView(e._template,new o(null,null,null),i),c=new a(t,s);n.push(c)}else if(null==i)e._viewContainer.remove(r);else{var s=e._viewContainer.get(r);e._viewContainer.move(s,i);var c=new a(t,s);n.push(c)}});for(var r=0;r"+i+""};t.exports=function(t,e){var n={};n[t]=e(a),r(r.P+r.F*i(function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3}),"String",n)}},function(t,e,n){"use strict";(function(t){function r(t){return t.name||typeof t}function i(t){return null!=t}function o(t){return null==t}function s(t){return t instanceof Date&&!isNaN(t.valueOf())}function a(t){if("string"==typeof t)return t;if(null==t)return""+t;if(t.overriddenName)return t.overriddenName;if(t.name)return t.name;var e=t.toString(),n=e.indexOf("\n");return n===-1?e:e.substring(0,n)}function c(t){return null!==t&&("function"==typeof t||"object"==typeof t)}function u(){if(!f)if(l.Symbol&&Symbol.iterator)f=Symbol.iterator;else for(var t=Object.getOwnPropertyNames(Map.prototype),e=0;e1;){var o=r.shift();i=i.hasOwnProperty(o)&&null!=i[o]?i[o]:i[o]={}}void 0!==i&&null!==i||(i={}),i[r.shift()]=n}function c(){if(!h)if(u.Symbol&&Symbol.iterator)h=Symbol.iterator;else for(var t=Object.getOwnPropertyNames(Map.prototype),e=0;ew;w++)if((p||w in g)&&(d=g[w],y=v(d,w,m),t))if(n)x[w]=y;else if(y)switch(t){case 3:return!0;case 5:return d;case 6:return w;case 2:x.push(d)}else if(l)return!1;return h?-1:u||l?l:x}}},function(t,e,n){var r=n(41),i=n(52),o=n(249)("IE_PROTO"),s=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=i(t),r(t,o)?t[o]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?s:null}},function(t,e,n){var r=n(1),i=n(17),o=n(10);t.exports=function(t,e){var n=(i.Object||{})[t]||Object[t],s={};s[t]=e(n),r(r.S+r.F*o(function(){n(1)}),"Object",s)}},function(t,e,n){(function(t){function n(t){return Array.isArray?Array.isArray(t):"[object Array]"===y(t)}function r(t){return"boolean"==typeof t}function i(t){return null===t}function o(t){return null==t}function s(t){return"number"==typeof t}function a(t){return"string"==typeof t}function c(t){return"symbol"==typeof t}function u(t){return void 0===t}function l(t){return"[object RegExp]"===y(t)}function h(t){return"object"==typeof t&&null!==t}function p(t){return"[object Date]"===y(t)}function f(t){return"[object Error]"===y(t)||t instanceof Error}function _(t){return"function"==typeof t}function d(t){return null===t||"boolean"==typeof t||"number"==typeof t||"string"==typeof t||"symbol"==typeof t||"undefined"==typeof t}function y(t){return Object.prototype.toString.call(t)}e.isArray=n,e.isBoolean=r,e.isNull=i,e.isNullOrUndefined=o,e.isNumber=s,e.isString=a,e.isSymbol=c,e.isUndefined=u,e.isRegExp=l,e.isObject=h,e.isDate=p,e.isError=f,e.isFunction=_,e.isPrimitive=d,e.isBuffer=t.isBuffer}).call(e,n(16).Buffer)},function(t,e){"use strict";e.isArray=Array.isArray||function(t){return t&&"number"==typeof t.length}},function(t,e,n){"use strict";var r=n(2),i=n(105),o=n(35),s=n(78);e.INVIEW_POSITION={ABOVE:1,BELLOW:-1,INVIEW:0};var a=function(){function t(t){this.scroll=new r.EventEmitter,this.scrollYOffset=function(){return t.options.scrollYOffset()},this.$scrollParent=t.options.$scrollParent||window,this.scroll=new r.EventEmitter,this.bind(),"scrollRestoration"in history&&(history.scrollRestoration="manual")}return t.prototype.scrollY=function(){return void 0!=this.$scrollParent.pageYOffset?this.$scrollParent.pageYOffset:this.$scrollParent.scrollTop},t.prototype.getElementPos=function(t,n){void 0===n&&(n=!1);var r=this.scrollYOffset(),i=n?-1:1;return i*Math.floor(t.getBoundingClientRect().top)>i*r?e.INVIEW_POSITION.ABOVE:i*t.getBoundingClientRect().bottom<=i*r?e.INVIEW_POSITION.BELLOW:e.INVIEW_POSITION.INVIEW},t.prototype.scrollToPos=function(t){this.$scrollParent.scrollTo?this.$scrollParent.scrollTo(0,Math.floor(t)):this.$scrollParent.scrollTop=t},t.prototype.scrollTo=function(t,e){if(void 0===e&&(e=0),t){var n=t.getBoundingClientRect(),r=this.scrollY()+n.top-this.scrollYOffset()+e+1;return this.scrollToPos(r),r}},t.prototype.saveScroll=function(){var t=this._stickElement;if(t){var e=t.offsetParent;this._savedPosition=t.offsetTop+e.offsetTop}},t.prototype.setStickElement=function(t){this._stickElement=t},t.prototype.restoreScroll=function(){var t=this._stickElement;if(t){var e=t.offsetParent,n=t.offsetTop+e.offsetTop,r=this.scrollY()+(n-this._savedPosition);this.scrollToPos(r)}},t.prototype.relativeScrollPos=function(t){var e=t.getBoundingClientRect();return-e.top+this.scrollYOffset()-1},t.prototype.scrollHandler=function(t){var e=this.scrollY()-this.prevOffsetY>0;this.prevOffsetY=this.scrollY(),this.scroll.next({isScrolledDown:e,evt:t})},t.prototype.bind=function(){var t=this;this.prevOffsetY=this.scrollY(),this._cancel=i.BrowserDomAdapter.onAndCancel(this.$scrollParent,"scroll",s.throttle(function(e){t.scrollHandler(e)},100,this))},t.prototype.unbind=function(){this._cancel()},t=__decorate([r.Injectable(),__metadata("design:paramtypes",["function"==typeof(n="undefined"!=typeof o.OptionsService&&o.OptionsService)&&n||Object])],t);var n}();e.ScrollService=a},function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,n){var r=n(345),i=n(1),o=n(172)("metadata"),s=o.store||(o.store=new(n(353))),a=function(t,e,n){var i=s.get(t);if(!i){if(!n)return;s.set(t,i=new r)}var o=i.get(e);if(!o){if(!n)return;i.set(e,o=new r)}return o},c=function(t,e,n){var r=a(e,n,!1);return void 0!==r&&r.has(t)},u=function(t,e,n){var r=a(e,n,!1);return void 0===r?void 0:r.get(t)},l=function(t,e,n,r){a(n,r,!0).set(t,e)},h=function(t,e){var n=a(t,e,!1),r=[];return n&&n.forEach(function(t,e){r.push(e)}),r},p=function(t){return void 0===t||"symbol"==typeof t?t:String(t)},f=function(t){i(i.S,"Reflect",t)};t.exports={store:s,map:a,has:c,get:u,set:l,keys:h,key:p,exp:f}},function(t,e,n){var r=n(171),i=n(82),o=n(58),s=n(84),a=n(41),c=n(328),u=Object.getOwnPropertyDescriptor;e.f=n(29)?u:function(t,e){if(t=o(t),e=s(e,!0),c)try{return u(t,e)}catch(t){}if(a(t,e))return i(!r.f.call(t,e),t[e])}},function(t,e,n){"use strict";if(n(29)){var r=n(127),i=n(14),o=n(10),s=n(1),a=n(174),c=n(252),u=n(92),l=n(125),h=n(82),p=n(51),f=n(128),_=n(83),d=n(37),y=n(95),m=n(84),g=n(41),v=n(340),b=n(236),w=n(11),x=n(52),I=n(241),C=n(93),k=n(63),T=n(94).f,E=n(253),S=n(96),O=n(18),R=n(62),A=n(235),N=n(341),P=n(175),M=n(107),D=n(245),V=n(129),j=n(234),L=n(320),F=n(24),B=n(70),U=F.f,z=B.f,H=i.RangeError,q=i.TypeError,W=i.Uint8Array,Y="ArrayBuffer",$="Shared"+Y,G="BYTES_PER_ELEMENT",Z="prototype",J=Array[Z],K=c.ArrayBuffer,X=c.DataView,Q=R(0),tt=R(2),et=R(3),nt=R(4),rt=R(5),it=R(6),ot=A(!0),st=A(!1),at=P.values,ct=P.keys,ut=P.entries,lt=J.lastIndexOf,ht=J.reduce,pt=J.reduceRight,ft=J.join,_t=J.sort,dt=J.slice,yt=J.toString,mt=J.toLocaleString,gt=O("iterator"),vt=O("toStringTag"),bt=S("typed_constructor"),wt=S("def_constructor"),xt=a.CONSTR,It=a.TYPED,Ct=a.VIEW,kt="Wrong length!",Tt=R(1,function(t,e){ +return Nt(N(t,t[wt]),e)}),Et=o(function(){return 1===new W(new Uint16Array([1]).buffer)[0]}),St=!!W&&!!W[Z].set&&o(function(){new W(1).set({})}),Ot=function(t,e){if(void 0===t)throw q(kt);var n=+t,r=d(t);if(e&&!v(n,r))throw H(kt);return r},Rt=function(t,e){var n=_(t);if(n<0||n%e)throw H("Wrong offset!");return n},At=function(t){if(w(t)&&It in t)return t;throw q(t+" is not a typed array!")},Nt=function(t,e){if(!(w(t)&&bt in t))throw q("It is not a typed array constructor!");return new t(e)},Pt=function(t,e){return Mt(N(t,t[wt]),e)},Mt=function(t,e){for(var n=0,r=e.length,i=Nt(t,r);r>n;)i[n]=e[n++];return i},Dt=function(t,e,n){U(t,e,{get:function(){return this._d[n]}})},Vt=function(t){var e,n,r,i,o,s,a=x(t),c=arguments.length,l=c>1?arguments[1]:void 0,h=void 0!==l,p=E(a);if(void 0!=p&&!I(p)){for(s=p.call(a),r=[],e=0;!(o=s.next()).done;e++)r.push(o.value);a=r}for(h&&c>2&&(l=u(l,arguments[2],2)),e=0,n=d(a.length),i=Nt(this,n);n>e;e++)i[e]=h?l(a[e],e):a[e];return i},jt=function(){for(var t=0,e=arguments.length,n=Nt(this,e);e>t;)n[t]=arguments[t++];return n},Lt=!!W&&o(function(){mt.call(new W(1))}),Ft=function(){return mt.apply(Lt?dt.call(At(this)):At(this),arguments)},Bt={copyWithin:function(t,e){return L.call(At(this),t,e,arguments.length>2?arguments[2]:void 0)},every:function(t){return nt(At(this),t,arguments.length>1?arguments[1]:void 0)},fill:function(t){return j.apply(At(this),arguments)},filter:function(t){return Pt(this,tt(At(this),t,arguments.length>1?arguments[1]:void 0))},find:function(t){return rt(At(this),t,arguments.length>1?arguments[1]:void 0)},findIndex:function(t){return it(At(this),t,arguments.length>1?arguments[1]:void 0)},forEach:function(t){Q(At(this),t,arguments.length>1?arguments[1]:void 0)},indexOf:function(t){return st(At(this),t,arguments.length>1?arguments[1]:void 0)},includes:function(t){return ot(At(this),t,arguments.length>1?arguments[1]:void 0)},join:function(t){return ft.apply(At(this),arguments)},lastIndexOf:function(t){return lt.apply(At(this),arguments)},map:function(t){return Tt(At(this),t,arguments.length>1?arguments[1]:void 0)},reduce:function(t){return ht.apply(At(this),arguments)},reduceRight:function(t){return pt.apply(At(this),arguments)},reverse:function(){for(var t,e=this,n=At(e).length,r=Math.floor(n/2),i=0;i1?arguments[1]:void 0)},sort:function(t){return _t.call(At(this),t)},subarray:function(t,e){var n=At(this),r=n.length,i=y(t,r);return new(N(n,n[wt]))(n.buffer,n.byteOffset+i*n.BYTES_PER_ELEMENT,d((void 0===e?r:y(e,r))-i))}},Ut=function(t,e){return Pt(this,dt.call(At(this),t,e))},zt=function(t){At(this);var e=Rt(arguments[1],1),n=this.length,r=x(t),i=d(r.length),o=0;if(i+e>n)throw H(kt);for(;o255?255:255&r),i.v[_](n*e+i.o,r,Et)},O=function(t,e){U(t,e,{get:function(){return E(this,e)},set:function(t){return S(this,e,t)},enumerable:!0})};v?(y=n(function(t,n,r,i){l(t,y,u,"_d");var o,s,a,c,h=0,f=0;if(w(n)){if(!(n instanceof K||(c=b(n))==Y||c==$))return It in n?Mt(y,n):Vt.call(y,n);o=n,f=Rt(r,e);var _=n.byteLength;if(void 0===i){if(_%e)throw H(kt);if(s=_-f,s<0)throw H(kt)}else if(s=d(i)*e,s+f>_)throw H(kt);a=s/e}else a=Ot(n,!0),s=a*e,o=new K(s);for(p(t,"_d",{b:o,o:f,l:s,e:a,v:new X(o)});h=0?t.substr(e).toLowerCase():""},e.getHash=function(t){var e=t.indexOf("#");return e>=0?t.substr(e):"#"},e.stripHash=function(t){var e=t.indexOf("#");return e>=0&&(t=t.substr(0,e)),t},e.isHttp=function(t){var e=a.getProtocol(t);return"http"===e||"https"===e||void 0===e&&r.browser},e.isFileSystemPath=function(t){if(r.browser)return!1;var e=a.getProtocol(t);return void 0===e||"file"===e},e.fromFileSystemPath=function(t){for(var e=0;e1?new e(t,r):1===i?new o.ScalarObservable(t[0],r):new s.EmptyObservable(r)},e.dispatch=function(t){var e=t.array,n=t.index,r=t.count,i=t.subscriber;return n>=r?void i.complete():(i.next(e[n]),void(i.closed||(t.index=n+1,this.schedule(t))))},e.prototype._subscribe=function(t){var n=0,r=this.array,i=r.length,o=this.scheduler;if(o)return o.schedule(e.dispatch,0,{array:r,index:n,count:i,subscriber:t});for(var s=0;s=0?this._tasks.findIndex(function(n){return n.catIdx===t&&n.idx===e}):this._tasks.findIndex(function(e){return e.catIdx===t}),r+=1):this.sortTasks(t,e),this.allSync&&(r=this._tasks.length);for(var i=this._current;i599)throw new Error("invalid HTTP code");var e="success";return t>=300&&t<400?e="redirect":t>=400?e="error":t<200&&(e="info"),e}function a(t,e){for(var n=Object.keys(e),r=-1,i=n.length;++r0||function(t){return"[object SafariRemoteNotification]"===t.toString()}(!window.safari||safari.pushNotification)},function(t,e,n){"use strict";var r=n(2),i=n(119),o=n(78),s=n(77),a=n(317),c=n(315),u=function(){function t(t){this.message=t}return t}(),l=function(t){function e(e,n){t.call(this,"Invalid argument '"+n+"' for pipe '"+o.stringify(e)+"'")}return __extends(e,t),e}(u),h=function(){function t(){}return t.prototype.transform=function(e){if(o.isBlank(e))return e;if("object"!=typeof e)throw new l(t,e);return Object.keys(e)},t=__decorate([r.Pipe({name:"keys"}),__metadata("design:paramtypes",[])],t)}();e.KeysPipe=h;var p=function(){function t(){}return t.prototype.transform=function(e){if(o.isBlank(e))return e;if(!o.isString(e))throw new l(t,e);return s.default.escape(e)},t=__decorate([r.Pipe({name:"jsonPointerEscape"}),__metadata("design:paramtypes",[])],t)}();e.JsonPointerEscapePipe=p;var f=function(){function t(t){this.sanitizer=t,this.renderer=new a.MdRenderer(!0)}return t.prototype.transform=function(t){if(o.isBlank(t))return t;if(!o.isString(t))throw new l(p,t);return this.sanitizer.bypassSecurityTrustHtml(''+this.renderer.renderMd(t)+"")},t=__decorate([r.Pipe({name:"marked"}),__metadata("design:paramtypes",["function"==typeof(e="undefined"!=typeof i.DomSanitizer&&i.DomSanitizer)&&e||Object])],t);var e}();e.MarkedPipe=f;var _=function(){function t(t){this.sanitizer=t}return t.prototype.transform=function(t){if(o.isBlank(t))return t;if(!o.isString(t))throw new l(p,t);return this.sanitizer.bypassSecurityTrustHtml(t)},t=__decorate([r.Pipe({name:"safe"}),__metadata("design:paramtypes",["function"==typeof(e="undefined"!=typeof i.DomSanitizer&&i.DomSanitizer)&&e||Object])],t);var e}();e.SafePipe=_;var d={"c++":"cpp","c#":"csharp","objective-c":"objectivec",shell:"bash",viml:"vim"},y=function(){function t(t){this.sanitizer=t}return t.prototype.transform=function(t,e){if(o.isBlank(e)||0===e.length)throw new u("Prism pipe requires one argument");if(o.isBlank(t))return t;if(!o.isString(t))throw new l(p,t);var n=e[0].toString().trim().toLowerCase();d[n]&&(n=d[n]);var r=Prism.languages[n];return r||(r=Prism.languages.clike),this.sanitizer.bypassSecurityTrustHtml(Prism.highlight(t,r))},t=__decorate([r.Pipe({name:"prism"}),__metadata("design:paramtypes",["function"==typeof(e="undefined"!=typeof i.DomSanitizer&&i.DomSanitizer)&&e||Object])],t);var e}();e.PrismPipe=y;var m=function(){function t(){}return t.prototype.transform=function(e){if(o.isBlank(e))return e;if(!o.isString(e))throw new l(t,e);return encodeURIComponent(e)},t=__decorate([r.Pipe({name:"encodeURIComponent"}),__metadata("design:paramtypes",[])],t)}();e.EncodeURIComponentPipe=m;var g={csv:"Comma Separated",ssv:"Space Separated",tsv:"Tab Separated",pipes:"Pipe Separated"},v=function(){function t(){}return t.prototype.transform=function(t){var e=t.collectionFormat;return e||(e="csv"),"multi"===e?"Multiple "+t.in+" params of":g[e]},t=__decorate([r.Pipe({name:"collectionFormat"}),__metadata("design:paramtypes",[])],t)}();e.CollectionFormatPipe=v,e.REDOC_PIPES=[p,f,_,y,m,c.JsonFormatter,h,v]},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e,n){var r=n(96)("meta"),i=n(11),o=n(41),s=n(24).f,a=0,c=Object.isExtensible||function(){return!0},u=!n(10)(function(){return c(Object.preventExtensions({}))}),l=function(t){s(t,r,{value:{i:"O"+ ++a,w:{}}})},h=function(t,e){if(!i(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!o(t,r)){if(!c(t))return"F";if(!e)return"E";l(t)}return t[r].i},p=function(t,e){if(!o(t,r)){if(!c(t))return!0;if(!e)return!1;l(t)}return t[r].w},f=function(t){return u&&_.NEED&&c(t)&&!o(t,r)&&l(t),t},_=t.exports={KEY:r,NEED:!1,fastKey:h,getWeak:p,onFreeze:f}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e){var n=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:n)(t)}},function(t,e,n){var r=n(11);t.exports=function(t,e){if(!r(t))return t;var n,i;if(e&&"function"==typeof(n=t.toString)&&!r(i=n.call(t)))return i;if("function"==typeof(n=t.valueOf)&&!r(i=n.call(t)))return i;if(!e&&"function"==typeof(n=t.toString)&&!r(i=n.call(t)))return i;throw TypeError("Can't convert object to primitive value")}},function(t,e,n){"use strict";t.exports="function"==typeof Promise?Promise:n(675).Promise},function(t,e,n){"use strict";function r(e){return function(n,r,a,c){var u,l=t.exports.formatter;"string"==typeof n?(u=l.apply(null,arguments),n=r=void 0):u="string"==typeof r?l.apply(null,f.call(arguments,1)):l.apply(null,f.call(arguments,2)),n instanceof Error||(r=n,n=void 0),n&&(u+=(u?" \n":"")+n.message);var h=new e(u);return i(h,n),o(h),s(h,r),h}}function i(t,e){e&&(u(t,e),s(t,e,!0))}function o(t){t.toJSON=a,t.inspect=c}function s(t,e,n){if(e&&"object"==typeof e)for(var r=Object.keys(e),i=0;i=0))try{t[o]=e[o]}catch(t){}}}function a(){var t={},e=Object.keys(this);e=e.concat(_);for(var n=0;n";for(e.style.display="none",n(327).appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write(i+"script"+s+"document.F=Object"+i+"/script"+s),t.close(),u=t.F;r--;)delete u[c][o[r]];return u()};t.exports=Object.create||function(t,e){var n;return null!==t?(a[c]=r(t),n=new a,a[c]=null,n[s]=t):n=u(),void 0===e?n:i(n,e)}},function(t,e,n){var r=n(337),i=n(237).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return r(t,i)}},function(t,e,n){var r=n(83),i=Math.max,o=Math.min;t.exports=function(t,e){return t=r(t),t<0?i(t+e,0):o(t,e)}},function(t,e){var n=0,r=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++n+r).toString(36))}},function(t,e,n){"use strict";var r=n(236),i={};i[n(18)("toStringTag")]="z",i+""!="[object z]"&&n(47)(Object.prototype,"toString",function(){return"[object "+r(this)+"]"},!0)},function(t,e){function n(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function r(t){return"function"==typeof t}function i(t){return"number"==typeof t}function o(t){return"object"==typeof t&&null!==t}function s(t){return void 0===t}t.exports=n,n.EventEmitter=n,n.prototype._events=void 0,n.prototype._maxListeners=void 0,n.defaultMaxListeners=10,n.prototype.setMaxListeners=function(t){if(!i(t)||t<0||isNaN(t))throw TypeError("n must be a positive number");return this._maxListeners=t,this},n.prototype.emit=function(t){var e,n,i,a,c,u;if(this._events||(this._events={}),"error"===t&&(!this._events.error||o(this._events.error)&&!this._events.error.length)){if(e=arguments[1],e instanceof Error)throw e;var l=new Error('Uncaught, unspecified "error" event. ('+e+")");throw l.context=e,l}if(n=this._events[t],s(n))return!1;if(r(n))switch(arguments.length){case 1:n.call(this);break;case 2:n.call(this,arguments[1]);break;case 3:n.call(this,arguments[1],arguments[2]);break;default:a=Array.prototype.slice.call(arguments,1),n.apply(this,a)}else if(o(n))for(a=Array.prototype.slice.call(arguments,1),u=n.slice(),i=u.length,c=0;c0&&this._events[t].length>i&&(this._events[t].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[t].length),"function"==typeof console.trace&&console.trace())),this},n.prototype.on=n.prototype.addListener,n.prototype.once=function(t,e){function n(){this.removeListener(t,n),i||(i=!0,e.apply(this,arguments))}if(!r(e))throw TypeError("listener must be a function");var i=!1;return n.listener=e,this.on(t,n),this},n.prototype.removeListener=function(t,e){var n,i,s,a;if(!r(e))throw TypeError("listener must be a function");if(!this._events||!this._events[t])return this;if(n=this._events[t],s=n.length,i=-1,n===e||r(n.listener)&&n.listener===e)delete this._events[t],this._events.removeListener&&this.emit("removeListener",t,e);else if(o(n)){for(a=s;a-- >0;)if(n[a]===e||n[a].listener&&n[a].listener===e){i=a;break}if(i<0)return this;1===n.length?(n.length=0,delete this._events[t]):n.splice(i,1),this._events.removeListener&&this.emit("removeListener",t,e)}return this},n.prototype.removeAllListeners=function(t){var e,n;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[t]&&delete this._events[t],this;if(0===arguments.length){for(e in this._events)"removeListener"!==e&&this.removeAllListeners(e);return this.removeAllListeners("removeListener"),this._events={},this}if(n=this._events[t],r(n))this.removeListener(t,n);else if(n)for(;n.length;)this.removeListener(t,n[n.length-1]);return delete this._events[t],this},n.prototype.listeners=function(t){var e;return e=this._events&&this._events[t]?r(this._events[t])?[this._events[t]]:this._events[t].slice():[]},n.prototype.listenerCount=function(t){if(this._events){var e=this._events[t];if(r(e))return 1;if(e)return e.length}return 0},n.listenerCount=function(t,e){return t.listenerCount(e)}},function(t,e,n){"use strict";var r=n(672);t.exports=r("json-schema-ref-parser")},function(t,e,n){"use strict";function r(t){return this instanceof r?(u.call(this,t),l.call(this,t),t&&t.readable===!1&&(this.readable=!1),t&&t.writable===!1&&(this.writable=!1),this.allowHalfOpen=!0,t&&t.allowHalfOpen===!1&&(this.allowHalfOpen=!1),void this.once("end",i)):new r(t)}function i(){this.allowHalfOpen||this._writableState.ended||a(o,this)}function o(t){t.end()}var s=Object.keys||function(t){var e=[];for(var n in t)e.push(n);return e};t.exports=r;var a=n(111),c=n(65);c.inherits=n(42);var u=n(359),l=n(258);c.inherits(r,u);for(var h=s(l.prototype),p=0;p0},t.hasAttribute=function(t,e){return t.hasAttribute(e)},t.getAttribute=function(t,e){return t.getAttribute(e)},t.setAttribute=function(t,e,n){t.setAttribute(e,n)},t.removeAttribute=function(t,e){t.removeAttribute(e)},t.getLocation=function(){return window.location},t.defaultDoc=function(){return document},t}();e.BrowserDomAdapter=n},function(t,e,n){"use strict";var r=n(74),i=n(9),o=n(8),s=function(){function t(t,e,n,o){this._changed=!1,this.context=new r.NgClass(t,e,n,o),this._expr_0=i.UNINITIALIZED,this._expr_1=i.UNINITIALIZED}return t.prototype.ngOnDetach=function(t,e,n){},t.prototype.ngOnDestroy=function(){},t.prototype.check_klass=function(t,e,n){(n||o.checkBinding(e,this._expr_0,t))&&(this._changed=!0,this.context.klass=t,this._expr_0=t)},t.prototype.check_ngClass=function(t,e,n){(n||o.checkBinding(e,this._expr_1,t))&&(this._changed=!0,this.context.ngClass=t,this._expr_1=t)},t.prototype.ngDoCheck=function(t,e,n){var r=this._changed;return this._changed=!1,n||this.context.ngDoCheck(),r},t.prototype.checkHost=function(t,e,n,r){},t.prototype.handleEvent=function(t,e){var n=!0;return n},t.prototype.subscribe=function(t,e){this._eventHandler=e},t}();e.Wrapper_NgClass=s},function(t,e){t.exports={}},function(t,e,n){var r=n(337),i=n(237);t.exports=Object.keys||function(t){return r(t,i)}},function(t,e){"use strict";function n(t){return"undefined"==typeof t||null===t}function r(t){return"object"==typeof t&&null!==t}function i(t){return Array.isArray(t)?t:n(t)?[]:[t]}function o(t,e){var n,r,i,o;if(e)for(o=Object.keys(e),n=0,r=o.length;n-1?r:n.getPluralCategory(t)}function i(t,e){"string"==typeof e&&(e=parseInt(e,10));var n=e,r=n.toString().replace(/^[^.]*\.?/,""),i=Math.floor(Math.abs(n)),o=r.length,a=parseInt(r,10),c=parseInt(n.toString().replace(/^[^.]*\.?|0+$/g,""),10)||0,u=t.split("-")[0].toLowerCase();switch(u){case"af":case"asa":case"az":case"bem":case"bez":case"bg":case"brx":case"ce":case"cgg":case"chr":case"ckb":case"ee":case"el":case"eo":case"es":case"eu":case"fo":case"fur":case"gsw":case"ha":case"haw":case"hu":case"jgo":case"jmc":case"ka":case"kk":case"kkj":case"kl":case"ks":case"ksb":case"ky":case"lb":case"lg":case"mas":case"mgo":case"ml":case"mn":case"nb":case"nd":case"ne":case"nn":case"nnh":case"nyn":case"om":case"or":case"os":case"ps":case"rm":case"rof":case"rwk":case"saq":case"seh":case"sn":case"so":case"sq":case"ta":case"te":case"teo":case"tk":case"tr":case"ug":case"uz":case"vo":case"vun":case"wae":case"xog":return 1===n?s.One:s.Other;case"agq":case"bas":case"cu":case"dav":case"dje":case"dua":case"dyo":case"ebu":case"ewo":case"guz":case"kam":case"khq":case"ki":case"kln":case"kok":case"ksf":case"lrc":case"lu":case"luo":case"luy":case"mer":case"mfe":case"mgh":case"mua":case"mzn":case"nmg":case"nus":case"qu":case"rn":case"rw":case"sbp":case"twq":case"vai":case"yav":case"yue":case"zgh":case"ak":case"ln":case"mg":case"pa":case"ti":return n===Math.floor(n)&&n>=0&&n<=1?s.One:s.Other;case"am":case"as":case"bn":case"fa":case"gu":case"hi":case"kn":case"mr":case"zu":return 0===i||1===n?s.One:s.Other;case"ar":return 0===n?s.Zero:1===n?s.One:2===n?s.Two:n%100===Math.floor(n%100)&&n%100>=3&&n%100<=10?s.Few:n%100===Math.floor(n%100)&&n%100>=11&&n%100<=99?s.Many:s.Other;case"ast":case"ca":case"de":case"en":case"et":case"fi":case"fy":case"gl":case"it":case"nl":case"sv":case"sw":case"ur":case"yi":return 1===i&&0===o?s.One:s.Other;case"be":return n%10===1&&n%100!==11?s.One:n%10===Math.floor(n%10)&&n%10>=2&&n%10<=4&&!(n%100>=12&&n%100<=14)?s.Few:n%10===0||n%10===Math.floor(n%10)&&n%10>=5&&n%10<=9||n%100===Math.floor(n%100)&&n%100>=11&&n%100<=14?s.Many:s.Other;case"br":return n%10===1&&n%100!==11&&n%100!==71&&n%100!==91?s.One:n%10===2&&n%100!==12&&n%100!==72&&n%100!==92?s.Two:n%10===Math.floor(n%10)&&(n%10>=3&&n%10<=4||n%10===9)&&!(n%100>=10&&n%100<=19||n%100>=70&&n%100<=79||n%100>=90&&n%100<=99)?s.Few:0!==n&&n%1e6===0?s.Many:s.Other;case"bs":case"hr":case"sr":return 0===o&&i%10===1&&i%100!==11||a%10===1&&a%100!==11?s.One:0===o&&i%10===Math.floor(i%10)&&i%10>=2&&i%10<=4&&!(i%100>=12&&i%100<=14)||a%10===Math.floor(a%10)&&a%10>=2&&a%10<=4&&!(a%100>=12&&a%100<=14)?s.Few:s.Other;case"cs":case"sk":return 1===i&&0===o?s.One:i===Math.floor(i)&&i>=2&&i<=4&&0===o?s.Few:0!==o?s.Many:s.Other;case"cy":return 0===n?s.Zero:1===n?s.One:2===n?s.Two:3===n?s.Few:6===n?s.Many:s.Other;case"da":return 1===n||0!==c&&(0===i||1===i)?s.One:s.Other;case"dsb":case"hsb":return 0===o&&i%100===1||a%100===1?s.One:0===o&&i%100===2||a%100===2?s.Two:0===o&&i%100===Math.floor(i%100)&&i%100>=3&&i%100<=4||a%100===Math.floor(a%100)&&a%100>=3&&a%100<=4?s.Few:s.Other;case"ff":case"fr":case"hy":case"kab":return 0===i||1===i?s.One:s.Other;case"fil":return 0===o&&(1===i||2===i||3===i)||0===o&&i%10!==4&&i%10!==6&&i%10!==9||0!==o&&a%10!==4&&a%10!==6&&a%10!==9?s.One:s.Other;case"ga":return 1===n?s.One:2===n?s.Two:n===Math.floor(n)&&n>=3&&n<=6?s.Few:n===Math.floor(n)&&n>=7&&n<=10?s.Many:s.Other;case"gd":return 1===n||11===n?s.One:2===n||12===n?s.Two:n===Math.floor(n)&&(n>=3&&n<=10||n>=13&&n<=19)?s.Few:s.Other;case"gv":return 0===o&&i%10===1?s.One:0===o&&i%10===2?s.Two:0!==o||i%100!==0&&i%100!==20&&i%100!==40&&i%100!==60&&i%100!==80?0!==o?s.Many:s.Other:s.Few;case"he":return 1===i&&0===o?s.One:2===i&&0===o?s.Two:0!==o||n>=0&&n<=10||n%10!==0?s.Other:s.Many;case"is":return 0===c&&i%10===1&&i%100!==11||0!==c?s.One:s.Other;case"ksh":return 0===n?s.Zero:1===n?s.One:s.Other;case"kw":case"naq":case"se":case"smn":return 1===n?s.One:2===n?s.Two:s.Other;case"lag":return 0===n?s.Zero:0!==i&&1!==i||0===n?s.Other:s.One;case"lt":return n%10!==1||n%100>=11&&n%100<=19?n%10===Math.floor(n%10)&&n%10>=2&&n%10<=9&&!(n%100>=11&&n%100<=19)?s.Few:0!==a?s.Many:s.Other:s.One;case"lv":case"prg":return n%10===0||n%100===Math.floor(n%100)&&n%100>=11&&n%100<=19||2===o&&a%100===Math.floor(a%100)&&a%100>=11&&a%100<=19?s.Zero:n%10===1&&n%100!==11||2===o&&a%10===1&&a%100!==11||2!==o&&a%10===1?s.One:s.Other;case"mk":return 0===o&&i%10===1||a%10===1?s.One:s.Other;case"mt":return 1===n?s.One:0===n||n%100===Math.floor(n%100)&&n%100>=2&&n%100<=10?s.Few:n%100===Math.floor(n%100)&&n%100>=11&&n%100<=19?s.Many:s.Other;case"pl":return 1===i&&0===o?s.One:0===o&&i%10===Math.floor(i%10)&&i%10>=2&&i%10<=4&&!(i%100>=12&&i%100<=14)?s.Few:0===o&&1!==i&&i%10===Math.floor(i%10)&&i%10>=0&&i%10<=1||0===o&&i%10===Math.floor(i%10)&&i%10>=5&&i%10<=9||0===o&&i%100===Math.floor(i%100)&&i%100>=12&&i%100<=14?s.Many:s.Other;case"pt":return n===Math.floor(n)&&n>=0&&n<=2&&2!==n?s.One:s.Other;case"ro":return 1===i&&0===o?s.One:0!==o||0===n||1!==n&&n%100===Math.floor(n%100)&&n%100>=1&&n%100<=19?s.Few:s.Other;case"ru":case"uk":return 0===o&&i%10===1&&i%100!==11?s.One:0===o&&i%10===Math.floor(i%10)&&i%10>=2&&i%10<=4&&!(i%100>=12&&i%100<=14)?s.Few:0===o&&i%10===0||0===o&&i%10===Math.floor(i%10)&&i%10>=5&&i%10<=9||0===o&&i%100===Math.floor(i%100)&&i%100>=11&&i%100<=14?s.Many:s.Other;case"shi":return 0===i||1===n?s.One:n===Math.floor(n)&&n>=2&&n<=10?s.Few:s.Other;case"si":return 0===n||1===n||0===i&&1===a?s.One:s.Other;case"sl":return 0===o&&i%100===1?s.One:0===o&&i%100===2?s.Two:0===o&&i%100===Math.floor(i%100)&&i%100>=3&&i%100<=4||0!==o?s.Few:s.Other;case"tzm":return n===Math.floor(n)&&n>=0&&n<=1||n===Math.floor(n)&&n>=11&&n<=99?s.One:s.Other;default:return s.Other}}var o=n(2);n.d(e,"NgLocalization",function(){return c}),e.getPluralCategory=r,n.d(e,"NgLocaleLocalization",function(){return u}),n.d(e,"Plural",function(){return s}),e.getPluralCase=i;var s,a=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},c=function(){function t(){}return t}(),u=function(t){function e(e){t.call(this),this._locale=e}return a(e,t),e.prototype.getPluralCategory=function(t){var e=i(this._locale,t);switch(e){case s.Zero:return"zero";case s.One:return"one";case s.Two:return"two";case s.Few:return"few";case s.Many:return"many";default:return"other"}},e.decorators=[{type:o.Injectable}],e.ctorParameters=[{type:void 0,decorators:[{type:o.Inject,args:[o.LOCALE_ID]}]}],e}(c);!function(t){t[t.Zero=0]="Zero",t[t.One=1]="One",t[t.Two=2]="Two",t[t.Few=3]="Few",t[t.Many=4]="Many",t[t.Other=5]="Other"}(s||(s={}))},function(t,e,n){"use strict";function r(){return""+i()+i()+i()}function i(){return String.fromCharCode(97+Math.floor(25*Math.random()))}var o=n(53);n.d(e,"APP_ID",function(){return s}),e._appIdRandomProviderFactory=r,n.d(e,"APP_ID_RANDOM_PROVIDER",function(){return a}),n.d(e,"PLATFORM_INITIALIZER",function(){return c}),n.d(e,"APP_BOOTSTRAP_LISTENER",function(){return u}),n.d(e,"PACKAGE_ROOT_URL",function(){return l});var s=new o.a("AppId"),a={provide:s,useFactory:r,deps:[]},c=new o.a("Platform Initializer"),u=new o.a("appBootstrapListener"),l=new o.a("Application Packages Root URL")},function(t,e,n){"use strict";var r=n(50),i=n(7);n.d(e,"a",function(){return s}),n.d(e,"b",function(){return c});var o=new Object,s=o,a=function(){function t(){}return t.prototype.get=function(t,e){if(void 0===e&&(e=o),e===o)throw new Error("No provider for "+n.i(i.b)(t)+"!");return e},t}(),c=function(){function t(){}return t.prototype.get=function(t,e){return n.i(r.a)()},t.THROW_IF_NOT_FOUND=o,t.NULL=new a,t}()},function(t,e,n){"use strict";function r(t){return!!n.i(s.e)(t)&&(Array.isArray(t)||!(t instanceof Map)&&n.i(s.f)()in t)}function i(t,e,r){for(var i=t[n.i(s.f)()](),o=e[n.i(s.f)()]();;){var a=i.next(),c=o.next();if(a.done&&c.done)return!0;if(a.done||c.done)return!1;if(!r(a.value,c.value))return!1}}function o(t,e){if(Array.isArray(t))for(var r=0;r-1&&t.splice(r,1)}},t.remove=function(t,e){var n=t.indexOf(e);return n>-1&&(t.splice(n,1),!0)},t.equals=function(t,e){if(t.length!=e.length)return!1;for(var n=0;n"),"mi");return n.test(t)},t.build=function(t){return""},t.prototype.setRenderer=function(t){this.renderer=t},t.prototype.splitIntoNodesOrComponents=function(t,e){for(var n,r=[],o=new RegExp(i.replace("{component}","(.*?)"),"gmi");n=o.exec(t);)r.push(n[1]);for(var s=new RegExp(i.replace("{component}",".*?"),"mi"),a=t.split(s),c=[],u=0;u/.exec(t);if(e.length<=1)return{componentType:null,options:null};var n=e[1],r=this.allowedComponents[n],i={};return{componentType:r,options:i}},t=__decorate([r.Injectable(),__param(1,r.Inject(e.COMPONENT_PARSER_ALLOWED)),__metadata("design:paramtypes",["function"==typeof(n="undefined"!=typeof r.ComponentFactoryResolver&&r.ComponentFactoryResolver)&&n||Object,Object])],t);var n}();e.ComponentParser=o},function(t,e,n){"use strict";var r,i=n(77),o=n(484),s=n(163),a=n(389),c={notype:{check:function(t){return!t.type},inject:function(t,e,n){if(t.type=u.detectType(e),e.type=t.type,t.type){var r='No "type" specified at "'+n+'". Automatically detected: "'+t.type+'"';s.WarningsService.warn(r)}}},general:{check:function(){return!0},inject:function(t,e,n){t._pointer=e._pointer||n,t._displayType=e.type,e.format&&(t._displayFormat="<"+e.format+">"),e.enum&&(t.enum=e.enum.map(function(t){return{val:t,type:typeof t}}),e.enum&&1===e.enum.length&&(t._enumItem=e.enum[0],t.enum=null))}},discriminator:{check:function(t){return t.discriminator||t["x-extendedDiscriminator"]},inject:function(t,e){void 0===e&&(e=t),t.discriminator=e.discriminator,t["x-extendedDiscriminator"]=e["x-extendedDiscriminator"]}},simpleArray:{check:function(t){return"array"===t.type&&!Array.isArray(t.items)},inject:function(t,e,n){void 0===e&&(e=t),"object"!==u.detectType(e.items)?(t._isArray=!0,t._pointer=e.items._pointer||i.JsonPointer.join(e._pointer||n,["items"]),u.runInjectors(t,e.items,n)):c.object.inject(t,e.items),t._widgetType="array"}},tuple:{check:function(t){return"array"===t.type&&Array.isArray(t.items)},inject:function(t,e,n){void 0===e&&(e=t),t._isTuple=!0,t._displayType="";for(var r=i.JsonPointer.join(e._pointer||n,["items"]),o=0;o",t._displayTypeHint="This field may contain data of any type",t.isTrivial=!0,t._widgetType="trivial",t._pointer=void 0}},simpleType:{check:function(t){return"object"===t.type?!(t.properties&&Object.keys(t.properties).length||"object"==typeof t.additionalProperties):"array"!==t.type&&t.type},inject:function(t,e){void 0===e&&(e=t),t.isTrivial=!0,t._pointer&&(t._pointer=void 0,t._displayType=e.title?e.title+" ("+e.type+")":e.type),t._widgetType="trivial"}},integer:{check:function(t){return"integer"===t.type||"number"===t.type},inject:function(t,e){void 0===e&&(e=t);var n="";void 0!=e.minimum&&void 0!=e.maximum?(n+=e.exclusiveMinimum?"( ":"[ ",n+=e.minimum,n+=" .. ",n+=e.maximum,n+=e.exclusiveMaximum?" )":" ]"):void 0!=e.maximum?(n+=e.exclusiveMaximum?"< ":"<= ",n+=e.maximum):void 0!=e.minimum&&(n+=e.exclusiveMinimum?"> ":">= ",n+=e.minimum),n&&(t._range=n)}},string:{check:function(t){return"string"===t.type},inject:function(t,e){void 0===e&&(e=t);var n;void 0!=e.minLength&&void 0!=e.maxLength?n="[ "+e.minLength+" .. "+e.maxLength+" ]":void 0!=e.maxLength?n="<= "+e.maxLength:void 0!=e.minLength&&(n=">= "+e.minLength),n&&(t._range=n+" characters")}},file:{check:function(t){return"file"===t.type},inject:function(t,e,n,o){void 0===e&&(e=t),t.isFile=!0;var s;s="formData"===e.in?i.JsonPointer.dirName(o,1):i.JsonPointer.dirName(o,3);var a=r.byPointer(s),c=r.schema;t._produces=a&&a.produces||c.produces,t._consumes=a&&a.consumes||c.consumes,t._widgetType="file"}}},u=function(){ +function t(){}return t.setSpecManager=function(t){r=t},t.preprocess=function(e,n,r){return e["x-redoc-schema-precompiled"]?e:(t.runInjectors(e,e,n,r),e["x-redoc-schema-precompiled"]=!0,e)},t.runInjectors=function(t,e,n,r){for(var i=0,o=Object.keys(c);i"},t.detectType=function(t){if(t.type)return t.type;for(var e=Object.keys(o.keywordTypes),n=0;n0},r.isExternal$Ref=function(t){return r.is$Ref(t)&&"#"!==t.$ref[0]},r.isAllowed$Ref=function(t,e){if(r.is$Ref(t)&&("#"===t.$ref[0]||!e||e.resolve.external))return!0},r.isExtended$Ref=function(t){return r.is$Ref(t)&&Object.keys(t).length>1},r.dereference=function(t,e){if(e&&"object"==typeof e&&r.isExtended$Ref(t)){var n={};return Object.keys(t).forEach(function(e){"$ref"!==e&&(n[e]=t[e])}),Object.keys(e).forEach(function(t){t in n||(n[t]=e[t])}),n}return e}},function(t,e){"use strict";function n(t,e){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack||"",this.name="YAMLException",this.reason=t,this.mark=e,this.message=(this.reason||"(unknown reason)")+(this.mark?" "+this.mark.toString():"")}n.prototype=Object.create(Error.prototype),n.prototype.constructor=n,n.prototype.toString=function(t){var e=this.name+": ";return e+=this.reason||"(unknown reason)",!t&&this.mark&&(e+=" "+this.mark.toString()),e},t.exports=n},function(t,e,n){"use strict";var r=n(110);t.exports=new r({include:[n(356)],implicit:[n(696),n(689)],explicit:[n(681),n(691),n(692),n(694)]})},function(t,e,n){"use strict";var r=n(0),i=function(){function t(t,e,n){this.kind=t,this.value=e,this.exception=n,this.hasValue="N"===t}return t.prototype.observe=function(t){switch(this.kind){case"N":return t.next&&t.next(this.value);case"E":return t.error&&t.error(this.exception);case"C":return t.complete&&t.complete()}},t.prototype.do=function(t,e,n){var r=this.kind;switch(r){case"N":return t&&t(this.value);case"E":return e&&e(this.exception);case"C":return n&&n()}},t.prototype.accept=function(t,e,n){return t&&"function"==typeof t.next?this.observe(t):this.do(t,e,n)},t.prototype.toObservable=function(){var t=this.kind;switch(t){case"N":return r.Observable.of(this.value);case"E":return r.Observable.throw(this.exception);case"C":return r.Observable.empty()}throw new Error("unexpected notification kind value")},t.createNext=function(e){return"undefined"!=typeof e?new t("N",e):this.undefinedValueNotification},t.createError=function(e){return new t("E",void 0,e)},t.createComplete=function(){return this.completeNotification},t.completeNotification=new t("C"),t.undefinedValueNotification=new t("N",void 0),t}();e.Notification=i},function(t,e,n){"use strict";var r=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},i=n(38),o=n(1040),s=function(t){function e(e,n){t.call(this,e,n),this.scheduler=e,this.work=n,this.pending=!1}return r(e,t),e.prototype.schedule=function(t,e){if(void 0===e&&(e=0),this.closed)return this;this.state=t,this.pending=!0;var n=this.id,r=this.scheduler;return null!=n&&(this.id=this.recycleAsyncId(r,n,e)),this.delay=e,this.id=this.id||this.requestAsyncId(r,this.id,e),this},e.prototype.requestAsyncId=function(t,e,n){return void 0===n&&(n=0),i.root.setInterval(t.flush.bind(t,this),n)},e.prototype.recycleAsyncId=function(t,e,n){return void 0===n&&(n=0),null!==n&&this.delay===n?e:i.root.clearInterval(e)&&void 0||void 0},e.prototype.execute=function(t,e){if(this.closed)return new Error("executing a cancelled action");this.pending=!1;var n=this._execute(t,e);return n?n:void(this.pending===!1&&null!=this.id&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null)))},e.prototype._execute=function(t,e){var n=!1,r=void 0;try{this.work(t)}catch(t){n=!0,r=!!t&&t||new Error(t)}if(n)return this.unsubscribe(),r},e.prototype._unsubscribe=function(){var t=this.id,e=this.scheduler,n=e.actions,r=n.indexOf(this);this.work=null,this.delay=null,this.state=null,this.pending=!1,this.scheduler=null,r!==-1&&n.splice(r,1),null!=t&&(this.id=this.recycleAsyncId(e,t,null))},e}(o.Action);e.AsyncAction=s},function(t,e,n){"use strict";var r=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},i=n(783),o=function(t){function e(){t.apply(this,arguments),this.actions=[],this.active=!1,this.scheduled=void 0}return r(e,t),e.prototype.flush=function(t){var e=this.actions;if(this.active)return void e.push(t);var n;this.active=!0;do if(n=t.execute(t.state,t.delay))break;while(t=e.shift());if(this.active=!1,n){for(;t=e.shift();)t.unsubscribe();throw n}},e}(i.Scheduler);e.AsyncScheduler=o},function(t,e,n){"use strict";var r=n(38),i=r.root.Symbol;if("function"==typeof i)i.iterator?e.$$iterator=i.iterator:"function"==typeof i.for&&(e.$$iterator=i.for("iterator"));else if(r.root.Set&&"function"==typeof(new r.root.Set)["@@iterator"])e.$$iterator="@@iterator";else if(r.root.Map)for(var o=Object.getOwnPropertyNames(r.root.Map.prototype),s=0;s0)t.bootstrapFactories.forEach(function(t){return e.bootstrap(t)});else{if(!t.instance.ngDoBootstrap)throw new Error("The module "+n.i(_.b)(t.instance.constructor)+' was bootstrapped, but it does not declare "@NgModule.bootstrap" components nor a "ngDoBootstrap" method. Please define one of these.');t.instance.ngDoBootstrap(e)}},e.decorators=[{type:v.b}],e.ctorParameters=[{type:v.g}],e}(R),N=function(){function t(){}return Object.defineProperty(t.prototype,"componentTypes",{get:function(){return n.i(f.a)()},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"components",{get:function(){return n.i(f.a)()},enumerable:!0,configurable:!0}),t}(),P=function(t){function e(e,n,r,o,s,a,c,u){var l=this;t.call(this),this._zone=e,this._console=n,this._injector=r,this._exceptionHandler=o,this._componentFactoryResolver=s,this._initStatus=a,this._testabilityRegistry=c,this._testability=u,this._bootstrapListeners=[],this._rootComponents=[],this._rootComponentTypes=[],this._changeDetectorRefs=[],this._runningTick=!1,this._enforceNoNewChanges=!1,this._enforceNoNewChanges=i(),this._zone.onMicrotaskEmpty.subscribe({next:function(){l._zone.run(function(){l.tick()})}})}return E(e,t),e.prototype.registerChangeDetector=function(t){this._changeDetectorRefs.push(t)},e.prototype.unregisterChangeDetector=function(t){p.d.remove(this._changeDetectorRefs,t)},e.prototype.bootstrap=function(t){var e=this;if(!this._initStatus.done)throw new Error("Cannot bootstrap as there are still asynchronous initializers running. Bootstrap components in the `ngDoBootstrap` method of the root module.");var n;n=t instanceof w.ComponentFactory?t:this._componentFactoryResolver.resolveComponentFactory(t),this._rootComponentTypes.push(n.componentType);var r=n.create(this._injector,[],n.selector);r.onDestroy(function(){e._unloadComponent(r)});var o=r.injector.get(C.Testability,null);return o&&r.injector.get(C.TestabilityRegistry).registerApplication(r.location.nativeElement,o),this._loadComponent(r),i()&&this._console.log("Angular 2 is running in the development mode. Call enableProdMode() to enable the production mode."),r},e.prototype._loadComponent=function(t){this._changeDetectorRefs.push(t.changeDetectorRef),this.tick(),this._rootComponents.push(t);var e=this._injector.get(m.APP_BOOTSTRAP_LISTENER,[]).concat(this._bootstrapListeners);e.forEach(function(e){return e(t)})},e.prototype._unloadComponent=function(t){this._rootComponents.indexOf(t)!=-1&&(this.unregisterChangeDetector(t.changeDetectorRef),p.d.remove(this._rootComponents,t))},e.prototype.tick=function(){if(this._runningTick)throw new Error("ApplicationRef.tick is called recursively");var t=e._tickScope();try{this._runningTick=!0,this._changeDetectorRefs.forEach(function(t){return t.detectChanges()}),this._enforceNoNewChanges&&this._changeDetectorRefs.forEach(function(t){return t.checkNoChanges()})}finally{this._runningTick=!1,n.i(I.a)(t)}},e.prototype.ngOnDestroy=function(){this._rootComponents.slice().forEach(function(t){return t.destroy()})},Object.defineProperty(e.prototype,"componentTypes",{get:function(){return this._rootComponentTypes},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"components",{get:function(){return this._rootComponents},enumerable:!0,configurable:!0}),e._tickScope=n.i(I.b)("ApplicationRef#tick()"),e.decorators=[{type:v.b}],e.ctorParameters=[{type:k.NgZone},{type:g.Console},{type:v.g},{type:h.ErrorHandler},{type:x.ComponentFactoryResolver},{type:y.ApplicationInitStatus},{type:C.TestabilityRegistry,decorators:[{type:v.d}]},{type:C.Testability,decorators:[{type:v.d}]}],e}(N)},function(t,e,n){"use strict";function r(t,e){return n.i(i.a)(t)&&n.i(i.a)(e)?n.i(i.c)(t,e,r):!(n.i(i.a)(t)||n.i(o.k)(t)||n.i(i.a)(e)||n.i(o.k)(e))||n.i(o.i)(t,e)}var i=n(118),o=n(7);n.d(e,"a",function(){return s}),e.b=r,n.d(e,"e",function(){return a}),n.d(e,"c",function(){return c}),n.d(e,"d",function(){return u}),n.d(e,"f",function(){return o.i});var s={toString:function(){return"CD_INIT_VALUE"}},a=function(){function t(t){this.wrapped=t}return t.wrap=function(e){return new t(e)},t}(),c=function(){function t(){this.hasWrappedValue=!1}return t.prototype.unwrap=function(t){return t instanceof a?(this.hasWrappedValue=!0,t.wrapped):t},t.prototype.reset=function(){this.hasWrappedValue=!1},t}(),u=function(){function t(t,e){this.previousValue=t,this.currentValue=e}return t.prototype.isFirstChange=function(){return this.previousValue===s},t}()},function(t,e,n){"use strict";function r(t){return n.i(i.c)(t)||t===o.Default}var i=n(7);n.d(e,"a",function(){return o}),n.d(e,"b",function(){return s}),e.c=r;var o;!function(t){t[t.OnPush=0]="OnPush",t[t.Default=1]="Default"}(o||(o={}));var s;!function(t){t[t.CheckOnce=0]="CheckOnce",t[t.Checked=1]="Checked",t[t.CheckAlways=2]="CheckAlways",t[t.Detached=3]="Detached",t[t.Errored=4]="Errored",t[t.Destroyed=5]="Destroyed"}(s||(s={}))},function(t,e,n){"use strict";var r=n(53),i=n(7);n.d(e,"Console",function(){return o});var o=function(){function t(){}return t.prototype.log=function(t){n.i(i.g)(t)},t.prototype.warn=function(t){n.i(i.h)(t)},t.decorators=[{type:r.b}],t.ctorParameters=[],t}()},function(t,e,n){"use strict";var r=n(103);n.d(e,"b",function(){return i}),n.d(e,"c",function(){return o}),n.d(e,"a",function(){return s}),n.d(e,"d",function(){return a}),n.d(e,"f",function(){return c}),n.d(e,"e",function(){return u});var i=n.i(r.a)("Inject",[["token",void 0]]),o=n.i(r.a)("Optional",[]),s=n.i(r.a)("Injectable",[]),a=n.i(r.a)("Self",[]),c=n.i(r.a)("SkipSelf",[]),u=n.i(r.a)("Host",[])},function(t,e,n){"use strict";function r(t,e){return null}var i=n(432);n.d(e,"b",function(){return s}),n.d(e,"a",function(){return a}),n.d(e,"c",function(){return c}),n.d(e,"d",function(){return u});var o=n.i(i.a)(),s=o?i.b:function(t,e){return r},a=o?i.c:function(t,e){return e},c=o?i.d:function(t,e){return null},u=o?i.e:function(t){return null}},function(t,e,n){"use strict";var r=n(50);n.d(e,"RenderComponentType",function(){return i}),n.d(e,"RenderDebugInfo",function(){return o}),n.d(e,"Renderer",function(){return s}),n.d(e,"RootRenderer",function(){return a});var i=function(){function t(t,e,n,r,i,o){this.id=t,this.templateUrl=e,this.slotCount=n,this.encapsulation=r,this.styles=i,this.animations=o}return t}(),o=function(){function t(){}return Object.defineProperty(t.prototype,"injector",{get:function(){return n.i(r.a)()},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"component",{get:function(){return n.i(r.a)()},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"providerTokens",{get:function(){return n.i(r.a)()},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"references",{get:function(){return n.i(r.a)()},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"context",{get:function(){return n.i(r.a)()},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"source",{get:function(){return n.i(r.a)()},enumerable:!0,configurable:!0}),t}(),s=function(){function t(){}return t}(),a=function(){function t(){}return t}()},function(t,e,n){"use strict";function r(t){l=t}var i=n(53),o=n(7),s=n(104);n.d(e,"Testability",function(){return a}),n.d(e,"TestabilityRegistry",function(){return c}),e.setTestabilityGetter=r;var a=function(){function t(t){this._ngZone=t,this._pendingCount=0,this._isZoneStable=!0,this._didWork=!1,this._callbacks=[],this._watchAngularEvents()}return t.prototype._watchAngularEvents=function(){var t=this;this._ngZone.onUnstable.subscribe({next:function(){t._didWork=!0,t._isZoneStable=!1}}),this._ngZone.runOutsideAngular(function(){t._ngZone.onStable.subscribe({next:function(){s.NgZone.assertNotInAngularZone(),n.i(o.l)(function(){t._isZoneStable=!0,t._runCallbacksIfReady()})}})})},t.prototype.increasePendingRequestCount=function(){return this._pendingCount+=1,this._didWork=!0,this._pendingCount},t.prototype.decreasePendingRequestCount=function(){if(this._pendingCount-=1,this._pendingCount<0)throw new Error("pending async requests below zero");return this._runCallbacksIfReady(),this._pendingCount},t.prototype.isStable=function(){return this._isZoneStable&&0==this._pendingCount&&!this._ngZone.hasPendingMacrotasks},t.prototype._runCallbacksIfReady=function(){var t=this;this.isStable()?n.i(o.l)(function(){for(;0!==t._callbacks.length;)t._callbacks.pop()(t._didWork);t._didWork=!1}):this._didWork=!0},t.prototype.whenStable=function(t){this._callbacks.push(t),this._runCallbacksIfReady()},t.prototype.getPendingRequestCount=function(){return this._pendingCount},t.prototype.findBindings=function(t,e,n){return[]},t.prototype.findProviders=function(t,e,n){return[]},t.decorators=[{type:i.b}],t.ctorParameters=[{type:s.NgZone}],t}(),c=function(){function t(){this._applications=new Map,l.addToWindow(this)}return t.prototype.registerApplication=function(t,e){this._applications.set(t,e)},t.prototype.getTestability=function(t){return this._applications.get(t)},t.prototype.getAllTestabilities=function(){return Array.from(this._applications.values())},t.prototype.getAllRootElements=function(){return Array.from(this._applications.keys())},t.prototype.findTestabilityInTree=function(t,e){return void 0===e&&(e=!0),l.findTestabilityInTree(this,t,e)},t.decorators=[{type:i.b}],t.ctorParameters=[],t}(),u=function(){function t(){}return t.prototype.addToWindow=function(t){},t.prototype.findTestabilityInTree=function(t,e,n){return null},t}(),l=new u},function(t,e,n){"use strict";var r=n(303);n.d(e,"AnimationDriver",function(){return o});var i=function(){function t(){}return t.prototype.animate=function(t,e,n,i,o,s,a){return void 0===a&&(a=[]),new r.a},t}(),o=function(){function t(){}return t.NOOP=new i,t}()},function(t,e,n){"use strict";function r(t){return n.i(a.getDebugNode)(t)}function i(t,e){return n.i(a.isDevMode)()?o(t,e):t}function o(t,e){return n.i(l.a)().setGlobalVar(f,r),n.i(l.a)().setGlobalVar(_,c.a.merge(p,s(e||[]))),new u.b(t)}function s(t){return t.reduce(function(t,e){return t[e.name]=e.token,t},{})}var a=n(2),c=n(443),u=n(303),l=n(32),h=n(155);e.inspectNativeElement=r,n.d(e,"NgProbeToken",function(){return d}),e._createConditionalRootRenderer=i,n.d(e,"ELEMENT_PROBE_PROVIDERS",function(){return y}),n.d(e,"ELEMENT_PROBE_PROVIDERS_PROD_MODE",function(){return m});var p={ApplicationRef:a.ApplicationRef,NgZone:a.NgZone},f="ng.probe",_="ng.coreTokens",d=function(){function t(t,e){this.name=t,this.token=e}return t}(),y=[{provide:a.RootRenderer,useFactory:i,deps:[h.DomRootRenderer,[d,new a.Optional]]}],m=[{provide:a.RootRenderer,useFactory:o,deps:[h.DomRootRenderer,[d,new a.Optional]]}]},function(t,e,n){"use strict";function r(t,e){var n=t.parentNode;if(e.length>0&&n){var r=t.nextSibling;if(r)for(var i=0;i-1},e.decorators=[{type:r.Injectable}],e.ctorParameters=[{type:c,decorators:[{type:r.Inject,args:[a]}]}],e}(i.EventManagerPlugin)},function(t,e,n){"use strict";var r=n(2),i=n(120);n.d(e,"SharedStylesHost",function(){return s}),n.d(e,"DomSharedStylesHost",function(){return a});var o=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},s=function(){function t(){this._styles=[],this._stylesSet=new Set}return t.prototype.addStyles=function(t){var e=this,n=[];t.forEach(function(t){e._stylesSet.has(t)||(e._stylesSet.add(t),e._styles.push(t),n.push(t))}),this.onStylesAdded(n)},t.prototype.onStylesAdded=function(t){},t.prototype.getAllStyles=function(){return this._styles},t.decorators=[{type:r.Injectable}],t.ctorParameters=[],t}(),a=function(t){function e(e){t.call(this),this._hostNodes=new Set,this._hostNodes.add(e.head)}return o(e,t),e.prototype._addStylesToHost=function(t,e){for(var n=0;n=r.methods.length-1||i<0)&&(r=this.categories[this.activeCatIdx+Math.sign(t)]||r,i=t>0?-1:r.methods.length-1),e=r.methods[i]&&r.methods[i].pointer}return this.getMethodElByPtr(e,n.id)},t.prototype.getCurrentMethodEl=function(){return this.getMethodElByPtr(this.activeMethodPtr,this.categories[this.activeCatIdx].id)},t.prototype.getMethodElByPtr=function(t,e){var n=t?'[pointer="'+t+'"][section="'+e+'"]':'[section="'+e+'"]';return document.querySelector(n)},t.prototype.getMethodElByOperId=function(t){var e='[operation-id="'+t+'"]';return document.querySelector(e)},t.prototype.activate=function(t,e){if(!(t<0)){var n=this.categories;n[this.activeCatIdx].active=!1,n[this.activeCatIdx].methods.length&&this.activeMethodIdx>=0&&(n[this.activeCatIdx].methods[this.activeMethodIdx].active=!1),this.activeCatIdx=t,this.activeMethodIdx=e,n[t].active=!0;var r;n[t].methods.length&&e>-1&&(r=n[t].methods[e],r.active=!0),this.changed.next({cat:n[t],item:r})}},t.prototype._calcActiveIndexes=function(t){var e=this.categories,n=e.length;if(!n)return[0,-1];var r=e[this.activeCatIdx].methods.length,i=this.activeMethodIdx+t,o=this.activeCatIdx;if(i>r-1&&(o++,i=-1),i<-1){var s=--o;r=e[Math.max(s,0)].methods.length,i=r-1}return o>n-1&&(o=n-1,i=r-1),o<0&&(o=0,i=0),[o,i]},t.prototype.changeActive=function(t){void 0===t&&(t=1);var e=this._calcActiveIndexes(t),n=e[0],r=e[1];return this.activate(n,r),0===r&&0===n},t.prototype.scrollToActive=function(){this.scrollService.scrollTo(this.getCurrentMethodEl())},t.prototype.setActiveByHash=function(t){if(!t)return void(this.categories[0].headless&&this.activate(0,0));var e,n;t=t.substr(1);var r=t.split("/")[0],i=decodeURIComponent(t.substr(r.length+1));if("section"===r||"tag"===r){var o=i.split("/")[0];e=this.categories.findIndex(function(t){return t.id===r+"/"+o});var s=this.categories[e];i=i.substr(o.length)||null,n=s.methods.findIndex(function(t){return t.pointer===i})}else e=this.categories.findIndex(function(t){return!!t.methods.length&&(n=t.methods.findIndex(function(t){return t.operationId===i||t.pointer===i}),n>=0)});this.activate(e,n)},t=__decorate([r.Injectable(),__metadata("design:paramtypes",["function"==typeof(e="undefined"!=typeof s.Hash&&s.Hash)&&e||Object,"function"==typeof(n="undefined"!=typeof l.LazyTasksService&&l.LazyTasksService)&&n||Object,"function"==typeof(p="undefined"!=typeof o.ScrollService&&o.ScrollService)&&p||Object,"function"==typeof(f="undefined"!=typeof u.AppStateService&&u.AppStateService)&&f||Object,"function"==typeof(_="undefined"!=typeof a.SpecManager&&a.SpecManager)&&_||Object])],t);var e,n,p,f,_}();e.MenuService=p},function(t,e,n){"use strict";var r=n(2),i=n(782),o=function(){function t(){}return Object.defineProperty(t,"warnings",{get:function(){return t._warningsObs},enumerable:!0,configurable:!0}),t.hasWarnings=function(){return!!t._warnings.length},t.warn=function(e){t._warnings.push(e),t._warningsObs.next(t._warnings),console.warn(e)},t._warnings=[],t._warningsObs=new i.Subject,t=__decorate([r.Injectable(),__metadata("design:paramtypes",[])],t)}();e.WarningsService=o},function(t,e,n){"use strict";var r=n(2),i=n(308),o=function(){function t(t,e){this.renderer=t,this.element=e}return t.prototype.ngOnInit=function(){i.Clipboard.isSupported()||this.element.nativeElement.parentNode.removeChild(this.element.nativeElement),this.renderer.setElementAttribute(this.element.nativeElement,"data-hint","Copy to Clipboard!")},t.prototype.onClick=function(){var t;if(t=this.copyText?i.Clipboard.copyCustom(JSON.stringify(this.copyText)):i.Clipboard.copyElement(this.copyElement))this.renderer.setElementAttribute(this.element.nativeElement,"data-hint","Copied!");else{var e=this.hintElement||this.copyElement;if(!e)return;this.renderer.setElementAttribute(e,"data-hint",'Press "ctrl + c" to copy'),this.renderer.setElementClass(e,"hint--top",!0),this.renderer.setElementClass(e,"hint--always",!0)}},t.prototype.onLeave=function(){var t=this;setTimeout(function(){t.renderer.setElementAttribute(t.element.nativeElement,"data-hint","Copy to Clipboard")},500)},__decorate([r.Input(),__metadata("design:type",String)],t.prototype,"copyText",void 0),__decorate([r.Input(),__metadata("design:type",Object)],t.prototype,"copyElement",void 0),__decorate([r.Input(),__metadata("design:type",Object)],t.prototype,"hintElement",void 0),__decorate([r.HostListener("click"),__metadata("design:type",Function),__metadata("design:paramtypes",[]),__metadata("design:returntype",void 0)],t.prototype,"onClick",null),__decorate([r.HostListener("mouseleave"),__metadata("design:type",Function),__metadata("design:paramtypes",[]),__metadata("design:returntype",void 0)],t.prototype,"onLeave",null),t=__decorate([r.Directive({selector:"[copy-button]"}),__metadata("design:paramtypes",["function"==typeof(e="undefined"!=typeof r.Renderer&&r.Renderer)&&e||Object,"function"==typeof(n="undefined"!=typeof r.ElementRef&&r.ElementRef)&&n||Object])],t);var e,n}();e.CopyButton=o},function(t,e,n){"use strict";var r=n(2),i=n(2),o=function(){function t(t){this.changeDetector=t,this.change=new r.EventEmitter,this.tabs=[]}return t.prototype.selectTab=function(t,e){void 0===e&&(e=!0),t.active||(this.tabs.forEach(function(t){t.active=!1}),t.active=!0,e&&this.change.next(t.tabTitle))},t.prototype.selectyByTitle=function(t,e){void 0===e&&(e=!1);var n,r;this.tabs.forEach(function(e){e.active&&(n=e),e.active=!1,e.tabTitle===t&&(r=e)}),r?r.active=!0:n.active=!0,e&&this.change.next(t),this.changeDetector.markForCheck()},t.prototype.addTab=function(t){0===this.tabs.length&&(t.active=!0),this.tabs.push(t)},t.prototype.ngOnInit=function(){var t=this;this.selected&&this.selected.subscribe(function(e){return t.selectyByTitle(e)})},__decorate([r.Input(),__metadata("design:type",Object)],t.prototype,"selected",void 0),__decorate([r.Output(),__metadata("design:type",Object)],t.prototype,"change",void 0),t=__decorate([r.Component({selector:"tabs",template:'\n
    \n
  • {{tab.tabTitle}}
  • \n
\n \n ',styleUrls:["tabs.css"],changeDetection:i.ChangeDetectionStrategy.OnPush}),__metadata("design:paramtypes",["function"==typeof(e="undefined"!=typeof i.ChangeDetectorRef&&i.ChangeDetectorRef)&&e||Object])],t);var e}();e.Tabs=o;var s=function(){function t(t){this.active=!1,t.addTab(this)}return __decorate([r.Input(),__metadata("design:type",Boolean)],t.prototype,"active",void 0),__decorate([r.Input(),__metadata("design:type",String)],t.prototype,"tabTitle",void 0),__decorate([r.Input(),__metadata("design:type",String)],t.prototype,"tabStatus",void 0),t=__decorate([r.Component({selector:"tab",template:'\n
\n \n
\n ',styles:["\n :host {\n display: block;\n }\n .tab-wrap {\n display: none;\n }\n\n .tab-wrap.active {\n display: block;\n }"]}),__metadata("design:paramtypes",[o])],t)}();e.Tab=s},function(t,e,n){"use strict";var r=n(2),i=function(){function t(){this.type="general",this.visible=!1,this.empty=!1,this.headless=!1,this.open=new r.EventEmitter,this.close=new r.EventEmitter}return t.prototype.toggle=function(){this.visible=!this.visible,this.empty||(this.visible?this.open.next({}):this.close.next({}))},__decorate([r.Input(),__metadata("design:type",Object)],t.prototype,"type",void 0),__decorate([r.Input(),__metadata("design:type",Object)],t.prototype,"visible",void 0),__decorate([r.Input(),__metadata("design:type",Object)],t.prototype,"empty",void 0),__decorate([r.Input(),__metadata("design:type",Object)],t.prototype,"title",void 0),__decorate([r.Input(),__metadata("design:type",Boolean)],t.prototype,"headless",void 0),__decorate([r.Output(),__metadata("design:type",Object)],t.prototype,"open",void 0),__decorate([r.Output(),__metadata("design:type",Object)],t.prototype,"close",void 0),t=__decorate([r.Component({selector:"zippy",templateUrl:"./zippy.html",styleUrls:["./zippy.css"]}),__metadata("design:paramtypes",[])],t)}();e.Zippy=i},function(t,e,n){"use strict";var r=n(14),i=n(1),o=n(47),s=n(128),a=n(81),c=n(169),u=n(125),l=n(11),h=n(10),p=n(245),f=n(130),_=n(240);t.exports=function(t,e,n,d,y,m){var g=r[t],v=g,b=y?"set":"add",w=v&&v.prototype,x={},I=function(t){var e=w[t];o(w,t,"delete"==t?function(t){return!(m&&!l(t))&&e.call(this,0===t?0:t)}:"has"==t?function(t){return!(m&&!l(t))&&e.call(this,0===t?0:t)}:"get"==t?function(t){return m&&!l(t)?void 0:e.call(this,0===t?0:t)}:"add"==t?function(t){return e.call(this,0===t?0:t),this}:function(t,n){return e.call(this,0===t?0:t,n),this})};if("function"==typeof v&&(m||w.forEach&&!h(function(){(new v).entries().next()}))){var C=new v,k=C[b](m?{}:-0,1)!=C,T=h(function(){C.has(1)}),E=p(function(t){new v(t)}),S=!m&&h(function(){for(var t=new v,e=5;e--;)t[b](e,e);return!t.has(-0)});E||(v=e(function(e,n){u(e,v,t);var r=_(new g,e,v);return void 0!=n&&c(n,y,r[b],r),r}),v.prototype=w,w.constructor=v),(T||S)&&(I("delete"),I("has"),y&&I("get")),(S||k)&&I(b),m&&w.clear&&delete w.clear}else v=d.getConstructor(e,t,y,b),s(v.prototype,n),a.NEED=!0;return f(v,t),x[t]=v,i(i.G+i.W+i.F*(v!=g),x),m||d.setStrong(v,t,y),v}},function(t,e,n){"use strict";var r=n(51),i=n(47),o=n(10),s=n(68),a=n(18);t.exports=function(t,e,n){var c=a(t),u=n(s,c,""[t]),l=u[0],h=u[1];o(function(){var e={};return e[c]=function(){return 7},7!=""[t](e)})&&(i(String.prototype,t,l),r(RegExp.prototype,c,2==e?function(t,e){return h.call(t,this,e)}:function(t){return h.call(t,this)}))}},function(t,e,n){var r=n(92),i=n(330),o=n(241),s=n(6),a=n(37),c=n(253),u={},l={},e=t.exports=function(t,e,n,h,p){var f,_,d,y,m=p?function(){return t}:c(t),g=r(n,h,e?2:1),v=0;if("function"!=typeof m)throw TypeError(t+" is not iterable!");if(o(m)){for(f=a(t.length);f>v;v++)if(y=e?g(s(_=t[v])[0],_[1]):g(t[v]),y===u||y===l)return y}else for(d=m.call(t);!(_=d.next()).done;)if(y=i(d,g,_.value,e),y===u||y===l)return y};e.BREAK=u,e.RETURN=l},function(t,e){e.f=Object.getOwnPropertySymbols},function(t,e){e.f={}.propertyIsEnumerable},function(t,e,n){var r=n(14),i="__core-js_shared__",o=r[i]||(r[i]={});t.exports=function(t){return o[t]||(o[t]={})}},function(t,e,n){var r=n(1),i=n(68),o=n(10),s=n(251),a="["+s+"]",c="​…",u=RegExp("^"+a+a+"*"),l=RegExp(a+a+"*$"),h=function(t,e,n){var i={},a=o(function(){return!!s[t]()||c[t]()!=c}),u=i[t]=a?e(p):s[t];n&&(i[n]=u),r(r.P+r.F*a,"String",i)},p=h.trim=function(t,e){return t=String(i(t)),1&e&&(t=t.replace(u,"")),2&e&&(t=t.replace(l,"")),t};t.exports=h},function(t,e,n){for(var r,i=n(14),o=n(51),s=n(96),a=s("typed_array"),c=s("view"),u=!(!i.ArrayBuffer||!i.DataView),l=u,h=0,p=9,f="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");h=t.length?(this._t=void 0,i(1)):"keys"==e?i(0,n):"values"==e?i(0,t[n]):i(0,[n,t[n]])},"values"),o.Arguments=o.Array,r("keys"),r("values"),r("entries")},function(t,e,n){"use strict";var r=n(342)(!0);n(244)(String,"String",function(t){this._t=String(t),this._i=0},function(){var t,e=this._t,n=this._i;return n>=e.length?{value:void 0,done:!0}:(t=r(e,n),this._i+=t.length,{value:t,done:!1})})},function(t,e){t.exports=function(){var t=[];return t.toString=function(){for(var t=[],e=0;ee&&(o=Math.max(o,i-e)),o>0&&r.splice(0,o),r},e}(i.Subject);e.ReplaySubject=a;var c=function(){function t(t,e){this.time=t,this.value=e}return t}()},function(t,e,n){"use strict";function r(t){return void 0===t&&(t=Number.POSITIVE_INFINITY),this.lift(new a(t))}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(4),s=n(5);e.mergeAll=r;var a=function(){function t(t){this.concurrent=t}return t.prototype.call=function(t,e){return e._subscribe(new c(t,this.concurrent))},t}();e.MergeAllOperator=a;var c=function(t){function e(e,n){t.call(this,e),this.concurrent=n,this.hasCompleted=!1,this.buffer=[],this.active=0}return i(e,t),e.prototype._next=function(t){this.active0?this._next(e.shift()):0===this.active&&this.hasCompleted&&this.destination.complete()},e}(o.OuterSubscriber);e.MergeAllSubscriber=c},function(t,e,n){"use strict";function r(t){var e,n=t.Symbol;return"function"==typeof n?n.observable?e=n.observable:(e=n("observable"),n.observable=e):e="@@observable",e}var i=n(38);e.getSymbolObservable=r,e.$$observable=r(i.root)},function(t,e,n){"use strict";var r=n(38),i=r.root.Symbol;e.$$rxSubscriber="function"==typeof i&&"function"==typeof i.for?i.for("rxSubscriber"):"@@rxSubscriber"},function(t,e){"use strict";var n=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},r=function(t){function e(){var e=t.call(this,"argument out of range");this.name=e.name="ArgumentOutOfRangeError",this.stack=e.stack,this.message=e.message}return n(e,t),e}(Error);e.ArgumentOutOfRangeError=r},function(t,e){"use strict";var n=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},r=function(t){function e(){var e=t.call(this,"no elements in sequence");this.name=e.name="EmptyError",this.stack=e.stack,this.message=e.message}return n(e,t),e}(Error);e.EmptyError=r},function(t,e){"use strict";function n(t){return t instanceof Date&&!isNaN(+t)}e.isDate=n},function(t,e,n){function r(t){if(t&&!c(t))throw new Error("Unknown encoding: "+t)}function i(t){return t.toString(this.encoding)}function o(t){this.charReceived=t.length%2,this.charLength=this.charReceived?2:0}function s(t){this.charReceived=t.length%3,this.charLength=this.charReceived?3:0}var a=n(16).Buffer,c=a.isEncoding||function(t){switch(t&&t.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}},u=e.StringDecoder=function(t){switch(this.encoding=(t||"utf8").toLowerCase().replace(/[-_]/,""),r(t),this.encoding){case"utf8":this.surrogateSize=3;break;case"ucs2":case"utf16le":this.surrogateSize=2,this.detectIncompleteChar=o;break;case"base64":this.surrogateSize=3,this.detectIncompleteChar=s;break;default:return void(this.write=i)}this.charBuffer=new a(6),this.charReceived=0,this.charLength=0};u.prototype.write=function(t){for(var e="";this.charLength;){var n=t.length>=this.charLength-this.charReceived?this.charLength-this.charReceived:t.length;if(t.copy(this.charBuffer,this.charReceived,0,n),this.charReceived+=n,this.charReceived=55296&&r<=56319)){if(this.charReceived=this.charLength=0,0===t.length)return e;break}this.charLength+=this.surrogateSize,e=""}this.detectIncompleteChar(t);var i=t.length;this.charLength&&(t.copy(this.charBuffer,0,t.length-this.charReceived,i),i-=this.charReceived),e+=t.toString(this.encoding,0,i);var i=e.length-1,r=e.charCodeAt(i);if(r>=55296&&r<=56319){var o=this.surrogateSize;return this.charLength+=o,this.charReceived+=o,this.charBuffer.copy(this.charBuffer,o,0,o),t.copy(this.charBuffer,0,0,o),e.substring(0,i)}return e},u.prototype.detectIncompleteChar=function(t){for(var e=t.length>=3?3:t.length;e>0;e--){var n=t[t.length-e];if(1==e&&n>>5==6){this.charLength=2;break}if(e<=2&&n>>4==14){this.charLength=3;break}if(e<=3&&n>>3==30){this.charLength=4;break}}this.charReceived=e},u.prototype.end=function(t){var e="";if(t&&t.length&&(e=this.write(t)),this.charReceived){var n=this.charReceived,r=this.charBuffer,i=this.encoding;e+=r.slice(0,n).toString(i)}return e}},function(t,e){function n(t,e){for(var n=0;n=0&&g.splice(e,1)}function s(t){var e=document.createElement("style");return e.type="text/css",i(t,e),e}function a(t){var e=document.createElement("link");return e.rel="stylesheet",i(t,e),e}function c(t,e){var n,r,i;if(e.singleton){var c=m++;n=y||(y=s(e)),r=u.bind(null,n,c,!1),i=u.bind(null,n,c,!0)}else t.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(n=a(e),r=h.bind(null,n),i=function(){o(n),n.href&&URL.revokeObjectURL(n.href)}):(n=s(e),r=l.bind(null,n),i=function(){o(n)});return r(t),function(e){if(e){if(e.css===t.css&&e.media===t.media&&e.sourceMap===t.sourceMap)return;r(t=e)}else i()}}function u(t,e,n,r){var i=n?"":r.css;if(t.styleSheet)t.styleSheet.cssText=v(e,i);else{var o=document.createTextNode(i),s=t.childNodes;s[e]&&t.removeChild(s[e]),s.length?t.insertBefore(o,s[e]):t.appendChild(o)}}function l(t,e){var n=e.css,r=e.media;if(r&&t.setAttribute("media",r),t.styleSheet)t.styleSheet.cssText=n;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(n))}}function h(t,e){var n=e.css,r=e.sourceMap;r&&(n+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(r))))+" */");var i=new Blob([n],{type:"text/css"}),o=t.href;t.href=URL.createObjectURL(i),o&&URL.revokeObjectURL(o)}var p={},f=function(t){var e;return function(){return"undefined"==typeof e&&(e=t.apply(this,arguments)),e}},_=f(function(){return/msie [6-9]\b/.test(window.navigator.userAgent.toLowerCase())}),d=f(function(){return document.head||document.getElementsByTagName("head")[0]}),y=null,m=0,g=[];t.exports=function(t,e){if("undefined"!=typeof DEBUG&&DEBUG&&"object"!=typeof document)throw new Error("The style-loader cannot be used in a non-browser environment");e=e||{},"undefined"==typeof e.singleton&&(e.singleton=_()),"undefined"==typeof e.insertAt&&(e.insertAt="bottom");var i=r(t);return n(i,e),function(t){for(var o=[],s=0;s",'"',"`"," ","\r","\n","\t"],_=["{","}","|","\\","^","`"].concat(f),d=["'"].concat(_),y=["%","/","?",";","#"].concat(d),m=["/","?","#"],g=255,v=/^[+a-z0-9A-Z_-]{0,63}$/,b=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,w={javascript:!0,"javascript:":!0},x={javascript:!0,"javascript:":!0},I={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},C=n(722);r.prototype.parse=function(t,e,n){if(!u.isString(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var r=t.indexOf("?"),i=r!==-1&&r127?"x":M[V];if(!D.match(v)){var L=N.slice(0,E),F=N.slice(E+1),B=M.match(b);B&&(L.push(B[1]),F.unshift(B[2])),F.length&&(a="/"+F.join(".")+a),this.hostname=L.join(".");break}}}this.hostname.length>g?this.hostname="":this.hostname=this.hostname.toLowerCase(),A||(this.hostname=c.toASCII(this.hostname));var U=this.port?":"+this.port:"",z=this.hostname||"";this.host=z+U,this.href+=this.host,A&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==a[0]&&(a="/"+a))}if(!w[_])for(var E=0,P=d.length;E0)&&n.host.split("@");k&&(n.auth=k.shift(),n.host=n.hostname=k.shift())}return n.search=t.search,n.query=t.query,u.isNull(n.pathname)&&u.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.href=n.format(),n}if(!w.length)return n.pathname=null,n.search?n.path="/"+n.search:n.path=null,n.href=n.format(),n;for(var T=w.slice(-1)[0],E=(n.host||t.host||w.length>1)&&("."===T||".."===T)||""===T,S=0,O=w.length;O>=0;O--)T=w[O],"."===T?w.splice(O,1):".."===T?(w.splice(O,1),S++):S&&(w.splice(O,1),S--);if(!v&&!b)for(;S--;S)w.unshift("..");!v||""===w[0]||w[0]&&"/"===w[0].charAt(0)||w.unshift(""),E&&"/"!==w.join("/").substr(-1)&&w.push("");var R=""===w[0]||w[0]&&"/"===w[0].charAt(0);if(C){n.hostname=n.host=R?"":w.length?w.shift():"";var k=!!(n.host&&n.host.indexOf("@")>0)&&n.host.split("@");k&&(n.auth=k.shift(),n.host=n.hostname=k.shift())}return v=v||n.host&&w.length,v&&!R&&w.unshift(""),w.length?n.pathname=w.join("/"):(n.pathname=null,n.path=null),u.isNull(n.pathname)&&u.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.auth=t.auth||n.auth,n.slashes=n.slashes||t.slashes,n.href=n.format(),n},r.prototype.parseHost=function(){var t=this.host,e=h.exec(t);e&&(e=e[0],":"!==e&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t)}},function(t,e,n){"use strict";var r=n(2);n.d(e,"NgStyle",function(){return i});var i=function(){function t(t,e,n){this._differs=t,this._ngEl=e,this._renderer=n}return Object.defineProperty(t.prototype,"ngStyle",{set:function(t){this._ngStyle=t,!this._differ&&t&&(this._differ=this._differs.find(t).create(null))},enumerable:!0,configurable:!0}),t.prototype.ngDoCheck=function(){if(this._differ){var t=this._differ.diff(this._ngStyle);t&&this._applyChanges(t)}},t.prototype._applyChanges=function(t){var e=this;t.forEachRemovedItem(function(t){return e._setStyle(t.key,null)}),t.forEachAddedItem(function(t){return e._setStyle(t.key,t.currentValue)}),t.forEachChangedItem(function(t){return e._setStyle(t.key,t.currentValue)})},t.prototype._setStyle=function(t,e){var n=t.split("."),r=n[0],i=n[1];e=e&&i?""+e+i:e,this._renderer.setElementStyle(this._ngEl.nativeElement,r,e)},t.decorators=[{type:r.Directive,args:[{selector:"[ngStyle]"}]}],t.ctorParameters=[{type:r.KeyValueDiffers},{type:r.ElementRef},{type:r.Renderer}],t.propDecorators={ngStyle:[{type:r.Input}]},t}()},function(t,e,n){"use strict";function r(t,e){return t.length>0&&e.startsWith(t)?e.substring(t.length):e}function i(t){return/\/index.html$/g.test(t)?t.substring(0,t.length-11):t}var o=n(2),s=n(140);n.d(e,"a",function(){return a});var a=function(){function t(e){var n=this;this._subject=new o.EventEmitter,this._platformStrategy=e;var r=this._platformStrategy.getBaseHref();this._baseHref=t.stripTrailingSlash(i(r)),this._platformStrategy.onPopState(function(t){n._subject.emit({url:n.path(!0),pop:!0,type:t.type})})}return t.prototype.path=function(t){return void 0===t&&(t=!1),this.normalize(this._platformStrategy.path(t))},t.prototype.isCurrentPathEqualTo=function(e,n){return void 0===n&&(n=""),this.path()==this.normalize(e+t.normalizeQueryParams(n))},t.prototype.normalize=function(e){return t.stripTrailingSlash(r(this._baseHref,i(e)))},t.prototype.prepareExternalUrl=function(t){return t.length>0&&!t.startsWith("/")&&(t="/"+t),this._platformStrategy.prepareExternalUrl(t)},t.prototype.go=function(t,e){void 0===e&&(e=""),this._platformStrategy.pushState(null,"",t,e)},t.prototype.replaceState=function(t,e){void 0===e&&(e=""),this._platformStrategy.replaceState(null,"",t,e)},t.prototype.forward=function(){this._platformStrategy.forward()},t.prototype.back=function(){this._platformStrategy.back()},t.prototype.subscribe=function(t,e,n){return void 0===e&&(e=null),void 0===n&&(n=null),this._subject.subscribe({next:t,error:e,complete:n})},t.normalizeQueryParams=function(t){return t.length>0&&"?"!=t.substring(0,1)?"?"+t:t},t.joinWithSlash=function(t,e){if(0==t.length)return e;if(0==e.length)return t;var n=0;return t.endsWith("/")&&n++,e.startsWith("/")&&n++,2==n?t+e.substring(1):1==n?t+e:t+"/"+e},t.stripTrailingSlash=function(t){return/\/$/g.test(t)&&(t=t.substring(0,t.length-1)),t},t.decorators=[{type:o.Injectable}],t.ctorParameters=[{type:s.a}],t}()},function(t,e,n){"use strict";var r=n(7),i=n(143);n.d(e,"AnimationSequencePlayer",function(){return o});var o=function(){function t(t){var e=this;this._players=t,this._currentIndex=0,this._onDoneFns=[],this._onStartFns=[],this._finished=!1,this._started=!1,this._destroyed=!1,this.parentPlayer=null,this._players.forEach(function(t){t.parentPlayer=e}),this._onNext(!1)}return t.prototype._onNext=function(t){var e=this;if(!this._finished)if(0==this._players.length)this._activePlayer=new i.NoOpAnimationPlayer,n.i(r.l)(function(){return e._onFinish()});else if(this._currentIndex>=this._players.length)this._activePlayer=new i.NoOpAnimationPlayer,this._onFinish();else{var o=this._players[this._currentIndex++];o.onDone(function(){return e._onNext(!0)}),this._activePlayer=o,t&&o.play()}},t.prototype._onFinish=function(){this._finished||(this._finished=!0,this._onDoneFns.forEach(function(t){return t()}),this._onDoneFns=[])},t.prototype.init=function(){this._players.forEach(function(t){return t.init()})},t.prototype.onStart=function(t){this._onStartFns.push(t)},t.prototype.onDone=function(t){this._onDoneFns.push(t)},t.prototype.hasStarted=function(){return this._started},t.prototype.play=function(){n.i(r.d)(this.parentPlayer)||this.init(),this.hasStarted()||(this._onStartFns.forEach(function(t){return t()}),this._onStartFns=[],this._started=!0),this._activePlayer.play()},t.prototype.pause=function(){this._activePlayer.pause()},t.prototype.restart=function(){this.reset(),this._players.length>0&&this._players[0].restart()},t.prototype.reset=function(){this._players.forEach(function(t){return t.reset()}),this._destroyed=!1,this._finished=!1,this._started=!1},t.prototype.finish=function(){this._onFinish(),this._players.forEach(function(t){return t.finish()})},t.prototype.destroy=function(){this._destroyed||(this._onFinish(),this._players.forEach(function(t){return t.destroy()}),this._destroyed=!0,this._activePlayer=new i.NoOpAnimationPlayer)},t.prototype.setPosition=function(t){this._players[0].setPosition(t)},t.prototype.getPosition=function(){return this._players[0].getPosition()},Object.defineProperty(t.prototype,"players",{get:function(){return this._players},enumerable:!0,configurable:!0}),t}()},function(t,e,n){"use strict";function r(t,e,n){var r=t.previousIndex;if(null===r)return r;var i=0;return n&&r"+n.i(o.b)(this.currentIndex)+"]"},t}(),l=function(){function t(){this._head=null,this._tail=null}return t.prototype.add=function(t){null===this._head?(this._head=this._tail=t,t._nextDup=null,t._prevDup=null):(this._tail._nextDup=t,t._prevDup=this._tail,t._nextDup=null,this._tail=t)},t.prototype.get=function(t,e){var r;for(r=this._head;null!==r;r=r._nextDup)if((null===e||e-1&&(n.splice(e,1),o+=t+".")}),o+=i,0!=n.length||0===i.length)return null;var s={};return s.domEventName=r,s.fullKey=o,s},e.getEventFullKey=function(t){var e="",r=n.i(i.a)().getEventKey(t);return r=r.toLowerCase()," "===r?r="space":"."===r&&(r="dot"),a.forEach(function(n){if(n!=r){var i=c[n];i(t)&&(e+=n+".")}}),e+=r},e.eventCallback=function(t,n,r){return function(i){e.getEventFullKey(i)===t&&r.runGuarded(function(){return n(i)})}},e._normalizeKey=function(t){switch(t){case"esc":return"escape";default:return t}},e.decorators=[{type:r.Injectable}],e.ctorParameters=[],e}(o.EventManagerPlugin)},function(t,e,n){"use strict";function r(t){return t=String(t),t.match(a)||t.match(c)?t:(n.i(o.isDevMode)()&&n.i(s.a)().log("WARNING: sanitizing unsafe URL value "+t+" (see http://g.co/ng/security#xss)"),"unsafe:"+t)}function i(t){return t=String(t),t.split(",").map(function(t){return r(t.trim())}).join(", ")}var o=n(2),s=n(32);e.a=r,e.b=i;var a=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:\/?#]*(?:[\/?#]|$))/gi,c=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+\/]+=*$/i},function(t,e,n){"use strict";var r=n(2),i=n(40),o=n(55),s=function(t){function e(e,n){t.call(this,e),this.optionsService=n,this.info={}}return __extends(e,t),e.prototype.init=function(){this.info=this.componentSchema.info,this.specUrl=this.optionsService.options.specUrl,isNaN(parseInt(this.info.version.substring(0,1)))||(this.info.version="v"+this.info.version)},e.prototype.ngOnInit=function(){this.preinit()},e=__decorate([r.Component({selector:"api-info",styleUrls:["./api-info.css"],templateUrl:"./api-info.html",changeDetection:r.ChangeDetectionStrategy.OnPush}),__metadata("design:paramtypes",["function"==typeof(n="undefined"!=typeof i.SpecManager&&i.SpecManager)&&n||Object,"function"==typeof(s="undefined"!=typeof o.OptionsService&&o.OptionsService)&&s||Object])],e);var n,s}(i.BaseComponent);e.ApiInfo=s},function(t,e,n){"use strict";var r=n(2),i=n(40),o=function(t){function e(e){t.call(this,e),this.logo={}}return __extends(e,t),e.prototype.init=function(){var t=this.componentSchema.info["x-logo"];t&&(this.logo.imgUrl=t.url,this.logo.bgColor=t.backgroundColor||"transparent")},e.prototype.ngOnInit=function(){this.preinit()},e=__decorate([r.Component({selector:"api-logo",styleUrls:["./api-logo.css"],templateUrl:"./api-logo.html",changeDetection:r.ChangeDetectionStrategy.OnPush}),__metadata("design:paramtypes",["function"==typeof(n="undefined"!=typeof i.SpecManager&&i.SpecManager)&&n||Object])],e);var n}(i.BaseComponent);e.ApiLogo=o},function(t,e,n){"use strict";var r=n(121),i=n(9),o=n(19),s=n(8),a=n(15),c=n(23),u=n(12),l=n(13),h=n(60),p=n(217),f=n(20),_=n(22),d=n(35),y=function(){function t(t,e,n,o,s,a){this._changed=!1,this.context=new r.JsonSchemaLazy(t,e,n,o,s,a),this._expr_0=i.UNINITIALIZED,this._expr_1=i.UNINITIALIZED,this._expr_2=i.UNINITIALIZED,this._expr_3=i.UNINITIALIZED,this._expr_4=i.UNINITIALIZED,this._expr_5=i.UNINITIALIZED,this._expr_6=i.UNINITIALIZED}return t.prototype.ngOnDetach=function(t,e,n){},t.prototype.ngOnDestroy=function(){this.context.ngOnDestroy()},t.prototype.check_pointer=function(t,e,n){(n||s.checkBinding(e,this._expr_0,t))&&(this._changed=!0,this.context.pointer=t,this._expr_0=t)},t.prototype.check_auto=function(t,e,n){(n||s.checkBinding(e,this._expr_1,t))&&(this._changed=!0,this.context.auto=t,this._expr_1=t)},t.prototype.check_isRequestSchema=function(t,e,n){(n||s.checkBinding(e,this._expr_2,t))&&(this._changed=!0,this.context.isRequestSchema=t,this._expr_2=t)},t.prototype.check_final=function(t,e,n){(n||s.checkBinding(e,this._expr_3,t))&&(this._changed=!0,this.context.final=t,this._expr_3=t)},t.prototype.check_nestOdd=function(t,e,n){(n||s.checkBinding(e,this._expr_4,t))&&(this._changed=!0,this.context.nestOdd=t,this._expr_4=t)},t.prototype.check_childFor=function(t,e,n){(n||s.checkBinding(e,this._expr_5,t))&&(this._changed=!0,this.context.childFor=t,this._expr_5=t)},t.prototype.check_isArray=function(t,e,n){(n||s.checkBinding(e,this._expr_6,t))&&(this._changed=!0,this.context.isArray=t,this._expr_6=t)},t.prototype.ngDoCheck=function(t,e,n){var r=this._changed;return this._changed=!1,r},t.prototype.checkHost=function(t,e,n,r){},t.prototype.handleEvent=function(t,e){var n=!0;return n},t.prototype.subscribe=function(t,e){this._eventHandler=e},t}();e.Wrapper_JsonSchemaLazy=y;var m=s.createRenderComponentType("",0,a.ViewEncapsulation.None,[],{}),g=function(t){function e(n,r,o,s){t.call(this,e,m,u.ViewType.HOST,n,r,o,s,i.ChangeDetectorStatus.CheckAlways)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.selectOrCreateRenderHostElement(this.renderer,"json-schema-lazy",s.EMPTY_INLINE_ARRAY,t,null),this._vc_0=new c.ViewContainer(0,null,this,this._el_0),this.compView_0=new w(this.viewUtils,this,0,this._el_0),this._ComponentFactoryResolver_0_5=new h.CodegenComponentFactoryResolver([p.JsonSchemaNgFactory],this.injectorGet(h.ComponentFactoryResolver,this.parentIndex)),this._JsonSchemaLazy_0_6=new y(this.injectorGet(f.SpecManager,this.parentIndex),this._vc_0.vcRef,new _.ElementRef(this._el_0),this._ComponentFactoryResolver_0_5,this.injectorGet(d.OptionsService,this.parentIndex),this.renderer),this.compView_0.create(this._JsonSchemaLazy_0_6.context),this._el_1=this.renderer.createTemplateAnchor(null,null),this.init(this._el_1,this.renderer.directRenderer?null:[this._el_0],null),new l.ComponentRef_(0,this,this._el_0,this._JsonSchemaLazy_0_6.context)},e.prototype.injectorGetInternal=function(t,e,n){return t===h.ComponentFactoryResolver&&0===e?this._ComponentFactoryResolver_0_5:t===r.JsonSchemaLazy&&0===e?this._JsonSchemaLazy_0_6.context:n},e.prototype.detectChangesInternal=function(t){this._JsonSchemaLazy_0_6.ngDoCheck(this,this._el_0,t),this._vc_0.detectChangesInNestedViews(t),this.compView_0.detectChanges(t),t||0===this.numberOfChecks&&this._JsonSchemaLazy_0_6.context.ngAfterViewInit()},e.prototype.destroyInternal=function(){this._vc_0.destroyNestedViews(),this.compView_0.destroy(),this._JsonSchemaLazy_0_6.ngOnDestroy()},e.prototype.visitRootNodesInternal=function(t,e){t(this._vc_0.nativeElement,e),this._vc_0.visitNestedViewRootNodes(t,e),t(this._el_1,e)},e}(o.AppView);e.JsonSchemaLazyNgFactory=new l.ComponentFactory("json-schema-lazy",g,r.JsonSchemaLazy);var v=["[_nghost-%COMP%] { display:none }"],b=s.createRenderComponentType("",0,a.ViewEncapsulation.Emulated,v,{}),w=function(t){function e(n,r,o,s){t.call(this,e,b,u.ViewType.COMPONENT,n,r,o,s,i.ChangeDetectorStatus.CheckAlways)}return __extends(e,t),e.prototype.createInternal=function(t){this.renderer.createViewRoot(this.parentElement);return this.init(null,this.renderer.directRenderer?null:[],null),null},e}(o.AppView);e.View_JsonSchemaLazy0=w},function(t,e,n){"use strict";var r=n(218),i=n(9),o=n(19),s=n(8),a=n(15),c=n(12),u=n(13),l=n(20),h=n(22),p=n(455),f=n(486),_=n(23),d=n(79),y=n(25),m=n(54),g=n(139),v=n(36),b=n(28),w=n(56),x=n(34),I=n(46),C=n(106),k=n(59),T=n(74),E=n(142),S=n(166),O=n(313),R=n(121),A=n(216),N=n(60),P=n(35),M=n(39),D=n(229),V=n(478),j=function(){function t(t,e,n){this._changed=!1,this.context=new r.JsonSchema(t,e,n),this._expr_0=i.UNINITIALIZED,this._expr_1=i.UNINITIALIZED,this._expr_2=i.UNINITIALIZED,this._expr_3=i.UNINITIALIZED,this._expr_4=i.UNINITIALIZED}return t.prototype.ngOnDetach=function(t,e,n){},t.prototype.ngOnDestroy=function(){},t.prototype.check_pointer=function(t,e,n){(n||s.checkBinding(e,this._expr_0,t))&&(this._changed=!0,this.context.pointer=t,this._expr_0=t)},t.prototype.check_final=function(t,e,n){(n||s.checkBinding(e,this._expr_1,t))&&(this._changed=!0,this.context.final=t,this._expr_1=t)},t.prototype.check_nestOdd=function(t,e,n){(n||s.checkBinding(e,this._expr_2,t))&&(this._changed=!0,this.context.nestOdd=t,this._expr_2=t)},t.prototype.check_childFor=function(t,e,n){(n||s.checkBinding(e,this._expr_3,t))&&(this._changed=!0,this.context.childFor=t,this._expr_3=t)},t.prototype.check_isRequestSchema=function(t,e,n){(n||s.checkBinding(e,this._expr_4,t))&&(this._changed=!0,this.context.isRequestSchema=t,this._expr_4=t)},t.prototype.ngDoCheck=function(t,e,n){var r=this._changed;return this._changed=!1,n||0===t.numberOfChecks&&this.context.ngOnInit(),r},t.prototype.checkHost=function(t,e,n,r){},t.prototype.handleEvent=function(t,e){var n=!0;return n},t.prototype.subscribe=function(t,e){this._eventHandler=e},t}();e.Wrapper_JsonSchema=j;var L=s.createRenderComponentType("",0,a.ViewEncapsulation.None,[],{}),F=function(t){function e(n,r,o,s){t.call(this,e,L,c.ViewType.HOST,n,r,o,s,i.ChangeDetectorStatus.CheckAlways)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.selectOrCreateRenderHostElement(this.renderer,"json-schema",s.EMPTY_INLINE_ARRAY,t,null),this.compView_0=new z(this.viewUtils,this,0,this._el_0),this._JsonSchema_0_3=new j(this.injectorGet(l.SpecManager,this.parentIndex),this.renderer,new h.ElementRef(this._el_0)),this.compView_0.create(this._JsonSchema_0_3.context),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0],null),new u.ComponentRef_(0,this,this._el_0,this._JsonSchema_0_3.context)},e.prototype.injectorGetInternal=function(t,e,n){return t===r.JsonSchema&&0===e?this._JsonSchema_0_3.context:n},e.prototype.detectChangesInternal=function(t){this._JsonSchema_0_3.ngDoCheck(this,this._el_0,t)&&this.compView_0.markAsCheckOnce(),this.compView_0.detectChanges(t)},e.prototype.destroyInternal=function(){this.compView_0.destroy()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView);e.JsonSchemaNgFactory=new u.ComponentFactory("json-schema",F,r.JsonSchema);var B=[p.styles],U=s.createRenderComponentType("",0,a.ViewEncapsulation.Emulated,B,{}),z=function(t){function e(n,r,o,s){t.call(this,e,U,c.ViewType.COMPONENT,n,r,o,s,i.ChangeDetectorStatus.CheckOnce)}return __extends(e,t),e.prototype.createInternal=function(t){var e=this.renderer.createViewRoot(this.parentElement);return this._el_0=this.renderer.createTemplateAnchor(e,null),this._NgSwitch_0_3=new f.Wrapper_NgSwitch,this._text_1=this.renderer.createText(e,"\n ",null),this._anchor_2=this.renderer.createTemplateAnchor(e,null),this._vc_2=new _.ViewContainer(2,0,this,this._anchor_2),this._TemplateRef_2_5=new y.TemplateRef_(this,2,this._anchor_2),this._NgSwitchCase_2_6=new f.Wrapper_NgSwitchCase(this._vc_2.vcRef,this._TemplateRef_2_5,this._NgSwitch_0_3.context),this._text_3=this.renderer.createText(e,"\n ",null),this._anchor_4=this.renderer.createTemplateAnchor(e,null),this._vc_4=new _.ViewContainer(4,0,this,this._anchor_4),this._TemplateRef_4_5=new y.TemplateRef_(this,4,this._anchor_4),this._NgSwitchCase_4_6=new f.Wrapper_NgSwitchCase(this._vc_4.vcRef,this._TemplateRef_4_5,this._NgSwitch_0_3.context),this._text_5=this.renderer.createText(e,"\n ",null),this._anchor_6=this.renderer.createTemplateAnchor(e,null),this._vc_6=new _.ViewContainer(6,0,this,this._anchor_6),this._TemplateRef_6_5=new y.TemplateRef_(this,6,this._anchor_6),this._NgSwitchCase_6_6=new f.Wrapper_NgSwitchCase(this._vc_6.vcRef,this._TemplateRef_6_5,this._NgSwitch_0_3.context),this._text_7=this.renderer.createText(e,"\n ",null),this._anchor_8=this.renderer.createTemplateAnchor(e,null),this._vc_8=new _.ViewContainer(8,0,this,this._anchor_8),this._TemplateRef_8_5=new y.TemplateRef_(this,8,this._anchor_8),this._NgSwitchCase_8_6=new f.Wrapper_NgSwitchCase(this._vc_8.vcRef,this._TemplateRef_8_5,this._NgSwitch_0_3.context),this._text_9=this.renderer.createText(e,"\n ",null),this._anchor_10=this.renderer.createTemplateAnchor(e,null),this._vc_10=new _.ViewContainer(10,0,this,this._anchor_10),this._TemplateRef_10_5=new y.TemplateRef_(this,10,this._anchor_10),this._NgSwitchCase_10_6=new f.Wrapper_NgSwitchCase(this._vc_10.vcRef,this._TemplateRef_10_5,this._NgSwitch_0_3.context),this._text_11=this.renderer.createText(e,"\n\n",null),this._text_12=this.renderer.createText(e,"\n",null),this._pipe_marked_0=new d.MarkedPipe(this.parentView.injectorGet(m.DomSanitizer,this.parentIndex)),this.init(null,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._anchor_2,this._text_3,this._anchor_4,this._text_5,this._anchor_6,this._text_7,this._anchor_8,this._text_9,this._anchor_10,this._text_11,this._text_12],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===y.TemplateRef&&2===e?this._TemplateRef_2_5:t===g.NgSwitchCase&&2===e?this._NgSwitchCase_2_6.context:t===y.TemplateRef&&4===e?this._TemplateRef_4_5:t===g.NgSwitchCase&&4===e?this._NgSwitchCase_4_6.context:t===y.TemplateRef&&6===e?this._TemplateRef_6_5:t===g.NgSwitchCase&&6===e?this._NgSwitchCase_6_6.context:t===y.TemplateRef&&8===e?this._TemplateRef_8_5:t===g.NgSwitchCase&&8===e?this._NgSwitchCase_8_6.context:t===y.TemplateRef&&10===e?this._TemplateRef_10_5:t===g.NgSwitchCase&&10===e?this._NgSwitchCase_10_6.context:t===g.NgSwitch&&0<=e&&e<=11?this._NgSwitch_0_3.context:n},e.prototype.detectChangesInternal=function(t){var e=this.context.schema._widgetType;this._NgSwitch_0_3.check_ngSwitch(e,t,!1),this._NgSwitch_0_3.ngDoCheck(this,this._el_0,t);var n="file";this._NgSwitchCase_2_6.check_ngSwitchCase(n,t,!1),this._NgSwitchCase_2_6.ngDoCheck(this,this._anchor_2,t);var r="trivial";this._NgSwitchCase_4_6.check_ngSwitchCase(r,t,!1),this._NgSwitchCase_4_6.ngDoCheck(this,this._anchor_4,t);var i="tuple";this._NgSwitchCase_6_6.check_ngSwitchCase(i,t,!1),this._NgSwitchCase_6_6.ngDoCheck(this,this._anchor_6,t);var o="array";this._NgSwitchCase_8_6.check_ngSwitchCase(o,t,!1),this._NgSwitchCase_8_6.ngDoCheck(this,this._anchor_8,t);var s="object";this._NgSwitchCase_10_6.check_ngSwitchCase(s,t,!1),this._NgSwitchCase_10_6.ngDoCheck(this,this._anchor_10,t),this._vc_2.detectChangesInNestedViews(t),this._vc_4.detectChangesInNestedViews(t),this._vc_6.detectChangesInNestedViews(t),this._vc_8.detectChangesInNestedViews(t),this._vc_10.detectChangesInNestedViews(t)},e.prototype.destroyInternal=function(){this._vc_2.destroyNestedViews(),this._vc_4.destroyNestedViews(),this._vc_6.destroyNestedViews(),this._vc_8.destroyNestedViews(),this._vc_10.destroyNestedViews()},e.prototype.createEmbeddedViewInternal=function(t){return 2==t?new H(this.viewUtils,this,2,this._anchor_2,this._vc_2):4==t?new G(this.viewUtils,this,4,this._anchor_4,this._vc_4):6==t?new tt(this.viewUtils,this,6,this._anchor_6,this._vc_6):8==t?new nt(this.viewUtils,this,8,this._anchor_8,this._vc_8):10==t?new rt(this.viewUtils,this,10,this._anchor_10,this._vc_10):null},e}(o.AppView);e.View_JsonSchema0=z;var H=function(t){function e(n,r,o,s,a){t.call(this,e,U,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a)}return __extends(e,t),e.prototype.createInternal=function(t){return this._text_0=this.renderer.createText(null,"\n ",null),this._el_1=s.createRenderElement(this.renderer,null,"span",new s.InlineArray2(2,"class","param-wrap"),null),this._text_2=this.renderer.createText(this._el_1,"\n ",null),this._el_3=s.createRenderElement(this.renderer,this._el_1,"span",new s.InlineArray2(2,"class","param-type-file"),null),this._text_4=this.renderer.createText(this._el_3,"file",null),this._text_5=this.renderer.createText(this._el_1,"\n ",null),this._anchor_6=this.renderer.createTemplateAnchor(this._el_1,null),this._vc_6=new _.ViewContainer(6,1,this,this._anchor_6),this._TemplateRef_6_5=new y.TemplateRef_(this,6,this._anchor_6),this._NgIf_6_6=new v.Wrapper_NgIf(this._vc_6.vcRef,this._TemplateRef_6_5),this._text_7=this.renderer.createText(this._el_1,"\n ",null),this._anchor_8=this.renderer.createTemplateAnchor(this._el_1,null),this._vc_8=new _.ViewContainer(8,1,this,this._anchor_8),this._TemplateRef_8_5=new y.TemplateRef_(this,8,this._anchor_8),this._NgIf_8_6=new v.Wrapper_NgIf(this._vc_8.vcRef,this._TemplateRef_8_5),this._text_9=this.renderer.createText(this._el_1,"\n ",null),this._text_10=this.renderer.createText(null,"\n ",null),this.init(this._text_10,this.renderer.directRenderer?null:[this._text_0,this._el_1,this._text_2,this._el_3,this._text_4,this._text_5,this._anchor_6,this._text_7,this._anchor_8,this._text_9,this._text_10],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===y.TemplateRef&&6===e?this._TemplateRef_6_5:t===b.NgIf&&6===e?this._NgIf_6_6.context:t===y.TemplateRef&&8===e?this._TemplateRef_8_5:t===b.NgIf&&8===e?this._NgIf_8_6.context:n},e.prototype.detectChangesInternal=function(t){var e=this.parentView.context.schema._produces&&!this.parentView.context.isRequestSchema;this._NgIf_6_6.check_ngIf(e,t,!1),this._NgIf_6_6.ngDoCheck(this,this._anchor_6,t);var n=this.parentView.context.schema._consumes&&this.parentView.context.isRequestSchema;this._NgIf_8_6.check_ngIf(n,t,!1),this._NgIf_8_6.ngDoCheck(this,this._anchor_8,t),this._vc_6.detectChangesInNestedViews(t),this._vc_8.detectChangesInNestedViews(t)},e.prototype.destroyInternal=function(){this._vc_6.destroyNestedViews(),this._vc_8.destroyNestedViews()},e.prototype.visitRootNodesInternal=function(t,e){t(this._text_0,e),t(this._el_1,e),t(this._text_10,e)},e.prototype.createEmbeddedViewInternal=function(t){return 6==t?new q(this.viewUtils,this,6,this._anchor_6,this._vc_6):8==t?new Y(this.viewUtils,this,8,this._anchor_8,this._vc_8):null},e}(o.AppView),q=function(t){function e(n,r,o,s,a){t.call(this,e,U,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"div",new s.InlineArray2(2,"class","file produces"),null),this._text_1=this.renderer.createText(this._el_0,"\n ",null),this._el_2=s.createRenderElement(this.renderer,this._el_0,"ul",s.EMPTY_INLINE_ARRAY,null),this._text_3=this.renderer.createText(this._el_2,"\n ",null),this._anchor_4=this.renderer.createTemplateAnchor(this._el_2,null),this._vc_4=new _.ViewContainer(4,2,this,this._anchor_4),this._TemplateRef_4_5=new y.TemplateRef_(this,4,this._anchor_4),this._NgFor_4_6=new w.Wrapper_NgFor(this._vc_4.vcRef,this._TemplateRef_4_5,this.parentView.parentView.parentView.injectorGet(x.IterableDiffers,this.parentView.parentView.parentIndex),this.parentView.parentView.ref),this._text_5=this.renderer.createText(this._el_2,"\n ",null),this._text_6=this.renderer.createText(this._el_0,"\n ",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._el_2,this._text_3,this._anchor_4,this._text_5,this._text_6],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===y.TemplateRef&&4===e?this._TemplateRef_4_5:t===I.NgFor&&4===e?this._NgFor_4_6.context:n},e.prototype.detectChangesInternal=function(t){var e=this.parentView.parentView.context.schema._produces;this._NgFor_4_6.check_ngForOf(e,t,!1),this._NgFor_4_6.ngDoCheck(this,this._anchor_4,t),this._vc_4.detectChangesInNestedViews(t)},e.prototype.destroyInternal=function(){this._vc_4.destroyNestedViews()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e.prototype.createEmbeddedViewInternal=function(t){return 4==t?new W(this.viewUtils,this,4,this._anchor_4,this._vc_4):null},e}(o.AppView),W=function(t){function e(n,r,o,s,a){t.call(this,e,U,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a),this._expr_2=i.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"li",s.EMPTY_INLINE_ARRAY,null),this._text_1=this.renderer.createText(this._el_0,"",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1],null),null},e.prototype.detectChangesInternal=function(t){var e=s.inlineInterpolate(1,"",this.context.$implicit,"");s.checkBinding(t,this._expr_2,e)&&(this.renderer.setText(this._text_1,e),this._expr_2=e)},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView),Y=function(t){function e(n,r,o,s,a){t.call(this,e,U,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"div",new s.InlineArray2(2,"class","file consume"),null),this._text_1=this.renderer.createText(this._el_0,"\n ",null),this._el_2=s.createRenderElement(this.renderer,this._el_0,"ul",s.EMPTY_INLINE_ARRAY,null),this._text_3=this.renderer.createText(this._el_2,"\n ",null),this._anchor_4=this.renderer.createTemplateAnchor(this._el_2,null),this._vc_4=new _.ViewContainer(4,2,this,this._anchor_4),this._TemplateRef_4_5=new y.TemplateRef_(this,4,this._anchor_4),this._NgFor_4_6=new w.Wrapper_NgFor(this._vc_4.vcRef,this._TemplateRef_4_5,this.parentView.parentView.parentView.injectorGet(x.IterableDiffers,this.parentView.parentView.parentIndex),this.parentView.parentView.ref),this._text_5=this.renderer.createText(this._el_2,"\n ",null),this._text_6=this.renderer.createText(this._el_0,"\n ",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._el_2,this._text_3,this._anchor_4,this._text_5,this._text_6],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===y.TemplateRef&&4===e?this._TemplateRef_4_5:t===I.NgFor&&4===e?this._NgFor_4_6.context:n},e.prototype.detectChangesInternal=function(t){var e=this.parentView.parentView.context.schema._consumes; +this._NgFor_4_6.check_ngForOf(e,t,!1),this._NgFor_4_6.ngDoCheck(this,this._anchor_4,t),this._vc_4.detectChangesInNestedViews(t)},e.prototype.destroyInternal=function(){this._vc_4.destroyNestedViews()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e.prototype.createEmbeddedViewInternal=function(t){return 4==t?new $(this.viewUtils,this,4,this._anchor_4,this._vc_4):null},e}(o.AppView),$=function(t){function e(n,r,o,s,a){t.call(this,e,U,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a),this._expr_2=i.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"li",s.EMPTY_INLINE_ARRAY,null),this._text_1=this.renderer.createText(this._el_0,"",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1],null),null},e.prototype.detectChangesInternal=function(t){var e=s.inlineInterpolate(1,"",this.context.$implicit,"");s.checkBinding(t,this._expr_2,e)&&(this.renderer.setText(this._text_1,e),this._expr_2=e)},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView),G=function(t){function e(n,r,o,a,u){t.call(this,e,U,c.ViewType.EMBEDDED,n,r,o,a,i.ChangeDetectorStatus.CheckAlways,u),this._expr_28=i.UNINITIALIZED,this._map_29=s.pureProxy2(function(t,e){return{"with-hint":t,array:e}}),this._expr_30=i.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._text_0=this.renderer.createText(null,"\n ",null),this._el_1=s.createRenderElement(this.renderer,null,"span",new s.InlineArray2(2,"class","param-wrap"),null),this._text_2=this.renderer.createText(this._el_1,"\n ",null),this._el_3=s.createRenderElement(this.renderer,this._el_1,"span",s.EMPTY_INLINE_ARRAY,null),this._NgClass_3_3=new C.Wrapper_NgClass(this.parentView.parentView.injectorGet(x.IterableDiffers,this.parentView.parentIndex),this.parentView.parentView.injectorGet(k.KeyValueDiffers,this.parentView.parentIndex),new h.ElementRef(this._el_3),this.renderer),this._text_4=this.renderer.createText(this._el_3,"",null),this._anchor_5=this.renderer.createTemplateAnchor(this._el_3,null),this._vc_5=new _.ViewContainer(5,3,this,this._anchor_5),this._TemplateRef_5_5=new y.TemplateRef_(this,5,this._anchor_5),this._NgIf_5_6=new v.Wrapper_NgIf(this._vc_5.vcRef,this._TemplateRef_5_5),this._text_6=this.renderer.createText(this._el_3,"\n ",null),this._text_7=this.renderer.createText(this._el_1,"\n ",null),this._anchor_8=this.renderer.createTemplateAnchor(this._el_1,null),this._vc_8=new _.ViewContainer(8,1,this,this._anchor_8),this._TemplateRef_8_5=new y.TemplateRef_(this,8,this._anchor_8),this._NgIf_8_6=new v.Wrapper_NgIf(this._vc_8.vcRef,this._TemplateRef_8_5),this._text_9=this.renderer.createText(this._el_1,"\n ",null),this._anchor_10=this.renderer.createTemplateAnchor(this._el_1,null),this._vc_10=new _.ViewContainer(10,1,this,this._anchor_10),this._TemplateRef_10_5=new y.TemplateRef_(this,10,this._anchor_10),this._NgIf_10_6=new v.Wrapper_NgIf(this._vc_10.vcRef,this._TemplateRef_10_5),this._text_11=this.renderer.createText(this._el_1,"\n ",null),this._anchor_12=this.renderer.createTemplateAnchor(this._el_1,null),this._vc_12=new _.ViewContainer(12,1,this,this._anchor_12),this._TemplateRef_12_5=new y.TemplateRef_(this,12,this._anchor_12),this._NgIf_12_6=new v.Wrapper_NgIf(this._vc_12.vcRef,this._TemplateRef_12_5),this._text_13=this.renderer.createText(this._el_1,"\n ",null),this._text_14=this.renderer.createText(null,"\n ",null),this.init(this._text_14,this.renderer.directRenderer?null:[this._text_0,this._el_1,this._text_2,this._el_3,this._text_4,this._anchor_5,this._text_6,this._text_7,this._anchor_8,this._text_9,this._anchor_10,this._text_11,this._anchor_12,this._text_13,this._text_14],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===y.TemplateRef&&5===e?this._TemplateRef_5_5:t===b.NgIf&&5===e?this._NgIf_5_6.context:t===T.NgClass&&3<=e&&e<=6?this._NgClass_3_3.context:t===y.TemplateRef&&8===e?this._TemplateRef_8_5:t===b.NgIf&&8===e?this._NgIf_8_6.context:t===y.TemplateRef&&10===e?this._TemplateRef_10_5:t===b.NgIf&&10===e?this._NgIf_10_6.context:t===y.TemplateRef&&12===e?this._TemplateRef_12_5:t===b.NgIf&&12===e?this._NgIf_12_6.context:n},e.prototype.detectChangesInternal=function(t){var e=s.inlineInterpolate(1,"param-type param-type-trivial ",this.parentView.context.schema.type,"");this._NgClass_3_3.check_klass(e,t,!1);var n=this._map_29(this.parentView.context.schema._displayTypeHint,this.parentView.context._isArray);this._NgClass_3_3.check_ngClass(n,t,!1),this._NgClass_3_3.ngDoCheck(this,this._el_3,t);var r=this.parentView.context.schema._range;this._NgIf_5_6.check_ngIf(r,t,!1),this._NgIf_5_6.ngDoCheck(this,this._anchor_5,t);var i=this.parentView.context.schema["x-nullable"];this._NgIf_8_6.check_ngIf(i,t,!1),this._NgIf_8_6.ngDoCheck(this,this._anchor_8,t);var o=this.parentView.context.schema.enum;this._NgIf_10_6.check_ngIf(o,t,!1),this._NgIf_10_6.ngDoCheck(this,this._anchor_10,t);var a=this.parentView.context.schema.pattern;this._NgIf_12_6.check_ngIf(a,t,!1),this._NgIf_12_6.ngDoCheck(this,this._anchor_12,t),this._vc_5.detectChangesInNestedViews(t),this._vc_8.detectChangesInNestedViews(t),this._vc_10.detectChangesInNestedViews(t),this._vc_12.detectChangesInNestedViews(t);var c=s.inlineInterpolate(1,"",this.parentView.context.schema._displayTypeHint,"");s.checkBinding(t,this._expr_28,c)&&(this.renderer.setElementProperty(this._el_3,"title",c),this._expr_28=c);var u=s.inlineInterpolate(2,"",this.parentView.context.schema._displayType," ",this.parentView.context.schema._displayFormat,"\n ");s.checkBinding(t,this._expr_30,u)&&(this.renderer.setText(this._text_4,u),this._expr_30=u)},e.prototype.destroyInternal=function(){this._vc_5.destroyNestedViews(),this._vc_8.destroyNestedViews(),this._vc_10.destroyNestedViews(),this._vc_12.destroyNestedViews()},e.prototype.visitRootNodesInternal=function(t,e){t(this._text_0,e),t(this._el_1,e),t(this._text_14,e)},e.prototype.createEmbeddedViewInternal=function(t){return 5==t?new Z(this.viewUtils,this,5,this._anchor_5,this._vc_5):8==t?new J(this.viewUtils,this,8,this._anchor_8,this._vc_8):10==t?new K(this.viewUtils,this,10,this._anchor_10,this._vc_10):12==t?new Q(this.viewUtils,this,12,this._anchor_12,this._vc_12):null},e}(o.AppView),Z=function(t){function e(n,r,o,s,a){t.call(this,e,U,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a),this._expr_2=i.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"span",new s.InlineArray2(2,"class","param-range"),null),this._text_1=this.renderer.createText(this._el_0,"",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1],null),null},e.prototype.detectChangesInternal=function(t){var e=s.inlineInterpolate(1," ",this.parentView.parentView.context.schema._range," ");s.checkBinding(t,this._expr_2,e)&&(this.renderer.setText(this._text_1,e),this._expr_2=e)},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView),J=function(t){function e(n,r,o,s,a){t.call(this,e,U,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"span",new s.InlineArray2(2,"class","param-nullable"),null),this._text_1=this.renderer.createText(this._el_0,"Nullable",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1],null),null},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView),K=function(t){function e(n,r,o,s,a){t.call(this,e,U,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"div",new s.InlineArray2(2,"class","param-enum"),null),this._text_1=this.renderer.createText(this._el_0,"\n ",null),this._anchor_2=this.renderer.createTemplateAnchor(this._el_0,null),this._vc_2=new _.ViewContainer(2,0,this,this._anchor_2),this._TemplateRef_2_5=new y.TemplateRef_(this,2,this._anchor_2),this._NgFor_2_6=new w.Wrapper_NgFor(this._vc_2.vcRef,this._TemplateRef_2_5,this.parentView.parentView.parentView.injectorGet(x.IterableDiffers,this.parentView.parentView.parentIndex),this.parentView.parentView.ref),this._text_3=this.renderer.createText(this._el_0,"\n ",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._anchor_2,this._text_3],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===y.TemplateRef&&2===e?this._TemplateRef_2_5:t===I.NgFor&&2===e?this._NgFor_2_6.context:n},e.prototype.detectChangesInternal=function(t){var e=this.parentView.parentView.context.schema.enum;this._NgFor_2_6.check_ngForOf(e,t,!1),this._NgFor_2_6.ngDoCheck(this,this._anchor_2,t),this._vc_2.detectChangesInNestedViews(t)},e.prototype.destroyInternal=function(){this._vc_2.destroyNestedViews()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e.prototype.createEmbeddedViewInternal=function(t){return 2==t?new X(this.viewUtils,this,2,this._anchor_2,this._vc_2):null},e}(o.AppView),X=function(t){function e(n,r,o,s,a){t.call(this,e,U,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a),this._expr_2=i.UNINITIALIZED,this._expr_3=i.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"span",s.EMPTY_INLINE_ARRAY,null),this._text_1=this.renderer.createText(this._el_0,"",null),this._pipe_json_0=new E.JsonPipe,this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1],null),null},e.prototype.detectChangesInternal=function(t){var e=new i.ValueUnwrapper,n=s.inlineInterpolate(1,"param-enum-value ",this.context.$implicit.type,"");s.checkBinding(t,this._expr_2,n)&&(this.renderer.setElementProperty(this._el_0,"className",n),this._expr_2=n),e.reset();var r=s.inlineInterpolate(1," ",e.unwrap(this._pipe_json_0.transform(this.context.$implicit.val))," ");(e.hasWrappedValue||s.checkBinding(t,this._expr_3,r))&&(this.renderer.setText(this._text_1,r),this._expr_3=r)},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView),Q=function(t){function e(n,r,o,s,a){t.call(this,e,U,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a),this._expr_2=i.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"span",new s.InlineArray2(2,"class","param-pattern"),null),this._text_1=this.renderer.createText(this._el_0,"",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1],null),null},e.prototype.detectChangesInternal=function(t){var e=s.inlineInterpolate(1,"",this.parentView.parentView.context.schema.pattern,"");s.checkBinding(t,this._expr_2,e)&&(this.renderer.setText(this._text_1,e),this._expr_2=e)},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView),tt=function(t){function e(n,r,o,s,a){t.call(this,e,U,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a)}return __extends(e,t),e.prototype.createInternal=function(t){return this._text_0=this.renderer.createText(null,"\n ",null),this._el_1=s.createRenderElement(this.renderer,null,"div",new s.InlineArray2(2,"class","params-wrap params-array array-tuple"),null),this._text_2=this.renderer.createText(this._el_1,"\n ",null),this._anchor_3=this.renderer.createTemplateAnchor(this._el_1,null),this._vc_3=new _.ViewContainer(3,1,this,this._anchor_3),this._TemplateRef_3_5=new y.TemplateRef_(this,3,this._anchor_3),this._NgFor_3_6=new w.Wrapper_NgFor(this._vc_3.vcRef,this._TemplateRef_3_5,this.parentView.parentView.injectorGet(x.IterableDiffers,this.parentView.parentIndex),this.parentView.ref),this._text_4=this.renderer.createText(this._el_1,"\n ",null),this._text_5=this.renderer.createText(null,"\n ",null),this.init(this._text_5,this.renderer.directRenderer?null:[this._text_0,this._el_1,this._text_2,this._anchor_3,this._text_4,this._text_5],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===y.TemplateRef&&3===e?this._TemplateRef_3_5:t===I.NgFor&&3===e?this._NgFor_3_6.context:n},e.prototype.detectChangesInternal=function(t){var e=this.parentView.context.schema.items;this._NgFor_3_6.check_ngForOf(e,t,!1);var n=this.parentView.context.trackByIdx;this._NgFor_3_6.check_ngForTrackBy(n,t,!1),this._NgFor_3_6.ngDoCheck(this,this._anchor_3,t),this._vc_3.detectChangesInNestedViews(t)},e.prototype.destroyInternal=function(){this._vc_3.destroyNestedViews()},e.prototype.visitRootNodesInternal=function(t,e){t(this._text_0,e),t(this._el_1,e),t(this._text_5,e)},e.prototype.createEmbeddedViewInternal=function(t){return 3==t?new et(this.viewUtils,this,3,this._anchor_3,this._vc_3):null},e}(o.AppView),et=function(t){function e(n,r,o,s,a){t.call(this,e,U,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a),this._expr_12=i.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._text_0=this.renderer.createText(null,"\n ",null),this._el_1=s.createRenderElement(this.renderer,null,"div",new s.InlineArray2(2,"class","tuple-item"),null),this._text_2=this.renderer.createText(this._el_1,"\n ",null),this._el_3=s.createRenderElement(this.renderer,this._el_1,"span",new s.InlineArray2(2,"class","tuple-item-index"),null),this._text_4=this.renderer.createText(this._el_3,"",null),this._text_5=this.renderer.createText(this._el_1,"\n ",null),this._el_6=s.createRenderElement(this.renderer,this._el_1,"json-schema",new s.InlineArray2(2,"class","nested-schema"),null),this.compView_6=new z(this.viewUtils,this,6,this._el_6),this._JsonSchema_6_3=new j(this.parentView.parentView.parentView.injectorGet(l.SpecManager,this.parentView.parentView.parentIndex),this.renderer,new h.ElementRef(this._el_6)),this._text_7=this.renderer.createText(null,"\n ",null),this.compView_6.create(this._JsonSchema_6_3.context),this._text_8=this.renderer.createText(this._el_1,"\n ",null),this._text_9=this.renderer.createText(null,"\n ",null),this.init(this._text_9,this.renderer.directRenderer?null:[this._text_0,this._el_1,this._text_2,this._el_3,this._text_4,this._text_5,this._el_6,this._text_7,this._text_8,this._text_9],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===r.JsonSchema&&6<=e&&e<=7?this._JsonSchema_6_3.context:n},e.prototype.detectChangesInternal=function(t){var e=this.context.$implicit._pointer;this._JsonSchema_6_3.check_pointer(e,t,!1);var n=!this.parentView.parentView.context.nestOdd;this._JsonSchema_6_3.check_nestOdd(n,t,!1);var r=this.parentView.parentView.context.isRequestSchema;this._JsonSchema_6_3.check_isRequestSchema(r,t,!1),this._JsonSchema_6_3.ngDoCheck(this,this._el_6,t)&&this.compView_6.markAsCheckOnce();var i=s.inlineInterpolate(1," [",this.context.index,"]: ");s.checkBinding(t,this._expr_12,i)&&(this.renderer.setText(this._text_4,i),this._expr_12=i),this.compView_6.detectChanges(t)},e.prototype.destroyInternal=function(){this.compView_6.destroy()},e.prototype.visitRootNodesInternal=function(t,e){t(this._text_0,e),t(this._el_1,e),t(this._text_9,e)},e}(o.AppView),nt=function(t){function e(n,r,o,s,a){t.call(this,e,U,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a)}return __extends(e,t),e.prototype.createInternal=function(t){return this._text_0=this.renderer.createText(null,"\n ",null),this._el_1=s.createRenderElement(this.renderer,null,"json-schema",new s.InlineArray2(2,"class","nested-schema"),null),this.compView_1=new z(this.viewUtils,this,1,this._el_1),this._JsonSchema_1_3=new j(this.parentView.parentView.injectorGet(l.SpecManager,this.parentView.parentIndex),this.renderer,new h.ElementRef(this._el_1)),this._text_2=this.renderer.createText(null," ",null),this.compView_1.create(this._JsonSchema_1_3.context),this._text_3=this.renderer.createText(null,"\n ",null),this.init(this._text_3,this.renderer.directRenderer?null:[this._text_0,this._el_1,this._text_2,this._text_3],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===r.JsonSchema&&1<=e&&e<=2?this._JsonSchema_1_3.context:n},e.prototype.detectChangesInternal=function(t){var e=this.parentView.context.schema._pointer;this._JsonSchema_1_3.check_pointer(e,t,!1);var n=!this.parentView.context.nestOdd;this._JsonSchema_1_3.check_nestOdd(n,t,!1);var r=this.parentView.context.isRequestSchema;this._JsonSchema_1_3.check_isRequestSchema(r,t,!1),this._JsonSchema_1_3.ngDoCheck(this,this._el_1,t)&&this.compView_1.markAsCheckOnce(),this.compView_1.detectChanges(t)},e.prototype.destroyInternal=function(){this.compView_1.destroy()},e.prototype.visitRootNodesInternal=function(t,e){t(this._text_0,e),t(this._el_1,e),t(this._text_3,e)},e}(o.AppView),rt=function(t){function e(n,r,o,a,u){t.call(this,e,U,c.ViewType.EMBEDDED,n,r,o,a,i.ChangeDetectorStatus.CheckAlways,u),this._map_11=s.pureProxy1(function(t){return{"params-array":t}})}return __extends(e,t),e.prototype.createInternal=function(t){return this._text_0=this.renderer.createText(null,"\n ",null),this._el_1=s.createRenderElement(this.renderer,null,"table",new s.InlineArray2(2,"class","params-wrap"),null),this._NgClass_1_3=new C.Wrapper_NgClass(this.parentView.parentView.injectorGet(x.IterableDiffers,this.parentView.parentIndex),this.parentView.parentView.injectorGet(k.KeyValueDiffers,this.parentView.parentIndex),new h.ElementRef(this._el_1),this.renderer),this._text_2=this.renderer.createText(this._el_1,"\n ",null),this._text_3=this.renderer.createText(this._el_1,"\n ",null),this._anchor_4=this.renderer.createTemplateAnchor(this._el_1,null),this._vc_4=new _.ViewContainer(4,1,this,this._anchor_4),this._TemplateRef_4_5=new y.TemplateRef_(this,4,this._anchor_4),this._NgFor_4_6=new w.Wrapper_NgFor(this._vc_4.vcRef,this._TemplateRef_4_5,this.parentView.parentView.injectorGet(x.IterableDiffers,this.parentView.parentIndex),this.parentView.ref),this._text_5=this.renderer.createText(this._el_1,"\n ",null),this._text_6=this.renderer.createText(null,"\n ",null),this.init(this._text_6,this.renderer.directRenderer?null:[this._text_0,this._el_1,this._text_2,this._text_3,this._anchor_4,this._text_5,this._text_6],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===y.TemplateRef&&4===e?this._TemplateRef_4_5:t===I.NgFor&&4===e?this._NgFor_4_6.context:t===T.NgClass&&1<=e&&e<=5?this._NgClass_1_3.context:n},e.prototype.detectChangesInternal=function(t){var e="params-wrap";this._NgClass_1_3.check_klass(e,t,!1);var n=this._map_11(this.parentView.context._isArray);this._NgClass_1_3.check_ngClass(n,t,!1),this._NgClass_1_3.ngDoCheck(this,this._el_1,t);var r=this.parentView.context.properties;this._NgFor_4_6.check_ngForOf(r,t,!1);var i=this.parentView.context.trackByName;this._NgFor_4_6.check_ngForTrackBy(i,t,!1),this._NgFor_4_6.ngDoCheck(this,this._anchor_4,t),this._vc_4.detectChangesInNestedViews(t)},e.prototype.destroyInternal=function(){this._vc_4.destroyNestedViews()},e.prototype.visitRootNodesInternal=function(t,e){t(this._text_0,e),t(this._el_1,e),t(this._text_6,e)},e.prototype.createEmbeddedViewInternal=function(t){return 4==t?new it(this.viewUtils,this,4,this._anchor_4,this._vc_4):null},e}(o.AppView),it=function(t){function n(e,r,o,a,u){t.call(this,n,U,c.ViewType.EMBEDDED,e,r,o,a,i.ChangeDetectorStatus.CheckAlways,u),this._map_88=s.pureProxy5(function(t,e,n,r,i){return{last:t,discriminator:e,complex:n,additional:r,expanded:i}}),this._expr_89=i.UNINITIALIZED,this._expr_90=i.UNINITIALIZED,this._expr_91=i.UNINITIALIZED,this._expr_93=i.UNINITIALIZED,this._map_94=s.pureProxy2(function(t,e){return{"with-hint":t,tuple:e}}),this._expr_95=i.UNINITIALIZED,this._expr_96=i.UNINITIALIZED,this._expr_98=i.UNINITIALIZED,this._map_99=s.pureProxy1(function(t){return{last:t}})}return __extends(n,t),n.prototype.createInternal=function(t){this._text_0=this.renderer.createText(null,"\n ",null),this._el_1=s.createRenderElement(this.renderer,null,"tr",new s.InlineArray2(2,"class","param"),null),this._NgClass_1_3=new C.Wrapper_NgClass(this.parentView.parentView.parentView.injectorGet(x.IterableDiffers,this.parentView.parentView.parentIndex),this.parentView.parentView.parentView.injectorGet(k.KeyValueDiffers,this.parentView.parentView.parentIndex),new h.ElementRef(this._el_1),this.renderer),this._text_2=this.renderer.createText(this._el_1,"\n ",null),this._el_3=s.createRenderElement(this.renderer,this._el_1,"td",new s.InlineArray2(2,"class","param-name"),null),this._text_4=this.renderer.createText(this._el_3,"\n ",null),this._el_5=s.createRenderElement(this.renderer,this._el_3,"span",new s.InlineArray2(2,"class","param-name-wrap"),null),this._text_6=this.renderer.createText(this._el_5,"\n ",null),this._el_7=s.createRenderElement(this.renderer,this._el_5,"span",new s.InlineArray2(2,"class","param-name-content"),null),this._text_8=this.renderer.createText(this._el_7,"",null),this._el_9=s.createRenderElement(this.renderer,this._el_7,"span",new s.InlineArray2(2,"class","param-name-enumvalue"),null),this._text_10=this.renderer.createText(this._el_9,"",null),this._text_11=this.renderer.createText(this._el_7,"\n ",null),this._text_12=this.renderer.createText(this._el_5,"\n ",null),this._anchor_13=this.renderer.createTemplateAnchor(this._el_5,null),this._vc_13=new _.ViewContainer(13,5,this,this._anchor_13),this._TemplateRef_13_5=new y.TemplateRef_(this,13,this._anchor_13),this._NgIf_13_6=new v.Wrapper_NgIf(this._vc_13.vcRef,this._TemplateRef_13_5),this._text_14=this.renderer.createText(this._el_5,"\n ",null),this._text_15=this.renderer.createText(this._el_3,"\n ",null),this._text_16=this.renderer.createText(this._el_1,"\n ",null),this._el_17=s.createRenderElement(this.renderer,this._el_1,"td",new s.InlineArray2(2,"class","param-info"),null),this._text_18=this.renderer.createText(this._el_17,"\n ",null),this._el_19=s.createRenderElement(this.renderer,this._el_17,"div",s.EMPTY_INLINE_ARRAY,null),this._text_20=this.renderer.createText(this._el_19,"\n ",null),this._el_21=s.createRenderElement(this.renderer,this._el_19,"span",s.EMPTY_INLINE_ARRAY,null),this._NgClass_21_3=new C.Wrapper_NgClass(this.parentView.parentView.parentView.injectorGet(x.IterableDiffers,this.parentView.parentView.parentIndex),this.parentView.parentView.parentView.injectorGet(k.KeyValueDiffers,this.parentView.parentView.parentIndex),new h.ElementRef(this._el_21),this.renderer),this._text_22=this.renderer.createText(this._el_21,"",null),this._anchor_23=this.renderer.createTemplateAnchor(this._el_21,null),this._vc_23=new _.ViewContainer(23,21,this,this._anchor_23),this._TemplateRef_23_5=new y.TemplateRef_(this,23,this._anchor_23),this._NgIf_23_6=new v.Wrapper_NgIf(this._vc_23.vcRef,this._TemplateRef_23_5),this._text_24=this.renderer.createText(this._el_21,"\n ",null),this._text_25=this.renderer.createText(this._el_19,"\n ",null),this._anchor_26=this.renderer.createTemplateAnchor(this._el_19,null),this._vc_26=new _.ViewContainer(26,19,this,this._anchor_26),this._TemplateRef_26_5=new y.TemplateRef_(this,26,this._anchor_26),this._NgIf_26_6=new v.Wrapper_NgIf(this._vc_26.vcRef,this._TemplateRef_26_5),this._text_27=this.renderer.createText(this._el_19,"\n ",null),this._anchor_28=this.renderer.createTemplateAnchor(this._el_19,null),this._vc_28=new _.ViewContainer(28,19,this,this._anchor_28),this._TemplateRef_28_5=new y.TemplateRef_(this,28,this._anchor_28),this._NgIf_28_6=new v.Wrapper_NgIf(this._vc_28.vcRef,this._TemplateRef_28_5),this._text_29=this.renderer.createText(this._el_19,"\n ",null),this._anchor_30=this.renderer.createTemplateAnchor(this._el_19,null),this._vc_30=new _.ViewContainer(30,19,this,this._anchor_30),this._TemplateRef_30_5=new y.TemplateRef_(this,30,this._anchor_30),this._NgIf_30_6=new v.Wrapper_NgIf(this._vc_30.vcRef,this._TemplateRef_30_5),this._text_31=this.renderer.createText(this._el_19,"\n ",null),this._anchor_32=this.renderer.createTemplateAnchor(this._el_19,null),this._vc_32=new _.ViewContainer(32,19,this,this._anchor_32),this._TemplateRef_32_5=new y.TemplateRef_(this,32,this._anchor_32),this._NgIf_32_6=new v.Wrapper_NgIf(this._vc_32.vcRef,this._TemplateRef_32_5),this._text_33=this.renderer.createText(this._el_19,"\n ",null),this._anchor_34=this.renderer.createTemplateAnchor(this._el_19,null),this._vc_34=new _.ViewContainer(34,19,this,this._anchor_34),this._TemplateRef_34_5=new y.TemplateRef_(this,34,this._anchor_34),this._NgIf_34_6=new v.Wrapper_NgIf(this._vc_34.vcRef,this._TemplateRef_34_5),this._text_35=this.renderer.createText(this._el_19,"\n ",null),this._text_36=this.renderer.createText(this._el_17,"\n ",null),this._el_37=s.createRenderElement(this.renderer,this._el_17,"div",new s.InlineArray2(2,"class","param-description"),null),this._text_38=this.renderer.createText(this._el_17,"\n ",null),this._anchor_39=this.renderer.createTemplateAnchor(this._el_17,null),this._vc_39=new _.ViewContainer(39,17,this,this._anchor_39),this._TemplateRef_39_5=new y.TemplateRef_(this,39,this._anchor_39),this._NgIf_39_6=new v.Wrapper_NgIf(this._vc_39.vcRef,this._TemplateRef_39_5),this._text_40=this.renderer.createText(this._el_17,"\n ",null),this._text_41=this.renderer.createText(this._el_1,"\n ",null),this._text_42=this.renderer.createText(null,"\n ",null),this._el_43=s.createRenderElement(this.renderer,null,"tr",new s.InlineArray2(2,"class","param-schema"),null),this._NgClass_43_3=new C.Wrapper_NgClass(this.parentView.parentView.parentView.injectorGet(x.IterableDiffers,this.parentView.parentView.parentIndex),this.parentView.parentView.parentView.injectorGet(k.KeyValueDiffers,this.parentView.parentView.parentIndex),new h.ElementRef(this._el_43),this.renderer),this._text_44=this.renderer.createText(this._el_43,"\n ",null),this._el_45=s.createRenderElement(this.renderer,this._el_43,"td",new s.InlineArray2(2,"colspan","2"),null),this._text_46=this.renderer.createText(this._el_45,"\n ",null),this._el_47=s.createRenderElement(this.renderer,this._el_45,"zippy",new s.InlineArray2(2,"title","Expand"),null),this.compView_47=new O.View_Zippy0(this.viewUtils,this,47,this._el_47),this._Zippy_47_3=new O.Wrapper_Zippy,this._text_48=this.renderer.createText(null,"\n ",null),this._el_49=s.createRenderElement(this.renderer,null,"json-schema-lazy",new s.InlineArray2(2,"class","nested-schema"),null),this._vc_49=new _.ViewContainer(49,47,this,this._el_49),this.compView_49=new A.View_JsonSchemaLazy0(this.viewUtils,this,49,this._el_49),this._ComponentFactoryResolver_49_5=new N.CodegenComponentFactoryResolver([e.JsonSchemaNgFactory],this.parentView.injectorGet(N.ComponentFactoryResolver,this.parentIndex)),this._JsonSchemaLazy_49_6=new A.Wrapper_JsonSchemaLazy(this.parentView.parentView.parentView.injectorGet(l.SpecManager,this.parentView.parentView.parentIndex),this._vc_49.vcRef,new h.ElementRef(this._el_49),this._ComponentFactoryResolver_49_5,this.parentView.parentView.parentView.injectorGet(P.OptionsService,this.parentView.parentView.parentIndex),this.renderer),this._text_50=this.renderer.createText(null,"\n ",null),this.compView_49.create(this._JsonSchemaLazy_49_6.context),this._text_51=this.renderer.createText(null,"\n ",null),this.compView_47.create(this._Zippy_47_3.context),this._text_52=this.renderer.createText(this._el_45,"\n ",null),this._text_53=this.renderer.createText(this._el_43,"\n ",null),this._text_54=this.renderer.createText(null,"\n ",null);var n=s.subscribeToRenderElement(this,this._el_5,new s.InlineArray2(2,"click",null),this.eventHandler(this.handleEvent_5));this._pipe_json_0=new E.JsonPipe,this._pipe_marked_0_0=s.pureProxy1(this.parentView.parentView._pipe_marked_0.transform.bind(this.parentView.parentView._pipe_marked_0));var r=s.subscribeToRenderElement(this,this._el_47,new s.InlineArray2(2,"open",null),this.eventHandler(this.handleEvent_47));return this._Zippy_47_3.subscribe(this,this.eventHandler(this.handleEvent_47),!0,!1),this.init(this._text_54,this.renderer.directRenderer?null:[this._text_0,this._el_1,this._text_2,this._el_3,this._text_4,this._el_5,this._text_6,this._el_7,this._text_8,this._el_9,this._text_10,this._text_11,this._text_12,this._anchor_13,this._text_14,this._text_15,this._text_16,this._el_17,this._text_18,this._el_19,this._text_20,this._el_21,this._text_22,this._anchor_23,this._text_24,this._text_25,this._anchor_26,this._text_27,this._anchor_28,this._text_29,this._anchor_30,this._text_31,this._anchor_32,this._text_33,this._anchor_34,this._text_35,this._text_36,this._el_37,this._text_38,this._anchor_39,this._text_40,this._text_41,this._text_42,this._el_43,this._text_44,this._el_45,this._text_46,this._el_47,this._text_48,this._el_49,this._text_50,this._text_51,this._text_52,this._text_53,this._text_54],[n,r]),null},n.prototype.injectorGetInternal=function(t,e,n){return t===y.TemplateRef&&13===e?this._TemplateRef_13_5:t===b.NgIf&&13===e?this._NgIf_13_6.context:t===y.TemplateRef&&23===e?this._TemplateRef_23_5:t===b.NgIf&&23===e?this._NgIf_23_6.context:t===T.NgClass&&21<=e&&e<=24?this._NgClass_21_3.context:t===y.TemplateRef&&26===e?this._TemplateRef_26_5:t===b.NgIf&&26===e?this._NgIf_26_6.context:t===y.TemplateRef&&28===e?this._TemplateRef_28_5:t===b.NgIf&&28===e?this._NgIf_28_6.context:t===y.TemplateRef&&30===e?this._TemplateRef_30_5:t===b.NgIf&&30===e?this._NgIf_30_6.context:t===y.TemplateRef&&32===e?this._TemplateRef_32_5:t===b.NgIf&&32===e?this._NgIf_32_6.context:t===y.TemplateRef&&34===e?this._TemplateRef_34_5:t===b.NgIf&&34===e?this._NgIf_34_6.context:t===y.TemplateRef&&39===e?this._TemplateRef_39_5:t===b.NgIf&&39===e?this._NgIf_39_6.context:t===T.NgClass&&1<=e&&e<=41?this._NgClass_1_3.context:t===N.ComponentFactoryResolver&&49===e?this._ComponentFactoryResolver_49_5:t===R.JsonSchemaLazy&&49<=e&&e<=50?this._JsonSchemaLazy_49_6.context:t===S.Zippy&&47<=e&&e<=51?this._Zippy_47_3.context:t===T.NgClass&&43<=e&&e<=53?this._NgClass_43_3.context:n},n.prototype.detectChangesInternal=function(t){var e=new i.ValueUnwrapper,n="param";this._NgClass_1_3.check_klass(n,t,!1);var r=this._map_88(this.context.last,this.context.$implicit.isDiscriminator,this.context.$implicit._pointer,this.context.$implicit._additional,this._Zippy_47_3.context.visible);this._NgClass_1_3.check_ngClass(r,t,!1),this._NgClass_1_3.ngDoCheck(this,this._el_1,t);var o=this.context.$implicit._pointer;this._NgIf_13_6.check_ngIf(o,t,!1),this._NgIf_13_6.ngDoCheck(this,this._anchor_13,t);var a=s.inlineInterpolate(1,"param-type ",this.context.$implicit.type,"");this._NgClass_21_3.check_klass(a,t,!1);var c=this._map_94(this.context.$implicit._displayTypeHint,this.context.$implicit._isTuple);this._NgClass_21_3.check_ngClass(c,t,!1),this._NgClass_21_3.ngDoCheck(this,this._el_21,t);var u=this.context.$implicit._range;this._NgIf_23_6.check_ngIf(u,t,!1),this._NgIf_23_6.ngDoCheck(this,this._anchor_23,t);var l=this.context.$implicit._required;this._NgIf_26_6.check_ngIf(l,t,!1),this._NgIf_26_6.ngDoCheck(this,this._anchor_26,t);var h=this.context.$implicit["x-nullable"];this._NgIf_28_6.check_ngIf(h,t,!1),this._NgIf_28_6.ngDoCheck(this,this._anchor_28,t);var p=null!=this.context.$implicit.default;this._NgIf_30_6.check_ngIf(p,t,!1),this._NgIf_30_6.ngDoCheck(this,this._anchor_30,t);var f=this.context.$implicit.enum&&!this.context.$implicit.isDiscriminator;this._NgIf_32_6.check_ngIf(f,t,!1),this._NgIf_32_6.ngDoCheck(this,this._anchor_32,t);var _=this.context.$implicit.pattern;this._NgIf_34_6.check_ngIf(_,t,!1),this._NgIf_34_6.ngDoCheck(this,this._anchor_34,t);var d=this.context.$implicit.isDiscriminator;this._NgIf_39_6.check_ngIf(d,t,!1), +this._NgIf_39_6.ngDoCheck(this,this._anchor_39,t);var y="param-schema";this._NgClass_43_3.check_klass(y,t,!1);var m=this._map_99(this.context.last);this._NgClass_43_3.check_ngClass(m,t,!1),this._NgClass_43_3.ngDoCheck(this,this._el_43,t);var g=this.parentView.parentView.context.autoExpand;this._Zippy_47_3.check_visible(g,t,!1);var v="Expand";this._Zippy_47_3.check_title(v,t,!1);var b=!0;this._Zippy_47_3.check_headless(b,t,!1),this._Zippy_47_3.ngDoCheck(this,this._el_47,t);var w=this.context.$implicit._pointer;this._JsonSchemaLazy_49_6.check_pointer(w,t,!1);var x=this.parentView.parentView.context.autoExpand;this._JsonSchemaLazy_49_6.check_auto(x,t,!1);var I=this.parentView.parentView.context.isRequestSchema;this._JsonSchemaLazy_49_6.check_isRequestSchema(I,t,!1);var C=!this.parentView.parentView.context.nestOdd;this._JsonSchemaLazy_49_6.check_nestOdd(C,t,!1),this._JsonSchemaLazy_49_6.ngDoCheck(this,this._el_49,t),this._vc_13.detectChangesInNestedViews(t),this._vc_23.detectChangesInNestedViews(t),this._vc_26.detectChangesInNestedViews(t),this._vc_28.detectChangesInNestedViews(t),this._vc_30.detectChangesInNestedViews(t),this._vc_32.detectChangesInNestedViews(t),this._vc_34.detectChangesInNestedViews(t),this._vc_39.detectChangesInNestedViews(t),this._vc_49.detectChangesInNestedViews(t);var k=s.inlineInterpolate(1,"\n ",this.context.$implicit._name,"\n ");s.checkBinding(t,this._expr_89,k)&&(this.renderer.setText(this._text_8,k),this._expr_89=k);var T=!this.context.$implicit._enumItem;s.checkBinding(t,this._expr_90,T)&&(this.renderer.setElementProperty(this._el_9,"hidden",T),this._expr_90=T),e.reset();var E=s.inlineInterpolate(1," ",e.unwrap(this._pipe_json_0.transform(null==this.context.$implicit._enumItem?null:this.context.$implicit._enumItem.val))," ");(e.hasWrappedValue||s.checkBinding(t,this._expr_91,E))&&(this.renderer.setText(this._text_10,E),this._expr_91=E);var S=s.inlineInterpolate(1,"",this.context.$implicit._displayTypeHint,"");s.checkBinding(t,this._expr_93,S)&&(this.renderer.setElementProperty(this._el_21,"title",S),this._expr_93=S);var O=s.inlineInterpolate(2," ",this.context.$implicit._displayType," ",this.context.$implicit._displayFormat,"\n ");s.checkBinding(t,this._expr_95,O)&&(this.renderer.setText(this._text_22,O),this._expr_95=O),e.reset();var R=e.unwrap(s.castByValue(this._pipe_marked_0_0,this.parentView.parentView._pipe_marked_0.transform)(this.context.$implicit.description));(e.hasWrappedValue||s.checkBinding(t,this._expr_96,R))&&(this.renderer.setElementProperty(this._el_37,"innerHTML",this.viewUtils.sanitizer.sanitize(M.SecurityContext.HTML,R)),this._expr_96=R);var A=!this.context.$implicit._pointer;s.checkBinding(t,this._expr_98,A)&&(this.renderer.setElementProperty(this._el_43,"hidden",A),this._expr_98=A),this.compView_47.detectChanges(t),this.compView_49.detectChanges(t),t||0===this.numberOfChecks&&this._JsonSchemaLazy_49_6.context.ngAfterViewInit()},n.prototype.destroyInternal=function(){this._vc_13.destroyNestedViews(),this._vc_23.destroyNestedViews(),this._vc_26.destroyNestedViews(),this._vc_28.destroyNestedViews(),this._vc_30.destroyNestedViews(),this._vc_32.destroyNestedViews(),this._vc_34.destroyNestedViews(),this._vc_39.destroyNestedViews(),this._vc_49.destroyNestedViews(),this.compView_47.destroy(),this.compView_49.destroy(),this._JsonSchemaLazy_49_6.ngOnDestroy(),this._Zippy_47_3.ngOnDestroy()},n.prototype.visitRootNodesInternal=function(t,e){t(this._text_0,e),t(this._el_1,e),t(this._text_42,e),t(this._el_43,e),t(this._text_54,e)},n.prototype.visitProjectableNodesInternal=function(t,e,n,r){47==t&&0==e&&(n(this._text_48,r),n(this._vc_49.nativeElement,r),this._vc_49.visitNestedViewRootNodes(n,r),n(this._text_51,r))},n.prototype.createEmbeddedViewInternal=function(t){return 13==t?new ot(this.viewUtils,this,13,this._anchor_13,this._vc_13):23==t?new st(this.viewUtils,this,23,this._anchor_23,this._vc_23):26==t?new at(this.viewUtils,this,26,this._anchor_26,this._vc_26):28==t?new ct(this.viewUtils,this,28,this._anchor_28,this._vc_28):30==t?new ut(this.viewUtils,this,30,this._anchor_30,this._vc_30):32==t?new lt(this.viewUtils,this,32,this._anchor_32,this._vc_32):34==t?new pt(this.viewUtils,this,34,this._anchor_34,this._vc_34):39==t?new ft(this.viewUtils,this,39,this._anchor_39,this._vc_39):null},n.prototype.handleEvent_5=function(t,e){this.markPathToRootAsCheckOnce();var n=!0;if("click"==t){var r=this._Zippy_47_3.context.toggle()!==!1;n=r&&n}return n},n.prototype.handleEvent_47=function(t,e){this.markPathToRootAsCheckOnce();var n=!0;if("open"==t){var r=this._JsonSchemaLazy_49_6.context.load()!==!1;n=r&&n}return n},n}(o.AppView),ot=function(t){function e(n,r,o,s,a){t.call(this,e,U,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,":svg:svg",new s.InlineArray16(12,":xml:space","preserve","version","1.1","viewBox","0 0 24 24","x","0","xmlns","http://www.w3.org/2000/svg","y","0"),null),this._text_1=this.renderer.createText(this._el_0,"\n ",null),this._el_2=s.createRenderElement(this.renderer,this._el_0,":svg:polygon",new s.InlineArray2(2,"points","17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "),null),this._text_3=this.renderer.createText(this._el_0,"\n ",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._el_2,this._text_3],null),null},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView),st=function(t){function e(n,r,o,s,a){t.call(this,e,U,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a),this._expr_2=i.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"span",new s.InlineArray2(2,"class","param-range"),null),this._text_1=this.renderer.createText(this._el_0,"",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1],null),null},e.prototype.detectChangesInternal=function(t){var e=s.inlineInterpolate(1," ",this.parentView.context.$implicit._range," ");s.checkBinding(t,this._expr_2,e)&&(this.renderer.setText(this._text_1,e),this._expr_2=e)},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView),at=function(t){function e(n,r,o,s,a){t.call(this,e,U,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"span",new s.InlineArray2(2,"class","param-required"),null),this._text_1=this.renderer.createText(this._el_0,"Required",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1],null),null},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView),ct=function(t){function e(n,r,o,s,a){t.call(this,e,U,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"span",new s.InlineArray2(2,"class","param-nullable"),null),this._text_1=this.renderer.createText(this._el_0,"Nullable",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1],null),null},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView),ut=function(t){function e(n,r,o,s,a){t.call(this,e,U,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a),this._expr_5=i.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"div",new s.InlineArray2(2,"class","param-default"),null),this._text_1=this.renderer.createText(this._el_0,"\n ",null),this._el_2=s.createRenderElement(this.renderer,this._el_0,"span",new s.InlineArray2(2,"class","param-default-value"),null),this._text_3=this.renderer.createText(this._el_2,"",null),this._text_4=this.renderer.createText(this._el_0,"\n ",null),this._pipe_json_0=new E.JsonPipe,this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._el_2,this._text_3,this._text_4],null),null},e.prototype.detectChangesInternal=function(t){var e=new i.ValueUnwrapper;e.reset();var n=s.inlineInterpolate(1,"",e.unwrap(this._pipe_json_0.transform(this.parentView.context.$implicit.default)),"");(e.hasWrappedValue||s.checkBinding(t,this._expr_5,n))&&(this.renderer.setText(this._text_3,n),this._expr_5=n)},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView),lt=function(t){function e(n,r,o,s,a){t.call(this,e,U,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"div",new s.InlineArray2(2,"class","param-enum"),null),this._text_1=this.renderer.createText(this._el_0,"\n ",null),this._anchor_2=this.renderer.createTemplateAnchor(this._el_0,null),this._vc_2=new _.ViewContainer(2,0,this,this._anchor_2),this._TemplateRef_2_5=new y.TemplateRef_(this,2,this._anchor_2),this._NgFor_2_6=new w.Wrapper_NgFor(this._vc_2.vcRef,this._TemplateRef_2_5,this.parentView.parentView.parentView.parentView.injectorGet(x.IterableDiffers,this.parentView.parentView.parentView.parentIndex),this.parentView.parentView.parentView.ref),this._text_3=this.renderer.createText(this._el_0,"\n ",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._anchor_2,this._text_3],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===y.TemplateRef&&2===e?this._TemplateRef_2_5:t===I.NgFor&&2===e?this._NgFor_2_6.context:n},e.prototype.detectChangesInternal=function(t){var e=this.parentView.context.$implicit.enum;this._NgFor_2_6.check_ngForOf(e,t,!1),this._NgFor_2_6.ngDoCheck(this,this._anchor_2,t),this._vc_2.detectChangesInNestedViews(t)},e.prototype.destroyInternal=function(){this._vc_2.destroyNestedViews()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e.prototype.createEmbeddedViewInternal=function(t){return 2==t?new ht(this.viewUtils,this,2,this._anchor_2,this._vc_2):null},e}(o.AppView),ht=function(t){function e(n,r,o,s,a){t.call(this,e,U,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a),this._expr_2=i.UNINITIALIZED,this._expr_3=i.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"span",s.EMPTY_INLINE_ARRAY,null),this._text_1=this.renderer.createText(this._el_0,"",null),this._pipe_json_0=new E.JsonPipe,this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1],null),null},e.prototype.detectChangesInternal=function(t){var e=new i.ValueUnwrapper,n=s.inlineInterpolate(1,"param-enum-value ",this.context.$implicit.type,"");s.checkBinding(t,this._expr_2,n)&&(this.renderer.setElementProperty(this._el_0,"className",n),this._expr_2=n),e.reset();var r=s.inlineInterpolate(1," ",e.unwrap(this._pipe_json_0.transform(this.context.$implicit.val))," ");(e.hasWrappedValue||s.checkBinding(t,this._expr_3,r))&&(this.renderer.setText(this._text_1,r),this._expr_3=r)},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView),pt=function(t){function e(n,r,o,s,a){t.call(this,e,U,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a),this._expr_2=i.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"span",new s.InlineArray2(2,"class","param-pattern"),null),this._text_1=this.renderer.createText(this._el_0,"",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1],null),null},e.prototype.detectChangesInternal=function(t){var e=s.inlineInterpolate(1,"",this.parentView.context.$implicit.pattern,"");s.checkBinding(t,this._expr_2,e)&&(this.renderer.setText(this._text_1,e),this._expr_2=e)},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView),ft=function(t){function e(n,r,o,s,a){t.call(this,e,U,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a)}return __extends(e,t),e.prototype.createInternal=function(t){this._el_0=s.createRenderElement(this.renderer,null,"div",new s.InlineArray2(2,"class","discriminator-info"),null),this._text_1=this.renderer.createText(this._el_0,"\n ",null),this._el_2=s.createRenderElement(this.renderer,this._el_0,"drop-down",s.EMPTY_INLINE_ARRAY,null),this.compView_2=new V.View_DropDown0(this.viewUtils,this,2,this._el_2),this._DropDown_2_3=new V.Wrapper_DropDown(new h.ElementRef(this._el_2)),this._text_3=this.renderer.createText(null,"\n ",null),this._anchor_4=this.renderer.createTemplateAnchor(null,null),this._vc_4=new _.ViewContainer(4,2,this,this._anchor_4),this._TemplateRef_4_5=new y.TemplateRef_(this,4,this._anchor_4),this._NgFor_4_6=new w.Wrapper_NgFor(this._vc_4.vcRef,this._TemplateRef_4_5,this.parentView.parentView.parentView.parentView.injectorGet(x.IterableDiffers,this.parentView.parentView.parentView.parentIndex),this.parentView.parentView.parentView.ref),this._text_5=this.renderer.createText(null,"\n ",null),this.compView_2.create(this._DropDown_2_3.context),this._text_6=this.renderer.createText(this._el_0,"\n ",null);var e=s.subscribeToRenderElement(this,this._el_2,new s.InlineArray2(2,"change",null),this.eventHandler(this.handleEvent_2));return this._DropDown_2_3.subscribe(this,this.eventHandler(this.handleEvent_2),!0),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._el_2,this._text_3,this._anchor_4,this._text_5,this._text_6],[e]),null},e.prototype.injectorGetInternal=function(t,e,n){return t===y.TemplateRef&&4===e?this._TemplateRef_4_5:t===I.NgFor&&4===e?this._NgFor_4_6.context:t===D.DropDown&&2<=e&&e<=5?this._DropDown_2_3.context:n},e.prototype.detectChangesInternal=function(t){this._DropDown_2_3.ngDoCheck(this,this._el_2,t);var e=this.parentView.parentView.parentView.context.descendants;this._NgFor_4_6.check_ngForOf(e,t,!1),this._NgFor_4_6.ngDoCheck(this,this._anchor_4,t),this._vc_4.detectChangesInNestedViews(t),t||0===this.numberOfChecks&&this._DropDown_2_3.context.ngAfterContentInit(),this.compView_2.detectChanges(t)},e.prototype.destroyInternal=function(){this._vc_4.destroyNestedViews(),this.compView_2.destroy(),this._DropDown_2_3.ngOnDestroy()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e.prototype.visitProjectableNodesInternal=function(t,e,n,r){2==t&&0==e&&(n(this._text_3,r),n(this._vc_4.nativeElement,r),this._vc_4.visitNestedViewRootNodes(n,r),n(this._text_5,r))},e.prototype.createEmbeddedViewInternal=function(t){return 4==t?new _t(this.viewUtils,this,4,this._anchor_4,this._vc_4):null},e.prototype.handleEvent_2=function(t,e){this.markPathToRootAsCheckOnce();var n=!0;if("change"==t){var r=this.parentView.parentView.parentView.context.selectDescendant(e)!==!1;n=r&&n}return n},e}(o.AppView),_t=function(t){function e(n,r,o,s,a){t.call(this,e,U,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a),this._expr_2=i.UNINITIALIZED,this._expr_3=i.UNINITIALIZED,this._expr_4=i.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"option",s.EMPTY_INLINE_ARRAY,null),this._text_1=this.renderer.createText(this._el_0,"",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1],null),null},e.prototype.detectChangesInternal=function(t){var e=this.context.index;s.checkBinding(t,this._expr_2,e)&&(this.renderer.setElementProperty(this._el_0,"value",e),this._expr_2=e);var n=this.context.$implicit.active?"":null;s.checkBinding(t,this._expr_3,n)&&(this.renderer.setElementAttribute(this._el_0,"selected",null==n?null:n.toString()),this._expr_3=n);var r=s.inlineInterpolate(1,"",this.context.$implicit.name,"");s.checkBinding(t,this._expr_4,r)&&(this.renderer.setText(this._text_1,r),this._expr_4=r)},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView)},function(t,e,n){"use strict";var r=n(2),i=n(40),o=n(55),s=function(t){function e(e,n,r){t.call(this,e),this._renderer=n,this._elementRef=r,this.final=!1,this.schema={},this.activeDescendant={},this.hasDescendants=!1,this._hasSubSchemas=!1,this.autoExpand=!1,this.normalizer=new o.SchemaNormalizer(e)}return __extends(e,t),Object.defineProperty(e.prototype,"normPointer",{get:function(){return this.schema._pointer||this.pointer},enumerable:!0,configurable:!0}),e.prototype.selectDescendant=function(t){var e=this.descendants[t];e&&!e.active&&(this.descendants.forEach(function(t){t.active=!1}),e.active=!0,this.pointer=e.$ref,this.schema=this.specMgr.byPointer(this.pointer),this.normalizer.reset(),this.schema=this.normalizer.normalize(this.schema,this.normPointer,{resolved:!0}),this.preprocessSchema())},e.prototype.initDescendants=function(){if(this.descendants=this.specMgr.findDerivedDefinitions(this.normPointer),this.descendants.length){this.hasDescendants=!0;var t=this.schema.discriminator||this.schema["x-extendedDiscriminator"],e=this.schema._properties&&this.schema._properties.filter(function(e){return e.name===t})[0];if(e&&e.enum){var n={};e.enum.forEach(function(t,e){n[t.val]=e}),this.schema._descendants.sort(function(t,e){return n[t.name]>n[e.name]?1:-1})}this.selectDescendant(0)}},e.prototype.init=function(){if(this.pointer){if(this.schema=this.componentSchema,!this.schema)throw new Error("Can't load component schema at "+this.pointer);this.applyStyling(),this.schema=this.normalizer.normalize(this.schema,this.normPointer,{resolved:!0}),this.schema=o.SchemaHelper.unwrapArray(this.schema,this.normPointer),this._isArray=this.schema._isArray,this.initDescendants(),this.preprocessSchema()}},e.prototype.preprocessSchema=function(){o.SchemaHelper.preprocess(this.schema,this.normPointer,this.pointer),this.schema.isTrivial||o.SchemaHelper.preprocessProperties(this.schema,this.normPointer,{childFor:this.childFor}),this.properties=this.schema._properties,this.isRequestSchema&&(this.properties=this.properties&&this.properties.filter(function(t){return!t.readOnly})),this._hasSubSchemas=this.properties&&this.properties.some(function(t){return"array"===t.type&&(t=t.items),t&&"object"===t.type&&t._pointer}),this.autoExpand=this.properties&&1===this.properties.length},e.prototype.applyStyling=function(){this.nestOdd&&this._renderer.setElementAttribute(this._elementRef.nativeElement,"nestodd","true")},e.prototype.trackByName=function(t,e){return e.name+(e._pointer||"")},e.prototype.ngOnInit=function(){this.preinit()},__decorate([r.Input(),__metadata("design:type",String)],e.prototype,"pointer",void 0),__decorate([r.Input(),__metadata("design:type",Boolean)],e.prototype,"final",void 0),__decorate([r.Input(),__metadata("design:type",Boolean)],e.prototype,"nestOdd",void 0),__decorate([r.Input(),__metadata("design:type",String)],e.prototype,"childFor",void 0),__decorate([r.Input(),__metadata("design:type",Boolean)],e.prototype,"isRequestSchema",void 0),e=__decorate([r.Component({selector:"json-schema",templateUrl:"./json-schema.html",styleUrls:["./json-schema.css"],changeDetection:r.ChangeDetectionStrategy.OnPush}),__metadata("design:paramtypes",["function"==typeof(n="undefined"!=typeof i.SpecManager&&i.SpecManager)&&n||Object,"function"==typeof(s="undefined"!=typeof r.Renderer&&r.Renderer)&&s||Object,"function"==typeof(a="undefined"!=typeof r.ElementRef&&r.ElementRef)&&a||Object])],e);var n,s,a}(i.BaseComponent);e.JsonSchema=s},function(t,e,n){"use strict";var r=n(2),i=function(){function t(){this.progress=0,this.display="block"}return t.prototype.ngOnChanges=function(t){var e=this;100===t.progress.currentValue&&setTimeout(function(){e.display="none"},500)},__decorate([r.Input(),__metadata("design:type",Number)],t.prototype,"progress",void 0),__decorate([r.HostBinding("style.display"),__metadata("design:type",Object)],t.prototype,"display",void 0),t=__decorate([r.Component({selector:"loading-bar",template:"\n \n ",styles:["\n :host {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n display: block;\n\n height: 5px;\n z-index: 100;\n }\n\n span {\n display: block;\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n right: attr(progress percentage);\n background-color: #5f7fc3;\n transition: right 0.2s linear;\n }\n "]}),__metadata("design:paramtypes",[])],t)}();e.LoadingBar=i},function(t,e,n){"use strict";var r=n(2),i=n(77),o=n(40),s=n(123),a=n(55),c=function(t){function e(e,n,r){t.call(this,e),this.optionsService=n,this.el=r,this.hidden=!0}return __extends(e,t),e.prototype.init=function(){this.method={},this.optionsService.options.hideHostname?this.method.apiUrl=this.specMgr.basePath:this.method.apiUrl=this.specMgr.apiUrl,this.method.httpMethod=i.default.baseName(this.pointer),this.method.path=i.default.baseName(this.pointer,2),this.method.info=this.componentSchema,this.method.info.tags=this.filterMainTags(this.method.info.tags),this.method.bodyParam=this.findBodyParam(),this.method.summary=s.SchemaHelper.methodSummary(this.componentSchema),this.componentSchema.operationId?this.method.anchor="operation/"+encodeURIComponent(this.componentSchema.operationId):this.method.anchor=this.tag+encodeURIComponent(this.pointer)},e.prototype.filterMainTags=function(t){var e=this.specMgr.getTagsMap();return t?t.filter(function(t){return e[t]&&e[t]["x-traitTag"]}):[]},e.prototype.findBodyParam=function(){var t=this.specMgr.getMethodParams(this.pointer,!0),e=t.find(function(t){return"body"===t.in});return e},e.prototype.show=function(t){t?this.el.nativeElement.firstElementChild.removeAttribute("hidden"):this.el.nativeElement.firstElementChild.setAttribute("hidden","hidden")},e.prototype.ngOnInit=function(){this.preinit()},__decorate([r.Input(),__metadata("design:type",String)],e.prototype,"pointer",void 0),__decorate([r.Input(),__metadata("design:type",String)],e.prototype,"tag",void 0),__decorate([r.Input(),__metadata("design:type",Object)],e.prototype,"posInfo",void 0),e=__decorate([r.Component({selector:"method",templateUrl:"./method.html",styleUrls:["./method.css"],changeDetection:r.ChangeDetectionStrategy.OnPush}),__metadata("design:paramtypes",["function"==typeof(n="undefined"!=typeof o.SpecManager&&o.SpecManager)&&n||Object,"function"==typeof(c="undefined"!=typeof a.OptionsService&&a.OptionsService)&&c||Object,"function"==typeof(u="undefined"!=typeof r.ElementRef&&r.ElementRef)&&u||Object])],e);var n,c,u}(o.BaseComponent);e.Method=c},function(t,e,n){"use strict";var r=n(2),i=n(40),o=n(55),s=function(t){function e(e){t.call(this,e),this.tags=[]}return __extends(e,t),e.prototype.init=function(){var t=o.SchemaHelper.buildMenuTree(this.specMgr.schema);this.tags=t.filter(function(t){return!t.virtual}),this.tags.forEach(function(t){t.methods=t.methods||[],t.methods.forEach(function(e){e.tag=t.id})})},e.prototype.trackByTagName=function(t,e){return e.name},e.prototype.ngOnInit=function(){this.preinit()},__decorate([r.Input(),__metadata("design:type",String)],e.prototype,"pointer",void 0),e=__decorate([r.Component({selector:"methods-list",templateUrl:"./methods-list.html",styleUrls:["./methods-list.css"],changeDetection:r.ChangeDetectionStrategy.OnPush}),__metadata("design:paramtypes",["function"==typeof(n="undefined"!=typeof i.SpecManager&&i.SpecManager)&&n||Object])],e);var n}(i.BaseComponent);e.MethodsList=s},function(t,e,n){"use strict";function r(t,e,n){t[e]||(t[e]=[]),t[e].push(n)}var i=n(2),o=n(40),s=n(123),a=function(t){function e(e){t.call(this,e)}return __extends(e,t),e.prototype.init=function(){var t=this;this.params=[];var e=this.specMgr.getMethodParams(this.pointer,!0);e=e.map(function(e){var n=e._pointer;return"body"===e.in?e:(e._name=e.name,s.SchemaHelper.preprocess(e,n,t.pointer))});var n=this.orderParams(e);if(n.body&&n.body.length){var r=n.body[0];this.bodyParam=r,n.body=void 0}this.empty=!(Object.keys(n).length||this.bodyParam);var i=["path","query","formData","header","body"],o={path:"Used together with Path Templating, where the parameter value is actually part\n of the operation's URL. This does not include the host or base path of the API.\n For example, in /items/{itemId}, the path parameter is itemId",query:"Parameters that are appended to the URL.\n For example, in /items?id=###, the query parameter is id",formData:"Parameters that are submitted through a form.\n application/x-www-form-urlencoded, multipart/form-data or both are usually\n used as the content type of the request",header:"Custom headers that are expected as part of the request"},a=[];i.forEach(function(t){n[t]&&n[t].length&&a.push({place:t,placeHint:o[t],params:n[t]})}),this.params=a},e.prototype.orderParams=function(t){var e={};return t.forEach(function(t){return r(e,t.in,t)}),e},e.prototype.ngOnInit=function(){this.preinit()},__decorate([i.Input(),__metadata("design:type",String)],e.prototype,"pointer",void 0),e=__decorate([i.Component({selector:"params-list",templateUrl:"./params-list.html",styleUrls:["./params-list.css"],changeDetection:i.ChangeDetectionStrategy.OnPush}),__metadata("design:paramtypes",["function"==typeof(n="undefined"!=typeof o.SpecManager&&o.SpecManager)&&n||Object])],e);var n}(o.BaseComponent);e.ParamsList=a},function(t,e,n){"use strict";var r=n(2),i=n(40),o=n(77),s=n(314),a=n(55),c=function(t){function e(e,n,r,i,o){t.call(this,e),this.appState=n,this.scrollService=r,this.el=i,this.zone=o,this.selectedLang=this.appState.samplesLanguage}return __extends(e,t),e.prototype.changeLangNotify=function(t){var e=this,n=this.scrollService.relativeScrollPos(this.el.nativeElement);this.selectedLang.next(t);var r=this.zone.onMicrotaskEmpty.subscribe(function(){e.scrollService.scrollTo(e.el.nativeElement,n),r.unsubscribe()})},e.prototype.init=function(){this.schemaPointer=this.schemaPointer?o.default.join(this.schemaPointer,"schema"):null,this.samples=this.componentSchema["x-code-samples"]||[],this.schemaPointer||this.samples.length||(this.hidden=!0)},e.prototype.ngOnInit=function(){this.preinit()},__decorate([r.Input(),__metadata("design:type",String)],e.prototype,"pointer",void 0),__decorate([r.Input(),__metadata("design:type",String)],e.prototype,"schemaPointer",void 0),__decorate([r.ViewChildren(s.Tabs),__metadata("design:type","function"==typeof(n="undefined"!=typeof r.QueryList&&r.QueryList)&&n||Object)],e.prototype,"childQuery",void 0),__decorate([r.HostBinding("attr.hidden"),__metadata("design:type",Object)],e.prototype,"hidden",void 0),e=__decorate([r.Component({selector:"request-samples",templateUrl:"./request-samples.html",styleUrls:["./request-samples.css"],changeDetection:r.ChangeDetectionStrategy.OnPush}),__metadata("design:paramtypes",["function"==typeof(c="undefined"!=typeof i.SpecManager&&i.SpecManager)&&c||Object,"function"==typeof(u="undefined"!=typeof a.AppStateService&&a.AppStateService)&&u||Object,"function"==typeof(l="undefined"!=typeof a.ScrollService&&a.ScrollService)&&l||Object,"function"==typeof(h="undefined"!=typeof r.ElementRef&&r.ElementRef)&&h||Object,"function"==typeof(p="undefined"!=typeof r.NgZone&&r.NgZone)&&p||Object])],e);var n,c,u,l,h,p}(i.BaseComponent);e.RequestSamples=c},function(t,e,n){"use strict";function r(t){return!isNaN(parseFloat(t))&&isFinite(t)}var i=n(2),o=n(40),s=n(77),a=n(78),c=n(55),u=n(123),l=function(t){function e(e,n){t.call(this,e),this.options=n.options}return __extends(e,t),e.prototype.init=function(){var t=this;this.responses=[];var e=this.componentSchema;e&&(e=Object.keys(e).filter(function(t){return r(t)||"default"===t}).map(function(n){var r=e[n];if(r.pointer=s.default.join(t.pointer,n),r.$ref){var i=r.$ref;r=t.specMgr.byPointer(r.$ref),r.pointer=i}return r.empty=!r.schema,r.code=n,r.type=a.statusCodeType(r.code),!r.headers||r.headers instanceof Array||(r.headers=Object.keys(r.headers).map(function(e){var n=r.headers[e];return n.name=e,u.SchemaHelper.preprocess(n,t.pointer,t.pointer)}),r.empty=!1),r.extendable=r.headers||r.length,r}),this.responses=e)},e.prototype.trackByCode=function(t,e){return e.code},e.prototype.ngOnInit=function(){this.preinit()},__decorate([i.Input(),__metadata("design:type",String)],e.prototype,"pointer",void 0),e=__decorate([i.Component({selector:"responses-list",templateUrl:"./responses-list.html",styleUrls:["./responses-list.css"],changeDetection:i.ChangeDetectionStrategy.OnPush}),__metadata("design:paramtypes",["function"==typeof(n="undefined"!=typeof o.SpecManager&&o.SpecManager)&&n||Object,"function"==typeof(l="undefined"!=typeof c.OptionsService&&c.OptionsService)&&l||Object])],e);var n,l}(o.BaseComponent);e.ResponsesList=l},function(t,e,n){"use strict";function r(t){return!isNaN(parseFloat(t))&&isFinite(t)}function i(t){return t.examples&&t.examples["application/json"]||t.schema}var o=n(2),s=n(40),a=n(77),c=n(78),u=function(t){function e(e){t.call(this,e)}return __extends(e,t),e.prototype.init=function(){var t=this;this.data={},this.data.responses=[];var e=this.componentSchema;e&&(e=Object.keys(e).filter(function(t){return r(t)||"default"===t}).map(function(n){var r=e[n];if(r.pointer=a.default.join(t.pointer,n),r.$ref){var i=r.$ref;r=t.specMgr.byPointer(r.$ref),r.pointer=i}return r.code=n,r.type=c.statusCodeType(r.code),r}).filter(function(t){return i(t)}),this.data.responses=e)},e.prototype.ngOnInit=function(){this.preinit()},__decorate([o.Input(),__metadata("design:type",String)],e.prototype,"pointer",void 0),e=__decorate([o.Component({selector:"responses-samples",templateUrl:"./responses-samples.html",styleUrls:["./responses-samples.css"],changeDetection:o.ChangeDetectionStrategy.OnPush}),__metadata("design:paramtypes",["function"==typeof(n="undefined"!=typeof s.SpecManager&&s.SpecManager)&&n||Object])],e);var n}(s.BaseComponent);e.ResponsesSamples=u},function(t,e,n){"use strict";var r=n(2),i=n(40),o=n(122),s={oauth2:"OAuth2",apiKey:"API Key",basic:"Basic Authorization"},a=function(t){function e(e){t.call(this,e),this.info={}}return __extends(e,t),e.insertTagIntoDescription=function(t){return o.ComponentParser.contains(t,"security-definitions")?t:/^#\s?Authentication\s*$/im.test(t)?t:t+"\n# Authentication \n"+o.ComponentParser.build("security-definitions")},e.prototype.init=function(){var t=this;this.componentSchema=this.componentSchema.securityDefinitions,this.defs=Object.keys(this.componentSchema).map(function(e){var n=t.componentSchema[e];return n._displayType=s[n.type],{name:e,details:n}})},e.prototype.ngOnInit=function(){this.preinit()},e=__decorate([r.Component({selector:"security-definitions",styleUrls:["./security-definitions.css"],templateUrl:"./security-definitions.html",changeDetection:r.ChangeDetectionStrategy.OnPush}),__metadata("design:paramtypes",["function"==typeof(n="undefined"!=typeof i.SpecManager&&i.SpecManager)&&n||Object])],e);var n}(i.BaseComponent);e.SecurityDefinitions=a},function(t,e,n){"use strict";var r=n(2),i=n(2),o=n(40),s=n(55),a=n(105),c=window,u=function(t){function e(e,n,r,i,o,s){var a=this;t.call(this,e),this.scrollService=r,this.menuService=i,this.detectorRef=s,this.firstChange=!0,this.$element=n.nativeElement,this.activeCatCaption="",this.activeItemCaption="",this.options=o.options,this.menuService.changed.subscribe(function(t){return a.changed(t)})}return __extends(e,t),e.prototype.changed=function(t){if(t){var e=t.cat,n=t.item;this.activeCatCaption=e.name||"",this.activeItemCaption=n&&n.summary||""}this.detectorRef.detectChanges(),this.firstChange&&(this.scrollActiveIntoView(),this.firstChange=!1)},e.prototype.scrollActiveIntoView=function(){var t=this.$element.querySelector("li.active, label.active");t&&t.scrollIntoView()},e.prototype.activateAndScroll=function(t,e){this.mobileMode()&&this.toggleMobileNav();var n=this.categories; +n[t].ready&&(n[t].methods&&n[t].methods.length&&e>=0&&!n[t].methods[e].ready||(this.menuService.activate(t,e),this.menuService.scrollToActive()))},e.prototype.init=function(){var t=this;this.categories=this.menuService.categories,this.$mobileNav=a.BrowserDomAdapter.querySelector(this.$element,".mobile-nav"),this.$resourcesNav=a.BrowserDomAdapter.querySelector(this.$element,"#resources-nav"),this.scrollService.scrollYOffset=function(){var e=t.$mobileNav.clientHeight;return t.options.scrollYOffset()+e}},e.prototype.mobileMode=function(){return this.$mobileNav.clientHeight>0},e.prototype.toggleMobileNav=function(){var t=this.options.$scrollParent===c?a.BrowserDomAdapter.defaultDoc().body:this.$scrollParent;if(a.BrowserDomAdapter.hasStyle(this.$resourcesNav,"height"))a.BrowserDomAdapter.removeStyle(this.$resourcesNav,"height"),a.BrowserDomAdapter.removeStyle(t,"overflow-y");else{var e=this.options.$scrollParent.innerHeight||this.options.$scrollParent.clientHeight,n=e-this.$mobileNav.getBoundingClientRect().bottom;a.BrowserDomAdapter.setStyle(t,"overflow-y","hidden"),a.BrowserDomAdapter.setStyle(this.$resourcesNav,"height",n+"px")}},e.prototype.destroy=function(){this.scrollService.unbind()},e.prototype.ngOnInit=function(){this.preinit()},e=__decorate([r.Component({selector:"side-menu",templateUrl:"./side-menu.html",styleUrls:["./side-menu.css"],animations:[i.trigger("itemAnimation",[i.state("collapsed, void",i.style({height:"0px"})),i.state("expanded",i.style({height:"*"})),i.transition("collapsed <=> expanded",[i.animate("200ms ease")])])]}),__metadata("design:paramtypes",["function"==typeof(n="undefined"!=typeof o.SpecManager&&o.SpecManager)&&n||Object,"function"==typeof(u="undefined"!=typeof r.ElementRef&&r.ElementRef)&&u||Object,"function"==typeof(l="undefined"!=typeof s.ScrollService&&s.ScrollService)&&l||Object,"function"==typeof(h="undefined"!=typeof s.MenuService&&s.MenuService)&&h||Object,"function"==typeof(p="undefined"!=typeof s.OptionsService&&s.OptionsService)&&p||Object,"function"==typeof(f="undefined"!=typeof r.ChangeDetectorRef&&r.ChangeDetectorRef)&&f||Object])],e);var n,u,l,h,p,f}(o.BaseComponent);e.SideMenu=u},function(t,e,n){"use strict";var r=n(2),i=n(40),o=n(55),s=function(t){function e(e,n){t.call(this,e),this.warnings=[],this.shown=!1,this.suppressWarnings=n.options.suppressWarnings}return __extends(e,t),e.prototype.init=function(){var t=this;this.shown=!this.suppressWarnings&&!!this.warnings.length,o.WarningsService.warnings.subscribe(function(e){t.warnings=e,t.shown=!t.suppressWarnings&&!!e.length})},e.prototype.close=function(){this.shown=!1},e.prototype.ngOnInit=function(){this.preinit()},e=__decorate([r.Component({selector:"warnings",styleUrls:["./warnings.css"],templateUrl:"./warnings.html"}),__metadata("design:paramtypes",["function"==typeof(n="undefined"!=typeof i.SpecManager&&i.SpecManager)&&n||Object,"function"==typeof(s="undefined"!=typeof o.OptionsService&&o.OptionsService)&&s||Object])],e);var n,s}(i.BaseComponent);e.Warnings=s},function(t,e,n){"use strict";var r=n(2),i=n(653),o=function(){function t(t){this.change=new r.EventEmitter,this.elem=t.nativeElement}return t.prototype.ngAfterContentInit=function(){this.inst=new i(this.elem.firstElementChild,{autoWidth:!0})},t.prototype.onChange=function(t){this.change.next(t)},t.prototype.destroy=function(){this.inst.dispose()},__decorate([r.Output(),__metadata("design:type",Object)],t.prototype,"change",void 0),t=__decorate([r.Component({selector:"drop-down",template:"\n \n ",styleUrls:["./drop-down.css"]}),__metadata("design:paramtypes",["function"==typeof(e="undefined"!=typeof r.ElementRef&&r.ElementRef)&&e||Object])],t);var e}();e.DropDown=o},function(t,e,n){"use strict";var r=n(2),i=n(55),o=function(){function t(t,e,n,r,i){this.view=t,this.projector=e,this.parser=n,this.resolver=r,this.renderer=i}return t.prototype.ngOnInit=function(){this.parser.setRenderer(this.renderer);var t=this.parser.splitIntoNodesOrComponents(this.html,this.view.injector),e=this.resolver.resolveComponentFactory(s),n=this.projector.instantiateAndProject(e,this.view,t);n.changeDetectorRef.markForCheck()},__decorate([r.Input(),__metadata("design:type",String)],t.prototype,"html",void 0),t=__decorate([r.Component({selector:"dynamic-ng2-viewer",template:""}),__metadata("design:paramtypes",["function"==typeof(e="undefined"!=typeof r.ViewContainerRef&&r.ViewContainerRef)&&e||Object,"function"==typeof(n="undefined"!=typeof i.ContentProjector&&i.ContentProjector)&&n||Object,"function"==typeof(o="undefined"!=typeof i.ComponentParser&&i.ComponentParser)&&o||Object,"function"==typeof(a="undefined"!=typeof r.ComponentFactoryResolver&&r.ComponentFactoryResolver)&&a||Object,"function"==typeof(c="undefined"!=typeof r.Renderer&&r.Renderer)&&c||Object])],t);var e,n,o,a,c}();e.DynamicNg2Viewer=o;var s=function(){function t(){}return t=__decorate([r.Component({selector:"dynamic-ng2-wrapper",template:""}),__metadata("design:paramtypes",[])],t)}();e.DynamicNg2Wrapper=s},function(t,e,n){"use strict";var r=n(2),i=n(308),o=function(){function t(t){this.element=t}return t.prototype.onClick=function(){i.Clipboard.selectElement(this.element.nativeElement)},__decorate([r.HostListener("click"),__metadata("design:type",Function),__metadata("design:paramtypes",[]),__metadata("design:returntype",void 0)],t.prototype,"onClick",null),t=__decorate([r.Directive({selector:"[select-on-click]"}),__metadata("design:paramtypes",["function"==typeof(e="undefined"!=typeof r.ElementRef&&r.ElementRef)&&e||Object])],t);var e}();e.SelectOnClick=o},function(t,e,n){"use strict";var r=n(2),i=n(105),o=function(){function t(t){this.$element=t.nativeElement,i.BrowserDomAdapter.setStyle(this.$element,"position","absolute"),i.BrowserDomAdapter.setStyle(this.$element,"top","0"),i.BrowserDomAdapter.setStyle(this.$element,"bottom","0"),i.BrowserDomAdapter.setStyle(this.$element,"max-height","100%")}return t.prototype.bind=function(){var t=this;this.cancelScrollBinding=i.BrowserDomAdapter.onAndCancel(this.scrollParent,"scroll",function(){t.updatePosition()})},t.prototype.unbind=function(){this.cancelScrollBinding&&this.cancelScrollBinding()},t.prototype.updatePosition=function(){var t=!1;this.scrollY+this.scrollYOffset()>=this.$redocEl.offsetTop?(this.stick(),t=!0):this.unstick(),this.scrollY+window.innerHeight-this.scrollYOffset()>=this.$redocEl.scrollHeight?(this.stickBottom(),t=!0):this.unstickBottom(),t||i.BrowserDomAdapter.setStyle(this.$element,"position","absolute")},t.prototype.stick=function(){i.BrowserDomAdapter.setStyle(this.$element,"position","fixed"),i.BrowserDomAdapter.setStyle(this.$element,"top",this.scrollYOffset()+"px")},t.prototype.unstick=function(){i.BrowserDomAdapter.setStyle(this.$element,"top","0")},t.prototype.stickBottom=function(){i.BrowserDomAdapter.setStyle(this.$element,"position","fixed");var t=this.scrollY+this.scrollParentHeight-(this.$redocEl.scrollHeight+this.$redocEl.offsetTop);i.BrowserDomAdapter.setStyle(this.$element,"bottom",t+"px")},t.prototype.unstickBottom=function(){i.BrowserDomAdapter.setStyle(this.$element,"bottom","0")},Object.defineProperty(t.prototype,"scrollY",{get:function(){return void 0!=this.scrollParent.pageYOffset?this.scrollParent.pageYOffset:this.scrollParent.scrollTop},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"scrollParentHeight",{get:function(){return void 0!=this.scrollParent.innerHeight?this.scrollParent.innerHeight:this.scrollParent.clientHeight},enumerable:!0,configurable:!0}),t.prototype.ngOnInit=function(){var t=this;this.$redocEl=this.$element.offsetParent.parentNode||i.BrowserDomAdapter.defaultDoc().body,this.bind(),requestAnimationFrame(function(){return t.updatePosition()})},t.prototype.ngOnDestroy=function(){this.unbind()},__decorate([r.Input(),__metadata("design:type",Object)],t.prototype,"scrollParent",void 0),__decorate([r.Input(),__metadata("design:type",Object)],t.prototype,"scrollYOffset",void 0),t=__decorate([r.Directive({selector:"[sticky-sidebar]"}),__metadata("design:paramtypes",["function"==typeof(e="undefined"!=typeof r.ElementRef&&r.ElementRef)&&e||Object])],t);var e}();e.StickySidebar=o},function(t,e,n){"use strict";(function(t){var r=n(16),i=r.Buffer,o=r.SlowBuffer,s=r.kMaxLength||2147483647;e.alloc=function(t,e,n){if("function"==typeof i.alloc)return i.alloc(t,e,n);if("number"==typeof n)throw new TypeError("encoding must not be number");if("number"!=typeof t)throw new TypeError("size must be a number");if(t>s)throw new RangeError("size is too large");var r=n,o=e;void 0===o&&(r=void 0,o=0);var a=new i(t);if("string"==typeof o)for(var c=new i(o,r),u=c.length,l=-1;++ls)throw new RangeError("size is too large");return new i(t)},e.from=function(e,n,r){if("function"==typeof i.from&&(!t.Uint8Array||Uint8Array.from!==i.from))return i.from(e,n,r);if("number"==typeof e)throw new TypeError('"value" argument must not be a number');if("string"==typeof e)return new i(e,n);if("undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer){var o=n;if(1===arguments.length)return new i(e);"undefined"==typeof o&&(o=0);var s=r;if("undefined"==typeof s&&(s=e.byteLength-o),o>=e.byteLength)throw new RangeError("'offset' is out of bounds");if(s>e.byteLength-o)throw new RangeError("'length' is out of bounds");return new i(e.slice(o,o+s))}if(i.isBuffer(e)){var a=new i(e.length);return e.copy(a,0,0,e.length),a}if(e){if(Array.isArray(e)||"undefined"!=typeof ArrayBuffer&&e.buffer instanceof ArrayBuffer||"length"in e)return new i(e);if("Buffer"===e.type&&Array.isArray(e.data))return new i(e.data)}throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")},e.allocUnsafeSlow=function(t){if("function"==typeof i.allocUnsafeSlow)return i.allocUnsafeSlow(t);if("number"!=typeof t)throw new TypeError("size must be a number");if(t>=s)throw new RangeError("size is too large");return new o(t)}}).call(e,n(27))},function(t,e,n){"use strict";var r=n(52),i=n(95),o=n(37);t.exports=function(t){for(var e=r(this),n=o(e.length),s=arguments.length,a=i(s>1?arguments[1]:void 0,n),c=s>2?arguments[2]:void 0,u=void 0===c?n:i(c,n);u>a;)e[a++]=t;return e}},function(t,e,n){var r=n(58),i=n(37),o=n(95);t.exports=function(t){return function(e,n,s){var a,c=r(e),u=i(c.length),l=o(s,u);if(t&&n!=n){for(;u>l;)if(a=c[l++],a!=a)return!0}else for(;u>l;l++)if((t||l in c)&&c[l]===n)return t||l||0;return!t&&-1}}},function(t,e,n){var r=n(91),i=n(18)("toStringTag"),o="Arguments"==r(function(){return arguments}()),s=function(t,e){try{return t[e]}catch(t){}};t.exports=function(t){var e,n,a;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=s(e=Object(t),i))?n:o?r(e):"Object"==(a=r(e))&&"function"==typeof e.callee?"Arguments":a}},function(t,e){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,e,n){var r=n(18)("match");t.exports=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[r]=!1,!"/./"[t](e)}catch(t){}}return!0}},function(t,e,n){"use strict";var r=n(6);t.exports=function(){var t=r(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},function(t,e,n){var r=n(11),i=n(248).set;t.exports=function(t,e,n){var o,s=e.constructor;return s!==n&&"function"==typeof s&&(o=s.prototype)!==n.prototype&&r(o)&&i&&i(t,o),t}},function(t,e,n){var r=n(107),i=n(18)("iterator"),o=Array.prototype;t.exports=function(t){return void 0!==t&&(r.Array===t||o[i]===t)}},function(t,e,n){var r=n(91);t.exports=Array.isArray||function(t){return"Array"==r(t)}},function(t,e,n){var r=n(11),i=n(91),o=n(18)("match");t.exports=function(t){var e;return r(t)&&(void 0!==(e=t[o])?!!e:"RegExp"==i(t))}},function(t,e,n){"use strict";var r=n(127),i=n(1),o=n(47),s=n(51),a=n(41),c=n(107),u=n(331),l=n(130),h=n(63),p=n(18)("iterator"),f=!([].keys&&"next"in[].keys()),_="@@iterator",d="keys",y="values",m=function(){return this};t.exports=function(t,e,n,g,v,b,w){u(n,e,g);var x,I,C,k=function(t){if(!f&&t in O)return O[t];switch(t){case d:return function(){return new n(this,t)};case y:return function(){return new n(this,t)}}return function(){return new n(this,t)}},T=e+" Iterator",E=v==y,S=!1,O=t.prototype,R=O[p]||O[_]||v&&O[v],A=R||k(v),N=v?E?k("entries"):A:void 0,P="Array"==e?O.entries||R:R;if(P&&(C=h(P.call(new t)),C!==Object.prototype&&(l(C,T,!0),r||a(C,p)||s(C,p,m))),E&&R&&R.name!==y&&(S=!0,A=function(){return R.call(this)}),r&&!w||!f&&!S&&O[p]||s(O,p,A),c[e]=A,c[T]=m,v)if(x={values:E?A:k(y),keys:b?A:k(d),entries:N},w)for(I in x)I in O||o(O,I,x[I]);else i(i.P+i.F*(f||S),e,x);return x}},function(t,e,n){var r=n(18)("iterator"),i=!1;try{var o=[7][r]();o.return=function(){i=!0},Array.from(o,function(){throw 2})}catch(t){}t.exports=function(t,e){if(!e&&!i)return!1;var n=!1;try{var o=[7],s=o[r]();s.next=function(){return{done:n=!0}},o[r]=function(){return s},t(o)}catch(t){}return n}},function(t,e){var n=Math.expm1;t.exports=!n||n(10)>22025.465794806718||n(10)<22025.465794806718||n(-2e-17)!=-2e-17?function(t){return 0==(t=+t)?t:t>-1e-6&&t<1e-6?t+t*t/2:Math.exp(t)-1}:n},function(t,e){t.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:t<0?-1:1}},function(t,e,n){var r=n(11),i=n(6),o=function(t,e){if(i(t),!r(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};t.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(t,e,r){try{r=n(92)(Function.call,n(70).f(Object.prototype,"__proto__").set,2),r(t,[]),e=!(t instanceof Array)}catch(t){e=!0}return function(t,n){return o(t,n),e?t.__proto__=n:r(t,n),t}}({},!1):void 0),check:o}},function(t,e,n){var r=n(172)("keys"),i=n(96);t.exports=function(t){return r[t]||(r[t]=i(t))}},function(t,e,n){var r=n(243),i=n(68);t.exports=function(t,e,n){if(r(e))throw TypeError("String#"+n+" doesn't accept regex!");return String(i(t))}},function(t,e){t.exports="\t\n\v\f\r   ᠎              \u2028\u2029\ufeff"},function(t,e,n){"use strict";var r=n(14),i=n(29),o=n(127),s=n(174),a=n(51),c=n(128),u=n(10),l=n(125),h=n(83),p=n(37),f=n(94).f,_=n(24).f,d=n(234),y=n(130),m="ArrayBuffer",g="DataView",v="prototype",b="Wrong length!",w="Wrong index!",x=r[m],I=r[g],C=r.Math,k=r.RangeError,T=r.Infinity,E=x,S=C.abs,O=C.pow,R=C.floor,A=C.log,N=C.LN2,P="buffer",M="byteLength",D="byteOffset",V=i?"_b":P,j=i?"_l":M,L=i?"_o":D,F=function(t,e,n){var r,i,o,s=Array(n),a=8*n-e-1,c=(1<>1,l=23===e?O(2,-24)-O(2,-77):0,h=0,p=t<0||0===t&&1/t<0?1:0;for(t=S(t),t!=t||t===T?(i=t!=t?1:0,r=c):(r=R(A(t)/N),t*(o=O(2,-r))<1&&(r--,o*=2),t+=r+u>=1?l/o:l*O(2,1-u),t*o>=2&&(r++,o/=2),r+u>=c?(i=0,r=c):r+u>=1?(i=(t*o-1)*O(2,e),r+=u):(i=t*O(2,u-1)*O(2,e),r=0));e>=8;s[h++]=255&i,i/=256,e-=8);for(r=r<0;s[h++]=255&r,r/=256,a-=8);return s[--h]|=128*p,s},B=function(t,e,n){var r,i=8*n-e-1,o=(1<>1,a=i-7,c=n-1,u=t[c--],l=127&u;for(u>>=7;a>0;l=256*l+t[c],c--,a-=8);for(r=l&(1<<-a)-1,l>>=-a,a+=e;a>0;r=256*r+t[c],c--,a-=8);if(0===l)l=1-s;else{if(l===o)return r?NaN:u?-T:T;r+=O(2,e),l-=s}return(u?-1:1)*r*O(2,l-e)},U=function(t){return t[3]<<24|t[2]<<16|t[1]<<8|t[0]},z=function(t){return[255&t]},H=function(t){return[255&t,t>>8&255]},q=function(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]},W=function(t){return F(t,52,8)},Y=function(t){return F(t,23,4)},$=function(t,e,n){_(t[v],e,{get:function(){return this[n]}})},G=function(t,e,n,r){var i=+n,o=h(i);if(i!=o||o<0||o+e>t[j])throw k(w);var s=t[V]._b,a=o+t[L],c=s.slice(a,a+e);return r?c:c.reverse()},Z=function(t,e,n,r,i,o){var s=+n,a=h(s);if(s!=a||a<0||a+e>t[j])throw k(w);for(var c=t[V]._b,u=a+t[L],l=r(+i),p=0;ptt;)(K=Q[tt++])in x||a(x,K,E[K]);o||(X.constructor=x)}var et=new I(new x(2)),nt=I[v].setInt8;et.setInt8(0,2147483648),et.setInt8(1,2147483649),!et.getInt8(0)&&et.getInt8(1)||c(I[v],{setInt8:function(t,e){nt.call(this,t,e<<24>>24)},setUint8:function(t,e){nt.call(this,t,e<<24>>24)}},!0)}else x=function(t){var e=J(this,t);this._b=d.call(Array(e),0),this[j]=e},I=function(t,e,n){l(this,I,g),l(t,x,g);var r=t[j],i=h(e);if(i<0||i>r)throw k("Wrong offset!");if(n=void 0===n?r-i:p(n),i+n>r)throw k(b);this[V]=t,this[L]=i,this[j]=n},i&&($(x,M,"_l"),$(I,P,"_b"),$(I,M,"_l"),$(I,D,"_o")),c(I[v],{getInt8:function(t){return G(this,1,t)[0]<<24>>24},getUint8:function(t){return G(this,1,t)[0]},getInt16:function(t){var e=G(this,2,t,arguments[1]);return(e[1]<<8|e[0])<<16>>16},getUint16:function(t){var e=G(this,2,t,arguments[1]);return e[1]<<8|e[0]},getInt32:function(t){return U(G(this,4,t,arguments[1]))},getUint32:function(t){return U(G(this,4,t,arguments[1]))>>>0},getFloat32:function(t){return B(G(this,4,t,arguments[1]),23,4)},getFloat64:function(t){return B(G(this,8,t,arguments[1]),52,8)},setInt8:function(t,e){Z(this,1,t,z,e)},setUint8:function(t,e){Z(this,1,t,z,e)},setInt16:function(t,e){Z(this,2,t,H,e,arguments[2])},setUint16:function(t,e){Z(this,2,t,H,e,arguments[2])},setInt32:function(t,e){Z(this,4,t,q,e,arguments[2])},setUint32:function(t,e){Z(this,4,t,q,e,arguments[2])},setFloat32:function(t,e){Z(this,4,t,Y,e,arguments[2])},setFloat64:function(t,e){Z(this,8,t,W,e,arguments[2])}});y(x,m),y(I,g),a(I[v],s.VIEW,!0),e[m]=x,e[g]=I},function(t,e,n){var r=n(236),i=n(18)("iterator"),o=n(107);t.exports=n(17).getIteratorMethod=function(t){if(void 0!=t)return t[i]||t["@@iterator"]||o[r(t)]}},function(t,e,n){for(var r=n(175),i=n(47),o=n(14),s=n(51),a=n(107),c=n(18),u=c("iterator"),l=c("toStringTag"),h=a.Array,p=["NodeList","DOMTokenList","MediaList","StyleSheetList","CSSRuleList"],f=0;f<5;f++){var _,d=p[f],y=o[d],m=y&&y.prototype;if(m){m[u]||s(m,u,h),m[l]||s(m,l,d),a[d]=h;for(_ in r)m[_]||i(m,_,r[_],!0)}}},function(t,e){var n={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==n.call(t)}},function(t,e,n){"use strict";var r=n(110);t.exports=new r({explicit:[n(695),n(693),n(688)]})},function(t,e,n){"use strict";function r(t){this.afterTransform=function(e,n){return i(t,e,n)},this.needTransform=!1,this.transforming=!1,this.writecb=null,this.writechunk=null,this.writeencoding=null}function i(t,e,n){var r=t._transformState;r.transforming=!1;var i=r.writecb;if(!i)return t.emit("error",new Error("no writecb in Transform class"));r.writechunk=null,r.writecb=null,null!==n&&void 0!==n&&t.push(n),i(e);var o=t._readableState;o.reading=!1,(o.needReadable||o.length-1?setImmediate:I,k=n(16).Buffer;s.WritableState=o;var T=n(65);T.inherits=n(42);var E,S={deprecate:n(396)};!function(){try{E=n(113)}catch(t){}finally{E||(E=n(98).EventEmitter)}}();var k=n(16).Buffer;T.inherits(s,E);var O;o.prototype.getBuffer=function(){for(var t=this.bufferedRequest,e=[];t;)e.push(t),t=t.next;return e},function(){try{Object.defineProperty(o.prototype,"buffer",{get:S.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.")})}catch(t){}}();var O;s.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe. Not readable."))},s.prototype.write=function(t,e,n){var i=this._writableState,o=!1;return"function"==typeof e&&(n=e,e=null),k.isBuffer(t)?e="buffer":e||(e=i.defaultEncoding),"function"!=typeof n&&(n=r),i.ended?a(this,n):c(this,i,t,n)&&(i.pendingcb++,o=l(this,i,t,e,n)),o},s.prototype.cork=function(){var t=this._writableState;t.corked++},s.prototype.uncork=function(){var t=this._writableState;t.corked&&(t.corked--,t.writing||t.corked||t.finished||t.bufferProcessing||!t.bufferedRequest||m(this,t))},s.prototype.setDefaultEncoding=function(t){if("string"==typeof t&&(t=t.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((t+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+t);this._writableState.defaultEncoding=t},s.prototype._write=function(t,e,n){n(new Error("not implemented"))},s.prototype._writev=null,s.prototype.end=function(t,e,n){var r=this._writableState;"function"==typeof t?(n=t,t=null,e=null):"function"==typeof e&&(n=e,e=null),null!==t&&void 0!==t&&this.write(t,e),r.corked&&(r.corked=1,this.uncork()),r.ending||r.finished||w(this,r,n)}}).call(e,n(43))},function(t,e){"use strict";function n(t,e,n,r,i){this.src=t,this.env=r,this.options=n,this.parser=e,this.tokens=i,this.pos=0,this.posMax=this.src.length,this.level=0,this.pending="",this.pendingLevel=0,this.cache=[],this.isInLabel=!1,this.linkLevel=0,this.linkContent="",this.labelUnmatchedScopes=0}n.prototype.pushPending=function(){this.tokens.push({type:"text",content:this.pending,level:this.pendingLevel}),this.pending=""},n.prototype.push=function(t){this.pending&&this.pushPending(),this.tokens.push(t),this.pendingLevel=this.level},n.prototype.cacheSet=function(t,e){for(var n=this.cache.length;n<=t;n++)this.cache.push(0);this.cache[t]=e},n.prototype.cacheGet=function(t){return t1)return void(this.connection=null);var n=this.connection,r=t._connection;this.connection=null,!r||n&&r!==n||r.unsubscribe()},e}(s.Subscriber)},function(t,e,n){"use strict";var r=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},i=n(0),o=function(t){function e(e,n){t.call(this),this.value=e,this.scheduler=n,this._isScalar=!0,n&&(this._isScalar=!1)}return r(e,t),e.create=function(t,n){return new e(t,n)},e.dispatch=function(t){var e=t.done,n=t.value,r=t.subscriber;return e?void r.complete():(r.next(n),void(r.closed||(t.done=!0,this.schedule(t))))},e.prototype._subscribe=function(t){var n=this.value,r=this.scheduler;return r?r.schedule(e.dispatch,0,{done:!1,value:n,subscriber:t}):(t.next(n),void(t.closed||t.complete()))},e}(i.Observable);e.ScalarObservable=o},function(t,e,n){"use strict";function r(){for(var t=[],e=0;ethis.index},t.prototype.hasCompleted=function(){return this.array.length===this.index},t}(),y=function(t){function e(e,n,r,i){t.call(this,e),this.parent=n,this.observable=r,this.index=i,this.stillUnsubscribed=!0,this.buffer=[],this.isComplete=!1}return o(e,t),e.prototype[h.$$iterator]=function(){return this},e.prototype.next=function(){var t=this.buffer;return 0===t.length&&this.isComplete?{value:null,done:!0}:{value:t.shift(),done:!1}},e.prototype.hasValue=function(){return this.buffer.length>0},e.prototype.hasCompleted=function(){return 0===this.buffer.length&&this.isComplete},e.prototype.notifyComplete=function(){this.buffer.length>0?(this.isComplete=!0,this.parent.notifyInactive()):this.destination.complete()},e.prototype.notifyNext=function(t,e,n,r,i){this.buffer.push(e),this.parent.checkIterators()},e.prototype.subscribe=function(t,e){return l.subscribeToResult(this,this.observable,this,e)},e}(u.OuterSubscriber)},function(t,e){"use strict";var n=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},r=function(t){function e(){var e=t.call(this,"object unsubscribed");this.name=e.name="ObjectUnsubscribedError",this.stack=e.stack,this.message=e.message}return n(e,t),e}(Error);e.ObjectUnsubscribedError=r},function(t,e){"use strict";function n(t){return"function"==typeof t}e.isFunction=n},function(t,e,n){"use strict";function r(t){return!i.isArray(t)&&t-parseFloat(t)+1>=0}var i=n(66);e.isNumeric=r},function(t,e,n){"use strict";var r=n(2),i=n(272),o=n(115),s=n(274);n.d(e,"CommonModule",function(){return a});var a=function(){function t(){}return t.decorators=[{type:r.NgModule,args:[{declarations:[i.a,s.a],exports:[i.a,s.a],providers:[{provide:o.NgLocalization,useClass:o.NgLocaleLocalization}]}]}],t.ctorParameters=[],t}()},function(t,e,n){"use strict";var r=n(74),i=n(46),o=n(28),s=n(401),a=n(193),c=n(139),u=n(402);n.d(e,"a",function(){return l}),n.d(e,"b",function(){return r.NgClass}),n.d(e,"c",function(){return i.NgFor}),n.d(e,"d",function(){return o.NgIf}),n.d(e,"e",function(){return s.a}),n.d(e,"f",function(){return s.b}),n.d(e,"g",function(){return a.NgStyle}),n.d(e,"h",function(){return c.NgSwitch}),n.d(e,"i",function(){return c.NgSwitchCase}),n.d(e,"j",function(){return c.NgSwitchDefault}),n.d(e,"k",function(){return u.a});var l=[r.NgClass,i.NgFor,o.NgIf,u.a,a.NgStyle,c.NgSwitch,c.NgSwitchCase,c.NgSwitchDefault,s.a,s.b]},function(t,e,n){"use strict";function r(t){return function(e,n){var r=t(e,n);return 1==r.length?"0"+r:r}}function i(t){return function(e,n){return t(e,n).split(" ")[1]}}function o(t){return function(e,n){return t(e,n).split(" ")[0]}}function s(t,e,n){return new Intl.DateTimeFormat(e,n).format(t).replace(/[\u200e\u200f]/g,"")}function a(t){var e={hour:"2-digit",hour12:!1,timeZoneName:t};return function(t,n){var r=s(t,n,e);return r?r.substring(3):""}}function c(t,e){return t.hour12=e,t}function u(t,e){var n={};return n[t]=2===e?"2-digit":"numeric",n}function l(t,e){var n={};return e<4?n[t]=e>1?"short":"narrow":n[t]="long",n}function h(t){return(e=Object).assign.apply(e,[{}].concat(t));var e}function p(t){return function(e,n){return s(e,n,t)}}function f(t,e,n){var r=g[t];if(r)return r(e,n);var i=b.get(t);if(!i){i=[];var o=void 0;for(m.exec(t);t;)o=m.exec(t),o?(i=i.concat(o.slice(1)),t=i.pop()):(i.push(t),t=null);b.set(t,i)}return i.reduce(function(t,r){var i=v[r];return t+(i?i(e,n):_(r))},"")}function _(t){return"''"===t?"'":t.replace(/(^'|'$)/g,"").replace(/''/g,"'")}n.d(e,"b",function(){return d}),n.d(e,"c",function(){return y}),n.d(e,"a",function(){return w});var d;!function(t){t[t.Decimal=0]="Decimal",t[t.Percent=1]="Percent",t[t.Currency=2]="Currency"}(d||(d={}));var y=function(){function t(){}return t.format=function(t,e,n,r){var i=void 0===r?{}:r,o=i.minimumIntegerDigits,s=i.minimumFractionDigits,a=i.maximumFractionDigits,c=i.currency,u=i.currencyAsSymbol,l=void 0!==u&&u,h={minimumIntegerDigits:o,minimumFractionDigits:s,maximumFractionDigits:a,style:d[n].toLowerCase()};return n==d.Currency&&(h.currency=c,h.currencyDisplay=l?"symbol":"code"),new Intl.NumberFormat(e,h).format(t)},t}(),m=/((?:[^yMLdHhmsazZEwGjJ']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|L+|d+|H+|h+|J+|j+|m+|s+|a|z|Z|G+|w+))(.*)/,g={yMMMdjms:p(h([u("year",1),l("month",3),u("day",1),u("hour",1),u("minute",1),u("second",1)])),yMdjm:p(h([u("year",1),u("month",1),u("day",1),u("hour",1),u("minute",1)])),yMMMMEEEEd:p(h([u("year",1),l("month",4),l("weekday",4),u("day",1)])),yMMMMd:p(h([u("year",1),l("month",4),u("day",1)])),yMMMd:p(h([u("year",1),l("month",3),u("day",1)])),yMd:p(h([u("year",1),u("month",1),u("day",1)])),jms:p(h([u("hour",1),u("second",1),u("minute",1)])),jm:p(h([u("hour",1),u("minute",1)]))},v={yyyy:p(u("year",4)),yy:p(u("year",2)),y:p(u("year",1)),MMMM:p(l("month",4)),MMM:p(l("month",3)),MM:p(u("month",2)),M:p(u("month",1)),LLLL:p(l("month",4)),L:p(l("month",1)),dd:p(u("day",2)),d:p(u("day",1)),HH:r(o(p(c(u("hour",2),!1)))),H:o(p(c(u("hour",1),!1))),hh:r(o(p(c(u("hour",2),!0)))),h:o(p(c(u("hour",1),!0))),jj:p(u("hour",2)),j:p(u("hour",1)),mm:r(p(u("minute",2))),m:p(u("minute",1)),ss:r(p(u("second",2))),s:p(u("second",1)),sss:p(u("second",3)),EEEE:p(l("weekday",4)),EEE:p(l("weekday",3)),EE:p(l("weekday",2)),E:p(l("weekday",1)),a:i(p(c(u("hour",1),!0))),Z:a("short"),z:a("long"),ww:p({}),w:p({}),G:p(l("era",1)),GG:p(l("era",2)),GGG:p(l("era",3)),GGGG:p(l("era",4))},b=new Map,w=function(){function t(){}return t.format=function(t,e,n){return f(n,t,e)},t}()},function(t,e,n){"use strict";var r=n(408),i=n(409),o=n(410),s=n(411),a=n(142),c=n(412),u=n(413),l=n(414),h=n(415);n.d(e,"a",function(){return p}),n.d(e,"g",function(){return r.a}),n.d(e,"h",function(){return u.c}),n.d(e,"c",function(){return i.a}),n.d(e,"i",function(){return u.a}),n.d(e,"d",function(){return o.a}),n.d(e,"e",function(){return s.a}),n.d(e,"f",function(){return a.JsonPipe}),n.d(e,"b",function(){return c.a}),n.d(e,"j",function(){return u.b}),n.d(e,"k",function(){return l.a}),n.d(e,"l",function(){return h.a});var p=[r.a,h.a,c.a,a.JsonPipe,l.a,u.a,u.b,u.c,i.a,o.a,s.a]},function(t,e,n){"use strict";n.d(e,"a",function(){return r}),n.d(e,"b",function(){return i}),n.d(e,"c",function(){return o}),n.d(e,"d",function(){return s});var r="true",i="*",o="*",s="void"},function(t,e,n){"use strict";var r=n(7);n.d(e,"a",function(){return i});var i=function(){function t(t){var e=this;this._players=t,this._onDoneFns=[],this._onStartFns=[],this._finished=!1,this._started=!1,this._destroyed=!1,this.parentPlayer=null;var i=0,o=this._players.length;0==o?n.i(r.l)(function(){return e._onFinish()}):this._players.forEach(function(t){t.parentPlayer=e,t.onDone(function(){++i>=o&&e._onFinish()})})}return t.prototype._onFinish=function(){this._finished||(this._finished=!0,this._onDoneFns.forEach(function(t){return t()}),this._onDoneFns=[])},t.prototype.init=function(){this._players.forEach(function(t){return t.init()})},t.prototype.onStart=function(t){this._onStartFns.push(t)},t.prototype.onDone=function(t){this._onDoneFns.push(t)},t.prototype.hasStarted=function(){return this._started},t.prototype.play=function(){n.i(r.d)(this.parentPlayer)||this.init(),this.hasStarted()||(this._onStartFns.forEach(function(t){return t()}),this._onStartFns=[],this._started=!0),this._players.forEach(function(t){return t.play()})},t.prototype.pause=function(){this._players.forEach(function(t){return t.pause()})},t.prototype.restart=function(){this._players.forEach(function(t){return t.restart()})},t.prototype.finish=function(){this._onFinish(),this._players.forEach(function(t){return t.finish()})},t.prototype.destroy=function(){this._destroyed||(this._onFinish(),this._players.forEach(function(t){return t.destroy()}),this._destroyed=!0)},t.prototype.reset=function(){this._players.forEach(function(t){return t.reset()}),this._destroyed=!1,this._finished=!1,this._started=!1},t.prototype.setPosition=function(t){this._players.forEach(function(e){e.setPosition(t)})},t.prototype.getPosition=function(){var t=0;return this._players.forEach(function(e){var n=e.getPosition();t=Math.min(n,t)}),t},Object.defineProperty(t.prototype,"players",{get:function(){return this._players},enumerable:!0,configurable:!0}),t}()},function(t,e,n){"use strict";n.d(e,"AnimationKeyframe",function(){return r});var r=function(){function t(t,e){this.offset=t,this.styles=e}return t}()},function(t,e,n){"use strict";function r(t){s.push(t)}function i(){s.length&&Promise.resolve(null).then(o)}function o(){for(var t=0;t"+n.i(r.b)(this.currentValue)+"]"},t}()},function(t,e,n){"use strict";function r(t){return t.map(function(t){return t.nativeElement})}function i(t,e,n){t.childNodes.forEach(function(t){t instanceof p&&(e(t)&&n.push(t),i(t,e,n))})}function o(t,e,n){t instanceof p&&t.childNodes.forEach(function(t){e(t)&&n.push(t),t instanceof p&&o(t,e,n)})}function s(t){return f.get(t)}function a(t){f.set(t.nativeNode,t)}function c(t){f.delete(t.nativeNode)}n.d(e,"f",function(){return l}),n.d(e,"d",function(){return h}),n.d(e,"a",function(){return p}),e.g=r,e.c=s,e.b=a,e.e=c;var u=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},l=function(){function t(t,e){this.name=t,this.callback=e}return t}(),h=function(){function t(t,e,n){this._debugInfo=n,this.nativeNode=t,e&&e instanceof p?e.addChild(this):this.parent=null,this.listeners=[]}return Object.defineProperty(t.prototype,"injector",{get:function(){return this._debugInfo?this._debugInfo.injector:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"componentInstance",{get:function(){return this._debugInfo?this._debugInfo.component:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"context",{get:function(){return this._debugInfo?this._debugInfo.context:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"references",{get:function(){return this._debugInfo?this._debugInfo.references:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"providerTokens",{get:function(){return this._debugInfo?this._debugInfo.providerTokens:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"source",{get:function(){return this._debugInfo?this._debugInfo.source:null},enumerable:!0,configurable:!0}),t}(),p=function(t){function e(e,n,r){t.call(this,e,n,r),this.properties={},this.attributes={},this.classes={},this.styles={},this.childNodes=[],this.nativeElement=e}return u(e,t),e.prototype.addChild=function(t){t&&(this.childNodes.push(t),t.parent=this)},e.prototype.removeChild=function(t){var e=this.childNodes.indexOf(t);e!==-1&&(t.parent=null,this.childNodes.splice(e,1))},e.prototype.insertChildrenAfter=function(t,e){var n=this.childNodes.indexOf(t);if(n!==-1){var r=this.childNodes.slice(0,n+1),i=this.childNodes.slice(n+1);this.childNodes=r.concat(e,i);for(var o=0;o-1)return e.push(t[n]),e;e.push(t[n])}return e}function i(t){if(t.length>1){var e=r(t.slice().reverse()),i=e.map(function(t){return n.i(s.b)(t.token)});return" ("+i.join(" -> ")+")"}return""}var o=n(50),s=n(7);n.d(e,"f",function(){return c}),n.d(e,"h",function(){return u}),n.d(e,"e",function(){return l}),n.d(e,"g",function(){return h}),n.d(e,"b",function(){return p}),n.d(e,"c",function(){return f}),n.d(e,"d",function(){return _}),n.d(e,"a",function(){return d});var a=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},c=function(t){function e(e,n,r){t.call(this,"DI Error"),this.keys=[n],this.injectors=[e],this.constructResolvingMessage=r,this.message=this.constructResolvingMessage(this.keys)}return a(e,t),e.prototype.addKey=function(t,e){this.injectors.push(t),this.keys.push(e),this.message=this.constructResolvingMessage(this.keys)},e}(o.b),u=function(t){function e(e,r){t.call(this,e,r,function(t){var e=n.i(s.b)(t[0].token);return"No provider for "+e+"!"+i(t)})}return a(e,t),e}(c),l=function(t){function e(e,n){t.call(this,e,n,function(t){return"Cannot instantiate cyclic dependency!"+i(t)})}return a(e,t),e}(c),h=function(t){function e(e,n,r,i){t.call(this,"DI Error",n),this.keys=[i],this.injectors=[e]}return a(e,t),e.prototype.addKey=function(t,e){this.injectors.push(t),this.keys.push(e)},Object.defineProperty(e.prototype,"message",{get:function(){var t=n.i(s.b)(this.keys[0].token);return this.originalError.message+": Error during instantiation of "+t+"!"+i(this.keys)+"."},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"causeKey",{get:function(){return this.keys[0]},enumerable:!0,configurable:!0}),e}(o.c),p=function(t){function e(e){t.call(this,"Invalid provider - only instances of Provider and Type are allowed, got: "+e)}return a(e,t),e}(o.b),f=function(t){function e(n,r){t.call(this,e._genMessage(n,r))}return a(e,t),e._genMessage=function(t,e){for(var r=[],i=0,o=e.length;i=0;t--)this.remove(t)},t}()},function(t,e,n){"use strict";var r=n(278),i=n(147),o=n(50);n.d(e,"c",function(){return a}),n.d(e,"b",function(){return c}),n.d(e,"a",function(){return u});var s=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},a=function(){function t(){}return Object.defineProperty(t.prototype,"destroyed",{get:function(){return n.i(o.a)()},enumerable:!0,configurable:!0}),t}(),c=function(t){function e(){t.apply(this,arguments)}return s(e,t),Object.defineProperty(e.prototype,"context",{get:function(){return n.i(o.a)()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"rootNodes",{get:function(){return n.i(o.a)()},enumerable:!0,configurable:!0}),e}(a),u=function(){function t(t){this._view=t,this._view=t,this._originalMode=this._view.cdMode}return Object.defineProperty(t.prototype,"internalView",{get:function(){return this._view},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"rootNodes",{get:function(){return this._view.flatRootNodes},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"context",{get:function(){return this._view.context},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"destroyed",{get:function(){return this._view.destroyed},enumerable:!0,configurable:!0}),t.prototype.markForCheck=function(){this._view.markPathToRootAsCheckOnce()},t.prototype.detach=function(){this._view.cdMode=i.b.Detached},t.prototype.detectChanges=function(){this._view.detectChanges(!1),n.i(r.a)()},t.prototype.checkNoChanges=function(){this._view.detectChanges(!0)},t.prototype.reattach=function(){this._view.cdMode=this._originalMode,this.markForCheck()},t.prototype.onDestroy=function(t){this._view.disposables||(this._view.disposables=[]),this._view.disposables.push(t)},t.prototype.destroy=function(){this._view.detachAndDestroy()},t}()},function(t,e,n){"use strict";var r=n(428),i=n(429),o=n(296),s=n(430),a=n(15);n.d(e,"b",function(){return r.a}),n.d(e,"c",function(){return r.b}),n.d(e,"d",function(){return r.c}),n.d(e,"e",function(){return r.d}),n.d(e,"f",function(){return r.e}),n.d(e,"g",function(){return r.f}),n.d(e,"h",function(){return r.g}),n.d(e,"i",function(){return i.a}),n.d(e,"j",function(){return i.b}),n.d(e,"k",function(){return i.c}),n.d(e,"l",function(){return i.d}),n.d(e,"m",function(){return i.e}),n.d(e,"n",function(){return i.f}),n.d(e,"o",function(){return i.g}),n.d(e,"p",function(){return o.c}),n.d(e,"q",function(){return o.d}),n.d(e,"r",function(){return o.e}),n.d(e,"s",function(){return o.f}),n.d(e,"t",function(){return o.g}),n.d(e,"u",function(){return o.h}),n.d(e,"v",function(){return o.i}),n.d(e,"w",function(){return o.j}),n.d(e,"x",function(){return s.b}),n.d(e,"y",function(){return s.c}),n.d(e,"a",function(){return s.a}),n.d(e,"z",function(){return a.ViewEncapsulation})},function(t,e,n){"use strict";n.d(e,"a",function(){return r}),n.d(e,"b",function(){return i}),n.d(e,"h",function(){return o}),n.d(e,"j",function(){return s}),n.d(e,"g",function(){return a}),n.d(e,"c",function(){return c}),n.d(e,"d",function(){return u}),n.d(e,"i",function(){return l}),n.d(e,"f",function(){return h}),n.d(e,"e",function(){return p});var r;!function(t){t[t.OnInit=0]="OnInit",t[t.OnDestroy=1]="OnDestroy",t[t.DoCheck=2]="DoCheck",t[t.OnChanges=3]="OnChanges",t[t.AfterContentInit=4]="AfterContentInit",t[t.AfterContentChecked=5]="AfterContentChecked",t[t.AfterViewInit=6]="AfterViewInit",t[t.AfterViewChecked=7]="AfterViewChecked"}(r||(r={}));var i=[r.OnInit,r.OnDestroy,r.DoCheck,r.OnChanges,r.AfterContentInit,r.AfterContentChecked,r.AfterViewInit,r.AfterViewChecked],o=function(){function t(){}return t}(),s=function(){function t(){}return t}(),a=function(){function t(){}return t}(),c=function(){function t(){}return t}(),u=function(){function t(){}return t}(),l=function(){function t(){}return t}(),h=function(){function t(){}return t}(),p=function(){function t(){}return t}()},function(t,e,n){"use strict";function r(t){return t?t.map(function(t){var e=t.type,n=e.annotationCls,r=t.args?t.args:[];return new(n.bind.apply(n,[void 0].concat(r)))}):[]}var i=n(7),o=n(207);n.d(e,"a",function(){return s});var s=function(){function t(t){this._reflect=t||i.a.Reflect}return t.prototype.isReflectionEnabled=function(){return!0},t.prototype.factory=function(t){return function(){for(var e=[],n=0;n0},e.prototype.tagName=function(t){return t.tagName},e.prototype.attributeMap=function(t){for(var e=new Map,n=t.attributes,r=0;r0&&(f=r(e,{}),f.offset=0,p.push(f)),a.forEach(function(t){var e=r(t.styles,f);e.offset=t.offset,p.push(e)}),1==p.length){var _=p[0];_.offset=null,p=[_,_]}var d={duration:c,delay:u,fill:"both"};return l&&(d.easing=l),h=h.filter(i),new s.a(t,p,d,h)},t}()},function(t,e,n){"use strict";var r=n(2);n.d(e,"b",function(){return i}),n.d(e,"a",function(){return o});var i=(r.__core_private__.RenderDebugInfo,r.__core_private__.ReflectionCapabilities,r.__core_private__.DebugDomRootRenderer),o=(r.__core_private__.reflector,r.__core_private__.NoOpAnimationPlayer);r.__core_private__.AnimationPlayer,r.__core_private__.AnimationSequencePlayer,r.__core_private__.AnimationGroupPlayer,r.__core_private__.AnimationKeyframe,r.__core_private__.AnimationStyles,r.__core_private__.prepareFinalAnimationStyles,r.__core_private__.balanceAnimationKeyframes,r.__core_private__.clearStyles,r.__core_private__.collectAndResolveStyles},function(t,e,n){"use strict";var r=n(220),i=n(9),o=n(19),s=n(8),a=n(15),c=n(12),u=n(13),l=n(20),h=n(35),p=n(22),f=n(457),_=n(23),d=n(36),y=n(79),m=n(25),g=n(54),v=n(28),b=n(222),w=n(461),x=n(224),I=n(467),C=n(106),k=n(480),T=n(223),E=n(465),S=n(225),O=n(469),R=n(34),A=n(59),N=n(90),P=n(67),M=n(104),D=n(74),V=n(231),j=n(39),L=n(56),F=n(46),B=function(){function t(t,e,n){this._changed=!1,this.context=new r.Method(t,e,n),this._expr_0=i.UNINITIALIZED,this._expr_1=i.UNINITIALIZED,this._expr_2=i.UNINITIALIZED}return t.prototype.ngOnDetach=function(t,e,n){},t.prototype.ngOnDestroy=function(){},t.prototype.check_pointer=function(t,e,n){(n||s.checkBinding(e,this._expr_0,t))&&(this._changed=!0,this.context.pointer=t,this._expr_0=t)},t.prototype.check_tag=function(t,e,n){(n||s.checkBinding(e,this._expr_1,t))&&(this._changed=!0,this.context.tag=t,this._expr_1=t)},t.prototype.check_posInfo=function(t,e,n){(n||s.checkBinding(e,this._expr_2,t))&&(this._changed=!0,this.context.posInfo=t,this._expr_2=t)},t.prototype.ngDoCheck=function(t,e,n){var r=this._changed;return this._changed=!1,n||0===t.numberOfChecks&&this.context.ngOnInit(),r},t.prototype.checkHost=function(t,e,n,r){},t.prototype.handleEvent=function(t,e){var n=!0;return n},t.prototype.subscribe=function(t,e){this._eventHandler=e},t}();e.Wrapper_Method=B;var U=s.createRenderComponentType("",0,a.ViewEncapsulation.None,[],{}),z=function(t){function e(n,r,o,s){t.call(this,e,U,c.ViewType.HOST,n,r,o,s,i.ChangeDetectorStatus.CheckAlways)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.selectOrCreateRenderHostElement(this.renderer,"method",s.EMPTY_INLINE_ARRAY,t,null),this.compView_0=new W(this.viewUtils,this,0,this._el_0),this._Method_0_3=new B(this.injectorGet(l.SpecManager,this.parentIndex),this.injectorGet(h.OptionsService,this.parentIndex),new p.ElementRef(this._el_0)),this.compView_0.create(this._Method_0_3.context),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0],null),new u.ComponentRef_(0,this,this._el_0,this._Method_0_3.context)},e.prototype.injectorGetInternal=function(t,e,n){return t===r.Method&&0===e?this._Method_0_3.context:n},e.prototype.detectChangesInternal=function(t){this._Method_0_3.ngDoCheck(this,this._el_0,t)&&this.compView_0.markAsCheckOnce(),this.compView_0.detectChanges(t)},e.prototype.destroyInternal=function(){this.compView_0.destroy()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView);e.MethodNgFactory=new u.ComponentFactory("method",z,r.Method);var H=[f.styles],q=s.createRenderComponentType("",0,a.ViewEncapsulation.Emulated,H,{}),W=function(t){function e(n,r,o,s){t.call(this,e,q,c.ViewType.COMPONENT,n,r,o,s,i.ChangeDetectorStatus.CheckOnce)}return __extends(e,t),e.prototype.createInternal=function(t){var e=this.renderer.createViewRoot(this.parentElement);return this._anchor_0=this.renderer.createTemplateAnchor(e,null),this._vc_0=new _.ViewContainer(0,null,this,this._anchor_0),this._TemplateRef_0_5=new m.TemplateRef_(this,0,this._anchor_0),this._NgIf_0_6=new d.Wrapper_NgIf(this._vc_0.vcRef,this._TemplateRef_0_5),this._text_1=this.renderer.createText(e,"\n",null),this._pipe_marked_0=new y.MarkedPipe(this.parentView.injectorGet(g.DomSanitizer,this.parentIndex)),this.init(null,this.renderer.directRenderer?null:[this._anchor_0,this._text_1],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===m.TemplateRef&&0===e?this._TemplateRef_0_5:t===v.NgIf&&0===e?this._NgIf_0_6.context:n},e.prototype.detectChangesInternal=function(t){var e=this.context.method;this._NgIf_0_6.check_ngIf(e,t,!1),this._NgIf_0_6.ngDoCheck(this,this._anchor_0,t),this._vc_0.detectChangesInNestedViews(t)},e.prototype.destroyInternal=function(){this._vc_0.destroyNestedViews()},e.prototype.createEmbeddedViewInternal=function(t){return 0==t?new Y(this.viewUtils,this,0,this._anchor_0,this._vc_0):null},e}(o.AppView);e.View_Method0=W;var Y=function(t){function e(n,r,o,s,a){t.call(this,e,q,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a),this._expr_68=i.UNINITIALIZED,this._expr_69=i.UNINITIALIZED,this._expr_70=i.UNINITIALIZED,this._expr_71=i.UNINITIALIZED,this._expr_72=i.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){this._el_0=s.createRenderElement(this.renderer,null,"div",new s.InlineArray2(2,"class","method"),null),this._text_1=this.renderer.createText(this._el_0,"\n ",null),this._el_2=s.createRenderElement(this.renderer,this._el_0,"div",new s.InlineArray2(2,"class","method-content"),null),this._text_3=this.renderer.createText(this._el_2,"\n ",null),this._el_4=s.createRenderElement(this.renderer,this._el_2,"h2",new s.InlineArray2(2,"class","method-header sharable-header"),null),this._text_5=this.renderer.createText(this._el_4,"\n ",null),this._el_6=s.createRenderElement(this.renderer,this._el_4,"a",new s.InlineArray2(2,"class","share-link"),null),this._text_7=this.renderer.createText(this._el_4,"",null),this._text_8=this.renderer.createText(this._el_2,"\n ",null), +this._anchor_9=this.renderer.createTemplateAnchor(this._el_2,null),this._vc_9=new _.ViewContainer(9,2,this,this._anchor_9),this._TemplateRef_9_5=new m.TemplateRef_(this,9,this._anchor_9),this._NgIf_9_6=new d.Wrapper_NgIf(this._vc_9.vcRef,this._TemplateRef_9_5),this._text_10=this.renderer.createText(this._el_2,"\n ",null),this._anchor_11=this.renderer.createTemplateAnchor(this._el_2,null),this._vc_11=new _.ViewContainer(11,2,this,this._anchor_11),this._TemplateRef_11_5=new m.TemplateRef_(this,11,this._anchor_11),this._NgIf_11_6=new d.Wrapper_NgIf(this._vc_11.vcRef,this._TemplateRef_11_5),this._text_12=this.renderer.createText(this._el_2,"\n ",null),this._el_13=s.createRenderElement(this.renderer,this._el_2,"params-list",s.EMPTY_INLINE_ARRAY,null),this.compView_13=new w.View_ParamsList0(this.viewUtils,this,13,this._el_13),this._ParamsList_13_3=new w.Wrapper_ParamsList(this.parentView.injectorGet(l.SpecManager,this.parentIndex)),this._text_14=this.renderer.createText(null," ",null),this.compView_13.create(this._ParamsList_13_3.context),this._text_15=this.renderer.createText(this._el_2,"\n ",null),this._el_16=s.createRenderElement(this.renderer,this._el_2,"responses-list",s.EMPTY_INLINE_ARRAY,null),this.compView_16=new I.View_ResponsesList0(this.viewUtils,this,16,this._el_16),this._ResponsesList_16_3=new I.Wrapper_ResponsesList(this.parentView.injectorGet(l.SpecManager,this.parentIndex),this.parentView.injectorGet(h.OptionsService,this.parentIndex)),this._text_17=this.renderer.createText(null," ",null),this.compView_16.create(this._ResponsesList_16_3.context),this._text_18=this.renderer.createText(this._el_2,"\n ",null),this._text_19=this.renderer.createText(this._el_0,"\n ",null),this._el_20=s.createRenderElement(this.renderer,this._el_0,"div",new s.InlineArray2(2,"class","method-samples"),null),this._text_21=this.renderer.createText(this._el_20,"\n ",null),this._el_22=s.createRenderElement(this.renderer,this._el_20,"h4",new s.InlineArray2(2,"class","method-params-subheader"),null),this._text_23=this.renderer.createText(this._el_22,"Definition",null),this._text_24=this.renderer.createText(this._el_20,"\n\n ",null),this._el_25=s.createRenderElement(this.renderer,this._el_20,"div",new s.InlineArray2(2,"class","method-endpoint"),null),this._text_26=this.renderer.createText(this._el_25,"\n ",null),this._el_27=s.createRenderElement(this.renderer,this._el_25,"h5",new s.InlineArray2(2,"class","http-method"),null),this._NgClass_27_3=new C.Wrapper_NgClass(this.parentView.injectorGet(R.IterableDiffers,this.parentIndex),this.parentView.injectorGet(A.KeyValueDiffers,this.parentIndex),new p.ElementRef(this._el_27),this.renderer),this._text_28=this.renderer.createText(this._el_27,"",null),this._text_29=this.renderer.createText(this._el_25,"\n ",null),this._el_30=s.createRenderElement(this.renderer,this._el_25,"span",new s.InlineArray2(2,"select-on-click",""),null),this._SelectOnClick_30_3=new k.Wrapper_SelectOnClick(new p.ElementRef(this._el_30)),this._el_31=s.createRenderElement(this.renderer,this._el_30,"span",new s.InlineArray2(2,"class","method-api-url"),null),this._text_32=this.renderer.createText(this._el_31,"",null),this._el_33=s.createRenderElement(this.renderer,this._el_30,"span",new s.InlineArray2(2,"class","method-api-url-path"),null),this._text_34=this.renderer.createText(this._el_33,"",null),this._text_35=this.renderer.createText(this._el_25,"\n ",null),this._text_36=this.renderer.createText(this._el_20,"\n\n ",null),this._el_37=s.createRenderElement(this.renderer,this._el_20,"div",s.EMPTY_INLINE_ARRAY,null),this._text_38=this.renderer.createText(this._el_37,"\n ",null),this._el_39=s.createRenderElement(this.renderer,this._el_37,"request-samples",s.EMPTY_INLINE_ARRAY,null),this.compView_39=new E.View_RequestSamples0(this.viewUtils,this,39,this._el_39),this._RequestSamples_39_3=new E.Wrapper_RequestSamples(this.parentView.injectorGet(l.SpecManager,this.parentIndex),this.parentView.injectorGet(N.AppStateService,this.parentIndex),this.parentView.injectorGet(P.ScrollService,this.parentIndex),new p.ElementRef(this._el_39),this.parentView.injectorGet(M.NgZone,this.parentIndex)),this._text_40=this.renderer.createText(null,"\n ",null),this.compView_39.create(this._RequestSamples_39_3.context),this._text_41=this.renderer.createText(this._el_37,"\n ",null),this._text_42=this.renderer.createText(this._el_20,"\n ",null),this._el_43=s.createRenderElement(this.renderer,this._el_20,"div",s.EMPTY_INLINE_ARRAY,null),this._text_44=this.renderer.createText(this._el_43,"\n ",null),this._el_45=s.createRenderElement(this.renderer,this._el_43,"br",s.EMPTY_INLINE_ARRAY,null),this._text_46=this.renderer.createText(this._el_43,"\n ",null),this._el_47=s.createRenderElement(this.renderer,this._el_43,"responses-samples",s.EMPTY_INLINE_ARRAY,null),this.compView_47=new O.View_ResponsesSamples0(this.viewUtils,this,47,this._el_47),this._ResponsesSamples_47_3=new O.Wrapper_ResponsesSamples(this.parentView.injectorGet(l.SpecManager,this.parentIndex)),this._text_48=this.renderer.createText(null," ",null),this.compView_47.create(this._ResponsesSamples_47_3.context),this._text_49=this.renderer.createText(this._el_43,"\n ",null),this._text_50=this.renderer.createText(this._el_20,"\n ",null),this._text_51=this.renderer.createText(this._el_0,"\n",null);var e=s.subscribeToRenderElement(this,this._el_30,new s.InlineArray2(2,"click",null),this.eventHandler(this.handleEvent_30));return this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._el_2,this._text_3,this._el_4,this._text_5,this._el_6,this._text_7,this._text_8,this._anchor_9,this._text_10,this._anchor_11,this._text_12,this._el_13,this._text_14,this._text_15,this._el_16,this._text_17,this._text_18,this._text_19,this._el_20,this._text_21,this._el_22,this._text_23,this._text_24,this._el_25,this._text_26,this._el_27,this._text_28,this._text_29,this._el_30,this._el_31,this._text_32,this._el_33,this._text_34,this._text_35,this._text_36,this._el_37,this._text_38,this._el_39,this._text_40,this._text_41,this._text_42,this._el_43,this._text_44,this._el_45,this._text_46,this._el_47,this._text_48,this._text_49,this._text_50,this._text_51],[e]),null},e.prototype.injectorGetInternal=function(t,e,n){return t===m.TemplateRef&&9===e?this._TemplateRef_9_5:t===v.NgIf&&9===e?this._NgIf_9_6.context:t===m.TemplateRef&&11===e?this._TemplateRef_11_5:t===v.NgIf&&11===e?this._NgIf_11_6.context:t===b.ParamsList&&13<=e&&e<=14?this._ParamsList_13_3.context:t===x.ResponsesList&&16<=e&&e<=17?this._ResponsesList_16_3.context:t===D.NgClass&&27<=e&&e<=28?this._NgClass_27_3.context:t===V.SelectOnClick&&30<=e&&e<=34?this._SelectOnClick_30_3.context:t===T.RequestSamples&&39<=e&&e<=40?this._RequestSamples_39_3.context:t===S.ResponsesSamples&&47<=e&&e<=48?this._ResponsesSamples_47_3.context:n},e.prototype.detectChangesInternal=function(t){var e=this.parentView.context.method.info.tags.length;this._NgIf_9_6.check_ngIf(e,t,!1),this._NgIf_9_6.ngDoCheck(this,this._anchor_9,t);var n=this.parentView.context.method.info.description;this._NgIf_11_6.check_ngIf(n,t,!1),this._NgIf_11_6.ngDoCheck(this,this._anchor_11,t);var r=s.inlineInterpolate(1,"",this.parentView.context.pointer,"/parameters");this._ParamsList_13_3.check_pointer(r,t,!1),this._ParamsList_13_3.ngDoCheck(this,this._el_13,t)&&this.compView_13.markAsCheckOnce();var i=s.inlineInterpolate(1,"",this.parentView.context.pointer,"/responses");this._ResponsesList_16_3.check_pointer(i,t,!1),this._ResponsesList_16_3.ngDoCheck(this,this._el_16,t)&&this.compView_16.markAsCheckOnce();var o="http-method";this._NgClass_27_3.check_klass(o,t,!1);var a=this.parentView.context.method.httpMethod;this._NgClass_27_3.check_ngClass(a,t,!1),this._NgClass_27_3.ngDoCheck(this,this._el_27,t),this._SelectOnClick_30_3.ngDoCheck(this,this._el_30,t);var c=this.parentView.context.pointer;this._RequestSamples_39_3.check_pointer(c,t,!1);var u=null==this.parentView.context.method.bodyParam?null:this.parentView.context.method.bodyParam._pointer;this._RequestSamples_39_3.check_schemaPointer(u,t,!1),this._RequestSamples_39_3.ngDoCheck(this,this._el_39,t)&&this.compView_39.markAsCheckOnce();var l=s.inlineInterpolate(1,"",this.parentView.context.pointer,"/responses");this._ResponsesSamples_47_3.check_pointer(l,t,!1),this._ResponsesSamples_47_3.ngDoCheck(this,this._el_47,t)&&this.compView_47.markAsCheckOnce(),this._vc_9.detectChangesInNestedViews(t),this._vc_11.detectChangesInNestedViews(t);var h=s.inlineInterpolate(1,"#",this.parentView.context.method.anchor,"");s.checkBinding(t,this._expr_68,h)&&(this.renderer.setElementProperty(this._el_6,"href",this.viewUtils.sanitizer.sanitize(j.SecurityContext.URL,h)),this._expr_68=h);var p=s.inlineInterpolate(1,"",this.parentView.context.method.summary,"\n ");s.checkBinding(t,this._expr_69,p)&&(this.renderer.setText(this._text_7,p),this._expr_69=p);var f=s.inlineInterpolate(1,"",this.parentView.context.method.httpMethod,"");s.checkBinding(t,this._expr_70,f)&&(this.renderer.setText(this._text_28,f),this._expr_70=f);var _=s.inlineInterpolate(1,"",this.parentView.context.method.apiUrl,"");s.checkBinding(t,this._expr_71,_)&&(this.renderer.setText(this._text_32,_),this._expr_71=_);var d=s.inlineInterpolate(1,"",this.parentView.context.method.path,"");s.checkBinding(t,this._expr_72,d)&&(this.renderer.setText(this._text_34,d),this._expr_72=d),this._RequestSamples_39_3.checkHost(this,this.compView_39,this._el_39,t),this.compView_13.detectChanges(t),this.compView_16.detectChanges(t),this.compView_39.detectChanges(t),this.compView_47.detectChanges(t)},e.prototype.destroyInternal=function(){this._vc_9.destroyNestedViews(),this._vc_11.destroyNestedViews(),this.compView_13.destroy(),this.compView_16.destroy(),this.compView_39.destroy(),this.compView_47.destroy()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e.prototype.createEmbeddedViewInternal=function(t){return 9==t?new $(this.viewUtils,this,9,this._anchor_9,this._vc_9):11==t?new Z(this.viewUtils,this,11,this._anchor_11,this._vc_11):null},e.prototype.handleEvent_30=function(t,e){this.markPathToRootAsCheckOnce();var n=!0;return n=this._SelectOnClick_30_3.handleEvent(t,e)&&n},e}(o.AppView),$=function(t){function e(n,r,o,s,a){t.call(this,e,q,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"div",new s.InlineArray2(2,"class","method-tags"),null),this._text_1=this.renderer.createText(this._el_0,"\n ",null),this._anchor_2=this.renderer.createTemplateAnchor(this._el_0,null),this._vc_2=new _.ViewContainer(2,0,this,this._anchor_2),this._TemplateRef_2_5=new m.TemplateRef_(this,2,this._anchor_2),this._NgFor_2_6=new L.Wrapper_NgFor(this._vc_2.vcRef,this._TemplateRef_2_5,this.parentView.parentView.injectorGet(R.IterableDiffers,this.parentView.parentIndex),this.parentView.parentView.ref),this._text_3=this.renderer.createText(this._el_0,"\n ",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._anchor_2,this._text_3],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===m.TemplateRef&&2===e?this._TemplateRef_2_5:t===F.NgFor&&2===e?this._NgFor_2_6.context:n},e.prototype.detectChangesInternal=function(t){var e=this.parentView.parentView.context.method.info.tags;this._NgFor_2_6.check_ngForOf(e,t,!1),this._NgFor_2_6.ngDoCheck(this,this._anchor_2,t),this._vc_2.detectChangesInNestedViews(t)},e.prototype.destroyInternal=function(){this._vc_2.destroyNestedViews()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e.prototype.createEmbeddedViewInternal=function(t){return 2==t?new G(this.viewUtils,this,2,this._anchor_2,this._vc_2):null},e}(o.AppView),G=function(t){function e(n,r,o,s,a){t.call(this,e,q,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a),this._expr_2=i.UNINITIALIZED,this._expr_3=i.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"a",s.EMPTY_INLINE_ARRAY,null),this._text_1=this.renderer.createText(this._el_0,"",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1],null),null},e.prototype.detectChangesInternal=function(t){var e=s.inlineInterpolate(1,"#tag/",this.context.$implicit,"");s.checkBinding(t,this._expr_2,e)&&(this.renderer.setElementAttribute(this._el_0,"href",null==this.viewUtils.sanitizer.sanitize(j.SecurityContext.URL,e)?null:this.viewUtils.sanitizer.sanitize(j.SecurityContext.URL,e).toString()),this._expr_2=e);var n=s.inlineInterpolate(1," ",this.context.$implicit," ");s.checkBinding(t,this._expr_3,n)&&(this.renderer.setText(this._text_1,n),this._expr_3=n)},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView),Z=function(t){function e(n,r,o,s,a){t.call(this,e,q,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a),this._expr_2=i.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"p",new s.InlineArray2(2,"class","method-description"),null),this._text_1=this.renderer.createText(this._el_0,"\n ",null),this._pipe_marked_0_0=s.pureProxy1(this.parentView.parentView._pipe_marked_0.transform.bind(this.parentView.parentView._pipe_marked_0)),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1],null),null},e.prototype.detectChangesInternal=function(t){var e=new i.ValueUnwrapper;e.reset();var n=e.unwrap(s.castByValue(this._pipe_marked_0_0,this.parentView.parentView._pipe_marked_0.transform)(this.parentView.parentView.context.method.info.description));(e.hasWrappedValue||s.checkBinding(t,this._expr_2,n))&&(this.renderer.setElementProperty(this._el_0,"innerHTML",this.viewUtils.sanitizer.sanitize(j.SecurityContext.HTML,n)),this._expr_2=n)},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView)},function(t,e,n){"use strict";var r=n(2),i=n(105),o=n(40),s=n(1060),a=n(20),c=n(55),u=n(76),l=function(t){function e(n,r,o,a,u,l,h){t.call(this,n),this.changeDetector=a,this.appState=u,this.lazyTasksService=l,this.hash=h,this.specLoading=!1,this.specLoadingRemove=!1,c.SchemaHelper.setSpecManager(n),r.options=e._preOptions||{},this.element=o.nativeElement,r.parseOptions(this.element);var p=s(this.element);p===i.BrowserDomAdapter.defaultDoc().body&&(p=window),r.options.$scrollParent=p,this.options=r.options,this.lazyTasksService.allSync=!this.options.lazyRendering}return __extends(e,t),e.prototype.hideLoadingAnimation=function(){var t=this;requestAnimationFrame(function(){t.specLoadingRemove=!0,setTimeout(function(){t.specLoadingRemove=!1,t.specLoading=!1},400)})},e.prototype.showLoadingAnimation=function(){this.specLoading=!0,this.specLoadingRemove=!1},e.prototype.load=function(){var t=this;this.specMgr.load(this.options.specUrl).catch(function(t){throw t}),this.appState.loading.subscribe(function(e){e?t.showLoadingAnimation():t.hideLoadingAnimation()}),this.specMgr.spec.subscribe(function(e){e?(t.changeDetector.markForCheck(),t.changeDetector.detectChanges(),t.specLoaded=!0,setTimeout(function(){t.hash.start()})):t.appState.startLoading()})},e.prototype.ngOnInit=function(){var t=this;this.lazyTasksService.loadProgress.subscribe(function(e){return t.loadingProgress=e}),this.appState.error.subscribe(function(e){e&&(t.appState.stopLoading(),100!==t.loadingProgress&&(t.error=e,t.changeDetector.markForCheck()))}),this.specUrl&&(this.options.specUrl=this.specUrl),this.load()},__decorate([r.Input(),__metadata("design:type",String)],e.prototype,"specUrl",void 0),__decorate([r.HostBinding("class.loading"),__metadata("design:type",Boolean)],e.prototype,"specLoading",void 0),__decorate([r.HostBinding("class.loading-remove"),__metadata("design:type",Boolean)],e.prototype,"specLoadingRemove",void 0),e=__decorate([r.Component({selector:"redoc",templateUrl:"./redoc.html",styleUrls:["./redoc.css"]}),__metadata("design:paramtypes",["function"==typeof(n="undefined"!=typeof a.SpecManager&&a.SpecManager)&&n||Object,"function"==typeof(o="undefined"!=typeof c.OptionsService&&c.OptionsService)&&o||Object,"function"==typeof(l="undefined"!=typeof r.ElementRef&&r.ElementRef)&&l||Object,"function"==typeof(h="undefined"!=typeof r.ChangeDetectorRef&&r.ChangeDetectorRef)&&h||Object,"function"==typeof(p="undefined"!=typeof c.AppStateService&&c.AppStateService)&&p||Object,"function"==typeof(f="undefined"!=typeof u.LazyTasksService&&u.LazyTasksService)&&f||Object,"function"==typeof(_="undefined"!=typeof c.Hash&&c.Hash)&&_||Object])],e);var n,o,l,h,p,f,_}(o.BaseComponent);e.Redoc=l},function(t,e,n){"use strict";var r=n(158),i=n(9),o=n(19),s=n(8),a=n(15),c=n(12),u=n(13),l=n(20),h=n(22),p=n(470),f=n(23),_=n(36),d=n(310),y=n(315),m=n(25),g=n(54),v=n(28),b=n(164),w=n(39),x=function(){function t(t,e){this._changed=!1,this.context=new r.SchemaSample(t,e),this._expr_0=i.UNINITIALIZED,this._expr_1=i.UNINITIALIZED}return t.prototype.ngOnDetach=function(t,e,n){},t.prototype.ngOnDestroy=function(){},t.prototype.check_pointer=function(t,e,n){(n||s.checkBinding(e,this._expr_0,t))&&(this._changed=!0,this.context.pointer=t,this._expr_0=t)},t.prototype.check_skipReadOnly=function(t,e,n){(n||s.checkBinding(e,this._expr_1,t))&&(this._changed=!0,this.context.skipReadOnly=t,this._expr_1=t)},t.prototype.ngDoCheck=function(t,e,n){var r=this._changed;return this._changed=!1,n||0===t.numberOfChecks&&this.context.ngOnInit(),r},t.prototype.checkHost=function(t,e,n,r){},t.prototype.handleEvent=function(t,e){var n=!0;return n},t.prototype.subscribe=function(t,e){this._eventHandler=e},t}();e.Wrapper_SchemaSample=x;var I=s.createRenderComponentType("",0,a.ViewEncapsulation.None,[],{}),C=function(t){function e(n,r,o,s){t.call(this,e,I,c.ViewType.HOST,n,r,o,s,i.ChangeDetectorStatus.CheckAlways)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.selectOrCreateRenderHostElement(this.renderer,"schema-sample",s.EMPTY_INLINE_ARRAY,t,null),this.compView_0=new E(this.viewUtils,this,0,this._el_0),this._SchemaSample_0_3=new x(this.injectorGet(l.SpecManager,this.parentIndex),new h.ElementRef(this._el_0)),this.compView_0.create(this._SchemaSample_0_3.context),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0],null),new u.ComponentRef_(0,this,this._el_0,this._SchemaSample_0_3.context)},e.prototype.injectorGetInternal=function(t,e,n){return t===r.SchemaSample&&0===e?this._SchemaSample_0_3.context:n},e.prototype.detectChangesInternal=function(t){this._SchemaSample_0_3.ngDoCheck(this,this._el_0,t)&&this.compView_0.markAsCheckOnce(),this.compView_0.detectChanges(t)},e.prototype.destroyInternal=function(){this.compView_0.destroy()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView);e.SchemaSampleNgFactory=new u.ComponentFactory("schema-sample",C,r.SchemaSample);var k=[p.styles],T=s.createRenderComponentType("",0,a.ViewEncapsulation.Emulated,k,{}),E=function(t){function e(n,r,o,s){t.call(this,e,T,c.ViewType.COMPONENT,n,r,o,s,i.ChangeDetectorStatus.CheckOnce),this._expr_37=i.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){var e=this.renderer.createViewRoot(this.parentElement);this._el_0=s.createRenderElement(this.renderer,e,"div",new s.InlineArray2(2,"class","snippet"),null),this._text_1=this.renderer.createText(this._el_0,"\n ",null),this._text_2=this.renderer.createText(this._el_0,"\n ",null),this._anchor_3=this.renderer.createTemplateAnchor(this._el_0,null),this._vc_3=new f.ViewContainer(3,0,this,this._anchor_3),this._TemplateRef_3_5=new m.TemplateRef_(this,3,this._anchor_3),this._NgIf_3_6=new _.Wrapper_NgIf(this._vc_3.vcRef,this._TemplateRef_3_5),this._text_4=this.renderer.createText(this._el_0,"\n ",null),this._el_5=s.createRenderElement(this.renderer,this._el_0,"div",new s.InlineArray2(2,"class","action-buttons"),null),this._text_6=this.renderer.createText(this._el_5,"\n ",null),this._el_7=s.createRenderElement(this.renderer,this._el_5,"span",new s.InlineArray4(4,"class","hint--top-left hint--inversed","copy-button",""),null),this._CopyButton_7_3=new d.Wrapper_CopyButton(this.renderer,new h.ElementRef(this._el_7)),this._text_8=this.renderer.createText(this._el_7," ",null),this._el_9=s.createRenderElement(this.renderer,this._el_7,"a",s.EMPTY_INLINE_ARRAY,null),this._text_10=this.renderer.createText(this._el_9,"Copy",null),this._text_11=this.renderer.createText(this._el_7," ",null),this._text_12=this.renderer.createText(this._el_5,"\n ",null),this._el_13=s.createRenderElement(this.renderer,this._el_5,"span",s.EMPTY_INLINE_ARRAY,null),this._text_14=this.renderer.createText(this._el_13," ",null),this._anchor_15=this.renderer.createTemplateAnchor(this._el_13,null),this._vc_15=new f.ViewContainer(15,13,this,this._anchor_15),this._TemplateRef_15_5=new m.TemplateRef_(this,15,this._anchor_15),this._NgIf_15_6=new _.Wrapper_NgIf(this._vc_15.vcRef,this._TemplateRef_15_5),this._text_16=this.renderer.createText(this._el_13," ",null),this._text_17=this.renderer.createText(this._el_5,"\n ",null),this._el_18=s.createRenderElement(this.renderer,this._el_5,"span",s.EMPTY_INLINE_ARRAY,null),this._text_19=this.renderer.createText(this._el_18," ",null),this._anchor_20=this.renderer.createTemplateAnchor(this._el_18,null),this._vc_20=new f.ViewContainer(20,18,this,this._anchor_20),this._TemplateRef_20_5=new m.TemplateRef_(this,20,this._anchor_20),this._NgIf_20_6=new _.Wrapper_NgIf(this._vc_20.vcRef,this._TemplateRef_20_5),this._text_21=this.renderer.createText(this._el_18," ",null),this._text_22=this.renderer.createText(this._el_5,"\n ",null),this._text_23=this.renderer.createText(this._el_0,"\n ",null),this._el_24=s.createRenderElement(this.renderer,this._el_0,"pre",s.EMPTY_INLINE_ARRAY,null),this._text_25=this.renderer.createText(this._el_0,"\n",null),this._text_26=this.renderer.createText(e,"\n",null);var n=s.subscribeToRenderElement(this,this._el_7,new s.InlineArray4(4,"click",null,"mouseleave",null),this.eventHandler(this.handleEvent_7));return this._pipe_jsonFormatter_0=new y.JsonFormatter(this.parentView.injectorGet(g.DomSanitizer,this.parentIndex)),this._pipe_jsonFormatter_0_0=s.pureProxy1(this._pipe_jsonFormatter_0.transform.bind(this._pipe_jsonFormatter_0)),this.init(null,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._text_2,this._anchor_3,this._text_4,this._el_5,this._text_6,this._el_7,this._text_8,this._el_9,this._text_10,this._text_11,this._text_12,this._el_13,this._text_14,this._anchor_15,this._text_16,this._text_17,this._el_18,this._text_19,this._anchor_20,this._text_21,this._text_22,this._text_23,this._el_24,this._text_25,this._text_26],[n]),null},e.prototype.injectorGetInternal=function(t,e,n){return t===m.TemplateRef&&3===e?this._TemplateRef_3_5:t===v.NgIf&&3===e?this._NgIf_3_6.context:t===b.CopyButton&&7<=e&&e<=11?this._CopyButton_7_3.context:t===m.TemplateRef&&15===e?this._TemplateRef_15_5:t===v.NgIf&&15===e?this._NgIf_15_6.context:t===m.TemplateRef&&20===e?this._TemplateRef_20_5:t===v.NgIf&&20===e?this._NgIf_20_6.context:n},e.prototype.detectChangesInternal=function(t){var e=new i.ValueUnwrapper,n=void 0==this.context.sample;this._NgIf_3_6.check_ngIf(n,t,!1),this._NgIf_3_6.ngDoCheck(this,this._anchor_3,t);var r=this.context.sample;this._CopyButton_7_3.check_copyText(r,t,!1),this._CopyButton_7_3.ngDoCheck(this,this._el_7,t);var o=this.context.enableButtons;this._NgIf_15_6.check_ngIf(o,t,!1),this._NgIf_15_6.ngDoCheck(this,this._anchor_15,t);var a=this.context.enableButtons;this._NgIf_20_6.check_ngIf(a,t,!1),this._NgIf_20_6.ngDoCheck(this,this._anchor_20,t),this._vc_3.detectChangesInNestedViews(t),this._vc_15.detectChangesInNestedViews(t),this._vc_20.detectChangesInNestedViews(t),e.reset();var c=e.unwrap(s.castByValue(this._pipe_jsonFormatter_0_0,this._pipe_jsonFormatter_0.transform)(this.context.sample));(e.hasWrappedValue||s.checkBinding(t,this._expr_37,c))&&(this.renderer.setElementProperty(this._el_24,"innerHTML",this.viewUtils.sanitizer.sanitize(w.SecurityContext.HTML,c)),this._expr_37=c)},e.prototype.destroyInternal=function(){this._vc_3.destroyNestedViews(),this._vc_15.destroyNestedViews(),this._vc_20.destroyNestedViews()},e.prototype.createEmbeddedViewInternal=function(t){return 3==t?new S(this.viewUtils,this,3,this._anchor_3,this._vc_3):15==t?new O(this.viewUtils,this,15,this._anchor_15,this._vc_15):20==t?new R(this.viewUtils,this,20,this._anchor_20,this._vc_20):null},e.prototype.handleEvent_7=function(t,e){this.markPathToRootAsCheckOnce();var n=!0;return n=this._CopyButton_7_3.handleEvent(t,e)&&n},e}(o.AppView);e.View_SchemaSample0=E;var S=function(t){function e(n,r,o,s,a){t.call(this,e,T,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"pre",s.EMPTY_INLINE_ARRAY,null),this._text_1=this.renderer.createText(this._el_0," Sample unavailable ",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1],null),null},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView),O=function(t){function e(n,r,o,s,a){t.call(this,e,T,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a)}return __extends(e,t),e.prototype.createInternal=function(t){this._el_0=s.createRenderElement(this.renderer,null,"a",s.EMPTY_INLINE_ARRAY,null),this._text_1=this.renderer.createText(this._el_0,"Expand all",null);var e=s.subscribeToRenderElement(this,this._el_0,new s.InlineArray2(2,"click",null),this.eventHandler(this.handleEvent_0));return this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1],[e]),null},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e.prototype.handleEvent_0=function(t,e){this.markPathToRootAsCheckOnce();var n=!0;if("click"==t){var r=this.parentView.context.expandAll()!==!1;n=r&&n}return n},e}(o.AppView),R=function(t){function e(n,r,o,s,a){t.call(this,e,T,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a)}return __extends(e,t),e.prototype.createInternal=function(t){this._el_0=s.createRenderElement(this.renderer,null,"a",s.EMPTY_INLINE_ARRAY,null),this._text_1=this.renderer.createText(this._el_0,"Collapse all",null);var e=s.subscribeToRenderElement(this,this._el_0,new s.InlineArray2(2,"click",null),this.eventHandler(this.handleEvent_0));return this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1],[e]),null},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e.prototype.handleEvent_0=function(t,e){this.markPathToRootAsCheckOnce();var n=!0;if("click"==t){var r=this.parentView.context.collapseAll()!==!1;n=r&&n}return n},e}(o.AppView)},function(t,e,n){"use strict";var r=n(2),i=n(138),o=n(159);e.Redoc=o.Redoc;var s=n(314),a=n(79),c=n(317),u=n(76),l=n(55),h=n(20);e.SpecManager=h.SpecManager;var p=function(){function t(){}return t=__decorate([r.NgModule({imports:[i.CommonModule],declarations:[o.REDOC_DIRECTIVES,s.REDOC_COMMON_DIRECTIVES,a.REDOC_PIPES],bootstrap:[o.Redoc],entryComponents:[o.SecurityDefinitions,s.DynamicNg2Wrapper,o.Method],providers:[h.SpecManager,l.ScrollService,l.Hash,l.MenuService,l.WarningsService,l.OptionsService,l.AppStateService,l.ComponentParser,l.ContentProjector,u.LazyTasksService,{provide:r.ErrorHandler,useClass:c.CustomErrorHandler},{provide:l.COMPONENT_PARSER_ALLOWED,useValue:{"security-definitions":o.SecurityDefinitions}}],exports:[o.Redoc]}),__metadata("design:paramtypes",[])],t)}();e.RedocModule=p},function(t,e){"use strict";var n=document.queryCommandSupported&&document.queryCommandSupported("copy"),r=function(){function t(){}return t.isSupported=function(){return n},t.selectElement=function(t){var e,n;document.body.createTextRange?(e=document.body.createTextRange(),e.moveToElementText(t),e.select()):document.createRange&&window.getSelection&&(n=window.getSelection(),e=document.createRange(),e.selectNodeContents(t),n.removeAllRanges(),n.addRange(e))},t.deselect=function(){document.selection?document.selection.empty():window.getSelection&&window.getSelection().removeAllRanges()},t.copySelected=function(){var t;try{t=document.execCommand("copy")}catch(e){t=!1}return t},t.copyElement=function(e){t.selectElement(e);var n=t.copySelected();return n&&t.deselect(),n},t.copyCustom=function(e){var n=document.createElement("textarea");n.style.position="fixed",n.style.top="0",n.style.left="0",n.style.width="2em",n.style.height="2em",n.style.padding="0",n.style.border="none",n.style.outline="none",n.style.boxShadow="none",n.style.background="transparent",n.value=e,document.body.appendChild(n),n.select();var r=t.copySelected();return document.body.removeChild(n),r},t}();e.Clipboard=r},function(t,e,n){"use strict";var r=n(2),i=n(77),o=n(78),s=n(163),a=function(){function t(t){this._dereferencer=new h(t,this)}return t.prototype.normalize=function(t,e,n){var r=this;void 0===n&&(n={});var i=!!t.$ref;if(n.resolved&&!i&&this._dereferencer.visit(e),t["x-redoc-normalized"])return t;var o=c.walk(t,e,function(t,e){var n=r._dereferencer.dereference(t,e);return n.allOf&&(n._pointer=n._pointer||e,n=Object.assign({},n),u.merge(n,n.allOf)),n});return n.resolved&&!i&&this._dereferencer.exit(e),o["x-redoc-normalized"]=!0,o},t.prototype.reset=function(){this._dereferencer.reset()},t=__decorate([r.Injectable(),__metadata("design:paramtypes",[Object])],t)}();e.SchemaNormalizer=a;var c=function(){function t(){}return t.walk=function(e,n,r){if(void 0!=e&&"object"==typeof e){if(e.properties){var o=i.JsonPointer.join(n,["properties"]);t.walkEach(e.properties,o,r)}if(e.additionalProperties){var o=i.JsonPointer.join(n,["additionalProperties"]);if(Array.isArray(e.additionalProperties))t.walkEach(e.additionalProperties,o,r);else{var s=t.walk(e.additionalProperties,o,r);s&&(e.additionalProperties=s)}}if(e.allOf){var o=i.JsonPointer.join(n,["allOf"]);t.walkEach(e.allOf,o,r)}if(e.items){var o=i.JsonPointer.join(n,["items"]);if(Array.isArray(e.items))t.walkEach(e.items,o,r);else{var s=t.walk(e.items,o,r);s&&(e.items=s)}}return r(e,n)}},t.walkEach=function(e,n,r){for(var o=0,s=Object.keys(e);o2||2===o&&!t.description)&&(s.WarningsService.warn('Other properties are defined at the same level as $ref at "#'+e+'". They are IGNORED according to the JsonSchema spec'),r.description=r.description||t.description),r=this.normalizator.normalize(r,n),this._refCouner.exit(n),r},t}()},function(t,e,n){"use strict";var r=n(164),i=n(9),o=n(8),s=function(){function t(t,e){this._changed=!1,this.context=new r.CopyButton(t,e),this._expr_0=i.UNINITIALIZED,this._expr_1=i.UNINITIALIZED,this._expr_2=i.UNINITIALIZED}return t.prototype.ngOnDetach=function(t,e,n){},t.prototype.ngOnDestroy=function(){},t.prototype.check_copyText=function(t,e,n){(n||o.checkBinding(e,this._expr_0,t))&&(this._changed=!0,this.context.copyText=t,this._expr_0=t)},t.prototype.check_copyElement=function(t,e,n){(n||o.checkBinding(e,this._expr_1,t))&&(this._changed=!0,this.context.copyElement=t,this._expr_1=t)},t.prototype.check_hintElement=function(t,e,n){(n||o.checkBinding(e,this._expr_2,t))&&(this._changed=!0,this.context.hintElement=t,this._expr_2=t)},t.prototype.ngDoCheck=function(t,e,n){var r=this._changed;return this._changed=!1,n||0===t.numberOfChecks&&this.context.ngOnInit(),r},t.prototype.checkHost=function(t,e,n,r){},t.prototype.handleEvent=function(t,e){var n=!0;if("click"==t){var r=this.context.onClick()!==!1;n=r&&n}if("mouseleave"==t){var i=this.context.onLeave()!==!1;n=i&&n}return n},t.prototype.subscribe=function(t,e){this._eventHandler=e},t}();e.Wrapper_CopyButton=s},function(t,e,n){"use strict";var r=n(230),i=n(9),o=n(19),s=n(8),a=n(15),c=n(23),u=n(12),l=n(13),h=n(160),p=n(122),f=n(60),_=function(){function t(t,e,n,o,s){this._changed=!1,this.context=new r.DynamicNg2Viewer(t,e,n,o,s),this._expr_0=i.UNINITIALIZED}return t.prototype.ngOnDetach=function(t,e,n){},t.prototype.ngOnDestroy=function(){},t.prototype.check_html=function(t,e,n){(n||s.checkBinding(e,this._expr_0,t))&&(this._changed=!0,this.context.html=t,this._expr_0=t)},t.prototype.ngDoCheck=function(t,e,n){var r=this._changed;return this._changed=!1,n||0===t.numberOfChecks&&this.context.ngOnInit(),r},t.prototype.checkHost=function(t,e,n,r){},t.prototype.handleEvent=function(t,e){var n=!0;return n},t.prototype.subscribe=function(t,e){this._eventHandler=e},t}();e.Wrapper_DynamicNg2Viewer=_;var d=function(){function t(){this._changed=!1,this.context=new r.DynamicNg2Wrapper}return t.prototype.ngOnDetach=function(t,e,n){},t.prototype.ngOnDestroy=function(){},t.prototype.ngDoCheck=function(t,e,n){var r=this._changed;return this._changed=!1,r},t.prototype.checkHost=function(t,e,n,r){},t.prototype.handleEvent=function(t,e){var n=!0;return n},t.prototype.subscribe=function(t,e){this._eventHandler=e},t}();e.Wrapper_DynamicNg2Wrapper=d;var y=s.createRenderComponentType("",0,a.ViewEncapsulation.None,[],{}),m=function(t){function e(n,r,o,s){t.call(this,e,y,u.ViewType.HOST,n,r,o,s,i.ChangeDetectorStatus.CheckAlways)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.selectOrCreateRenderHostElement(this.renderer,"dynamic-ng2-viewer",s.EMPTY_INLINE_ARRAY,t,null),this._vc_0=new c.ViewContainer(0,null,this,this._el_0),this.compView_0=new b(this.viewUtils,this,0,this._el_0),this._DynamicNg2Viewer_0_5=new _(this._vc_0.vcRef,this.injectorGet(h.ContentProjector,this.parentIndex),this.injectorGet(p.ComponentParser,this.parentIndex),this.injectorGet(f.ComponentFactoryResolver,this.parentIndex),this.renderer),this.compView_0.create(this._DynamicNg2Viewer_0_5.context),this._el_1=this.renderer.createTemplateAnchor(null,null),this.init(this._el_1,this.renderer.directRenderer?null:[this._el_0],null),new l.ComponentRef_(0,this,this._el_0,this._DynamicNg2Viewer_0_5.context)},e.prototype.injectorGetInternal=function(t,e,n){return t===r.DynamicNg2Viewer&&0===e?this._DynamicNg2Viewer_0_5.context:n},e.prototype.detectChangesInternal=function(t){this._DynamicNg2Viewer_0_5.ngDoCheck(this,this._el_0,t),this._vc_0.detectChangesInNestedViews(t),this.compView_0.detectChanges(t)},e.prototype.destroyInternal=function(){this._vc_0.destroyNestedViews(),this.compView_0.destroy()},e.prototype.visitRootNodesInternal=function(t,e){t(this._vc_0.nativeElement,e),this._vc_0.visitNestedViewRootNodes(t,e),t(this._el_1,e)},e}(o.AppView);e.DynamicNg2ViewerNgFactory=new l.ComponentFactory("dynamic-ng2-viewer",m,r.DynamicNg2Viewer);var g=[],v=s.createRenderComponentType("",0,a.ViewEncapsulation.None,g,{}),b=function(t){function e(n,r,o,s){t.call(this,e,v,u.ViewType.COMPONENT,n,r,o,s,i.ChangeDetectorStatus.CheckAlways)}return __extends(e,t),e.prototype.createInternal=function(t){this.renderer.createViewRoot(this.parentElement);return this.init(null,this.renderer.directRenderer?null:[],null),null},e}(o.AppView);e.View_DynamicNg2Viewer0=b;var w=s.createRenderComponentType("",0,a.ViewEncapsulation.None,[],{}),x=function(t){function e(n,r,o,s){t.call(this,e,w,u.ViewType.HOST,n,r,o,s,i.ChangeDetectorStatus.CheckAlways)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.selectOrCreateRenderHostElement(this.renderer,"dynamic-ng2-wrapper",s.EMPTY_INLINE_ARRAY,t,null),this.compView_0=new k(this.viewUtils,this,0,this._el_0),this._DynamicNg2Wrapper_0_3=new d,this.compView_0.create(this._DynamicNg2Wrapper_0_3.context),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0],null),new l.ComponentRef_(0,this,this._el_0,this._DynamicNg2Wrapper_0_3.context)},e.prototype.injectorGetInternal=function(t,e,n){return t===r.DynamicNg2Wrapper&&0===e?this._DynamicNg2Wrapper_0_3.context:n},e.prototype.detectChangesInternal=function(t){this._DynamicNg2Wrapper_0_3.ngDoCheck(this,this._el_0,t),this.compView_0.detectChanges(t)},e.prototype.destroyInternal=function(){this.compView_0.destroy()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e.prototype.visitProjectableNodesInternal=function(t,e,n,r){},e}(o.AppView);e.DynamicNg2WrapperNgFactory=new l.ComponentFactory("dynamic-ng2-wrapper",x,r.DynamicNg2Wrapper);var I=[],C=s.createRenderComponentType("",1,a.ViewEncapsulation.None,I,{}),k=function(t){function e(n,r,o,s){t.call(this,e,C,u.ViewType.COMPONENT,n,r,o,s,i.ChangeDetectorStatus.CheckAlways)}return __extends(e,t),e.prototype.createInternal=function(t){var e=this.renderer.createViewRoot(this.parentElement);return this.projectNodes(e,0),this.init(null,this.renderer.directRenderer?null:[],null),null},e}(o.AppView);e.View_DynamicNg2Wrapper0=k},function(t,e,n){"use strict";var r=n(165),i=n(9),o=n(19),s=n(8),a=n(15),c=n(12),u=n(13),l=n(482),h=n(23),p=n(56),f=n(25),_=n(34),d=n(46),y=n(106),m=n(59),g=n(22),v=n(74),b=function(){function t(t){this._changed=!1,this.context=new r.Tabs(t),this._expr_0=i.UNINITIALIZED}return t.prototype.ngOnDetach=function(t,e,n){},t.prototype.ngOnDestroy=function(){this.subscription0&&this.subscription0.unsubscribe()},t.prototype.check_selected=function(t,e,n){(n||s.checkBinding(e,this._expr_0,t))&&(this._changed=!0,this.context.selected=t,this._expr_0=t)},t.prototype.ngDoCheck=function(t,e,n){var r=this._changed;return this._changed=!1,n||0===t.numberOfChecks&&this.context.ngOnInit(),r},t.prototype.checkHost=function(t,e,n,r){},t.prototype.handleEvent=function(t,e){var n=!0;return n},t.prototype.subscribe=function(t,e,n){this._eventHandler=e,n&&(this.subscription0=this.context.change.subscribe(e.bind(t,"change")))},t}();e.Wrapper_Tabs=b;var w=function(){function t(t){this._changed=!1,this.context=new r.Tab(t),this._expr_0=i.UNINITIALIZED,this._expr_1=i.UNINITIALIZED,this._expr_2=i.UNINITIALIZED}return t.prototype.ngOnDetach=function(t,e,n){},t.prototype.ngOnDestroy=function(){},t.prototype.check_active=function(t,e,n){(n||s.checkBinding(e,this._expr_0,t))&&(this._changed=!0,this.context.active=t,this._expr_0=t)},t.prototype.check_tabTitle=function(t,e,n){(n||s.checkBinding(e,this._expr_1,t))&&(this._changed=!0,this.context.tabTitle=t,this._expr_1=t)},t.prototype.check_tabStatus=function(t,e,n){(n||s.checkBinding(e,this._expr_2,t))&&(this._changed=!0,this.context.tabStatus=t,this._expr_2=t)},t.prototype.ngDoCheck=function(t,e,n){var r=this._changed;return this._changed=!1,r},t.prototype.checkHost=function(t,e,n,r){},t.prototype.handleEvent=function(t,e){var n=!0;return n},t.prototype.subscribe=function(t,e){this._eventHandler=e},t}();e.Wrapper_Tab=w;var x=s.createRenderComponentType("",0,a.ViewEncapsulation.None,[],{}),I=function(t){function e(n,r,o,s){t.call(this,e,x,c.ViewType.HOST,n,r,o,s,i.ChangeDetectorStatus.CheckAlways)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.selectOrCreateRenderHostElement(this.renderer,"tabs",s.EMPTY_INLINE_ARRAY,t,null),this.compView_0=new T(this.viewUtils,this,0,this._el_0),this._Tabs_0_3=new b(this.compView_0.ref),this.compView_0.create(this._Tabs_0_3.context),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0],null),new u.ComponentRef_(0,this,this._el_0,this._Tabs_0_3.context)},e.prototype.injectorGetInternal=function(t,e,n){return t===r.Tabs&&0===e?this._Tabs_0_3.context:n},e.prototype.detectChangesInternal=function(t){this._Tabs_0_3.ngDoCheck(this,this._el_0,t)&&this.compView_0.markAsCheckOnce(),this.compView_0.detectChanges(t)},e.prototype.destroyInternal=function(){this.compView_0.destroy(),this._Tabs_0_3.ngOnDestroy()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e.prototype.visitProjectableNodesInternal=function(t,e,n,r){},e}(o.AppView);e.TabsNgFactory=new u.ComponentFactory("tabs",I,r.Tabs);var C=[l.styles],k=s.createRenderComponentType("",1,a.ViewEncapsulation.Emulated,C,{}),T=function(t){function e(n,r,o,s){t.call(this,e,k,c.ViewType.COMPONENT,n,r,o,s,i.ChangeDetectorStatus.CheckOnce)}return __extends(e,t),e.prototype.createInternal=function(t){var e=this.renderer.createViewRoot(this.parentElement);return this._text_0=this.renderer.createText(e,"\n ",null),this._el_1=s.createRenderElement(this.renderer,e,"ul",s.EMPTY_INLINE_ARRAY,null),this._text_2=this.renderer.createText(this._el_1,"\n ",null),this._anchor_3=this.renderer.createTemplateAnchor(this._el_1,null),this._vc_3=new h.ViewContainer(3,1,this,this._anchor_3),this._TemplateRef_3_5=new f.TemplateRef_(this,3,this._anchor_3),this._NgFor_3_6=new p.Wrapper_NgFor(this._vc_3.vcRef,this._TemplateRef_3_5,this.parentView.injectorGet(_.IterableDiffers,this.parentIndex),this.ref),this._text_4=this.renderer.createText(this._el_1,"\n ",null),this._text_5=this.renderer.createText(e,"\n ",null),this.projectNodes(e,0),this._text_6=this.renderer.createText(e,"\n ",null),this.init(null,this.renderer.directRenderer?null:[this._text_0,this._el_1,this._text_2,this._anchor_3,this._text_4,this._text_5,this._text_6],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===f.TemplateRef&&3===e?this._TemplateRef_3_5:t===d.NgFor&&3===e?this._NgFor_3_6.context:n},e.prototype.detectChangesInternal=function(t){var e=this.context.tabs;this._NgFor_3_6.check_ngForOf(e,t,!1),this._NgFor_3_6.ngDoCheck(this,this._anchor_3,t),this._vc_3.detectChangesInNestedViews(t)},e.prototype.destroyInternal=function(){this._vc_3.destroyNestedViews()},e.prototype.createEmbeddedViewInternal=function(t){return 3==t?new E(this.viewUtils,this,3,this._anchor_3,this._vc_3):null},e}(o.AppView);e.View_Tabs0=T;var E=function(t){function e(n,r,o,a,u){t.call(this,e,k,c.ViewType.EMBEDDED,n,r,o,a,i.ChangeDetectorStatus.CheckAlways,u),this._map_3=s.pureProxy1(function(t){return{active:t}}),this._expr_4=i.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){this._el_0=s.createRenderElement(this.renderer,null,"li",s.EMPTY_INLINE_ARRAY,null),this._NgClass_0_3=new y.Wrapper_NgClass(this.parentView.parentView.injectorGet(_.IterableDiffers,this.parentView.parentIndex),this.parentView.parentView.injectorGet(m.KeyValueDiffers,this.parentView.parentIndex),new g.ElementRef(this._el_0),this.renderer),this._text_1=this.renderer.createText(this._el_0,"",null);var e=s.subscribeToRenderElement(this,this._el_0,new s.InlineArray2(2,"click",null),this.eventHandler(this.handleEvent_0));return this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1],[e]),null},e.prototype.injectorGetInternal=function(t,e,n){return t===v.NgClass&&0<=e&&e<=1?this._NgClass_0_3.context:n},e.prototype.detectChangesInternal=function(t){var e=s.inlineInterpolate(1,"tab-",this.context.$implicit.tabStatus,"");this._NgClass_0_3.check_klass(e,t,!1);var n=this._map_3(this.context.$implicit.active);this._NgClass_0_3.check_ngClass(n,t,!1),this._NgClass_0_3.ngDoCheck(this,this._el_0,t);var r=s.inlineInterpolate(1,"",this.context.$implicit.tabTitle,"");s.checkBinding(t,this._expr_4,r)&&(this.renderer.setText(this._text_1,r),this._expr_4=r)},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e.prototype.handleEvent_0=function(t,e){this.markPathToRootAsCheckOnce();var n=!0;if("click"==t){var r=this.parentView.context.selectTab(this.context.$implicit)!==!1;n=r&&n}return n},e}(o.AppView),S=s.createRenderComponentType("",0,a.ViewEncapsulation.None,[],{}),O=function(t){function e(n,r,o,s){t.call(this,e,S,c.ViewType.HOST,n,r,o,s,i.ChangeDetectorStatus.CheckAlways)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.selectOrCreateRenderHostElement(this.renderer,"tab",s.EMPTY_INLINE_ARRAY,t,null),this.compView_0=new N(this.viewUtils,this,0,this._el_0),this._Tab_0_3=new w(this.injectorGet(r.Tabs,this.parentIndex)),this.compView_0.create(this._Tab_0_3.context),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0],null),new u.ComponentRef_(0,this,this._el_0,this._Tab_0_3.context)},e.prototype.injectorGetInternal=function(t,e,n){return t===r.Tab&&0===e?this._Tab_0_3.context:n},e.prototype.detectChangesInternal=function(t){this._Tab_0_3.ngDoCheck(this,this._el_0,t),this.compView_0.detectChanges(t)},e.prototype.destroyInternal=function(){this.compView_0.destroy()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e.prototype.visitProjectableNodesInternal=function(t,e,n,r){},e}(o.AppView);e.TabNgFactory=new u.ComponentFactory("tab",O,r.Tab);var R=["[_nghost-%COMP%] {\n display: block;\n }\n .tab-wrap[_ngcontent-%COMP%] {\n display: none;\n }\n\n .tab-wrap.active[_ngcontent-%COMP%] {\n display: block;\n }"],A=s.createRenderComponentType("",1,a.ViewEncapsulation.Emulated,R,{}),N=function(t){function e(n,r,o,a){t.call(this,e,A,c.ViewType.COMPONENT,n,r,o,a,i.ChangeDetectorStatus.CheckAlways),this._map_6=s.pureProxy1(function(t){return{active:t}})}return __extends(e,t),e.prototype.createInternal=function(t){var e=this.renderer.createViewRoot(this.parentElement);return this._text_0=this.renderer.createText(e,"\n ",null),this._el_1=s.createRenderElement(this.renderer,e,"div",new s.InlineArray2(2,"class","tab-wrap"),null),this._NgClass_1_3=new y.Wrapper_NgClass(this.parentView.injectorGet(_.IterableDiffers,this.parentIndex),this.parentView.injectorGet(m.KeyValueDiffers,this.parentIndex),new g.ElementRef(this._el_1),this.renderer),this._text_2=this.renderer.createText(this._el_1,"\n ",null),this.projectNodes(this._el_1,0),this._text_3=this.renderer.createText(this._el_1,"\n ",null),this._text_4=this.renderer.createText(e,"\n ",null),this.init(null,this.renderer.directRenderer?null:[this._text_0,this._el_1,this._text_2,this._text_3,this._text_4],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===v.NgClass&&1<=e&&e<=3?this._NgClass_1_3.context:n},e.prototype.detectChangesInternal=function(t){var e="tab-wrap";this._NgClass_1_3.check_klass(e,t,!1);var n=this._map_6(this.context.active);this._NgClass_1_3.check_ngClass(n,t,!1),this._NgClass_1_3.ngDoCheck(this,this._el_1,t)},e}(o.AppView);e.View_Tab0=N},function(t,e,n){"use strict";var r=n(166),i=n(9),o=n(19),s=n(8),a=n(15),c=n(12),u=n(13),l=n(483),h=n(106),p=n(23),f=n(36),_=n(34),d=n(59),y=n(22),m=n(25),g=n(28),v=n(74),b=function(){function t(){this._changed=!1,this.context=new r.Zippy,this._expr_0=i.UNINITIALIZED,this._expr_1=i.UNINITIALIZED,this._expr_2=i.UNINITIALIZED,this._expr_3=i.UNINITIALIZED,this._expr_4=i.UNINITIALIZED}return t.prototype.ngOnDetach=function(t,e,n){},t.prototype.ngOnDestroy=function(){this.subscription0&&this.subscription0.unsubscribe(),this.subscription1&&this.subscription1.unsubscribe()},t.prototype.check_type=function(t,e,n){(n||s.checkBinding(e,this._expr_0,t))&&(this._changed=!0,this.context.type=t,this._expr_0=t)},t.prototype.check_visible=function(t,e,n){(n||s.checkBinding(e,this._expr_1,t))&&(this._changed=!0,this.context.visible=t,this._expr_1=t)},t.prototype.check_empty=function(t,e,n){(n||s.checkBinding(e,this._expr_2,t))&&(this._changed=!0,this.context.empty=t,this._expr_2=t)},t.prototype.check_title=function(t,e,n){(n||s.checkBinding(e,this._expr_3,t))&&(this._changed=!0,this.context.title=t,this._expr_3=t)},t.prototype.check_headless=function(t,e,n){(n||s.checkBinding(e,this._expr_4,t))&&(this._changed=!0,this.context.headless=t,this._expr_4=t)},t.prototype.ngDoCheck=function(t,e,n){var r=this._changed;return this._changed=!1,r},t.prototype.checkHost=function(t,e,n,r){},t.prototype.handleEvent=function(t,e){var n=!0;return n},t.prototype.subscribe=function(t,e,n,r){this._eventHandler=e,n&&(this.subscription0=this.context.open.subscribe(e.bind(t,"open"))),r&&(this.subscription1=this.context.close.subscribe(e.bind(t,"close")))},t}();e.Wrapper_Zippy=b;var w=s.createRenderComponentType("",0,a.ViewEncapsulation.None,[],{}),x=function(t){function e(n,r,o,s){t.call(this,e,w,c.ViewType.HOST,n,r,o,s,i.ChangeDetectorStatus.CheckAlways)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.selectOrCreateRenderHostElement(this.renderer,"zippy",s.EMPTY_INLINE_ARRAY,t,null),this.compView_0=new k(this.viewUtils,this,0,this._el_0),this._Zippy_0_3=new b,this.compView_0.create(this._Zippy_0_3.context),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0],null),new u.ComponentRef_(0,this,this._el_0,this._Zippy_0_3.context)},e.prototype.injectorGetInternal=function(t,e,n){return t===r.Zippy&&0===e?this._Zippy_0_3.context:n},e.prototype.detectChangesInternal=function(t){this._Zippy_0_3.ngDoCheck(this,this._el_0,t),this.compView_0.detectChanges(t)},e.prototype.destroyInternal=function(){this.compView_0.destroy(),this._Zippy_0_3.ngOnDestroy()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e.prototype.visitProjectableNodesInternal=function(t,e,n,r){},e}(o.AppView);e.ZippyNgFactory=new u.ComponentFactory("zippy",x,r.Zippy);var I=[l.styles],C=s.createRenderComponentType("",1,a.ViewEncapsulation.Emulated,I,{}),k=function(t){function e(n,r,o,a){t.call(this,e,C,c.ViewType.COMPONENT,n,r,o,a,i.ChangeDetectorStatus.CheckAlways),this._map_13=s.pureProxy2(function(t,e){return{"zippy-empty":t,"zippy-hidden":e}})}return __extends(e,t),e.prototype.createInternal=function(t){var e=this.renderer.createViewRoot(this.parentElement);return this._el_0=s.createRenderElement(this.renderer,e,"div",s.EMPTY_INLINE_ARRAY,null),this._NgClass_0_3=new h.Wrapper_NgClass(this.parentView.injectorGet(_.IterableDiffers,this.parentIndex),this.parentView.injectorGet(d.KeyValueDiffers,this.parentIndex),new y.ElementRef(this._el_0),this.renderer),this._text_1=this.renderer.createText(this._el_0,"\n ",null),this._anchor_2=this.renderer.createTemplateAnchor(this._el_0,null),this._vc_2=new p.ViewContainer(2,0,this,this._anchor_2),this._TemplateRef_2_5=new m.TemplateRef_(this,2,this._anchor_2),this._NgIf_2_6=new f.Wrapper_NgIf(this._vc_2.vcRef,this._TemplateRef_2_5),this._text_3=this.renderer.createText(this._el_0,"\n ",null),this._el_4=s.createRenderElement(this.renderer,this._el_0,"div",new s.InlineArray2(2,"class","zippy-content"),null),this._text_5=this.renderer.createText(this._el_4,"\n ",null),this.projectNodes(this._el_4,0),this._text_6=this.renderer.createText(this._el_4,"\n ",null),this._text_7=this.renderer.createText(this._el_0,"\n",null),this._text_8=this.renderer.createText(e,"\n",null),this.init(null,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._anchor_2,this._text_3,this._el_4,this._text_5,this._text_6,this._text_7,this._text_8],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===m.TemplateRef&&2===e?this._TemplateRef_2_5:t===g.NgIf&&2===e?this._NgIf_2_6.context:t===v.NgClass&&0<=e&&e<=7?this._NgClass_0_3.context:n},e.prototype.detectChangesInternal=function(t){var e=s.inlineInterpolate(1,"zippy zippy-",this.context.type,"");this._NgClass_0_3.check_klass(e,t,!1);var n=this._map_13(this.context.empty,!this.context.visible);this._NgClass_0_3.check_ngClass(n,t,!1),this._NgClass_0_3.ngDoCheck(this,this._el_0,t);var r=!this.context.headless;this._NgIf_2_6.check_ngIf(r,t,!1),this._NgIf_2_6.ngDoCheck(this,this._anchor_2,t),this._vc_2.detectChangesInNestedViews(t)},e.prototype.destroyInternal=function(){this._vc_2.destroyNestedViews()},e.prototype.createEmbeddedViewInternal=function(t){return 2==t?new T(this.viewUtils,this,2,this._anchor_2,this._vc_2):null},e}(o.AppView);e.View_Zippy0=k;var T=function(t){function e(n,r,o,s,a){t.call(this,e,C,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a),this._expr_10=i.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){this._el_0=s.createRenderElement(this.renderer,null,"div",new s.InlineArray2(2,"class","zippy-title"),null),this._text_1=this.renderer.createText(this._el_0,"\n ",null),this._el_2=s.createRenderElement(this.renderer,this._el_0,"span",new s.InlineArray2(2,"class","zippy-indicator"),null),this._text_3=this.renderer.createText(this._el_2,"\n ",null),this._el_4=s.createRenderElement(this.renderer,this._el_2,":svg:svg",new s.InlineArray16(12,":xml:space","preserve","version","1.1","viewBox","0 0 24 24","x","0","xmlns","http://www.w3.org/2000/svg","y","0"),null),this._text_5=this.renderer.createText(this._el_4,"\n ",null),this._el_6=s.createRenderElement(this.renderer,this._el_4,":svg:polygon",new s.InlineArray2(2,"points","17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "),null),this._text_7=this.renderer.createText(this._el_4,"\n ",null),this._text_8=this.renderer.createText(this._el_2,"\n ",null),this._text_9=this.renderer.createText(this._el_0,"",null);var e=s.subscribeToRenderElement(this,this._el_0,new s.InlineArray2(2,"click",null),this.eventHandler(this.handleEvent_0));return this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._el_2,this._text_3,this._el_4,this._text_5,this._el_6,this._text_7,this._text_8,this._text_9],[e]),null},e.prototype.detectChangesInternal=function(t){var e=s.inlineInterpolate(1,"\n ",this.parentView.context.title,"\n ");s.checkBinding(t,this._expr_10,e)&&(this.renderer.setText(this._text_9,e),this._expr_10=e)},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e.prototype.handleEvent_0=function(t,e){this.markPathToRootAsCheckOnce();var n=!0;if("click"==t){var r=this.parentView.context.toggle()!==!1;n=r&&n}return n},e}(o.AppView)},function(t,e,n){"use strict";var r=n(229);e.DropDown=r.DropDown;var i=n(232);e.StickySidebar=i.StickySidebar;var o=n(165);e.Tabs=o.Tabs,e.Tab=o.Tab;var s=n(166);e.Zippy=s.Zippy;var a=n(164);e.CopyButton=a.CopyButton;var c=n(231);e.SelectOnClick=c.SelectOnClick;var u=n(230);e.DynamicNg2Viewer=u.DynamicNg2Viewer,e.DynamicNg2Wrapper=u.DynamicNg2Wrapper;var l=n(76);e.LazyFor=l.LazyFor,e.LazyTasksService=l.LazyTasksService,e.LazyTasksServiceSync=l.LazyTasksServiceSync,e.REDOC_COMMON_DIRECTIVES=[r.DropDown,i.StickySidebar,o.Tabs,o.Tab,s.Zippy,a.CopyButton,c.SelectOnClick,u.DynamicNg2Viewer,u.DynamicNg2Wrapper,l.LazyFor]},function(t,e,n){"use strict";function r(t){return void 0===t||null===t}function i(t){return void 0!=t?t.toString().replace(/&/g,"&").replace(/"/g,""").replace(//g,">"):""}function o(t,e){return''+i(t)+""}function s(t){var e=typeof t,n="";return void 0==t?n+=o("null","type-null"):t&&t.constructor===Array?(p++,n+=a(t),p--):"object"===e?(p++,n+=c(t),p--):"number"===e?n+=o(t,"type-number"):"string"===e?n+=/^(http|https):\/\/[^\\s]+$/.test(t)?o('"',"type-string")+''+i(t)+""+o('"',"type-string"):o('"'+t+'"',"type-string"):"boolean"===e&&(n+=o(t,"type-boolean")),n}function a(t){var e,n,r=p>f?"collapsed":"",i='
[
    ',o=!1;for(e=0,n=t.length;e
    ',i+=s(t[e]),e";return i+="
]",o||(i="[ ]"),i}function c(t){var e,n,r,o=p>f?"collapsed":"",a=Object.keys(t),c='
{
    ',u=!1;for(e=0,r=a.length;e
    ',c+='"'+i(n)+'": ',c+=s(t[n]),e";return c+="
}",u||(c="{ }"),c}function u(t){p=1;var e="";return e+='
',e+=s(t),e+="
"}var l=n(2),h=n(119),p=1,f=2,_=function(){function t(t){this.sanitizer=t}return t.prototype.transform=function(t){return r(t)?t:this.sanitizer.bypassSecurityTrustHtml(u(t))},t=__decorate([l.Pipe({name:"jsonFormatter"}),__metadata("design:paramtypes",["function"==typeof(e="undefined"!=typeof h.DomSanitizer&&h.DomSanitizer)&&e||Object])],t);var e}();e.JsonFormatter=_},function(t,e,n){"use strict";var r=n(2),i=n(90),o=function(t){function e(e){t.call(this,!0),this.appState=e}return __extends(e,t),e.prototype.handleError=function(e){this.appState.error.next(e&&e.rejection||e),t.prototype.handleError.call(this,e)},e=__decorate([r.Injectable(),__metadata("design:paramtypes",["function"==typeof(n="undefined"!=typeof i.AppStateService&&i.AppStateService)&&n||Object])],e);var n}(r.ErrorHandler);e.CustomErrorHandler=o},function(t,e,n){"use strict";function r(t){for(var n in t)e.hasOwnProperty(n)||(e[n]=t[n])}r(n(316)),r(n(78)),r(n(318))},function(t,e,n){"use strict";var r=n(2),i=n(389),o=n(728),s=new o({html:!0,linkify:!0,breaks:!1,typographer:!1,highlight:function(t,e){"json"===e&&(e="js");var n=Prism.languages[e];return n?Prism.highlight(t,n):t}}),a=function(){function t(t){void 0===t&&(t=!1),this.raw=t,this.firstLevelHeadings=[],this._origRules={},this._preProcessors=[]}return t.prototype.addPreprocessor=function(t){this._preProcessors.push(t)},t.prototype.saveOrigRules=function(){this._origRules.open=s.renderer.rules.heading_open,this._origRules.close=s.renderer.rules.heading_close},t.prototype.restoreOrigRules=function(){s.renderer.rules.heading_open=this._origRules.open,s.renderer.rules.heading_close=this._origRules.close},t.prototype.headingOpenRule=function(t,e){if(1!==t[e].hLevel)return this._origRules.open(t,e);var n=t[e+1].content;this.firstLevelHeadings.push(n);var r=i(n);return"'+('')},t.prototype.headingCloseRule=function(t,e){return 1!==t[e].hLevel?this._origRules.close(t,e):"\n"},t.prototype.renderMd=function(t){this.raw||(this.saveOrigRules(),s.renderer.rules.heading_open=this.headingOpenRule.bind(this),s.renderer.rules.heading_close=this.headingCloseRule.bind(this));for(var e=t,n=0;n2?arguments[2]:void 0,l=Math.min((void 0===u?s:i(u,s))-c,s-a),h=1;for(c0;)c in n?n[a]=n[c]:delete n[a],a+=h,c+=h;return n}},function(t,e,n){var r=n(80),i=n(52),o=n(126),s=n(37);t.exports=function(t,e,n,a,c){r(e);var u=i(t),l=o(u),h=s(u.length),p=c?h-1:0,f=c?-1:1;if(n<2)for(;;){if(p in l){a=l[p],p+=f;break}if(p+=f,c?p<0:h<=p)throw TypeError("Reduce of empty array with no initial value")}for(;c?p>=0:h>p;p+=f)p in l&&(a=e(a,l[p],p,u));return a}},function(t,e,n){"use strict";var r=n(80),i=n(11),o=n(512),s=[].slice,a={},c=function(t,e,n){if(!(e in a)){for(var r=[],i=0;i1?arguments[1]:void 0,3);e=e?e.n:this._f;)for(n(e.v,e.k,this);e&&e.r;)e=e.p},has:function(t){return!!y(this,t)}}),f&&r(h.prototype,"size",{get:function(){return c(this[d])}}),h},def:function(t,e,n){var r,i,o=y(t,e);return o?o.v=n:(t._l=o={i:i=_(e,!0),k:e,v:n,p:r=t._l,n:void 0,r:!1},t._f||(t._f=o),r&&(r.n=o),t[d]++,"F"!==i&&(t._i[i]=o)),t},getEntry:y,setStrong:function(t,e,n){l(t,e,function(t,e){this._t=t,this._k=e,this._l=void 0},function(){for(var t=this,e=t._k,n=t._l;n&&n.r;)n=n.p;return t._t&&(t._l=n=n?n.n:t._t._f)?"keys"==e?h(0,n.k):"values"==e?h(0,n.v):h(0,[n.k,n.v]):(t._t=void 0,h(1))},n?"entries":"values",!n,!0),p(e)}}},function(t,e,n){"use strict";var r=n(128),i=n(81).getWeak,o=n(6),s=n(11),a=n(125),c=n(169),u=n(62),l=n(41),h=u(5),p=u(6),f=0,_=function(t){return t._l||(t._l=new d)},d=function(){this.a=[]},y=function(t,e){return h(t.a,function(t){return t[0]===e})};d.prototype={get:function(t){var e=y(this,t);if(e)return e[1]},has:function(t){return!!y(this,t)},set:function(t,e){var n=y(this,t);n?n[1]=e:this.a.push([t,e])},delete:function(t){var e=p(this.a,function(e){return e[0]===t});return~e&&this.a.splice(e,1),!!~e}},t.exports={getConstructor:function(t,e,n,o){var u=t(function(t,r){a(t,u,e,"_i"),t._i=f++,t._l=void 0,void 0!=r&&c(r,n,t[o],t)});return r(u.prototype,{delete:function(t){if(!s(t))return!1;var e=i(t);return e===!0?_(this).delete(t):e&&l(e,this._i)&&delete e[this._i]},has:function(t){if(!s(t))return!1;var e=i(t);return e===!0?_(this).has(t):e&&l(e,this._i)}}),u},def:function(t,e,n){var r=i(o(e),!0);return r===!0?_(t).set(e,n):r[t._i]=n,t},ufstore:_}},function(t,e,n){"use strict";var r=n(24),i=n(82);t.exports=function(t,e,n){e in t?r.f(t,e,i(0,n)):t[e]=n}},function(t,e,n){var r=n(11),i=n(14).document,o=r(i)&&r(i.createElement);t.exports=function(t){return o?i.createElement(t):{}}},function(t,e,n){t.exports=n(14).document&&document.documentElement},function(t,e,n){t.exports=!n(29)&&!n(10)(function(){return 7!=Object.defineProperty(n(326)("div"),"a",{get:function(){return 7}}).a})},function(t,e,n){var r=n(11),i=Math.floor;t.exports=function(t){ +return!r(t)&&isFinite(t)&&i(t)===t}},function(t,e,n){var r=n(6);t.exports=function(t,e,n,i){try{return i?e(r(n)[0],n[1]):e(n)}catch(e){var o=t.return;throw void 0!==o&&r(o.call(t)),e}}},function(t,e,n){"use strict";var r=n(93),i=n(82),o=n(130),s={};n(51)(s,n(18)("iterator"),function(){return this}),t.exports=function(t,e,n){t.prototype=r(s,{next:i(1,n)}),o(t,e+" Iterator")}},function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},function(t,e){t.exports=Math.log1p||function(t){return(t=+t)>-1e-8&&t<1e-8?t-t*t/2:Math.log(1+t)}},function(t,e,n){"use strict";var r=n(108),i=n(170),o=n(171),s=n(52),a=n(126),c=Object.assign;t.exports=!c||n(10)(function(){var t={},e={},n=Symbol(),r="abcdefghijklmnopqrst";return t[n]=7,r.split("").forEach(function(t){e[t]=t}),7!=c({},t)[n]||Object.keys(c({},e)).join("")!=r})?function(t,e){for(var n=s(t),c=arguments.length,u=1,l=i.f,h=o.f;c>u;)for(var p,f=a(arguments[u++]),_=l?r(f).concat(l(f)):r(f),d=_.length,y=0;d>y;)h.call(f,p=_[y++])&&(n[p]=f[p]);return n}:c},function(t,e,n){var r=n(24),i=n(6),o=n(108);t.exports=n(29)?Object.defineProperties:function(t,e){i(t);for(var n,s=o(e),a=s.length,c=0;a>c;)r.f(t,n=s[c++],e[n]);return t}},function(t,e,n){var r=n(58),i=n(94).f,o={}.toString,s="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],a=function(t){try{return i(t)}catch(t){return s.slice()}};t.exports.f=function(t){return s&&"[object Window]"==o.call(t)?a(t):i(r(t))}},function(t,e,n){var r=n(41),i=n(58),o=n(235)(!1),s=n(249)("IE_PROTO");t.exports=function(t,e){var n,a=i(t),c=0,u=[];for(n in a)n!=s&&r(a,n)&&u.push(n);for(;e.length>c;)r(a,n=e[c++])&&(~o(u,n)||u.push(n));return u}},function(t,e,n){var r=n(14).parseFloat,i=n(173).trim;t.exports=1/r(n(251)+"-0")!==-(1/0)?function(t){var e=i(String(t),3),n=r(e);return 0===n&&"-"==e.charAt(0)?-0:n}:r},function(t,e,n){var r=n(14).parseInt,i=n(173).trim,o=n(251),s=/^[\-+]?0[xX]/;t.exports=8!==r(o+"08")||22!==r(o+"0x16")?function(t,e){var n=i(String(t),3);return r(n,e>>>0||(s.test(n)?16:10))}:r},function(t,e){t.exports=Object.is||function(t,e){return t===e?0!==t||1/t===1/e:t!=t&&e!=e}},function(t,e,n){var r=n(6),i=n(80),o=n(18)("species");t.exports=function(t,e){var n,s=r(t).constructor;return void 0===s||void 0==(n=r(s)[o])?e:i(n)}},function(t,e,n){var r=n(83),i=n(68);t.exports=function(t){return function(e,n){var o,s,a=String(i(e)),c=r(n),u=a.length;return c<0||c>=u?t?"":void 0:(o=a.charCodeAt(c),o<55296||o>56319||c+1===u||(s=a.charCodeAt(c+1))<56320||s>57343?t?a.charAt(c):o:t?a.slice(c,c+2):(o-55296<<10)+(s-56320)+65536)}}},function(t,e,n){"use strict";var r=n(83),i=n(68);t.exports=function(t){var e=String(i(this)),n="",o=r(t);if(o<0||o==1/0)throw RangeError("Count can't be negative");for(;o>0;(o>>>=1)&&(e+=e))1&o&&(n+=e);return n}},function(t,e,n){e.f=n(18)},function(t,e,n){"use strict";var r=n(323);t.exports=n(167)("Map",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{get:function(t){var e=r.getEntry(this,t);return e&&e.v},set:function(t,e){return r.def(this,0===t?0:t,e)}},r,!0)},function(t,e,n){n(29)&&"g"!=/./g.flags&&n(24).f(RegExp.prototype,"flags",{configurable:!0,get:n(239)})},function(t,e,n){n(168)("match",1,function(t,e,n){return[function(n){"use strict";var r=t(this),i=void 0==n?void 0:n[e];return void 0!==i?i.call(n,r):new RegExp(n)[e](String(r))},n]})},function(t,e,n){n(168)("replace",2,function(t,e,n){return[function(r,i){"use strict";var o=t(this),s=void 0==r?void 0:r[e];return void 0!==s?s.call(r,o,i):n.call(String(o),r,i)},n]})},function(t,e,n){n(168)("search",1,function(t,e,n){return[function(n){"use strict";var r=t(this),i=void 0==n?void 0:n[e];return void 0!==i?i.call(n,r):new RegExp(n)[e](String(r))},n]})},function(t,e,n){n(168)("split",2,function(t,e,r){"use strict";var i=n(243),o=r,s=[].push,a="split",c="length",u="lastIndex";if("c"=="abbc"[a](/(b)*/)[1]||4!="test"[a](/(?:)/,-1)[c]||2!="ab"[a](/(?:ab)*/)[c]||4!="."[a](/(.?)(.?)/)[c]||"."[a](/()()/)[c]>1||""[a](/.?/)[c]){var l=void 0===/()??/.exec("")[1];r=function(t,e){var n=String(this);if(void 0===t&&0===e)return[];if(!i(t))return o.call(n,t,e);var r,a,h,p,f,_=[],d=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),y=0,m=void 0===e?4294967295:e>>>0,g=new RegExp(t.source,d+"g");for(l||(r=new RegExp("^"+g.source+"$(?!\\s)",d));(a=g.exec(n))&&(h=a.index+a[0][c],!(h>y&&(_.push(n.slice(y,a.index)),!l&&a[c]>1&&a[0].replace(r,function(){for(f=1;f1&&a.index=m)));)g[u]===a.index&&g[u]++;return y===n[c]?!p&&g.test("")||_.push(""):_.push(n.slice(y)),_[c]>m?_.slice(0,m):_}}else"0"[a](void 0,0)[c]&&(r=function(t,e){return void 0===t&&0===e?[]:o.call(this,t,e)});return[function(n,i){var o=t(this),s=void 0==n?void 0:n[e];return void 0!==s?s.call(n,o,i):r.call(String(o),n,i)},r]})},function(t,e,n){"use strict";var r=n(323);t.exports=n(167)("Set",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function(t){return r.def(this,t=0===t?0:t,t)}},r)},function(t,e,n){"use strict";var r=n(14),i=n(41),o=n(29),s=n(1),a=n(47),c=n(81).KEY,u=n(10),l=n(172),h=n(130),p=n(96),f=n(18),_=n(344),d=n(515),y=n(513),m=n(511),g=n(242),v=n(6),b=n(58),w=n(84),x=n(82),I=n(93),C=n(336),k=n(70),T=n(24),E=n(108),S=k.f,O=T.f,R=C.f,A=r.Symbol,N=r.JSON,P=N&&N.stringify,M="prototype",D=f("_hidden"),V=f("toPrimitive"),j={}.propertyIsEnumerable,L=l("symbol-registry"),F=l("symbols"),B=l("op-symbols"),U=Object[M],z="function"==typeof A,H=r.QObject,q=!H||!H[M]||!H[M].findChild,W=o&&u(function(){return 7!=I(O({},"a",{get:function(){return O(this,"a",{value:7}).a}})).a})?function(t,e,n){var r=S(U,e);r&&delete U[e],O(t,e,n),r&&t!==U&&O(U,e,r)}:O,Y=function(t){var e=F[t]=I(A[M]);return e._k=t,e},$=z&&"symbol"==typeof A.iterator?function(t){return"symbol"==typeof t}:function(t){return t instanceof A},G=function(t,e,n){return t===U&&G(B,e,n),v(t),e=w(e,!0),v(n),i(F,e)?(n.enumerable?(i(t,D)&&t[D][e]&&(t[D][e]=!1),n=I(n,{enumerable:x(0,!1)})):(i(t,D)||O(t,D,x(1,{})),t[D][e]=!0),W(t,e,n)):O(t,e,n)},Z=function(t,e){v(t);for(var n,r=m(e=b(e)),i=0,o=r.length;o>i;)G(t,n=r[i++],e[n]);return t},J=function(t,e){return void 0===e?I(t):Z(I(t),e)},K=function(t){var e=j.call(this,t=w(t,!0));return!(this===U&&i(F,t)&&!i(B,t))&&(!(e||!i(this,t)||!i(F,t)||i(this,D)&&this[D][t])||e)},X=function(t,e){if(t=b(t),e=w(e,!0),t!==U||!i(F,e)||i(B,e)){var n=S(t,e);return!n||!i(F,e)||i(t,D)&&t[D][e]||(n.enumerable=!0),n}},Q=function(t){for(var e,n=R(b(t)),r=[],o=0;n.length>o;)i(F,e=n[o++])||e==D||e==c||r.push(e);return r},tt=function(t){for(var e,n=t===U,r=R(n?B:b(t)),o=[],s=0;r.length>s;)!i(F,e=r[s++])||n&&!i(U,e)||o.push(F[e]);return o};z||(A=function(){if(this instanceof A)throw TypeError("Symbol is not a constructor!");var t=p(arguments.length>0?arguments[0]:void 0),e=function(n){this===U&&e.call(B,n),i(this,D)&&i(this[D],t)&&(this[D][t]=!1),W(this,t,x(1,n))};return o&&q&&W(U,t,{configurable:!0,set:e}),Y(t)},a(A[M],"toString",function(){return this._k}),k.f=X,T.f=G,n(94).f=C.f=Q,n(171).f=K,n(170).f=tt,o&&!n(127)&&a(U,"propertyIsEnumerable",K,!0),_.f=function(t){return Y(f(t))}),s(s.G+s.W+s.F*!z,{Symbol:A});for(var et="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),nt=0;et.length>nt;)f(et[nt++]);for(var et=E(f.store),nt=0;et.length>nt;)d(et[nt++]);s(s.S+s.F*!z,"Symbol",{for:function(t){return i(L,t+="")?L[t]:L[t]=A(t)},keyFor:function(t){if($(t))return y(L,t);throw TypeError(t+" is not a symbol!")},useSetter:function(){q=!0},useSimple:function(){q=!1}}),s(s.S+s.F*!z,"Object",{create:J,defineProperty:G,defineProperties:Z,getOwnPropertyDescriptor:X,getOwnPropertyNames:Q,getOwnPropertySymbols:tt}),N&&s(s.S+s.F*(!z||u(function(){var t=A();return"[null]"!=P([t])||"{}"!=P({a:t})||"{}"!=P(Object(t))})),"JSON",{stringify:function(t){if(void 0!==t&&!$(t)){for(var e,n,r=[t],i=1;arguments.length>i;)r.push(arguments[i++]);return e=r[1],"function"==typeof e&&(n=e),!n&&g(e)||(e=function(t,e){if(n&&(e=n.call(this,t,e)),!$(e))return e}),r[1]=e,P.apply(N,r)}}}),A[M][V]||n(51)(A[M],V,A[M].valueOf),h(A,"Symbol"),h(Math,"Math",!0),h(r.JSON,"JSON",!0)},function(t,e,n){"use strict";var r,i=n(62)(0),o=n(47),s=n(81),a=n(334),c=n(324),u=n(11),l=s.getWeak,h=Object.isExtensible,p=c.ufstore,f={},_=function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},d={get:function(t){if(u(t)){var e=l(t);return e===!0?p(this).get(t):e?e[this._i]:void 0}},set:function(t,e){return c.def(this,t,e)}},y=t.exports=n(167)("WeakMap",_,d,c,!0,!0);7!=(new y).set((Object.freeze||Object)(f),7).get(f)&&(r=c.getConstructor(_),a(r.prototype,d),s.NEED=!0,i(["delete","has","get","set"],function(t){var e=y.prototype,n=e[t];o(e,t,function(e,i){if(u(e)&&!h(e)){this._f||(this._f=new r);var o=this._f[t](e,i);return"set"==t?this:o}return n.call(this,e,i)})}))},function(t,e,n){"use strict";(function(e){function r(t,e,n){try{t=u.stripHash(t);var r=e._add(t),s={url:t,extension:u.getExtension(t)};return i(s,n).then(function(t){return r.pathType=t.plugin.name,s.data=t.result,o(s,n)}).then(function(t){return r.value=t.result,t.result})}catch(t){return h.reject(t)}}function i(t,e){return new h(function(n,r){function i(e){r(!e||e instanceof SyntaxError?a.syntax('Unable to resolve $ref pointer "%s"',t.url):e)}c("Reading %s",t.url);var o=l.all(e.resolve);o=l.filter(o,"canRead",t),l.sort(o),l.run(o,"read",t).then(n,i)})}function o(t,e){return new h(function(n,r){function i(e){!e.plugin.allowEmpty&&s(e.result)?r(a.syntax('Error parsing "%s" as %s. \nParsed value is empty',t.url,e.plugin.name)):n(e)}function o(e){e?(e=e instanceof Error?e:new Error(e),r(a.syntax(e,"Error parsing %s",t.url))):r(a.syntax("Unable to parse %s",t.url))}c("Parsing %s",t.url);var u=l.all(e.parse),h=l.filter(u,"canParse",t),p=h.length>0?h:u;l.sort(p),l.run(p,"parse",t).then(i,o)})}function s(t){return void 0===t||"object"==typeof t&&0===Object.keys(t).length||"string"==typeof t&&0===t.trim().length||e.isBuffer(t)&&0===t.length}var a=n(86),c=n(99),u=n(72),l=n(669),h=n(85);t.exports=r}).call(e,n(16).Buffer)},function(t,e,n){"use strict";var r=n(676),i=n(86);t.exports={parse:function(t,e){try{return r.safeLoad(t)}catch(t){throw t instanceof Error?t:i(t,t.message)}},stringify:function(t,e,n){try{var o=("string"==typeof n?n.length:n)||2;return r.safeDump(t,{indent:o})}catch(t){throw t instanceof Error?t:i(t,t.message)}}}},function(t,e,n){"use strict";var r=n(110);t.exports=new r({include:[n(357)]})},function(t,e,n){"use strict";var r=n(110);t.exports=new r({include:[n(256)],implicit:[n(690),n(682),n(684),n(683)]})},function(t,e,n){"use strict";function r(t){return this instanceof r?void i.call(this,t):new r(t)}t.exports=r;var i=n(257),o=n(65);o.inherits=n(42),o.inherits(r,i),r.prototype._transform=function(t,e,n){n(null,t)}},function(t,e,n){"use strict";(function(e){function r(t,e){M=M||n(100),t=t||{},this.objectMode=!!t.objectMode,e instanceof M&&(this.objectMode=this.objectMode||!!t.readableObjectMode);var r=t.highWaterMark,i=this.objectMode?16:16384;this.highWaterMark=r||0===r?r:i,this.highWaterMark=~~this.highWaterMark,this.buffer=[],this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.defaultEncoding=t.defaultEncoding||"utf8",this.ranOut=!1,this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,t.encoding&&(P||(P=n(190).StringDecoder),this.decoder=new P(t.encoding),this.encoding=t.encoding)}function i(t){return M=M||n(100),this instanceof i?(this._readableState=new r(t,this),this.readable=!0,t&&"function"==typeof t.read&&(this._read=t.read),void S.call(this)):new i(t)}function o(t,e,n,r,i){var o=u(e,n);if(o)t.emit("error",o);else if(null===n)e.reading=!1,l(t,e);else if(e.objectMode||n&&n.length>0)if(e.ended&&!i){var a=new Error("stream.push() after EOF");t.emit("error",a)}else if(e.endEmitted&&i){var a=new Error("stream.unshift() after end event");t.emit("error",a)}else{var c;!e.decoder||i||r||(n=e.decoder.write(n),c=!e.objectMode&&0===n.length),i||(e.reading=!1),c||(e.flowing&&0===e.length&&!e.sync?(t.emit("data",n),t.read(0)):(e.length+=e.objectMode?1:n.length,i?e.buffer.unshift(n):e.buffer.push(n),e.needReadable&&h(t))),f(t,e)}else i||(e.reading=!1);return s(e)}function s(t){return!t.ended&&(t.needReadable||t.length=D?t=D:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++),t}function c(t,e){return 0===e.length&&e.ended?0:e.objectMode?0===t?0:1:null===t||isNaN(t)?e.flowing&&e.buffer.length?e.buffer[0].length:e.length:t<=0?0:(t>e.highWaterMark&&(e.highWaterMark=a(t)),t>e.length?e.ended?e.length:(e.needReadable=!0,0):t)}function u(t,e){var n=null;return E.isBuffer(e)||"string"==typeof e||null===e||void 0===e||t.objectMode||(n=new TypeError("Invalid non-string/buffer chunk")),n}function l(t,e){if(!e.ended){if(e.decoder){var n=e.decoder.end();n&&n.length&&(e.buffer.push(n),e.length+=e.objectMode?1:n.length)}e.ended=!0,h(t)}}function h(t){var e=t._readableState;e.needReadable=!1,e.emittedReadable||(N("emitReadable",e.flowing),e.emittedReadable=!0,e.sync?k(p,t):p(t))}function p(t){N("emit readable"),t.emit("readable"),v(t)}function f(t,e){e.readingMore||(e.readingMore=!0,k(_,t,e))}function _(t,e){for(var n=e.length;!e.reading&&!e.flowing&&!e.ended&&e.length=i)n=o?r.join(""):1===r.length?r[0]:E.concat(r,i),r.length=0;else if(t0)throw new Error("endReadable called on non-empty stream");e.endEmitted||(e.ended=!0,k(x,e,t))}function x(t,e){t.endEmitted||0!==t.length||(t.endEmitted=!0,e.readable=!1,e.emit("end"))}function I(t,e){for(var n=0,r=t.length;n0)&&(e.emittedReadable=!1),0===t&&e.needReadable&&(e.length>=e.highWaterMark||e.ended))return N("read: emitReadable",e.length,e.ended),0===e.length&&e.ended?w(this):h(this),null;if(t=c(t,e),0===t&&e.ended)return 0===e.length&&w(this),null;var r=e.needReadable;N("need readable",r),(0===e.length||e.length-t0?b(t,e):null,null===i&&(e.needReadable=!0,t=0),e.length-=t,0!==e.length||e.ended||(e.needReadable=!0),n!==t&&e.ended&&0===e.length&&w(this),null!==i&&this.emit("data",i),i},i.prototype._read=function(t){this.emit("error",new Error("not implemented"))},i.prototype.pipe=function(t,n){function r(t){N("onunpipe"),t===h&&o()}function i(){N("onend"),t.end()}function o(){N("cleanup"),t.removeListener("close",c),t.removeListener("finish",u),t.removeListener("drain",y),t.removeListener("error",a),t.removeListener("unpipe",r),h.removeListener("end",i),h.removeListener("end",o),h.removeListener("data",s),m=!0,!p.awaitDrain||t._writableState&&!t._writableState.needDrain||y()}function s(e){N("ondata");var n=t.write(e);!1===n&&(1!==p.pipesCount||p.pipes[0]!==t||1!==h.listenerCount("data")||m||(N("false write response, pause",h._readableState.awaitDrain),h._readableState.awaitDrain++),h.pause())}function a(e){N("onerror",e),l(),t.removeListener("error",a),0===O(t,"error")&&t.emit("error",e)}function c(){t.removeListener("finish",u),l()}function u(){N("onfinish"),t.removeListener("close",c),l()}function l(){N("unpipe"),h.unpipe(t)}var h=this,p=this._readableState;switch(p.pipesCount){case 0:p.pipes=t;break;case 1:p.pipes=[p.pipes,t];break;default:p.pipes.push(t)}p.pipesCount+=1,N("pipe count=%d opts=%j",p.pipesCount,n);var f=(!n||n.end!==!1)&&t!==e.stdout&&t!==e.stderr,_=f?i:o;p.endEmitted?k(_):h.once("end",_),t.on("unpipe",r);var y=d(h);t.on("drain",y);var m=!1;return h.on("data",s),t._events&&t._events.error?T(t._events.error)?t._events.error.unshift(a):t._events.error=[a,t._events.error]:t.on("error",a),t.once("close",c),t.once("finish",u),t.emit("pipe",h),p.flowing||(N("pipe resume"),h.resume()),t},i.prototype.unpipe=function(t){var e=this._readableState;if(0===e.pipesCount)return this;if(1===e.pipesCount)return t&&t!==e.pipes?this:(t||(t=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,t&&t.emit("unpipe",this),this);if(!t){var n=e.pipes,r=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var i=0;i",Gt:"≫",gt:">",gtcc:"⪧",gtcir:"⩺",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",Hacek:"ˇ",hairsp:" ",half:"½",hamilt:"ℋ",HARDcy:"Ъ",hardcy:"ъ",hArr:"⇔",harr:"↔",harrcir:"⥈",harrw:"↭",Hat:"^",hbar:"ℏ",Hcirc:"Ĥ",hcirc:"ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",Hfr:"ℌ",hfr:"𝔥",HilbertSpace:"ℋ",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",Hopf:"ℍ",hopf:"𝕙",horbar:"―",HorizontalLine:"─",Hscr:"ℋ",hscr:"𝒽",hslash:"ℏ",Hstrok:"Ħ",hstrok:"ħ",HumpDownHump:"≎",HumpEqual:"≏",hybull:"⁃",hyphen:"‐",Iacute:"Í",iacute:"í",ic:"⁣",Icirc:"Î",icirc:"î",Icy:"И",icy:"и",Idot:"İ",IEcy:"Е",iecy:"е",iexcl:"¡",iff:"⇔",Ifr:"ℑ",ifr:"𝔦",Igrave:"Ì",igrave:"ì",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",IJlig:"IJ",ijlig:"ij",Im:"ℑ",Imacr:"Ī",imacr:"ī",image:"ℑ",ImaginaryI:"ⅈ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",imof:"⊷",imped:"Ƶ",Implies:"⇒",in:"∈",incare:"℅",infin:"∞",infintie:"⧝",inodot:"ı",Int:"∬",int:"∫",intcal:"⊺",integers:"ℤ",Integral:"∫",intercal:"⊺",Intersection:"⋂",intlarhk:"⨗",intprod:"⨼",InvisibleComma:"⁣",InvisibleTimes:"⁢",IOcy:"Ё",iocy:"ё",Iogon:"Į",iogon:"į",Iopf:"𝕀",iopf:"𝕚",Iota:"Ι",iota:"ι",iprod:"⨼",iquest:"¿",Iscr:"ℐ",iscr:"𝒾",isin:"∈",isindot:"⋵",isinE:"⋹",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"⁢",Itilde:"Ĩ",itilde:"ĩ",Iukcy:"І",iukcy:"і",Iuml:"Ï",iuml:"ï",Jcirc:"Ĵ",jcirc:"ĵ",Jcy:"Й",jcy:"й",Jfr:"𝔍",jfr:"𝔧",jmath:"ȷ",Jopf:"𝕁",jopf:"𝕛",Jscr:"𝒥",jscr:"𝒿",Jsercy:"Ј",jsercy:"ј",Jukcy:"Є",jukcy:"є",Kappa:"Κ",kappa:"κ",kappav:"ϰ",Kcedil:"Ķ",kcedil:"ķ",Kcy:"К",kcy:"к",Kfr:"𝔎",kfr:"𝔨",kgreen:"ĸ",KHcy:"Х",khcy:"х",KJcy:"Ќ",kjcy:"ќ",Kopf:"𝕂",kopf:"𝕜",Kscr:"𝒦",kscr:"𝓀",lAarr:"⇚",Lacute:"Ĺ",lacute:"ĺ",laemptyv:"⦴",lagran:"ℒ",Lambda:"Λ",lambda:"λ",Lang:"⟪",lang:"⟨",langd:"⦑",langle:"⟨",lap:"⪅",Laplacetrf:"ℒ",laquo:"«",Larr:"↞",lArr:"⇐",larr:"←",larrb:"⇤",larrbfs:"⤟",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",lat:"⪫",lAtail:"⤛",latail:"⤙",late:"⪭",lates:"⪭︀",lBarr:"⤎",lbarr:"⤌",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",Lcaron:"Ľ",lcaron:"ľ",Lcedil:"Ļ",lcedil:"ļ",lceil:"⌈",lcub:"{",Lcy:"Л",lcy:"л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",lE:"≦",le:"≤",LeftAngleBracket:"⟨",LeftArrow:"←",Leftarrow:"⇐",leftarrow:"←",LeftArrowBar:"⇤",LeftArrowRightArrow:"⇆",leftarrowtail:"↢",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVector:"⇃",LeftDownVectorBar:"⥙",LeftFloor:"⌊",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",LeftRightArrow:"↔",Leftrightarrow:"⇔",leftrightarrow:"↔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",LeftRightVector:"⥎",LeftTee:"⊣",LeftTeeArrow:"↤",LeftTeeVector:"⥚",leftthreetimes:"⋋",LeftTriangle:"⊲",LeftTriangleBar:"⧏",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVector:"↿",LeftUpVectorBar:"⥘",LeftVector:"↼",LeftVectorBar:"⥒",lEg:"⪋",leg:"⋚",leq:"≤",leqq:"≦",leqslant:"⩽",les:"⩽",lescc:"⪨",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",lessgtr:"≶",LessLess:"⪡",lesssim:"≲",LessSlantEqual:"⩽",LessTilde:"≲",lfisht:"⥼",lfloor:"⌊",Lfr:"𝔏",lfr:"𝔩",lg:"≶",lgE:"⪑",lHar:"⥢",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",LJcy:"Љ",ljcy:"љ",Ll:"⋘",ll:"≪",llarr:"⇇",llcorner:"⌞",Lleftarrow:"⇚",llhard:"⥫",lltri:"◺",Lmidot:"Ŀ",lmidot:"ŀ",lmoust:"⎰",lmoustache:"⎰",lnap:"⪉",lnapprox:"⪉",lnE:"≨",lne:"⪇",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",LongLeftArrow:"⟵",Longleftarrow:"⟸",longleftarrow:"⟵",LongLeftRightArrow:"⟷",Longleftrightarrow:"⟺",longleftrightarrow:"⟷",longmapsto:"⟼",LongRightArrow:"⟶",Longrightarrow:"⟹",longrightarrow:"⟶",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",Lopf:"𝕃",lopf:"𝕝",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",LowerLeftArrow:"↙",LowerRightArrow:"↘",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"‎",lrtri:"⊿",lsaquo:"‹",Lscr:"ℒ",lscr:"𝓁",Lsh:"↰",lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",Lstrok:"Ł",lstrok:"ł",LT:"<",Lt:"≪",lt:"<",ltcc:"⪦",ltcir:"⩹",ltdot:"⋖",lthree:"⋋",ltimes:"⋉", +ltlarr:"⥶",ltquest:"⩻",ltri:"◃",ltrie:"⊴",ltrif:"◂",ltrPar:"⦖",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",macr:"¯",male:"♂",malt:"✠",maltese:"✠",Map:"⤅",map:"↦",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",Mcy:"М",mcy:"м",mdash:"—",mDDot:"∺",measuredangle:"∡",MediumSpace:" ",Mellintrf:"ℳ",Mfr:"𝔐",mfr:"𝔪",mho:"℧",micro:"µ",mid:"∣",midast:"*",midcir:"⫰",middot:"·",minus:"−",minusb:"⊟",minusd:"∸",minusdu:"⨪",MinusPlus:"∓",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",Mopf:"𝕄",mopf:"𝕞",mp:"∓",Mscr:"ℳ",mscr:"𝓂",mstpos:"∾",Mu:"Μ",mu:"μ",multimap:"⊸",mumap:"⊸",nabla:"∇",Nacute:"Ń",nacute:"ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natur:"♮",natural:"♮",naturals:"ℕ",nbsp:" ",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",Ncaron:"Ň",ncaron:"ň",Ncedil:"Ņ",ncedil:"ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",Ncy:"Н",ncy:"н",ndash:"–",ne:"≠",nearhk:"⤤",neArr:"⇗",nearr:"↗",nearrow:"↗",nedot:"≐̸",NegativeMediumSpace:"​",NegativeThickSpace:"​",NegativeThinSpace:"​",NegativeVeryThinSpace:"​",nequiv:"≢",nesear:"⤨",nesim:"≂̸",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:"\n",nexist:"∄",nexists:"∄",Nfr:"𝔑",nfr:"𝔫",ngE:"≧̸",nge:"≱",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",nGg:"⋙̸",ngsim:"≵",nGt:"≫⃒",ngt:"≯",ngtr:"≯",nGtv:"≫̸",nhArr:"⇎",nharr:"↮",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",NJcy:"Њ",njcy:"њ",nlArr:"⇍",nlarr:"↚",nldr:"‥",nlE:"≦̸",nle:"≰",nLeftarrow:"⇍",nleftarrow:"↚",nLeftrightarrow:"⇎",nleftrightarrow:"↮",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nLl:"⋘̸",nlsim:"≴",nLt:"≪⃒",nlt:"≮",nltri:"⋪",nltrie:"⋬",nLtv:"≪̸",nmid:"∤",NoBreak:"⁠",NonBreakingSpace:" ",Nopf:"ℕ",nopf:"𝕟",Not:"⫬",not:"¬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",notin:"∉",notindot:"⋵̸",notinE:"⋹̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",NotLeftTriangle:"⋪",NotLeftTriangleBar:"⧏̸",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangle:"⋫",NotRightTriangleBar:"⧐̸",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",npar:"∦",nparallel:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",npre:"⪯̸",nprec:"⊀",npreceq:"⪯̸",nrArr:"⇏",nrarr:"↛",nrarrc:"⤳̸",nrarrw:"↝̸",nRightarrow:"⇏",nrightarrow:"↛",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",Nscr:"𝒩",nscr:"𝓃",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsubE:"⫅̸",nsube:"⊈",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupE:"⫆̸",nsupe:"⊉",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",Ntilde:"Ñ",ntilde:"ñ",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",Nu:"Ν",nu:"ν",num:"#",numero:"№",numsp:" ",nvap:"≍⃒",nVDash:"⊯",nVdash:"⊮",nvDash:"⊭",nvdash:"⊬",nvge:"≥⃒",nvgt:">⃒",nvHarr:"⤄",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwarhk:"⤣",nwArr:"⇖",nwarr:"↖",nwarrow:"↖",nwnear:"⤧",Oacute:"Ó",oacute:"ó",oast:"⊛",ocir:"⊚",Ocirc:"Ô",ocirc:"ô",Ocy:"О",ocy:"о",odash:"⊝",Odblac:"Ő",odblac:"ő",odiv:"⨸",odot:"⊙",odsold:"⦼",OElig:"Œ",oelig:"œ",ofcir:"⦿",Ofr:"𝔒",ofr:"𝔬",ogon:"˛",Ograve:"Ò",ograve:"ò",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",Omacr:"Ō",omacr:"ō",Omega:"Ω",omega:"ω",Omicron:"Ο",omicron:"ο",omid:"⦶",ominus:"⊖",Oopf:"𝕆",oopf:"𝕠",opar:"⦷",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",operp:"⦹",oplus:"⊕",Or:"⩔",or:"∨",orarr:"↻",ord:"⩝",order:"ℴ",orderof:"ℴ",ordf:"ª",ordm:"º",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oS:"Ⓢ",Oscr:"𝒪",oscr:"ℴ",Oslash:"Ø",oslash:"ø",osol:"⊘",Otilde:"Õ",otilde:"õ",Otimes:"⨷",otimes:"⊗",otimesas:"⨶",Ouml:"Ö",ouml:"ö",ovbar:"⌽",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",par:"∥",para:"¶",parallel:"∥",parsim:"⫳",parsl:"⫽",part:"∂",PartialD:"∂",Pcy:"П",pcy:"п",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",Pfr:"𝔓",pfr:"𝔭",Phi:"Φ",phi:"φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",Pi:"Π",pi:"π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plus:"+",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plusdo:"∔",plusdu:"⨥",pluse:"⩲",PlusMinus:"±",plusmn:"±",plussim:"⨦",plustwo:"⨧",pm:"±",Poincareplane:"ℌ",pointint:"⨕",Popf:"ℙ",popf:"𝕡",pound:"£",Pr:"⪻",pr:"≺",prap:"⪷",prcue:"≼",prE:"⪳",pre:"⪯",prec:"≺",precapprox:"⪷",preccurlyeq:"≼",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",precsim:"≾",Prime:"″",prime:"′",primes:"ℙ",prnap:"⪹",prnE:"⪵",prnsim:"⋨",prod:"∏",Product:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",Proportion:"∷",Proportional:"∝",propto:"∝",prsim:"≾",prurel:"⊰",Pscr:"𝒫",pscr:"𝓅",Psi:"Ψ",psi:"ψ",puncsp:" ",Qfr:"𝔔",qfr:"𝔮",qint:"⨌",Qopf:"ℚ",qopf:"𝕢",qprime:"⁗",Qscr:"𝒬",qscr:"𝓆",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",QUOT:'"',quot:'"',rAarr:"⇛",race:"∽̱",Racute:"Ŕ",racute:"ŕ",radic:"√",raemptyv:"⦳",Rang:"⟫",rang:"⟩",rangd:"⦒",range:"⦥",rangle:"⟩",raquo:"»",Rarr:"↠",rArr:"⇒",rarr:"→",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",rarrpl:"⥅",rarrsim:"⥴",Rarrtl:"⤖",rarrtl:"↣",rarrw:"↝",rAtail:"⤜",ratail:"⤚",ratio:"∶",rationals:"ℚ",RBarr:"⤐",rBarr:"⤏",rbarr:"⤍",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",Rcaron:"Ř",rcaron:"ř",Rcedil:"Ŗ",rcedil:"ŗ",rceil:"⌉",rcub:"}",Rcy:"Р",rcy:"р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",Re:"ℜ",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",rect:"▭",REG:"®",reg:"®",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",rfisht:"⥽",rfloor:"⌋",Rfr:"ℜ",rfr:"𝔯",rHar:"⥤",rhard:"⇁",rharu:"⇀",rharul:"⥬",Rho:"Ρ",rho:"ρ",rhov:"ϱ",RightAngleBracket:"⟩",RightArrow:"→",Rightarrow:"⇒",rightarrow:"→",RightArrowBar:"⇥",RightArrowLeftArrow:"⇄",rightarrowtail:"↣",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVector:"⇂",RightDownVectorBar:"⥕",RightFloor:"⌋",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",RightTee:"⊢",RightTeeArrow:"↦",RightTeeVector:"⥛",rightthreetimes:"⋌",RightTriangle:"⊳",RightTriangleBar:"⧐",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVector:"↾",RightUpVectorBar:"⥔",RightVector:"⇀",RightVectorBar:"⥓",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"‏",rmoust:"⎱",rmoustache:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",Ropf:"ℝ",ropf:"𝕣",roplus:"⨮",rotimes:"⨵",RoundImplies:"⥰",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",Rrightarrow:"⇛",rsaquo:"›",Rscr:"ℛ",rscr:"𝓇",Rsh:"↱",rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",RuleDelayed:"⧴",ruluhar:"⥨",rx:"℞",Sacute:"Ś",sacute:"ś",sbquo:"‚",Sc:"⪼",sc:"≻",scap:"⪸",Scaron:"Š",scaron:"š",sccue:"≽",scE:"⪴",sce:"⪰",Scedil:"Ş",scedil:"ş",Scirc:"Ŝ",scirc:"ŝ",scnap:"⪺",scnE:"⪶",scnsim:"⋩",scpolint:"⨓",scsim:"≿",Scy:"С",scy:"с",sdot:"⋅",sdotb:"⊡",sdote:"⩦",searhk:"⤥",seArr:"⇘",searr:"↘",searrow:"↘",sect:"§",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",Sfr:"𝔖",sfr:"𝔰",sfrown:"⌢",sharp:"♯",SHCHcy:"Щ",shchcy:"щ",SHcy:"Ш",shcy:"ш",ShortDownArrow:"↓",ShortLeftArrow:"←",shortmid:"∣",shortparallel:"∥",ShortRightArrow:"→",ShortUpArrow:"↑",shy:"­",Sigma:"Σ",sigma:"σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",SmallCircle:"∘",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",SOFTcy:"Ь",softcy:"ь",sol:"/",solb:"⧄",solbar:"⌿",Sopf:"𝕊",sopf:"𝕤",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",Sqrt:"√",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",squ:"□",Square:"□",square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",squarf:"▪",squf:"▪",srarr:"→",Sscr:"𝒮",sscr:"𝓈",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",Star:"⋆",star:"☆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"¯",Sub:"⋐",sub:"⊂",subdot:"⪽",subE:"⫅",sube:"⊆",subedot:"⫃",submult:"⫁",subnE:"⫋",subne:"⊊",subplus:"⪿",subrarr:"⥹",Subset:"⋐",subset:"⊂",subseteq:"⊆",subseteqq:"⫅",SubsetEqual:"⊆",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succ:"≻",succapprox:"⪸",succcurlyeq:"≽",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",succeq:"⪰",succnapprox:"⪺",succneqq:"⪶",succnsim:"⋩",succsim:"≿",SuchThat:"∋",Sum:"∑",sum:"∑",sung:"♪",Sup:"⋑",sup:"⊃",sup1:"¹",sup2:"²",sup3:"³",supdot:"⪾",supdsub:"⫘",supE:"⫆",supe:"⊇",supedot:"⫄",Superset:"⊃",SupersetEqual:"⊇",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supnE:"⫌",supne:"⊋",supplus:"⫀",Supset:"⋑",supset:"⊃",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swarhk:"⤦",swArr:"⇙",swarr:"↙",swarrow:"↙",swnwar:"⤪",szlig:"ß",Tab:"\t",target:"⌖",Tau:"Τ",tau:"τ",tbrk:"⎴",Tcaron:"Ť",tcaron:"ť",Tcedil:"Ţ",tcedil:"ţ",Tcy:"Т",tcy:"т",tdot:"⃛",telrec:"⌕",Tfr:"𝔗",tfr:"𝔱",there4:"∴",Therefore:"∴",therefore:"∴",Theta:"Θ",theta:"θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",ThickSpace:"  ",thinsp:" ",ThinSpace:" ",thkap:"≈",thksim:"∼",THORN:"Þ",thorn:"þ",Tilde:"∼",tilde:"˜",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",times:"×",timesb:"⊠",timesbar:"⨱",timesd:"⨰",tint:"∭",toea:"⤨",top:"⊤",topbot:"⌶",topcir:"⫱",Topf:"𝕋",topf:"𝕥",topfork:"⫚",tosa:"⤩",tprime:"‴",TRADE:"™",trade:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",TripleDot:"⃛",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",Tscr:"𝒯",tscr:"𝓉",TScy:"Ц",tscy:"ц",TSHcy:"Ћ",tshcy:"ћ",Tstrok:"Ŧ",tstrok:"ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",Uacute:"Ú",uacute:"ú",Uarr:"↟",uArr:"⇑",uarr:"↑",Uarrocir:"⥉",Ubrcy:"Ў",ubrcy:"ў",Ubreve:"Ŭ",ubreve:"ŭ",Ucirc:"Û",ucirc:"û",Ucy:"У",ucy:"у",udarr:"⇅",Udblac:"Ű",udblac:"ű",udhar:"⥮",ufisht:"⥾",Ufr:"𝔘",ufr:"𝔲",Ugrave:"Ù",ugrave:"ù",uHar:"⥣",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",Umacr:"Ū",umacr:"ū",uml:"¨",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",Uogon:"Ų",uogon:"ų",Uopf:"𝕌",uopf:"𝕦",UpArrow:"↑",Uparrow:"⇑",uparrow:"↑",UpArrowBar:"⤒",UpArrowDownArrow:"⇅",UpDownArrow:"↕",Updownarrow:"⇕",updownarrow:"↕",UpEquilibrium:"⥮",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",UpperLeftArrow:"↖",UpperRightArrow:"↗",Upsi:"ϒ",upsi:"υ",upsih:"ϒ",Upsilon:"Υ",upsilon:"υ",UpTee:"⊥",UpTeeArrow:"↥",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",Uring:"Ů",uring:"ů",urtri:"◹",Uscr:"𝒰",uscr:"𝓊",utdot:"⋰",Utilde:"Ũ",utilde:"ũ",utri:"▵",utrif:"▴",uuarr:"⇈",Uuml:"Ü",uuml:"ü",uwangle:"⦧",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅",varphi:"ϕ",varpi:"ϖ",varpropto:"∝",vArr:"⇕",varr:"↕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",Vbar:"⫫",vBar:"⫨",vBarv:"⫩",Vcy:"В",vcy:"в",VDash:"⊫",Vdash:"⊩",vDash:"⊨",vdash:"⊢",Vdashl:"⫦",Vee:"⋁",vee:"∨",veebar:"⊻",veeeq:"≚",vellip:"⋮",Verbar:"‖",verbar:"|",Vert:"‖",vert:"|",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",Vfr:"𝔙",vfr:"𝔳",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",Vopf:"𝕍",vopf:"𝕧",vprop:"∝",vrtri:"⊳",Vscr:"𝒱",vscr:"𝓋",vsubnE:"⫋︀",vsubne:"⊊︀",vsupnE:"⫌︀",vsupne:"⊋︀",Vvdash:"⊪",vzigzag:"⦚",Wcirc:"Ŵ",wcirc:"ŵ",wedbar:"⩟",Wedge:"⋀",wedge:"∧",wedgeq:"≙",weierp:"℘",Wfr:"𝔚",wfr:"𝔴",Wopf:"𝕎",wopf:"𝕨",wp:"℘",wr:"≀",wreath:"≀",Wscr:"𝒲",wscr:"𝓌",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",Xfr:"𝔛",xfr:"𝔵",xhArr:"⟺",xharr:"⟷",Xi:"Ξ",xi:"ξ",xlArr:"⟸",xlarr:"⟵",xmap:"⟼",xnis:"⋻",xodot:"⨀",Xopf:"𝕏",xopf:"𝕩",xoplus:"⨁",xotime:"⨂",xrArr:"⟹",xrarr:"⟶",Xscr:"𝒳",xscr:"𝓍",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",Yacute:"Ý",yacute:"ý",YAcy:"Я",yacy:"я",Ycirc:"Ŷ",ycirc:"ŷ",Ycy:"Ы",ycy:"ы",yen:"¥",Yfr:"𝔜",yfr:"𝔶",YIcy:"Ї",yicy:"ї",Yopf:"𝕐",yopf:"𝕪",Yscr:"𝒴",yscr:"𝓎",YUcy:"Ю",yucy:"ю",Yuml:"Ÿ",yuml:"ÿ",Zacute:"Ź",zacute:"ź",Zcaron:"Ž",zcaron:"ž",Zcy:"З",zcy:"з",Zdot:"Ż",zdot:"ż",zeetrf:"ℨ",ZeroWidthSpace:"​",Zeta:"Ζ",zeta:"ζ",Zfr:"ℨ",zfr:"𝔷",ZHcy:"Ж",zhcy:"ж",zigrarr:"⇝",Zopf:"ℤ",zopf:"𝕫",Zscr:"𝒵",zscr:"𝓏",zwj:"‍",zwnj:"‌"}},function(t,e,n){"use strict";var r=n(44).replaceEntities;t.exports=function(t){var e=r(t);try{e=decodeURI(e)}catch(t){}return encodeURI(e)}},function(t,e){"use strict";t.exports=function(t){return t.trim().replace(/\s+/g," ").toUpperCase()}},function(t,e,n){"use strict";var r=n(361),i=n(44).unescapeMd;t.exports=function(t,e){var n,o,s,a=e,c=t.posMax;if(60===t.src.charCodeAt(e)){for(e++;e8&&n<14);)if(92===n&&e+11))break;if(41===n&&(o--,o<0))break;e++}return a!==e&&(s=i(t.src.slice(a,e)),!!t.parser.validateLink(s)&&(t.linkContent=s,t.pos=e,!0))}},function(t,e,n){"use strict";var r=n(44).unescapeMd;t.exports=function(t,e){var n,i=e,o=t.posMax,s=t.src.charCodeAt(e);if(34!==s&&39!==s&&40!==s)return!1;for(e++,40===s&&(s=41);e1&&"number"==typeof t[t.length-1]&&(n=t.pop())):"number"==typeof i&&(n=t.pop()),1===t.length?t[0]:new o.ArrayObservable(t,r).lift(new s.MergeAllOperator(n))}var o=n(73),s=n(184),a=n(88);e.merge=r,e.mergeStatic=i},function(t,e,n){"use strict";function r(t,e,n){return void 0===n&&(n=Number.POSITIVE_INFINITY),"number"==typeof e&&(n=e,e=null),this.lift(new a(t,e,n))}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(5),s=n(4);e.mergeMap=r;var a=function(){function t(t,e,n){void 0===n&&(n=Number.POSITIVE_INFINITY),this.project=t,this.resultSelector=e,this.concurrent=n}return t.prototype.call=function(t,e){return e._subscribe(new c(t,this.project,this.resultSelector,this.concurrent))},t}();e.MergeMapOperator=a;var c=function(t){function e(e,n,r,i){void 0===i&&(i=Number.POSITIVE_INFINITY),t.call(this,e),this.project=n,this.resultSelector=r,this.concurrent=i,this.hasCompleted=!1,this.buffer=[],this.active=0,this.index=0}return i(e,t),e.prototype._next=function(t){this.active0?this._next(e.shift()):0===this.active&&this.hasCompleted&&this.destination.complete()},e}(s.OuterSubscriber);e.MergeMapSubscriber=c},function(t,e,n){"use strict";function r(t,e,n){return void 0===n&&(n=Number.POSITIVE_INFINITY),"number"==typeof e&&(n=e,e=null),this.lift(new a(t,e,n))}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(4),s=n(5);e.mergeMapTo=r;var a=function(){function t(t,e,n){void 0===n&&(n=Number.POSITIVE_INFINITY),this.ish=t,this.resultSelector=e,this.concurrent=n}return t.prototype.call=function(t,e){return e._subscribe(new c(t,this.ish,this.resultSelector,this.concurrent))},t}();e.MergeMapToOperator=a;var c=function(t){function e(e,n,r,i){void 0===i&&(i=Number.POSITIVE_INFINITY),t.call(this,e),this.ish=n,this.resultSelector=r,this.concurrent=i,this.hasCompleted=!1,this.buffer=[],this.active=0,this.index=0}return i(e,t),e.prototype._next=function(t){if(this.active0?this._next(e.shift()):0===this.active&&this.hasCompleted&&this.destination.complete()},e}(o.OuterSubscriber);e.MergeMapToSubscriber=c},function(t,e,n){"use strict";function r(){for(var t=[],e=0;ee.index?1:-1:t.delay>e.delay?1:-1},e}(i.AsyncAction);e.VirtualAction=a},function(t,e,n){"use strict";var r=n(1043),i=n(1044);e.asap=new i.AsapScheduler(r.AsapAction)},function(t,e,n){"use strict";var r=n(1045),i=n(1046);e.queue=new i.QueueScheduler(r.QueueAction)},function(t,e){"use strict";var n=function(){function t(t,e){void 0===e&&(e=Number.POSITIVE_INFINITY),this.subscribedFrame=t,this.unsubscribedFrame=e}return t}();e.SubscriptionLog=n},function(t,e,n){"use strict";var r=n(383),i=function(){function t(){this.subscriptions=[]}return t.prototype.logSubscribedFrame=function(){return this.subscriptions.push(new r.SubscriptionLog(this.scheduler.now())),this.subscriptions.length-1},t.prototype.logUnsubscribedFrame=function(t){var e=this.subscriptions,n=e[t];e[t]=new r.SubscriptionLog(n.subscribedFrame,this.scheduler.now())},t}();e.SubscriptionLoggable=i},function(t,e){"use strict";var n=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},r=function(t){function e(e){t.call(this),this.errors=e;var n=Error.call(this,e?e.length+" errors occurred during unsubscription:\n "+e.map(function(t,e){return e+1+") "+t.toString()}).join("\n "):"");this.name=n.name="UnsubscriptionError",this.stack=n.stack,this.message=n.message}return n(e,t),e}(Error);e.UnsubscriptionError=r},function(t,e){"use strict";function n(t,e){for(var n=0,r=e.length;n":"greater"};e=t.exports=function(t,e){return t.split("").reduce(function(t,e){return n[e]&&(e=n[e]),e=e.replace(/[^\w\s$\*_\+~\.\(\)'"!\-:@]/g,""),t+=e},"").replace(/^\s+|\s+$/g,"").replace(/[-\s]+/g,e||"-").replace("#{replacement}$","")}},function(t,e,n){(function(t){var r=n(1061),i=n(1074),o=n(488),s=n(192),a=e;a.request=function(e,n){e="string"==typeof e?s.parse(e):i(e);var o=t.location.protocol.search(/^https?:$/)===-1?"http:":"",a=e.protocol||o,c=e.hostname||e.host,u=e.port,l=e.path||"/";c&&c.indexOf(":")!==-1&&(c="["+c+"]"),e.url=(c?a+"//"+c:"")+(u?":"+u:"")+l,e.method=(e.method||"GET").toUpperCase(),e.headers=e.headers||{};var h=new r(e);return n&&h.on("response",n),h},a.get=function(t,e){var n=a.request(t,e);return n.end(),n},a.Agent=function(){},a.Agent.defaultMaxSockets=4,a.STATUS_CODES=o,a.METHODS=["CHECKOUT","CONNECT","COPY","DELETE","GET","HEAD","LOCK","M-SEARCH","MERGE","MKACTIVITY","MKCOL","MOVE","NOTIFY","OPTIONS","PATCH","POST","PROPFIND","PROPPATCH","PURGE","PUT","REPORT","SEARCH","SUBSCRIBE","TRACE","UNLOCK","UNSUBSCRIBE"]}).call(e,n(27))},function(t,e,n){(function(t){function n(t){try{return i.responseType=t,i.responseType===t}catch(t){}return!1}function r(t){return"function"==typeof t}e.fetch=r(t.fetch)&&r(t.ReadableStream),e.blobConstructor=!1;try{new Blob([new ArrayBuffer(1)]),e.blobConstructor=!0}catch(t){}var i=new t.XMLHttpRequest;i.open("GET",t.location.host?"/":"https://example.com");var o="undefined"!=typeof t.ArrayBuffer,s=o&&r(t.ArrayBuffer.prototype.slice);e.arraybuffer=o&&n("arraybuffer"),e.msstream=!e.fetch&&s&&n("ms-stream"),e.mozchunkedarraybuffer=!e.fetch&&o&&n("moz-chunked-arraybuffer"),e.overrideMimeType=r(i.overrideMimeType),e.vbArray=r(t.VBArray),i=null}).call(e,n(27))},function(t,e,n){"use strict";(function(e){function r(t,e,n){return"function"==typeof t.prependListener?t.prependListener(e,n):void(t._events&&t._events[e]?R(t._events[e])?t._events[e].unshift(n):t._events[e]=[n,t._events[e]]:t.on(e,n))}function i(t,e){B=B||n(114),t=t||{},this.objectMode=!!t.objectMode,e instanceof B&&(this.objectMode=this.objectMode||!!t.readableObjectMode);var r=t.highWaterMark,i=this.objectMode?16:16384;this.highWaterMark=r||0===r?r:i,this.highWaterMark=~~this.highWaterMark,this.buffer=new F,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.defaultEncoding=t.defaultEncoding||"utf8",this.ranOut=!1,this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,t.encoding&&(L||(L=n(190).StringDecoder),this.decoder=new L(t.encoding),this.encoding=t.encoding)}function o(t){return B=B||n(114),this instanceof o?(this._readableState=new i(t,this),this.readable=!0,t&&"function"==typeof t.read&&(this._read=t.read),void A.call(this)):new o(t)}function s(t,e,n,r,i){var o=l(e,n);if(o)t.emit("error",o);else if(null===n)e.reading=!1,h(t,e);else if(e.objectMode||n&&n.length>0)if(e.ended&&!i){var s=new Error("stream.push() after EOF");t.emit("error",s)}else if(e.endEmitted&&i){var c=new Error("stream.unshift() after end event");t.emit("error",c)}else{var u;!e.decoder||i||r||(n=e.decoder.write(n),u=!e.objectMode&&0===n.length),i||(e.reading=!1),u||(e.flowing&&0===e.length&&!e.sync?(t.emit("data",n),t.read(0)):(e.length+=e.objectMode?1:n.length,i?e.buffer.unshift(n):e.buffer.push(n),e.needReadable&&p(t))),_(t,e)}else i||(e.reading=!1);return a(e)}function a(t){return!t.ended&&(t.needReadable||t.length=U?t=U:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++),t}function u(t,e){return t<=0||0===e.length&&e.ended?0:e.objectMode?1:t!==t?e.flowing&&e.length?e.buffer.head.data.length:e.length:(t>e.highWaterMark&&(e.highWaterMark=c(t)),t<=e.length?t:e.ended?e.length:(e.needReadable=!0,0))}function l(t,e){var n=null;return P.isBuffer(e)||"string"==typeof e||null===e||void 0===e||t.objectMode||(n=new TypeError("Invalid non-string/buffer chunk")),n}function h(t,e){if(!e.ended){if(e.decoder){var n=e.decoder.end();n&&n.length&&(e.buffer.push(n),e.length+=e.objectMode?1:n.length)}e.ended=!0,p(t)}}function p(t){var e=t._readableState;e.needReadable=!1,e.emittedReadable||(j("emitReadable",e.flowing),e.emittedReadable=!0,e.sync?O(f,t):f(t))}function f(t){j("emit readable"),t.emit("readable"),b(t)}function _(t,e){e.readingMore||(e.readingMore=!0,O(d,t,e))}function d(t,e){for(var n=e.length;!e.reading&&!e.flowing&&!e.ended&&e.length=e.length?(n=e.decoder?e.buffer.join(""):1===e.buffer.length?e.buffer.head.data:e.buffer.concat(e.length),e.buffer.clear()):n=x(t,e.buffer,e.decoder),n}function x(t,e,n){var r;return to.length?o.length:t;if(i+=s===o.length?o:o.slice(0,t),t-=s,0===t){s===o.length?(++r,n.next?e.head=n.next:e.head=e.tail=null):(e.head=n,n.data=o.slice(s));break}++r}return e.length-=r,i}function C(t,e){var n=M.allocUnsafe(t),r=e.head,i=1;for(r.data.copy(n),t-=r.data.length;r=r.next;){var o=r.data,s=t>o.length?o.length:t;if(o.copy(n,n.length-t,0,s),t-=s,0===t){s===o.length?(++i,r.next?e.head=r.next:e.head=e.tail=null):(e.head=r,r.data=o.slice(s));break}++i}return e.length-=i,n}function k(t){var e=t._readableState;if(e.length>0)throw new Error('"endReadable()" called on non-empty stream');e.endEmitted||(e.ended=!0,O(T,e,t))}function T(t,e){t.endEmitted||0!==t.length||(t.endEmitted=!0,e.readable=!1,e.emit("end"))}function E(t,e){for(var n=0,r=t.length;n=e.highWaterMark||e.ended))return j("read: emitReadable",e.length,e.ended),0===e.length&&e.ended?k(this):p(this),null;if(t=u(t,e),0===t&&e.ended)return 0===e.length&&k(this),null;var r=e.needReadable;j("need readable",r),(0===e.length||e.length-t0?w(t,e):null,null===i?(e.needReadable=!0,t=0):e.length-=t,0===e.length&&(e.ended||(e.needReadable=!0),n!==t&&e.ended&&k(this)),null!==i&&this.emit("data",i),i},o.prototype._read=function(t){this.emit("error",new Error("not implemented"))},o.prototype.pipe=function(t,n){function i(t){j("onunpipe"),t===p&&s()}function o(){j("onend"),t.end()}function s(){j("cleanup"),t.removeListener("close",u),t.removeListener("finish",l),t.removeListener("drain",m),t.removeListener("error",c),t.removeListener("unpipe",i),p.removeListener("end",o),p.removeListener("end",s),p.removeListener("data",a),g=!0,!f.awaitDrain||t._writableState&&!t._writableState.needDrain||m()}function a(e){j("ondata"),v=!1;var n=t.write(e);!1!==n||v||((1===f.pipesCount&&f.pipes===t||f.pipesCount>1&&S(f.pipes,t)!==-1)&&!g&&(j("false write response, pause",p._readableState.awaitDrain),p._readableState.awaitDrain++,v=!0),p.pause())}function c(e){j("onerror",e),h(),t.removeListener("error",c),0===N(t,"error")&&t.emit("error",e)}function u(){t.removeListener("finish",l),h()}function l(){j("onfinish"),t.removeListener("close",u),h()}function h(){j("unpipe"),p.unpipe(t)}var p=this,f=this._readableState;switch(f.pipesCount){case 0:f.pipes=t;break;case 1:f.pipes=[f.pipes,t];break;default:f.pipes.push(t)}f.pipesCount+=1,j("pipe count=%d opts=%j",f.pipesCount,n);var _=(!n||n.end!==!1)&&t!==e.stdout&&t!==e.stderr,d=_?o:s;f.endEmitted?O(d):p.once("end",d),t.on("unpipe",i);var m=y(p);t.on("drain",m);var g=!1,v=!1;return p.on("data",a),r(t,"error",c),t.once("close",u),t.once("finish",l),t.emit("pipe",p),f.flowing||(j("pipe resume"),p.resume()),t},o.prototype.unpipe=function(t){var e=this._readableState;if(0===e.pipesCount)return this;if(1===e.pipesCount)return t&&t!==e.pipes?this:(t||(t=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,t&&t.emit("unpipe",this),this);if(!t){var n=e.pipes,r=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var i=0;i-1?setImmediate:I;s.WritableState=o;var k=n(65);k.inherits=n(42);var T,E={deprecate:n(396)};!function(){try{T=n(113)}catch(t){}finally{T||(T=n(98).EventEmitter)}}();var S=n(16).Buffer,O=n(233);k.inherits(s,T);var R;o.prototype.getBuffer=function(){for(var t=this.bufferedRequest,e=[];t;)e.push(t),t=t.next;return e},function(){try{Object.defineProperty(o.prototype,"buffer",{get:E.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.")})}catch(t){}}();var R;s.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},s.prototype.write=function(t,e,n){var i=this._writableState,o=!1;return"function"==typeof e&&(n=e,e=null),S.isBuffer(t)?e="buffer":e||(e=i.defaultEncoding),"function"!=typeof n&&(n=r),i.ended?a(this,n):c(this,i,t,n)&&(i.pendingcb++,o=l(this,i,t,e,n)),o},s.prototype.cork=function(){var t=this._writableState;t.corked++},s.prototype.uncork=function(){var t=this._writableState;t.corked&&(t.corked--,t.writing||t.corked||t.finished||t.bufferProcessing||!t.bufferedRequest||m(this,t))},s.prototype.setDefaultEncoding=function(t){if("string"==typeof t&&(t=t.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((t+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+t);return this._writableState.defaultEncoding=t,this},s.prototype._write=function(t,e,n){n(new Error("not implemented"))},s.prototype._writev=null,s.prototype.end=function(t,e,n){var r=this._writableState;"function"==typeof t?(n=t,t=null,e=null):"function"==typeof e&&(n=e,e=null),null!==t&&void 0!==t&&this.write(t,e),r.corked&&(r.corked=1,this.uncork()),r.ending||r.finished||w(this,r,n)}}).call(e,n(43))},function(t,e,n){(function(r){var i=function(){try{return n(113)}catch(t){}}();e=t.exports=n(392),e.Stream=i||e,e.Readable=e,e.Writable=n(394),e.Duplex=n(114),e.Transform=n(393),e.PassThrough=n(1063),!r.browser&&"disable"===r.env.READABLE_STREAM&&i&&(t.exports=i)}).call(e,n(43))},function(t,e,n){(function(e){function n(t,e){function n(){if(!i){if(r("throwDeprecation"))throw new Error(e);r("traceDeprecation")?console.trace(e):console.warn(e),i=!0}return t.apply(this,arguments)}if(r("noDeprecation"))return t;var i=!1;return n}function r(t){try{if(!e.localStorage)return!1}catch(t){return!1}var n=e.localStorage[t];return null!=n&&"true"===String(n).toLowerCase()}t.exports=n}).call(e,n(27))},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,configurable:!1,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,configurable:!1,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e,n){"use strict";function r(t,e){return void 0===e&&(e={}),h&&i(),c.Redoc._preOptions=e,e.specUrl=e.specUrl||t,s().then(function(t){h=t,console.log("ReDoc initialized!")}).catch(function(t){throw t})}function i(){h.destroy(),h=null}function o(){var t="spec-url",e=u.BrowserDomAdapter.query("redoc");if(e&&u.BrowserDomAdapter.hasAttribute(e,t)){var n=u.BrowserDomAdapter.getAttribute(e,t);r(n)}}n(1065);var s,a=n(2),c=n(159),u=n(105),l=n(119);s=n(450).bootstrapRedoc,l.disableDebugTools(),a.enableProdMode(),e.version="1.6.2";var h;e.init=r,e.destroy=i,o()},function(t,e,n){"use strict";n(506),n(1075),n(502),n(495),n(491),n(497),n(496),n(494),n(493),n(501),n(490),n(489),n(499),n(492),n(500),n(504),n(505),n(503),n(498),n(1070)},function(t,e,n){"use strict";n(718),n(699),n(701),n(703),n(704),n(712),n(702),n(705),n(706),n(707),n(708),n(709),n(711),n(713),n(714),n(715),n(700),n(717),n(710),n(716),n(1066),n(1068),n(1067)},function(t,e,n){"use strict";var r=n(2),i=n(115),o=n(139);n.d(e,"a",function(){return s}),n.d(e,"b",function(){return a});var s=function(){function t(t){this._localization=t,this._caseViews={}}return Object.defineProperty(t.prototype,"ngPlural",{set:function(t){this._switchValue=t,this._updateView()},enumerable:!0,configurable:!0}),t.prototype.addCase=function(t,e){this._caseViews[t]=e},t.prototype._updateView=function(){this._clearViews();var t=Object.keys(this._caseViews),e=n.i(i.getPluralCategory)(this._switchValue,t,this._localization);this._activateView(this._caseViews[e])},t.prototype._clearViews=function(){this._activeView&&this._activeView.destroy()},t.prototype._activateView=function(t){t&&(this._activeView=t,this._activeView.create())},t.decorators=[{type:r.Directive,args:[{selector:"[ngPlural]"}]}],t.ctorParameters=[{type:i.NgLocalization}],t.propDecorators={ngPlural:[{type:r.Input}]},t}(),a=function(){function t(t,e,n,r){this.value=t,r.addCase(t,new o.SwitchView(n,e))}return t.decorators=[{type:r.Directive,args:[{selector:"[ngPluralCase]"}]}],t.ctorParameters=[{type:void 0,decorators:[{type:r.Attribute,args:["ngPluralCase"]}]},{type:r.TemplateRef},{type:r.ViewContainerRef},{type:s,decorators:[{type:r.Host}]}],t}()},function(t,e,n){"use strict";var r=n(2);n.d(e,"a",function(){return i});var i=function(){function t(t){this._viewContainerRef=t}return Object.defineProperty(t.prototype,"ngOutletContext",{set:function(t){this._context=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"ngTemplateOutlet",{set:function(t){this._templateRef=t},enumerable:!0,configurable:!0}),t.prototype.ngOnChanges=function(t){this._viewRef&&this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._viewRef)),this._templateRef&&(this._viewRef=this._viewContainerRef.createEmbeddedView(this._templateRef,this._context)); +},t.decorators=[{type:r.Directive,args:[{selector:"[ngTemplateOutlet]"}]}],t.ctorParameters=[{type:r.ViewContainerRef}],t.propDecorators={ngOutletContext:[{type:r.Input}],ngTemplateOutlet:[{type:r.Input}]},t}()},function(t,e,n){"use strict";function r(t){return!!n.i(i.c)(t)&&(Array.isArray(t)||!(t instanceof Map)&&n.i(i.d)()in t)}var i=n(49);e.a=r;(function(){function t(){}return t.merge=function(t,e){for(var n={},r=0,i=Object.keys(t);r-1&&t.splice(r,1)}},t.remove=function(t,e){var n=t.indexOf(e);return n>-1&&(t.splice(n,1),!0)},t.equals=function(t,e){if(t.length!=e.length)return!1;for(var n=0;n0?e.substring(1):e},e.prototype.prepareExternalUrl=function(t){var e=o.a.joinWithSlash(this._baseHref,t);return e.length>0?"#"+e:e},e.prototype.pushState=function(t,e,n,r){var i=this.prepareExternalUrl(n+o.a.normalizeQueryParams(r));0==i.length&&(i=this._platformLocation.pathname),this._platformLocation.pushState(t,e,i)},e.prototype.replaceState=function(t,e,n,r){var i=this.prepareExternalUrl(n+o.a.normalizeQueryParams(r));0==i.length&&(i=this._platformLocation.pathname),this._platformLocation.replaceState(t,e,i)},e.prototype.forward=function(){this._platformLocation.forward()},e.prototype.back=function(){this._platformLocation.back()},e.decorators=[{type:r.Injectable}],e.ctorParameters=[{type:a.PlatformLocation},{type:void 0,decorators:[{type:r.Optional},{type:r.Inject,args:[s.b]}]}],e}(s.a)},function(t,e,n){"use strict";var r=n(2),i=n(49),o=n(194),s=n(140),a=n(141);n.d(e,"a",function(){return u});var c=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},u=function(t){function e(e,r){if(t.call(this),this._platformLocation=e,n.i(i.b)(r)&&(r=this._platformLocation.getBaseHrefFromDOM()),n.i(i.b)(r))throw new Error("No base href set. Please provide a value for the APP_BASE_HREF token or add a base element to the document.");this._baseHref=r}return c(e,t),e.prototype.onPopState=function(t){this._platformLocation.onPopState(t),this._platformLocation.onHashChange(t)},e.prototype.getBaseHref=function(){return this._baseHref},e.prototype.prepareExternalUrl=function(t){return o.a.joinWithSlash(this._baseHref,t)},e.prototype.path=function(t){void 0===t&&(t=!1);var e=this._platformLocation.pathname+o.a.normalizeQueryParams(this._platformLocation.search),n=this._platformLocation.hash;return n&&t?""+e+n:e},e.prototype.pushState=function(t,e,n,r){var i=this.prepareExternalUrl(n+o.a.normalizeQueryParams(r));this._platformLocation.pushState(t,e,i)},e.prototype.replaceState=function(t,e,n,r){var i=this.prepareExternalUrl(n+o.a.normalizeQueryParams(r));this._platformLocation.replaceState(t,e,i)},e.prototype.forward=function(){this._platformLocation.forward()},e.prototype.back=function(){this._platformLocation.back()},e.decorators=[{type:r.Injectable}],e.ctorParameters=[{type:a.PlatformLocation},{type:void 0,decorators:[{type:r.Optional},{type:r.Inject,args:[s.b]}]}],e}(s.a)},function(t,e,n){"use strict";var r=n(2),i=n(416),o=n(75);n.d(e,"a",function(){return l});var s=function(){function t(){}return t.prototype.createSubscription=function(t,e){return t.subscribe({next:e,error:function(t){throw t}})},t.prototype.dispose=function(t){t.unsubscribe()},t.prototype.onDestroy=function(t){t.unsubscribe()},t}(),a=function(){function t(){}return t.prototype.createSubscription=function(t,e){return t.then(e,function(t){throw t})},t.prototype.dispose=function(t){},t.prototype.onDestroy=function(t){},t}(),c=new a,u=new s,l=function(){function t(t){this._ref=t,this._latestValue=null,this._latestReturnedValue=null,this._subscription=null,this._obj=null,this._strategy=null}return t.prototype.ngOnDestroy=function(){this._subscription&&this._dispose()},t.prototype.transform=function(t){return this._obj?t!==this._obj?(this._dispose(),this.transform(t)):this._latestValue===this._latestReturnedValue?this._latestReturnedValue:(this._latestReturnedValue=this._latestValue,r.WrappedValue.wrap(this._latestValue)):(t&&this._subscribe(t),this._latestReturnedValue=this._latestValue,this._latestValue)},t.prototype._subscribe=function(t){var e=this;this._obj=t,this._strategy=this._selectStrategy(t),this._subscription=this._strategy.createSubscription(t,function(n){return e._updateLatestValue(t,n)})},t.prototype._selectStrategy=function(e){if(n.i(i.a)(e))return c;if(e.subscribe)return u;throw new o.a(t,e)},t.prototype._dispose=function(){this._strategy.dispose(this._subscription),this._latestValue=null,this._latestReturnedValue=null,this._subscription=null,this._obj=null},t.prototype._updateLatestValue=function(t,e){t===this._obj&&(this._latestValue=e,this._ref.markForCheck())},t.decorators=[{type:r.Pipe,args:[{name:"async",pure:!1}]}],t.ctorParameters=[{type:r.ChangeDetectorRef}],t}()},function(t,e,n){"use strict";function r(t){return null==t||""===t}var i=n(2),o=n(273),s=n(49),a=n(75);n.d(e,"a",function(){return c});var c=function(){function t(t){this._locale=t}return t.prototype.transform=function(e,i){void 0===i&&(i="mediumDate");var c;if(r(e))return null;if("string"==typeof e&&(e=e.trim()),n.i(s.g)(e))c=e;else if(s.h.isNumeric(e))c=new Date(parseFloat(e));else if("string"==typeof e&&/^(\d{4}-\d{1,2}-\d{1,2})$/.test(e)){var u=e.split("-").map(function(t){return parseInt(t,10)}),l=u[0],h=u[1],p=u[2];c=new Date(l,h-1,p)}else c=new Date(e);if(!n.i(s.g)(c))throw new a.a(t,e);return o.a.format(c,this._locale,t._ALIASES[i]||i)},t._ALIASES={medium:"yMMMdjms",short:"yMdjm",fullDate:"yMMMMEEEEd",longDate:"yMMMMd",mediumDate:"yMMMd",shortDate:"yMd",mediumTime:"jms",shortTime:"jm"},t.decorators=[{type:i.Pipe,args:[{name:"date",pure:!0}]}],t.ctorParameters=[{type:void 0,decorators:[{type:i.Inject,args:[i.LOCALE_ID]}]}],t}()},function(t,e,n){"use strict";var r=n(2),i=n(49),o=n(115),s=n(75);n.d(e,"a",function(){return c});var a=/#/g,c=function(){function t(t){this._localization=t}return t.prototype.transform=function(e,r){if(n.i(i.b)(e))return"";if("object"!=typeof r||null===r)throw new s.a(t,r);var c=n.i(o.getPluralCategory)(e,Object.keys(r),this._localization);return r[c].replace(a,e.toString())},t.decorators=[{type:r.Pipe,args:[{name:"i18nPlural",pure:!0}]}],t.ctorParameters=[{type:o.NgLocalization}],t}()},function(t,e,n){"use strict";var r=n(2),i=n(75);n.d(e,"a",function(){return o});var o=function(){function t(){}return t.prototype.transform=function(e,n){if(null==e)return"";if("object"!=typeof n||"string"!=typeof e)throw new i.a(t,n);return n.hasOwnProperty(e)?n[e]:n.hasOwnProperty("other")?n.other:""},t.decorators=[{type:r.Pipe,args:[{name:"i18nSelect",pure:!0}]}],t.ctorParameters=[],t}()},function(t,e,n){"use strict";var r=n(2),i=n(49),o=n(75);n.d(e,"a",function(){return s});var s=function(){function t(){}return t.prototype.transform=function(e){if(n.i(i.b)(e))return e;if("string"!=typeof e)throw new o.a(t,e);return e.toLowerCase()},t.decorators=[{type:r.Pipe,args:[{name:"lowercase"}]}],t.ctorParameters=[],t}()},function(t,e,n){"use strict";function r(t,e,r,i,u,l,h){if(void 0===l&&(l=null),void 0===h&&(h=!1),n.i(s.b)(r))return null;if(r="string"==typeof r&&s.h.isNumeric(r)?+r:r,"number"!=typeof r)throw new a.a(t,r);var p,f,_;if(i!==o.b.Currency&&(p=1,f=0,_=3),u){var d=u.match(c);if(null===d)throw new Error(u+" is not a valid digit info for number pipes");n.i(s.a)(d[1])&&(p=s.h.parseIntAutoRadix(d[1])),n.i(s.a)(d[3])&&(f=s.h.parseIntAutoRadix(d[3])),n.i(s.a)(d[5])&&(_=s.h.parseIntAutoRadix(d[5]))}return o.c.format(r,e,i,{minimumIntegerDigits:p,minimumFractionDigits:f,maximumFractionDigits:_,currency:l,currencyAsSymbol:h})}var i=n(2),o=n(273),s=n(49),a=n(75);n.d(e,"a",function(){return u}),n.d(e,"b",function(){return l}),n.d(e,"c",function(){return h});var c=/^(\d+)?\.((\d+)(-(\d+))?)?$/,u=function(){function t(t){this._locale=t}return t.prototype.transform=function(e,n){return void 0===n&&(n=null),r(t,this._locale,e,o.b.Decimal,n)},t.decorators=[{type:i.Pipe,args:[{name:"number"}]}],t.ctorParameters=[{type:void 0,decorators:[{type:i.Inject,args:[i.LOCALE_ID]}]}],t}(),l=function(){function t(t){this._locale=t}return t.prototype.transform=function(e,n){return void 0===n&&(n=null),r(t,this._locale,e,o.b.Percent,n)},t.decorators=[{type:i.Pipe,args:[{name:"percent"}]}],t.ctorParameters=[{type:void 0,decorators:[{type:i.Inject,args:[i.LOCALE_ID]}]}],t}(),h=function(){function t(t){this._locale=t}return t.prototype.transform=function(e,n,i,s){return void 0===n&&(n="USD"),void 0===i&&(i=!1),void 0===s&&(s=null),r(t,this._locale,e,o.b.Currency,s,n,i)},t.decorators=[{type:i.Pipe,args:[{name:"currency"}]}],t.ctorParameters=[{type:void 0,decorators:[{type:i.Inject,args:[i.LOCALE_ID]}]}],t}()},function(t,e,n){"use strict";var r=n(2),i=n(49),o=n(75);n.d(e,"a",function(){return s});var s=function(){function t(){}return t.prototype.transform=function(e,r,s){if(n.i(i.b)(e))return e;if(!this.supports(e))throw new o.a(t,e);return e.slice(r,s)},t.prototype.supports=function(t){return"string"==typeof t||Array.isArray(t)},t.decorators=[{type:r.Pipe,args:[{name:"slice",pure:!1}]}],t.ctorParameters=[],t}()},function(t,e,n){"use strict";var r=n(2),i=n(49),o=n(75);n.d(e,"a",function(){return s});var s=function(){function t(){}return t.prototype.transform=function(e){if(n.i(i.b)(e))return e;if("string"!=typeof e)throw new o.a(t,e);return e.toUpperCase()},t.decorators=[{type:r.Pipe,args:[{name:"uppercase"}]}],t.ctorParameters=[],t}()},function(t,e,n){"use strict";var r=n(2);n.d(e,"a",function(){return i});var i=r.__core_private__.isPromise},function(t,e,n){"use strict";var r=n(7);n.d(e,"a",function(){return i});var i=function(){function t(){this._map=new Map,this._allPlayers=[]}return t.prototype.find=function(t,e){var i=this._map.get(t);if(n.i(r.d)(i))return i[e]},t.prototype.findAllPlayersByElement=function(t){var e=this._map.get(t);return e?Object.keys(e).map(function(t){return e[t]}):[]},t.prototype.set=function(t,e,i){var o=this._map.get(t);n.i(r.d)(o)||(o={});var s=o[e];n.i(r.d)(s)&&this.remove(t,e),o[e]=i,this._allPlayers.push(i),this._map.set(t,o)},t.prototype.getAllPlayers=function(){return this._allPlayers},t.prototype.remove=function(t,e){var n=this._map.get(t);if(n){var r=n[e];delete n[e];var i=this._allPlayers.indexOf(r);this._allPlayers.splice(i,1),0===Object.keys(n).length&&this._map.delete(t)}},t}()},function(t,e,n){"use strict";var r=n(9);n.d(e,"a",function(){return r.ChangeDetectionStrategy}),n.d(e,"b",function(){return r.ChangeDetectorRef}),n.d(e,"c",function(){return r.CollectionChangeRecord}),n.d(e,"d",function(){return r.DefaultIterableDiffer}),n.d(e,"e",function(){return r.IterableDiffers}),n.d(e,"f",function(){return r.KeyValueChangeRecord}),n.d(e,"g",function(){return r.KeyValueDiffers}),n.d(e,"h",function(){return r.SimpleChange}),n.d(e,"i",function(){return r.WrappedValue})},function(t,e,n){"use strict";n.d(e,"a",function(){return r});var r=function(){function t(){}return t}()},function(t,e,n){"use strict";var r=n(295),i=n(434),o=n(53),s=n(145),a=n(116),c=n(144),u=n(435),l=n(433),h=n(424),p=n(286),f=n(152),_=n(418),d=n(431),y=n(203),m=n(284),g=n(150),v=n(207),b=n(202),w=n(201),x=n(421),I=n(283),C=n(282),k=n(143),T=n(39);n.d(e,"L",function(){return r.b}),n.d(e,"M",function(){return r.c}),n.d(e,"N",function(){return r.d}),n.d(e,"O",function(){return r.e}),n.d(e,"P",function(){return r.f}),n.d(e,"Q",function(){return r.g}),n.d(e,"R",function(){return r.h}),n.d(e,"S",function(){return r.i}),n.d(e,"T",function(){return r.j}),n.d(e,"U",function(){return r.k}),n.d(e,"V",function(){return r.l}),n.d(e,"W",function(){return r.m}),n.d(e,"X",function(){return r.n}),n.d(e,"Y",function(){return r.o}),n.d(e,"Z",function(){return r.p}),n.d(e,"_0",function(){return r.q}),n.d(e,"_1",function(){return r.r}),n.d(e,"_2",function(){return r.s}),n.d(e,"_3",function(){return r.t}),n.d(e,"_4",function(){return r.u}),n.d(e,"_5",function(){return r.v}),n.d(e,"_6",function(){return r.w}),n.d(e,"_7",function(){return r.x}),n.d(e,"_8",function(){return r.y}),n.d(e,"_9",function(){return r.a}),n.d(e,"_10",function(){return r.z}),n.d(e,"_11",function(){return i.a}),n.d(e,"_12",function(){return o.h}),n.d(e,"_13",function(){return o.i}),n.d(e,"_14",function(){return o.g}),n.d(e,"_15",function(){return o.f}),n.d(e,"_16",function(){return o.j}),n.d(e,"_17",function(){return o.k}),n.d(e,"_18",function(){return o.a}),n.d(e,"_73",function(){return o.c}),n.d(e,"_74",function(){return o.d}),n.d(e,"_75",function(){return o.b}),n.d(e,"_76",function(){return o.l}),n.d(e,"_77",function(){return o.e}),n.d(e,"_78",function(){return o.m}),n.d(e,"a",function(){return s.assertPlatform}),n.d(e,"b",function(){return s.destroyPlatform}),n.d(e,"c",function(){return s.getPlatform}),n.d(e,"d",function(){return s.createPlatform}),n.d(e,"e",function(){return s.ApplicationRef}),n.d(e,"f",function(){return s.enableProdMode}),n.d(e,"g",function(){return s.isDevMode}),n.d(e,"h",function(){return s.createPlatformFactory}),n.d(e,"i",function(){return s.PlatformRef}),n.d(e,"j",function(){return a.APP_ID}),n.d(e,"k",function(){return a.PACKAGE_ROOT_URL}),n.d(e,"l",function(){return a.APP_BOOTSTRAP_LISTENER}),n.d(e,"m",function(){return a.PLATFORM_INITIALIZER}),n.d(e,"n",function(){return c.ApplicationInitStatus}),n.d(e,"o",function(){return c.APP_INITIALIZER}),n.d(e,"_19",function(){return u.a}),n.d(e,"_20",function(){return l.a}),n.d(e,"_21",function(){return l.b}),n.d(e,"_22",function(){return l.c}),n.d(e,"_23",function(){return h.a}),n.d(e,"_24",function(){return h.b}),n.d(e,"_25",function(){return h.c}),n.d(e,"_26",function(){return h.d}),n.d(e,"_27",function(){return h.e}),n.d(e,"_28",function(){return h.f}),n.d(e,"_29",function(){return h.g}),n.d(e,"_30",function(){return h.h}),n.d(e,"_31",function(){return h.i}),n.d(e,"_32",function(){return h.j}),n.d(e,"_33",function(){return h.k}),n.d(e,"_34",function(){return h.l}),n.d(e,"_35",function(){return h.m}),n.d(e,"_36",function(){return h.n}),n.d(e,"_37",function(){return h.o}),n.d(e,"_38",function(){return h.p}),n.d(e,"_39",function(){return h.q}),n.d(e,"_40",function(){return h.r}),n.d(e,"_41",function(){return h.s}),n.d(e,"p",function(){return p.a}),n.d(e,"q",function(){return p.d}),n.d(e,"r",function(){return p.g}),n.d(e,"s",function(){return p.c}),n.d(e,"t",function(){return f.Testability}),n.d(e,"u",function(){return f.TestabilityRegistry}),n.d(e,"v",function(){return f.setTestabilityGetter}),n.d(e,"_42",function(){return _.a}),n.d(e,"_43",function(){return _.b}),n.d(e,"_44",function(){return _.c}),n.d(e,"_45",function(){return _.d}),n.d(e,"_46",function(){return _.e}),n.d(e,"_47",function(){return _.f}),n.d(e,"_48",function(){return _.g}),n.d(e,"_49",function(){return _.h}),n.d(e,"_50",function(){return _.i}),n.d(e,"_51",function(){return d.a}),n.d(e,"w",function(){return y.TRANSLATIONS}),n.d(e,"x",function(){return y.TRANSLATIONS_FORMAT}),n.d(e,"y",function(){return y.LOCALE_ID}),n.d(e,"z",function(){return m.ApplicationModule}),n.d(e,"A",function(){return g.b}),n.d(e,"B",function(){return g.a}),n.d(e,"C",function(){return g.c}),n.d(e,"D",function(){return g.d}),n.d(e,"E",function(){return v.a}),n.d(e,"F",function(){return b.a}),n.d(e,"G",function(){return w.ErrorHandler}),n.d(e,"_52",function(){return x.a}),n.d(e,"_53",function(){return I.a}),n.d(e,"_54",function(){return I.b}),n.d(e,"_55",function(){return I.c}),n.d(e,"_56",function(){return I.d}),n.d(e,"_57",function(){return I.e}),n.d(e,"_58",function(){return I.f}),n.d(e,"_59",function(){return I.g}),n.d(e,"_60",function(){return I.h}),n.d(e,"_61",function(){return I.i}),n.d(e,"_62",function(){return I.j}),n.d(e,"_63",function(){return I.k}),n.d(e,"_64",function(){return I.l}),n.d(e,"_65",function(){return I.m}),n.d(e,"_66",function(){return I.n}),n.d(e,"_67",function(){return I.o}),n.d(e,"_68",function(){return I.p}),n.d(e,"_69",function(){return I.q}),n.d(e,"_70",function(){return I.r}),n.d(e,"_71",function(){return I.s}),n.d(e,"_72",function(){return I.t}),n.d(e,"H",function(){return C.a}),n.d(e,"I",function(){return k.AnimationPlayer}),n.d(e,"J",function(){return T.Sanitizer}),n.d(e,"K",function(){return T.SecurityContext})},function(t,e,n){"use strict";var r=n(275),i=n(276),o=n(277),s=n(143),a=n(195),c=n(279),u=n(280),l=n(281),h=n(116),p=n(146),f=n(147),_=n(148),d=n(422),y=n(200),m=n(102),g=n(13),v=n(60),b=n(289),w=n(204),x=n(291),I=n(25),C=n(19),k=n(23),T=n(12),E=n(8),S=n(296),O=n(15),R=n(205),A=n(297),N=n(206),P=n(151),M=n(103),D=n(208);n.d(e,"a",function(){return V});var V={isDefaultChangeDetectionStrategy:f.c,ChangeDetectorStatus:f.b,constructDependencies:y.b,LifecycleHooks:S.a,LIFECYCLE_HOOKS_VALUES:S.b,ReflectorReader:N.a,CodegenComponentFactoryResolver:v.CodegenComponentFactoryResolver,ComponentRef_:g.ComponentRef_,ViewContainer:k.ViewContainer,AppView:C.AppView,DebugAppView:C.DebugAppView,NgModuleInjector:w.NgModuleInjector,registerModuleFactory:x.a,ViewType:T.ViewType,view_utils:E,ViewMetadata:O.ViewMetadata,DebugContext:b.a,StaticNodeDebugInfo:b.b,devModeEqual:p.b,UNINITIALIZED:p.a,ValueUnwrapper:p.c,RenderDebugInfo:P.RenderDebugInfo,TemplateRef_:I.TemplateRef_,ReflectionCapabilities:A.a,makeDecorator:M.c,DebugDomRootRenderer:d.a,Console:_.Console,reflector:R.a,Reflector:R.b,NoOpAnimationPlayer:s.NoOpAnimationPlayer,AnimationPlayer:s.AnimationPlayer,AnimationSequencePlayer:a.AnimationSequencePlayer,AnimationGroupPlayer:i.a,AnimationKeyframe:o.AnimationKeyframe,prepareFinalAnimationStyles:c.prepareFinalAnimationStyles,balanceAnimationKeyframes:c.balanceAnimationKeyframes,flattenStyles:c.flattenStyles,clearStyles:c.clearStyles,renderStyles:c.renderStyles,collectAndResolveStyles:c.collectAndResolveStyles,APP_ID_RANDOM_PROVIDER:h.APP_ID_RANDOM_PROVIDER,AnimationStyles:u.AnimationStyles,ANY_STATE:r.b,DEFAULT_STATE:r.c,EMPTY_STATE:r.d,FILL_STYLE_FLAG:r.a,ComponentStillLoadingError:m.ComponentStillLoadingError,isPromise:D.a,AnimationTransition:l.AnimationTransition}},function(t,e,n){"use strict";var r=n(7),i=n(286);n.d(e,"a",function(){return o});var o=function(){function t(t){this._delegate=t}return t.prototype.renderComponent=function(t){return new s(this._delegate.renderComponent(t))},t}(),s=function(){function t(t){this._delegate=t}return t.prototype.selectRootElement=function(t,e){var r=this._delegate.selectRootElement(t,e),o=new i.a(r,null,e);return n.i(i.b)(o),r},t.prototype.createElement=function(t,e,r){var o=this._delegate.createElement(t,e,r),s=new i.a(o,n.i(i.c)(t),r);return s.name=e,n.i(i.b)(s),o},t.prototype.createViewRoot=function(t){return this._delegate.createViewRoot(t)},t.prototype.createTemplateAnchor=function(t,e){var r=this._delegate.createTemplateAnchor(t,e),o=new i.d(r,n.i(i.c)(t),e);return n.i(i.b)(o),r},t.prototype.createText=function(t,e,r){var o=this._delegate.createText(t,e,r),s=new i.d(o,n.i(i.c)(t),r);return n.i(i.b)(s),o},t.prototype.projectNodes=function(t,e){var o=n.i(i.c)(t);if(n.i(r.d)(o)&&o instanceof i.a){var s=o;e.forEach(function(t){s.addChild(n.i(i.c)(t))})}this._delegate.projectNodes(t,e)},t.prototype.attachViewAfter=function(t,e){var o=n.i(i.c)(t);if(n.i(r.d)(o)){var s=o.parent;if(e.length>0&&n.i(r.d)(s)){var a=[];e.forEach(function(t){return a.push(n.i(i.c)(t))}),s.insertChildrenAfter(o,a)}}this._delegate.attachViewAfter(t,e)},t.prototype.detachView=function(t){t.forEach(function(t){var e=n.i(i.c)(t);n.i(r.d)(e)&&n.i(r.d)(e.parent)&&e.parent.removeChild(e)}),this._delegate.detachView(t)},t.prototype.destroyView=function(t,e){e=e||[],e.forEach(function(t){n.i(i.e)(n.i(i.c)(t))}),this._delegate.destroyView(t,e)},t.prototype.listen=function(t,e,o){var s=n.i(i.c)(t);return n.i(r.d)(s)&&s.listeners.push(new i.f(e,o)),this._delegate.listen(t,e,o)},t.prototype.listenGlobal=function(t,e,n){return this._delegate.listenGlobal(t,e,n)},t.prototype.setElementProperty=function(t,e,o){var s=n.i(i.c)(t);n.i(r.d)(s)&&s instanceof i.a&&(s.properties[e]=o),this._delegate.setElementProperty(t,e,o)},t.prototype.setElementAttribute=function(t,e,o){var s=n.i(i.c)(t);n.i(r.d)(s)&&s instanceof i.a&&(s.attributes[e]=o),this._delegate.setElementAttribute(t,e,o)},t.prototype.setBindingDebugInfo=function(t,e,n){this._delegate.setBindingDebugInfo(t,e,n)},t.prototype.setElementClass=function(t,e,o){var s=n.i(i.c)(t);n.i(r.d)(s)&&s instanceof i.a&&(s.classes[e]=o),this._delegate.setElementClass(t,e,o)},t.prototype.setElementStyle=function(t,e,o){var s=n.i(i.c)(t);n.i(r.d)(s)&&s instanceof i.a&&(s.styles[e]=o),this._delegate.setElementStyle(t,e,o)},t.prototype.invokeElementMethod=function(t,e,n){this._delegate.invokeElementMethod(t,e,n)},t.prototype.setText=function(t,e){this._delegate.setText(t,e)},t.prototype.animate=function(t,e,n,r,i,o,s){return void 0===s&&(s=[]),this._delegate.animate(t,e,n,r,i,o,s)},t}()},function(t,e,n){"use strict";function r(t,e){for(var n=new Array(t._proto.numberOfProviders),r=0;r0&&(this.provider0=e[0],this.keyId0=e[0].key.id),n>1&&(this.provider1=e[1],this.keyId1=e[1].key.id),n>2&&(this.provider2=e[2],this.keyId2=e[2].key.id),n>3&&(this.provider3=e[3],this.keyId3=e[3].key.id),n>4&&(this.provider4=e[4],this.keyId4=e[4].key.id),n>5&&(this.provider5=e[5],this.keyId5=e[5].key.id),n>6&&(this.provider6=e[6],this.keyId6=e[6].key.id),n>7&&(this.provider7=e[7],this.keyId7=e[7].key.id),n>8&&(this.provider8=e[8],this.keyId8=e[8].key.id),n>9&&(this.provider9=e[9],this.keyId9=e[9].key.id)}return t.prototype.getProviderAtIndex=function(t){if(0==t)return this.provider0;if(1==t)return this.provider1;if(2==t)return this.provider2;if(3==t)return this.provider3;if(4==t)return this.provider4;if(5==t)return this.provider5;if(6==t)return this.provider6;if(7==t)return this.provider7;if(8==t)return this.provider8;if(9==t)return this.provider9;throw new a.d(t)},t.prototype.createInjectorStrategy=function(t){return new d(t,this)},t}(),f=function(){function t(t,e){this.providers=e;var n=e.length;this.keyIds=new Array(n);for(var r=0;r=this.providers.length)throw new a.d(t);return this.providers[t]},t.prototype.createInjectorStrategy=function(t){return new y(this,t)},t}(),_=function(){function t(t){this.numberOfProviders=t.length,this._strategy=t.length>l?new f(this,t):new p(this,t)}return t.fromResolvedProviders=function(e){return new t(e)},t.prototype.getProviderAtIndex=function(t){return this._strategy.getProviderAtIndex(t)},t}(),d=function(){function t(t,e){this.injector=t,this.protoStrategy=e,this.obj0=h,this.obj1=h,this.obj2=h,this.obj3=h,this.obj4=h,this.obj5=h,this.obj6=h,this.obj7=h,this.obj8=h,this.obj9=h}return t.prototype.resetConstructionCounter=function(){this.injector._constructionCounter=0},t.prototype.instantiateProvider=function(t){return this.injector._new(t)},t.prototype.getObjByKeyId=function(t){var e=this.protoStrategy,n=this.injector;return e.keyId0===t?(this.obj0===h&&(this.obj0=n._new(e.provider0)),this.obj0):e.keyId1===t?(this.obj1===h&&(this.obj1=n._new(e.provider1)),this.obj1):e.keyId2===t?(this.obj2===h&&(this.obj2=n._new(e.provider2)),this.obj2):e.keyId3===t?(this.obj3===h&&(this.obj3=n._new(e.provider3)),this.obj3):e.keyId4===t?(this.obj4===h&&(this.obj4=n._new(e.provider4)),this.obj4):e.keyId5===t?(this.obj5===h&&(this.obj5=n._new(e.provider5)),this.obj5):e.keyId6===t?(this.obj6===h&&(this.obj6=n._new(e.provider6)),this.obj6):e.keyId7===t?(this.obj7===h&&(this.obj7=n._new(e.provider7)),this.obj7):e.keyId8===t?(this.obj8===h&&(this.obj8=n._new(e.provider8)),this.obj8):e.keyId9===t?(this.obj9===h&&(this.obj9=n._new(e.provider9)),this.obj9):h},t.prototype.getObjAtIndex=function(t){if(0==t)return this.obj0;if(1==t)return this.obj1;if(2==t)return this.obj2;if(3==t)return this.obj3;if(4==t)return this.obj4;if(5==t)return this.obj5;if(6==t)return this.obj6;if(7==t)return this.obj7;if(8==t)return this.obj8;if(9==t)return this.obj9;throw new a.d(t)},t.prototype.getMaxNumberOfObjects=function(){return l},t}(),y=function(){function t(t,e){this.protoStrategy=t,this.injector=e,this.objs=new Array(t.providers.length).fill(h)}return t.prototype.resetConstructionCounter=function(){this.injector._constructionCounter=0},t.prototype.instantiateProvider=function(t){return this.injector._new(t)},t.prototype.getObjByKeyId=function(t){for(var e=this.protoStrategy,n=0;n=this.objs.length)throw new a.d(t);return this.objs[t]},t.prototype.getMaxNumberOfObjects=function(){return this.objs.length},t}(),m=function(){function t(){}return t.resolve=function(t){return n.i(u.a)(t)},t.resolveAndCreate=function(e,n){void 0===n&&(n=null);var r=t.resolve(e);return t.fromResolvedProviders(r,n)},t.fromResolvedProviders=function(t,e){return void 0===e&&(e=null),new g(_.fromResolvedProviders(t),e)},Object.defineProperty(t.prototype,"parent",{get:function(){return n.i(i.a)()},enumerable:!0,configurable:!0}),t.prototype.resolveAndCreateChild=function(t){return n.i(i.a)()},t.prototype.createChildFromResolved=function(t){return n.i(i.a)()},t.prototype.resolveAndInstantiate=function(t){return n.i(i.a)()},t.prototype.instantiateResolved=function(t){return n.i(i.a)()},t}(),g=function(){function t(t,e){void 0===e&&(e=null),this._constructionCounter=0,this._proto=t,this._parent=e,this._strategy=t._strategy.createInjectorStrategy(this)}return t.prototype.get=function(t,e){return void 0===e&&(e=o.a),this._getByKey(c.a.get(t),null,null,e)},t.prototype.getAt=function(t){return this._strategy.getObjAtIndex(t)},Object.defineProperty(t.prototype,"parent",{get:function(){return this._parent},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"internalStrategy",{get:function(){return this._strategy},enumerable:!0,configurable:!0}),t.prototype.resolveAndCreateChild=function(t){var e=m.resolve(t);return this.createChildFromResolved(e)},t.prototype.createChildFromResolved=function(e){var n=new _(e),r=new t(n);return r._parent=this,r},t.prototype.resolveAndInstantiate=function(t){return this.instantiateResolved(m.resolve([t])[0])},t.prototype.instantiateResolved=function(t){return this._instantiateProvider(t)},t.prototype._new=function(t){if(this._constructionCounter++>this._strategy.getMaxNumberOfObjects())throw new a.e(this,t.key);return this._instantiateProvider(t)},t.prototype._instantiateProvider=function(t){if(t.multiProvider){for(var e=new Array(t.resolvedFactories.length),n=0;n0?this._getByReflectiveDependency(t,C[0]):null,r=k>1?this._getByReflectiveDependency(t,C[1]):null,i=k>2?this._getByReflectiveDependency(t,C[2]):null,o=k>3?this._getByReflectiveDependency(t,C[3]):null,s=k>4?this._getByReflectiveDependency(t,C[4]):null,c=k>5?this._getByReflectiveDependency(t,C[5]):null,u=k>6?this._getByReflectiveDependency(t,C[6]):null,l=k>7?this._getByReflectiveDependency(t,C[7]):null,h=k>8?this._getByReflectiveDependency(t,C[8]):null,p=k>9?this._getByReflectiveDependency(t,C[9]):null,f=k>10?this._getByReflectiveDependency(t,C[10]):null,_=k>11?this._getByReflectiveDependency(t,C[11]):null,d=k>12?this._getByReflectiveDependency(t,C[12]):null,y=k>13?this._getByReflectiveDependency(t,C[13]):null,m=k>14?this._getByReflectiveDependency(t,C[14]):null,g=k>15?this._getByReflectiveDependency(t,C[15]):null,v=k>16?this._getByReflectiveDependency(t,C[16]):null,b=k>17?this._getByReflectiveDependency(t,C[17]):null,w=k>18?this._getByReflectiveDependency(t,C[18]):null,x=k>19?this._getByReflectiveDependency(t,C[19]):null}catch(e){throw(e instanceof a.f||e instanceof a.g)&&e.addKey(this,t.key),e}var T;try{switch(k){case 0:T=I();break;case 1:T=I(n);break;case 2:T=I(n,r);break;case 3:T=I(n,r,i);break;case 4:T=I(n,r,i,o);break;case 5:T=I(n,r,i,o,s);break;case 6:T=I(n,r,i,o,s,c);break;case 7:T=I(n,r,i,o,s,c,u);break;case 8:T=I(n,r,i,o,s,c,u,l);break;case 9:T=I(n,r,i,o,s,c,u,l,h);break;case 10:T=I(n,r,i,o,s,c,u,l,h,p);break;case 11:T=I(n,r,i,o,s,c,u,l,h,p,f);break;case 12:T=I(n,r,i,o,s,c,u,l,h,p,f,_);break;case 13:T=I(n,r,i,o,s,c,u,l,h,p,f,_,d);break;case 14:T=I(n,r,i,o,s,c,u,l,h,p,f,_,d,y);break;case 15:T=I(n,r,i,o,s,c,u,l,h,p,f,_,d,y,m);break;case 16:T=I(n,r,i,o,s,c,u,l,h,p,f,_,d,y,m,g);break;case 17:T=I(n,r,i,o,s,c,u,l,h,p,f,_,d,y,m,g,v);break;case 18:T=I(n,r,i,o,s,c,u,l,h,p,f,_,d,y,m,g,v,b);break;case 19:T=I(n,r,i,o,s,c,u,l,h,p,f,_,d,y,m,g,v,b,w); +break;case 20:T=I(n,r,i,o,s,c,u,l,h,p,f,_,d,y,m,g,v,b,w,x);break;default:throw new Error("Cannot instantiate '"+t.key.displayName+"' because it has more than 20 dependencies")}}catch(e){throw new a.g(this,e,e.stack,t.key)}return T},t.prototype._getByReflectiveDependency=function(t,e){return this._getByKey(e.key,e.lowerBoundVisibility,e.upperBoundVisibility,e.optional?null:o.a)},t.prototype._getByKey=function(t,e,n,r){return t===v?this:n instanceof s.d?this._getByKeySelf(t,r):this._getByKeyDefault(t,r,e)},t.prototype._throwOrNull=function(t,e){if(e!==o.a)return e;throw new a.h(this,t)},t.prototype._getByKeySelf=function(t,e){var n=this._strategy.getObjByKeyId(t.id);return n!==h?n:this._throwOrNull(t,e)},t.prototype._getByKeyDefault=function(e,n,r){var i;for(i=r instanceof s.f?this._parent:this;i instanceof t;){var o=i,a=o._strategy.getObjByKeyId(e.id);if(a!==h)return a;i=o._parent}return null!==i?i.get(e.token,n):this._throwOrNull(e,n)},Object.defineProperty(t.prototype,"displayName",{get:function(){var t=r(this,function(t){return' "'+t.key.displayName+'" '}).join(", ");return"ReflectiveInjector(providers: ["+t+"])"},enumerable:!0,configurable:!0}),t.prototype.toString=function(){return this.displayName},t}(),v=c.a.get(o.b)},function(t,e,n){"use strict";var r=n(102),i=n(13),o=n(60),s=n(22),a=n(204),c=n(291),u=n(292),l=n(427),h=n(25),p=n(293),f=n(294);n.d(e,"a",function(){return r.COMPILER_OPTIONS}),n.d(e,"b",function(){return r.CompilerFactory}),n.d(e,"c",function(){return r.ModuleWithComponentFactories}),n.d(e,"d",function(){return r.Compiler}),n.d(e,"e",function(){return i.ComponentFactory}),n.d(e,"f",function(){return i.ComponentRef}),n.d(e,"g",function(){return o.ComponentFactoryResolver}),n.d(e,"h",function(){return s.ElementRef}),n.d(e,"i",function(){return a.NgModuleFactory}),n.d(e,"j",function(){return a.NgModuleRef}),n.d(e,"k",function(){return c.b}),n.d(e,"l",function(){return c.c}),n.d(e,"m",function(){return u.QueryList}),n.d(e,"n",function(){return l.a}),n.d(e,"o",function(){return l.b}),n.d(e,"p",function(){return h.TemplateRef}),n.d(e,"q",function(){return p.b}),n.d(e,"r",function(){return f.b}),n.d(e,"s",function(){return f.c})},function(t,e,n){"use strict";function r(t,e){t instanceof i.a||t instanceof s.AnimationSequencePlayer?t.players.forEach(function(t){return r(t,e)}):e.push(t)}var i=n(276),o=n(278),s=n(195),a=n(417);n.d(e,"a",function(){return c});var c=function(){function t(){this._players=new a.a}return t.prototype.onAllActiveAnimationsDone=function(t){var e=this._players.getAllPlayers();e.length?new i.a(e).onDone(function(){return t()}):t()},t.prototype.queueAnimation=function(t,e,r){n.i(o.b)(r),this._players.set(t,e,r)},t.prototype.getAnimationPlayers=function(t,e,n){void 0===n&&(n=!1);var i=[];if(n)this._players.findAllPlayersByElement(t).forEach(function(t){r(t,i)});else{var o=this._players.find(t,e);o&&r(o,i)}return i},t}()},function(t,e,n){"use strict";var r=n(117);n.d(e,"a",function(){return o});var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=(new Object,function(t){function e(e,n){t.call(this),this._view=e,this._nodeIndex=n}return i(e,t),e.prototype.get=function(t,e){return void 0===e&&(e=r.a),this._view.injectorGet(t,this._nodeIndex,e)},e}(r.b))},function(t,e,n){"use strict";function r(t,e,n){if(!t)throw new Error("Cannot find '"+n+"' in '"+e+"'");return t}var i=n(53),o=n(102);n.d(e,"b",function(){return c}),n.d(e,"a",function(){return l});var s="#",a="NgFactory",c=function(){function t(){}return t}(),u={factoryPathPrefix:"",factoryPathSuffix:".ngfactory"},l=function(){function t(t,e){this._compiler=t,this._config=e||u}return t.prototype.load=function(t){var e=this._compiler instanceof o.Compiler;return e?this.loadFactory(t):this.loadAndCompile(t)},t.prototype.loadAndCompile=function(t){var e=this,i=t.split(s),o=i[0],a=i[1];return void 0===a&&(a="default"),n(288)(o).then(function(t){return t[a]}).then(function(t){return r(t,o,a)}).then(function(t){return e._compiler.compileModuleAsync(t)})},t.prototype.loadFactory=function(t){var e=t.split(s),i=e[0],o=e[1],c=a;return void 0===o&&(o="default",c=""),n(288)(this._config.factoryPathPrefix+i+this._config.factoryPathSuffix).then(function(t){return t[o+c]}).then(function(t){return r(t,i,o)})},t.decorators=[{type:i.b}],t.ctorParameters=[{type:o.Compiler},{type:c,decorators:[{type:i.d}]}],t}()},function(t,e,n){"use strict";var r=n(198),i=n(103);n.d(e,"g",function(){return o}),n.d(e,"a",function(){return s}),n.d(e,"d",function(){return a}),n.d(e,"c",function(){return c}),n.d(e,"b",function(){return u}),n.d(e,"f",function(){return l}),n.d(e,"e",function(){return h});var o=new r.a("AnalyzeForEntryComponents"),s=n.i(i.a)("Attribute",[["attributeName",void 0]]),a=function(){function t(){}return t}(),c=n.i(i.b)("ContentChildren",[["selector",void 0],{first:!1,isViewQuery:!1,descendants:!1,read:void 0}],a),u=n.i(i.b)("ContentChild",[["selector",void 0],{first:!0,isViewQuery:!1,descendants:!0,read:void 0}],a),l=n.i(i.b)("ViewChildren",[["selector",void 0],{first:!1,isViewQuery:!0,descendants:!0,read:void 0}],a),h=n.i(i.b)("ViewChild",[["selector",void 0],{first:!0,isViewQuery:!0,descendants:!0,read:void 0}],a)},function(t,e,n){"use strict";var r=n(147),i=n(103);n.d(e,"b",function(){return o}),n.d(e,"a",function(){return s}),n.d(e,"g",function(){return a}),n.d(e,"e",function(){return c}),n.d(e,"f",function(){return u}),n.d(e,"c",function(){return l}),n.d(e,"d",function(){return h});var o=n.i(i.c)("Directive",{selector:void 0,inputs:void 0,outputs:void 0,host:void 0,providers:void 0,exportAs:void 0,queries:void 0}),s=n.i(i.c)("Component",{selector:void 0,inputs:void 0,outputs:void 0,host:void 0,exportAs:void 0,moduleId:void 0,providers:void 0,viewProviders:void 0,changeDetection:r.a.Default,queries:void 0,templateUrl:void 0,template:void 0,styleUrls:void 0,styles:void 0,animations:void 0,encapsulation:void 0,interpolation:void 0,entryComponents:void 0},o),a=n.i(i.c)("Pipe",{name:void 0,pure:!0}),c=n.i(i.b)("Input",[["bindingPropertyName",void 0]]),u=n.i(i.b)("Output",[["bindingPropertyName",void 0]]),l=n.i(i.b)("HostBinding",[["hostPropertyName",void 0]]),h=n.i(i.b)("HostListener",[["eventName",void 0],["args",[]]])},function(t,e,n){"use strict";var r=n(103);n.d(e,"b",function(){return i}),n.d(e,"c",function(){return o}),n.d(e,"a",function(){return s});var i={name:"custom-elements"},o={name:"no-errors-schema"},s=n.i(r.c)("NgModule",{providers:void 0,declarations:void 0,imports:void 0,exports:void 0,entryComponents:void 0,bootstrap:void 0,schemas:void 0,id:void 0})},function(t,e,n){"use strict";function r(){return s.a}var i=n(145),o=n(148),s=n(205),a=n(206),c=n(152);n.d(e,"a",function(){return l});var u=[i.PlatformRef_,{provide:i.PlatformRef,useExisting:i.PlatformRef_},{provide:s.b,useFactory:r,deps:[]},{provide:a.a,useExisting:s.b},c.TestabilityRegistry,o.Console],l=n.i(i.createPlatformFactory)(null,"core",u)},function(t,e,n){"use strict";function r(){var t=c.a.wtf;return!(!t||!(u=t.trace))&&(l=u.events,!0)}function i(t,e){return void 0===e&&(e=null),l.createScope(t,e)}function o(t,e){return u.leaveScope(t,e),e}function s(t,e){return u.beginTimeRange(t,e)}function a(t){u.endTimeRange(t)}var c=n(7);e.a=r,e.b=i,e.c=o,e.d=s,e.e=a;var u,l},function(t,e,n){"use strict";var r=n(151);n.d(e,"a",function(){return r.RenderComponentType}),n.d(e,"b",function(){return r.Renderer}),n.d(e,"c",function(){return r.RootRenderer})},function(t,e,n){"use strict";var r=n(103);n.d(e,"a",function(){return r.d})},function(t,e,n){"use strict";var r=n(104);n.d(e,"a",function(){return r.NgZone})},function(t,e,n){"use strict";var r=n(32),i=n(61);n.d(e,"a",function(){return s});var o=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},s=function(t){function e(){var e=this;t.call(this),this._animationPrefix=null,this._transitionEnd=null;try{var r=this.createElement("div",this.defaultDoc());if(n.i(i.a)(this.getStyle(r,"animationName")))this._animationPrefix="";else for(var o=["Webkit","Moz","O","ms"],s=0;s-1&&t.splice(r,1)}},t.remove=function(t,e){var n=t.indexOf(e);return n>-1&&(t.splice(n,1),!0)},t.equals=function(t,e){if(t.length!=e.length)return!1;for(var n=0;n/g,">")}function a(t){f.attributeMap(t).forEach(function(e,n){"xmlns:ns1"!==n&&0!==n.indexOf("ns1:")||f.removeAttribute(t,n)});for(var e=0,n=f.childNodesAsList(t);e")):void(this.sanitizedSomething=!0)},t.prototype.endElement=function(t){var e=f.nodeName(t).toLowerCase();b.hasOwnProperty(e)&&!_.hasOwnProperty(e)&&(this.buf.push(""))},t.prototype.chars=function(t){this.buf.push(s(t))},t}(),T=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,E=/([^\#-~ |!])/g},function(t,e,n){"use strict";function r(t){for(var e=!0,n=!0,r=0;r .api-info-wrapper[_ngcontent-%COMP%] {\n box-sizing: border-box;\n padding: 40px;\n width: 60%; }\n @media (max-width: 1100px) {\n [_nghost-%COMP%] > .api-info-wrapper[_ngcontent-%COMP%] {\n width: 100%; } }\n\n.openapi-button[_ngcontent-%COMP%] {\n border: 1px solid #0033a0;\n color: #0033a0;\n font-weight: normal;\n margin-left: 0.5em;\n padding: 3px 8px 4px; }\n\n[_nghost-%COMP%] [section] {\n padding-top: 80px; }"]},function(t,e,n){"use strict";var r=n(214),i=n(19),o=n(8),s=n(15),a=n(12),c=n(9),u=n(13),l=n(20),h=n(35),p=n(451),f=n(23),_=n(36),d=n(230),y=n(311),m=n(25),g=n(160),v=n(122),b=n(60),w=n(28),x=n(39),I=function(){function t(t,e){this._changed=!1,this.context=new r.ApiInfo(t,e)}return t.prototype.ngOnDetach=function(t,e,n){},t.prototype.ngOnDestroy=function(){},t.prototype.ngDoCheck=function(t,e,n){var r=this._changed;return this._changed=!1,n||0===t.numberOfChecks&&this.context.ngOnInit(),r},t.prototype.checkHost=function(t,e,n,r){},t.prototype.handleEvent=function(t,e){var n=!0;return n},t.prototype.subscribe=function(t,e){this._eventHandler=e},t}();e.Wrapper_ApiInfo=I;var C=o.createRenderComponentType("",0,s.ViewEncapsulation.None,[],{}),k=function(t){function e(n,r,i,o){t.call(this,e,C,a.ViewType.HOST,n,r,i,o,c.ChangeDetectorStatus.CheckAlways)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=o.selectOrCreateRenderHostElement(this.renderer,"api-info",o.EMPTY_INLINE_ARRAY,t,null),this.compView_0=new S(this.viewUtils,this,0,this._el_0),this._ApiInfo_0_3=new I(this.injectorGet(l.SpecManager,this.parentIndex),this.injectorGet(h.OptionsService,this.parentIndex)),this.compView_0.create(this._ApiInfo_0_3.context),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0],null),new u.ComponentRef_(0,this,this._el_0,this._ApiInfo_0_3.context)},e.prototype.injectorGetInternal=function(t,e,n){return t===r.ApiInfo&&0===e?this._ApiInfo_0_3.context:n},e.prototype.detectChangesInternal=function(t){this._ApiInfo_0_3.ngDoCheck(this,this._el_0,t)&&this.compView_0.markAsCheckOnce(),this.compView_0.detectChanges(t)},e.prototype.destroyInternal=function(){this.compView_0.destroy()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(i.AppView);e.ApiInfoNgFactory=new u.ComponentFactory("api-info",k,r.ApiInfo);var T=[p.styles],E=o.createRenderComponentType("",0,s.ViewEncapsulation.Emulated,T,{}),S=function(t){function e(n,r,i,o){t.call(this,e,E,a.ViewType.COMPONENT,n,r,i,o,c.ChangeDetectorStatus.CheckOnce),this._expr_36=c.UNINITIALIZED,this._expr_37=c.UNINITIALIZED,this._expr_38=c.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){var e=this.renderer.createViewRoot(this.parentElement);return this._el_0=o.createRenderElement(this.renderer,e,"div",new o.InlineArray2(2,"class","api-info-wrapper"),null),this._text_1=this.renderer.createText(this._el_0,"\n ",null),this._el_2=o.createRenderElement(this.renderer,this._el_0,"h1",o.EMPTY_INLINE_ARRAY,null),this._text_3=this.renderer.createText(this._el_2,"",null),this._el_4=o.createRenderElement(this.renderer,this._el_2,"span",new o.InlineArray2(2,"class","api-info-version"),null),this._text_5=this.renderer.createText(this._el_4,"",null),this._text_6=this.renderer.createText(this._el_0,"\n ",null),this._el_7=o.createRenderElement(this.renderer,this._el_0,"p",o.EMPTY_INLINE_ARRAY,null),this._text_8=this.renderer.createText(this._el_7,"\n Download OpenAPI (fka Swagger) specification:\n ",null),this._el_9=o.createRenderElement(this.renderer,this._el_7,"a",new o.InlineArray4(4,"class","openapi-button","target","_blank"),null),this._text_10=this.renderer.createText(this._el_9," Download ",null),this._text_11=this.renderer.createText(this._el_7,"\n ",null),this._text_12=this.renderer.createText(this._el_0,"\n ",null),this._el_13=o.createRenderElement(this.renderer,this._el_0,"p",o.EMPTY_INLINE_ARRAY,null),this._text_14=this.renderer.createText(this._el_13,"\n ",null),this._text_15=this.renderer.createText(this._el_13,"\n ",null),this._anchor_16=this.renderer.createTemplateAnchor(this._el_13,null),this._vc_16=new f.ViewContainer(16,13,this,this._anchor_16),this._TemplateRef_16_5=new m.TemplateRef_(this,16,this._anchor_16),this._NgIf_16_6=new _.Wrapper_NgIf(this._vc_16.vcRef,this._TemplateRef_16_5),this._text_17=this.renderer.createText(this._el_13,"\n ",null),this._anchor_18=this.renderer.createTemplateAnchor(this._el_13,null),this._vc_18=new f.ViewContainer(18,13,this,this._anchor_18),this._TemplateRef_18_5=new m.TemplateRef_(this,18,this._anchor_18),this._NgIf_18_6=new _.Wrapper_NgIf(this._vc_18.vcRef,this._TemplateRef_18_5),this._text_19=this.renderer.createText(this._el_13,"\n ",null),this._text_20=this.renderer.createText(this._el_0,"\n ",null),this._el_21=o.createRenderElement(this.renderer,this._el_0,"span",new o.InlineArray2(2,"class","redoc-markdown-block"),null),this._text_22=this.renderer.createText(this._el_21,"\n ",null),this._el_23=o.createRenderElement(this.renderer,this._el_21,"dynamic-ng2-viewer",o.EMPTY_INLINE_ARRAY,null),this._vc_23=new f.ViewContainer(23,21,this,this._el_23),this.compView_23=new y.View_DynamicNg2Viewer0(this.viewUtils,this,23,this._el_23),this._DynamicNg2Viewer_23_5=new y.Wrapper_DynamicNg2Viewer(this._vc_23.vcRef,this.parentView.injectorGet(g.ContentProjector,this.parentIndex),this.parentView.injectorGet(v.ComponentParser,this.parentIndex),this.parentView.injectorGet(b.ComponentFactoryResolver,this.parentIndex),this.renderer),this.compView_23.create(this._DynamicNg2Viewer_23_5.context),this._text_24=this.renderer.createText(this._el_21,"\n ",null),this._text_25=this.renderer.createText(this._el_0,"\n",null),this._text_26=this.renderer.createText(e,"\n",null),this.init(null,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._el_2,this._text_3,this._el_4,this._text_5,this._text_6,this._el_7,this._text_8,this._el_9,this._text_10,this._text_11,this._text_12,this._el_13,this._text_14,this._text_15,this._anchor_16,this._text_17,this._anchor_18,this._text_19,this._text_20,this._el_21,this._text_22,this._el_23,this._text_24,this._text_25,this._text_26],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===m.TemplateRef&&16===e?this._TemplateRef_16_5:t===w.NgIf&&16===e?this._NgIf_16_6.context:t===m.TemplateRef&&18===e?this._TemplateRef_18_5:t===w.NgIf&&18===e?this._NgIf_18_6.context:t===d.DynamicNg2Viewer&&23===e?this._DynamicNg2Viewer_23_5.context:n},e.prototype.detectChangesInternal=function(t){var e=null==this.context.info?null:this.context.info.contact;this._NgIf_16_6.check_ngIf(e,t,!1),this._NgIf_16_6.ngDoCheck(this,this._anchor_16,t);var n=this.context.info.license;this._NgIf_18_6.check_ngIf(n,t,!1),this._NgIf_18_6.ngDoCheck(this,this._anchor_18,t);var r=this.context.info["x-redoc-html-description"];this._DynamicNg2Viewer_23_5.check_html(r,t,!1),this._DynamicNg2Viewer_23_5.ngDoCheck(this,this._el_23,t),this._vc_16.detectChangesInNestedViews(t),this._vc_18.detectChangesInNestedViews(t),this._vc_23.detectChangesInNestedViews(t);var i=o.inlineInterpolate(1,"",this.context.info.title," ");o.checkBinding(t,this._expr_36,i)&&(this.renderer.setText(this._text_3,i),this._expr_36=i);var s=o.inlineInterpolate(1,"(",this.context.info.version,")");o.checkBinding(t,this._expr_37,s)&&(this.renderer.setText(this._text_5,s),this._expr_37=s);var a=o.inlineInterpolate(1,"",this.context.specUrl,"");o.checkBinding(t,this._expr_38,a)&&(this.renderer.setElementAttribute(this._el_9,"href",null==this.viewUtils.sanitizer.sanitize(x.SecurityContext.URL,a)?null:this.viewUtils.sanitizer.sanitize(x.SecurityContext.URL,a).toString()),this._expr_38=a),this.compView_23.detectChanges(t)},e.prototype.destroyInternal=function(){this._vc_16.destroyNestedViews(),this._vc_18.destroyNestedViews(),this._vc_23.destroyNestedViews(),this.compView_23.destroy()},e.prototype.createEmbeddedViewInternal=function(t){return 16==t?new O(this.viewUtils,this,16,this._anchor_16,this._vc_16):18==t?new N(this.viewUtils,this,18,this._anchor_18,this._vc_18):null},e}(i.AppView);e.View_ApiInfo0=S;var O=function(t){function e(n,r,i,o,s){t.call(this,e,E,a.ViewType.EMBEDDED,n,r,i,o,c.ChangeDetectorStatus.CheckAlways,s)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=o.createRenderElement(this.renderer,null,"span",o.EMPTY_INLINE_ARRAY,null),this._text_1=this.renderer.createText(this._el_0," Contact:\n ",null),this._anchor_2=this.renderer.createTemplateAnchor(this._el_0,null),this._vc_2=new f.ViewContainer(2,0,this,this._anchor_2),this._TemplateRef_2_5=new m.TemplateRef_(this,2,this._anchor_2),this._NgIf_2_6=new _.Wrapper_NgIf(this._vc_2.vcRef,this._TemplateRef_2_5),this._text_3=this.renderer.createText(this._el_0,"\n ",null),this._anchor_4=this.renderer.createTemplateAnchor(this._el_0,null),this._vc_4=new f.ViewContainer(4,0,this,this._anchor_4),this._TemplateRef_4_5=new m.TemplateRef_(this,4,this._anchor_4),this._NgIf_4_6=new _.Wrapper_NgIf(this._vc_4.vcRef,this._TemplateRef_4_5),this._text_5=this.renderer.createText(this._el_0,"\n ",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._anchor_2,this._text_3,this._anchor_4,this._text_5],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===m.TemplateRef&&2===e?this._TemplateRef_2_5:t===w.NgIf&&2===e?this._NgIf_2_6.context:t===m.TemplateRef&&4===e?this._TemplateRef_4_5:t===w.NgIf&&4===e?this._NgIf_4_6.context:n},e.prototype.detectChangesInternal=function(t){var e=this.parentView.context.info.contact.url;this._NgIf_2_6.check_ngIf(e,t,!1),this._NgIf_2_6.ngDoCheck(this,this._anchor_2,t);var n=this.parentView.context.info.contact.email;this._NgIf_4_6.check_ngIf(n,t,!1),this._NgIf_4_6.ngDoCheck(this,this._anchor_4,t),this._vc_2.detectChangesInNestedViews(t),this._vc_4.detectChangesInNestedViews(t)},e.prototype.destroyInternal=function(){this._vc_2.destroyNestedViews(),this._vc_4.destroyNestedViews()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e.prototype.createEmbeddedViewInternal=function(t){return 2==t?new R(this.viewUtils,this,2,this._anchor_2,this._vc_2):4==t?new A(this.viewUtils,this,4,this._anchor_4,this._vc_4):null},e}(i.AppView),R=function(t){function e(n,r,i,o,s){t.call(this,e,E,a.ViewType.EMBEDDED,n,r,i,o,c.ChangeDetectorStatus.CheckAlways,s),this._expr_2=c.UNINITIALIZED,this._expr_3=c.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=o.createRenderElement(this.renderer,null,"a",o.EMPTY_INLINE_ARRAY,null),this._text_1=this.renderer.createText(this._el_0,"",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1],null),null},e.prototype.detectChangesInternal=function(t){var e=o.inlineInterpolate(1,"",this.parentView.parentView.context.info.contact.url,"");o.checkBinding(t,this._expr_2,e)&&(this.renderer.setElementProperty(this._el_0,"href",this.viewUtils.sanitizer.sanitize(x.SecurityContext.URL,e)),this._expr_2=e);var n=o.inlineInterpolate(1,"\n ",this.parentView.parentView.context.info.contact.name||this.parentView.parentView.context.info.contact.url,"");o.checkBinding(t,this._expr_3,n)&&(this.renderer.setText(this._text_1,n),this._expr_3=n)},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(i.AppView),A=function(t){function e(n,r,i,o,s){t.call(this,e,E,a.ViewType.EMBEDDED,n,r,i,o,c.ChangeDetectorStatus.CheckAlways,s),this._expr_2=c.UNINITIALIZED,this._expr_3=c.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=o.createRenderElement(this.renderer,null,"a",o.EMPTY_INLINE_ARRAY,null),this._text_1=this.renderer.createText(this._el_0,"",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1],null),null},e.prototype.detectChangesInternal=function(t){var e=o.inlineInterpolate(1,"mailto:",this.parentView.parentView.context.info.contact.email,"");o.checkBinding(t,this._expr_2,e)&&(this.renderer.setElementProperty(this._el_0,"href",this.viewUtils.sanitizer.sanitize(x.SecurityContext.URL,e)),this._expr_2=e);var n=o.inlineInterpolate(1,"\n ",this.parentView.parentView.context.info.contact.email,"");o.checkBinding(t,this._expr_3,n)&&(this.renderer.setText(this._text_1,n),this._expr_3=n)},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(i.AppView),N=function(t){function e(n,r,i,o,s){t.call(this,e,E,a.ViewType.EMBEDDED,n,r,i,o,c.ChangeDetectorStatus.CheckAlways,s)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=o.createRenderElement(this.renderer,null,"span",o.EMPTY_INLINE_ARRAY,null),this._text_1=this.renderer.createText(this._el_0," License:\n ",null),this._anchor_2=this.renderer.createTemplateAnchor(this._el_0,null),this._vc_2=new f.ViewContainer(2,0,this,this._anchor_2),this._TemplateRef_2_5=new m.TemplateRef_(this,2,this._anchor_2),this._NgIf_2_6=new _.Wrapper_NgIf(this._vc_2.vcRef,this._TemplateRef_2_5),this._text_3=this.renderer.createText(this._el_0,"\n ",null),this._anchor_4=this.renderer.createTemplateAnchor(this._el_0,null),this._vc_4=new f.ViewContainer(4,0,this,this._anchor_4),this._TemplateRef_4_5=new m.TemplateRef_(this,4,this._anchor_4),this._NgIf_4_6=new _.Wrapper_NgIf(this._vc_4.vcRef,this._TemplateRef_4_5),this._text_5=this.renderer.createText(this._el_0,"\n ",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._anchor_2,this._text_3,this._anchor_4,this._text_5],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===m.TemplateRef&&2===e?this._TemplateRef_2_5:t===w.NgIf&&2===e?this._NgIf_2_6.context:t===m.TemplateRef&&4===e?this._TemplateRef_4_5:t===w.NgIf&&4===e?this._NgIf_4_6.context:n},e.prototype.detectChangesInternal=function(t){var e=this.parentView.context.info.license.url;this._NgIf_2_6.check_ngIf(e,t,!1),this._NgIf_2_6.ngDoCheck(this,this._anchor_2,t);var n=!this.parentView.context.info.license.url;this._NgIf_4_6.check_ngIf(n,t,!1),this._NgIf_4_6.ngDoCheck(this,this._anchor_4,t),this._vc_2.detectChangesInNestedViews(t),this._vc_4.detectChangesInNestedViews(t)},e.prototype.destroyInternal=function(){this._vc_2.destroyNestedViews(),this._vc_4.destroyNestedViews()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e.prototype.createEmbeddedViewInternal=function(t){return 2==t?new P(this.viewUtils,this,2,this._anchor_2,this._vc_2):4==t?new M(this.viewUtils,this,4,this._anchor_4,this._vc_4):null},e}(i.AppView),P=function(t){function e(n,r,i,o,s){t.call(this,e,E,a.ViewType.EMBEDDED,n,r,i,o,c.ChangeDetectorStatus.CheckAlways,s),this._expr_2=c.UNINITIALIZED,this._expr_3=c.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=o.createRenderElement(this.renderer,null,"a",o.EMPTY_INLINE_ARRAY,null),this._text_1=this.renderer.createText(this._el_0,"",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1],null),null},e.prototype.detectChangesInternal=function(t){var e=o.inlineInterpolate(1,"",this.parentView.parentView.context.info.license.url,"");o.checkBinding(t,this._expr_2,e)&&(this.renderer.setElementProperty(this._el_0,"href",this.viewUtils.sanitizer.sanitize(x.SecurityContext.URL,e)),this._expr_2=e);var n=o.inlineInterpolate(1," ",this.parentView.parentView.context.info.license.name," ");o.checkBinding(t,this._expr_3,n)&&(this.renderer.setText(this._text_1,n),this._expr_3=n)},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(i.AppView),M=function(t){function e(n,r,i,o,s){t.call(this,e,E,a.ViewType.EMBEDDED,n,r,i,o,c.ChangeDetectorStatus.CheckAlways,s),this._expr_2=c.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=o.createRenderElement(this.renderer,null,"span",o.EMPTY_INLINE_ARRAY,null),this._text_1=this.renderer.createText(this._el_0,"",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1],null),null},e.prototype.detectChangesInternal=function(t){var e=o.inlineInterpolate(1," ",this.parentView.parentView.context.info.license.name," ");o.checkBinding(t,this._expr_2,e)&&(this.renderer.setText(this._text_1,e),this._expr_2=e)},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(i.AppView)},function(t,e){"use strict";e.styles=["[_nghost-%COMP%] {\n display: block;\n text-align: center; }\n @media (max-width: 1000px) {\n [_nghost-%COMP%] {\n display: none; } }\n\nimg[_ngcontent-%COMP%] {\n max-height: 150px;\n width: auto;\n display: inline-block;\n max-width: 100%;\n box-sizing: border-box; }"]},function(t,e,n){"use strict";var r=n(215),i=n(19),o=n(8),s=n(15),a=n(12),c=n(9),u=n(13),l=n(20),h=n(453),p=n(23),f=n(36),_=n(25),d=n(28),y=n(485),m=n(59),g=n(22),v=n(193),b=n(39),w=function(){function t(t){this._changed=!1,this.context=new r.ApiLogo(t)}return t.prototype.ngOnDetach=function(t,e,n){},t.prototype.ngOnDestroy=function(){},t.prototype.ngDoCheck=function(t,e,n){var r=this._changed;return this._changed=!1,n||0===t.numberOfChecks&&this.context.ngOnInit(),r},t.prototype.checkHost=function(t,e,n,r){},t.prototype.handleEvent=function(t,e){var n=!0;return n},t.prototype.subscribe=function(t,e){this._eventHandler=e},t}();e.Wrapper_ApiLogo=w;var x=o.createRenderComponentType("",0,s.ViewEncapsulation.None,[],{}),I=function(t){function e(n,r,i,o){t.call(this,e,x,a.ViewType.HOST,n,r,i,o,c.ChangeDetectorStatus.CheckAlways)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=o.selectOrCreateRenderHostElement(this.renderer,"api-logo",o.EMPTY_INLINE_ARRAY,t,null),this.compView_0=new T(this.viewUtils,this,0,this._el_0),this._ApiLogo_0_3=new w(this.injectorGet(l.SpecManager,this.parentIndex)),this.compView_0.create(this._ApiLogo_0_3.context),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0],null),new u.ComponentRef_(0,this,this._el_0,this._ApiLogo_0_3.context)},e.prototype.injectorGetInternal=function(t,e,n){return t===r.ApiLogo&&0===e?this._ApiLogo_0_3.context:n},e.prototype.detectChangesInternal=function(t){this._ApiLogo_0_3.ngDoCheck(this,this._el_0,t)&&this.compView_0.markAsCheckOnce(),this.compView_0.detectChanges(t)},e.prototype.destroyInternal=function(){this.compView_0.destroy()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(i.AppView);e.ApiLogoNgFactory=new u.ComponentFactory("api-logo",I,r.ApiLogo);var C=[h.styles],k=o.createRenderComponentType("",0,s.ViewEncapsulation.Emulated,C,{}),T=function(t){function e(n,r,i,o){t.call(this,e,k,a.ViewType.COMPONENT,n,r,i,o,c.ChangeDetectorStatus.CheckOnce)}return __extends(e,t),e.prototype.createInternal=function(t){var e=this.renderer.createViewRoot(this.parentElement);return this._anchor_0=this.renderer.createTemplateAnchor(e,null),this._vc_0=new p.ViewContainer(0,null,this,this._anchor_0),this._TemplateRef_0_5=new _.TemplateRef_(this,0,this._anchor_0),this._NgIf_0_6=new f.Wrapper_NgIf(this._vc_0.vcRef,this._TemplateRef_0_5),this._text_1=this.renderer.createText(e,"\n",null),this.init(null,this.renderer.directRenderer?null:[this._anchor_0,this._text_1],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===_.TemplateRef&&0===e?this._TemplateRef_0_5:t===d.NgIf&&0===e?this._NgIf_0_6.context:n},e.prototype.detectChangesInternal=function(t){var e=this.context.logo.imgUrl;this._NgIf_0_6.check_ngIf(e,t,!1),this._NgIf_0_6.ngDoCheck(this,this._anchor_0,t),this._vc_0.detectChangesInNestedViews(t)},e.prototype.destroyInternal=function(){this._vc_0.destroyNestedViews()},e.prototype.createEmbeddedViewInternal=function(t){return 0==t?new E(this.viewUtils,this,0,this._anchor_0,this._vc_0):null},e}(i.AppView);e.View_ApiLogo0=T;var E=function(t){function e(n,r,i,s,u){t.call(this,e,k,a.ViewType.EMBEDDED,n,r,i,s,c.ChangeDetectorStatus.CheckAlways,u),this._expr_2=c.UNINITIALIZED,this._map_3=o.pureProxy1(function(t){return{"background-color":t}})}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=o.createRenderElement(this.renderer,null,"img",o.EMPTY_INLINE_ARRAY,null),this._NgStyle_0_3=new y.Wrapper_NgStyle(this.parentView.injectorGet(m.KeyValueDiffers,this.parentIndex),new g.ElementRef(this._el_0),this.renderer),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===v.NgStyle&&0===e?this._NgStyle_0_3.context:n},e.prototype.detectChangesInternal=function(t){var e=this._map_3(this.parentView.context.logo.bgColor);this._NgStyle_0_3.check_ngStyle(e,t,!1),this._NgStyle_0_3.ngDoCheck(this,this._el_0,t);var n=this.parentView.context.logo.imgUrl;o.checkBinding(t,this._expr_2,n)&&(this.renderer.setElementAttribute(this._el_0,"src",null==this.viewUtils.sanitizer.sanitize(b.SecurityContext.URL,n)?null:this.viewUtils.sanitizer.sanitize(b.SecurityContext.URL,n).toString()),this._expr_2=n)},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(i.AppView)},function(t,e){"use strict";e.styles=['.param-name-wrap[_ngcontent-%COMP%] {\n display: inline-block;\n padding-right: 25px;\n font-family: Montserrat, sans-serif; }\n\n.param-info[_ngcontent-%COMP%] {\n border-bottom: 1px solid #9fb4be;\n padding: 10px 0;\n width: 75%;\n box-sizing: border-box; }\n .param-info[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n line-height: 1; }\n\n.param-range[_ngcontent-%COMP%] {\n position: relative;\n top: 1px;\n margin-right: 6px;\n margin-left: 6px;\n border-radius: 2px;\n background-color: rgba(0, 51, 160, 0.1);\n padding: 0 4px;\n color: rgba(0, 51, 160, 0.7); }\n\n.param-required[_ngcontent-%COMP%] {\n vertical-align: middle;\n line-height: 20px;\n color: #e53935;\n font-size: 12px;\n font-weight: bold; }\n\n.param-nullable[_ngcontent-%COMP%] {\n vertical-align: middle;\n line-height: 20px;\n color: #3195a6;\n font-size: 12px;\n font-weight: bold; }\n\n.param-type[_ngcontent-%COMP%], .param-array-format[_ngcontent-%COMP%] {\n vertical-align: middle;\n line-height: 20px;\n color: rgba(38, 50, 56, 0.4);\n font-size: 0.929em; }\n\n.param-type[_ngcontent-%COMP%] {\n font-weight: normal; }\n .param-type.array[_ngcontent-%COMP%]::before, .param-type.tuple[_ngcontent-%COMP%]::before {\n color: #263238;\n font-weight: 300; }\n .param-collection-format-multi[_ngcontent-%COMP%] + .param-type.array[_ngcontent-%COMP%]::before, .param-collection-format-multi[_ngcontent-%COMP%] + .param-type.tuple[_ngcontent-%COMP%]::before {\n content: none; }\n .param-type.array[_ngcontent-%COMP%]::before {\n content: "Array of "; }\n .param-type.tuple[_ngcontent-%COMP%]::before {\n content: "Tuple "; }\n .param-type.with-hint[_ngcontent-%COMP%] {\n display: inline-block;\n margin-bottom: 0.4em;\n border-bottom: 1px dotted rgba(38, 50, 56, 0.4);\n padding: 0;\n cursor: help; }\n .param-type-trivial[_ngcontent-%COMP%] {\n display: inline-block; }\n .param-type-file[_ngcontent-%COMP%] {\n font-weight: bold;\n text-transform: capitalize; }\n\n.param-name[_ngcontent-%COMP%] {\n border-left: 1px solid rgba(0, 51, 160, 0.5);\n box-sizing: border-box;\n position: relative;\n padding: 10px 0;\n vertical-align: top;\n line-height: 20px;\n white-space: nowrap;\n font-size: 0.929em;\n font-weight: 400; }\n .param-name[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]::before {\n content: \'\';\n display: inline-block;\n width: 1px;\n height: 7px;\n background-color: #0033a0;\n margin: 0 10px;\n vertical-align: middle; }\n .param-name[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]::after {\n content: \'\';\n position: absolute;\n border-top: 1px solid rgba(0, 51, 160, 0.5);\n width: 10px;\n left: 0;\n top: 21px; }\n\n.param[_ngcontent-%COMP%]:first-of-type > .param-name[_ngcontent-%COMP%]::before {\n content: \'\';\n display: block;\n position: absolute;\n left: -1px;\n top: 0;\n border-left: 2px solid #fff;\n height: 21px; }\n\n.param[_ngcontent-%COMP%]:last-of-type > .param-name[_ngcontent-%COMP%], .param.last[_ngcontent-%COMP%] > .param-name[_ngcontent-%COMP%] {\n position: relative; }\n .param[_ngcontent-%COMP%]:last-of-type > .param-name[_ngcontent-%COMP%]::after, .param.last[_ngcontent-%COMP%] > .param-name[_ngcontent-%COMP%]::after {\n content: \'\';\n display: block;\n position: absolute;\n left: -2px;\n border-left: 2px solid #fff;\n top: 22px;\n background-color: #fff;\n bottom: 0; }\n\n.param-wrap[_ngcontent-%COMP%]:last-of-type > .param-schema[_ngcontent-%COMP%] {\n border-left-color: transparent; }\n\n.param-schema[_ngcontent-%COMP%] .param-wrap[_ngcontent-%COMP%]:first-of-type .param-name[_ngcontent-%COMP%]::before {\n display: none; }\n\n.param-schema.last[_ngcontent-%COMP%] > td[_ngcontent-%COMP%] {\n border-left: 0; }\n\n.param-enum[_ngcontent-%COMP%] {\n color: #263238;\n font-size: 0.95em; }\n .param-enum[_ngcontent-%COMP%]::before {\n content: \'Valid values: \'; }\n\n.param-enum[_ngcontent-%COMP%] {\n color: #263238;\n font-size: 0.95em; }\n .param-enum[_ngcontent-%COMP%]::before {\n content: \'Valid values: \'; }\n .param-type.array[_ngcontent-%COMP%] ~ .param-enum[_ngcontent-%COMP%]::before {\n content: \'Valid items values: \'; }\n\n.param-pattern[_ngcontent-%COMP%] {\n color: #3195a6;\n white-space: nowrap; }\n .param-pattern[_ngcontent-%COMP%]::before, .param-pattern[_ngcontent-%COMP%]::after {\n content: \'/\';\n margin: 0 3px;\n font-size: 1.2em;\n font-weight: bold; }\n\n.param-default[_ngcontent-%COMP%] {\n font-size: 0.95em; }\n .param-default[_ngcontent-%COMP%]::before {\n content: \'Default: \'; }\n\n.param-enum-value[_ngcontent-%COMP%], .param-default-value[_ngcontent-%COMP%] {\n background-color: #fff;\n border: 1px solid rgba(38, 50, 56, 0.2);\n margin: 2px 3px;\n padding: 0 5px;\n border-radius: 2px;\n color: #263238;\n display: inline-block;\n min-width: 20px;\n text-align: center; }\n\n[_nghost-%COMP%] {\n display: block; }\n\n.param-schema[_ngcontent-%COMP%] > td[_ngcontent-%COMP%] {\n border-left: 1px solid rgba(0, 51, 160, 0.5);\n padding: 0 10px; }\n\n.derived-schema[_ngcontent-%COMP%] {\n display: none; }\n\n.derived-schema.active[_ngcontent-%COMP%] {\n display: block; }\n\n.nested-schema[_nghost-%COMP%] {\n background-color: white;\n padding: 10px 20px;\n position: relative;\n border-radius: 2px; }\n .nested-schema[_nghost-%COMP%]:before, .nested-schema[_nghost-%COMP%]:after {\n content: "";\n width: 0;\n height: 0;\n position: absolute;\n top: 0;\n border-style: solid;\n border-color: transparent;\n border-width: 10px 15px 0;\n margin-left: -7.5px;\n border-top-color: #f0f0f0; }\n .nested-schema[_nghost-%COMP%]:before {\n left: 10%; }\n .nested-schema[_nghost-%COMP%]:after {\n right: 10%; }\n .nested-schema[_nghost-%COMP%] .param[_ngcontent-%COMP%]:first-of-type > .param-name[_ngcontent-%COMP%]:before, .nested-schema[_nghost-%COMP%] .param[_ngcontent-%COMP%]:last-of-type > .param-name[_ngcontent-%COMP%]:after {\n border-color: white; }\n\n[nestodd="true"][_nghost-%COMP%] {\n background-color: #f0f0f0;\n border-radius: 2px; }\n [nestodd="true"][_nghost-%COMP%]:before, [nestodd="true"][_nghost-%COMP%]:after {\n border-top-color: white; }\n [nestodd="true"][_nghost-%COMP%] > .params-wrap[_ngcontent-%COMP%] > .param[_ngcontent-%COMP%]:first-of-type > .param-name[_ngcontent-%COMP%]:before, [nestodd="true"][_nghost-%COMP%] > .params-wrap[_ngcontent-%COMP%] > .param[_ngcontent-%COMP%]:last-of-type > .param-name[_ngcontent-%COMP%]:after {\n border-color: #f0f0f0; }\n [nestodd="true"][_nghost-%COMP%] > .params-wrap[_ngcontent-%COMP%] > .param[_ngcontent-%COMP%]:last-of-type > .param-name[_ngcontent-%COMP%]:after, [nestodd="true"][_nghost-%COMP%] > .params-wrap[_ngcontent-%COMP%] > .param.last[_ngcontent-%COMP%] > .param-name[_ngcontent-%COMP%]:after {\n border-color: #f0f0f0; }\n\nzippy[_ngcontent-%COMP%] {\n overflow: visible; }\n\n.zippy-content-wrap[_ngcontent-%COMP%] {\n padding: 0; }\n\n.param.complex.expanded[_ngcontent-%COMP%] > .param-info[_ngcontent-%COMP%] {\n border-bottom: 0; }\n\n.param.complex[_ngcontent-%COMP%] > .param-name[_ngcontent-%COMP%] .param-name-wrap[_ngcontent-%COMP%] {\n font-weight: bold;\n cursor: pointer;\n color: #263238; }\n\n.param.complex[_ngcontent-%COMP%] > .param-name[_ngcontent-%COMP%] svg[_ngcontent-%COMP%] {\n height: 1.2em;\n vertical-align: middle;\n transition: all 0.3s ease; }\n\n.param.complex.expanded[_ngcontent-%COMP%] > .param-name[_ngcontent-%COMP%] svg[_ngcontent-%COMP%] {\n transform: rotateZ(-180deg); }\n\n.param.additional[_ngcontent-%COMP%] > .param-name[_ngcontent-%COMP%] {\n color: rgba(38, 50, 56, 0.4); }\n\n.params-wrap[_ngcontent-%COMP%] {\n width: 100%; }\n\ntable[_ngcontent-%COMP%] {\n border-spacing: 0; }\n\n.params-wrap.params-array[_ngcontent-%COMP%]:before, .params-wrap.params-array[_ngcontent-%COMP%]:after {\n display: block;\n font-weight: 300;\n color: #263238;\n font-size: 13px;\n line-height: 1.5; }\n\n.params-wrap.params-array[_ngcontent-%COMP%]:after {\n content: "]";\n font-family: monospace; }\n\n.params-wrap.params-array[_ngcontent-%COMP%]:before {\n content: "Array [";\n padding-top: 1em;\n font-family: monospace; }\n\n.params-wrap.params-array[_ngcontent-%COMP%] {\n padding-left: 10px; }\n\n.param-schema.param-array[_ngcontent-%COMP%]:before {\n bottom: 9.75px;\n width: 10px;\n border-left-style: dashed;\n border-bottom: 1px dashed rgba(0, 51, 160, 0.5); }\n\n.params-wrap.params-array[_ngcontent-%COMP%] > .param-wrap[_ngcontent-%COMP%]:first-of-type > .param[_ngcontent-%COMP%] > .param-name[_ngcontent-%COMP%]:after {\n content: "";\n display: block;\n position: absolute;\n left: -1px;\n top: 0;\n border-left: 2px solid #fff;\n height: 20px; }\n\n.params-wrap[_ngcontent-%COMP%] > .param[_ngcontent-%COMP%] > .param-schema.param-array[_ngcontent-%COMP%] {\n border-left-color: transparent; }\n\n.discriminator-info[_ngcontent-%COMP%] {\n margin-top: 5px; }\n\n.discriminator-wrap[_ngcontent-%COMP%]:not(.empty) > td[_ngcontent-%COMP%] {\n padding: 0;\n position: relative; }\n .discriminator-wrap[_ngcontent-%COMP%]:not(.empty) > td[_ngcontent-%COMP%]:before {\n content: "";\n display: block;\n position: absolute;\n left: 0;\n top: 0;\n border-left: 1px solid rgba(0, 51, 160, 0.5);\n height: 21px;\n z-index: 1; }\n\nul[_ngcontent-%COMP%], li[_ngcontent-%COMP%] {\n margin: 0; }\n\nul[_ngcontent-%COMP%] {\n list-style: none;\n padding-left: 1em; }\n\nli[_ngcontent-%COMP%]:before {\n content: "- ";\n font-weight: bold; }\n\n.array-tuple[_ngcontent-%COMP%] > .tuple-item[_ngcontent-%COMP%] {\n margin-top: 1.5em;\n display: flex; }\n .array-tuple[_ngcontent-%COMP%] > .tuple-item[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] {\n flex: 0;\n padding: 10px 15px 10px 0;\n font-family: monospace; }\n .array-tuple[_ngcontent-%COMP%] > .tuple-item[_ngcontent-%COMP%] > json-schema[_ngcontent-%COMP%] {\n flex: 1; }\n .array-tuple[_ngcontent-%COMP%] > .tuple-item[_ngcontent-%COMP%] > json-schema[_ngcontent-%COMP%]:before, .array-tuple[_ngcontent-%COMP%] > .tuple-item[_ngcontent-%COMP%] > json-schema[_ngcontent-%COMP%]:after {\n display: none; }\n\n.param-name-enumvalue[_ngcontent-%COMP%] {\n padding: 2px;\n background-color: #e6ebf6; }\n .param-name-enumvalue[_ngcontent-%COMP%]:before {\n content: " = "; }']},function(t,e,n){"use strict";var r=n(219),i=n(9),o=n(19),s=n(8),a=n(39),c=n(15),u=n(12),l=n(13),h=function(){ +function t(){this._changed=!1,this._changes={},this.context=new r.LoadingBar,this._expr_0=i.UNINITIALIZED,this._expr_1=i.UNINITIALIZED}return t.prototype.ngOnDetach=function(t,e,n){},t.prototype.ngOnDestroy=function(){},t.prototype.check_progress=function(t,e,n){(n||s.checkBinding(e,this._expr_0,t))&&(this._changed=!0,this.context.progress=t,this._changes.progress=new i.SimpleChange(this._expr_0,t),this._expr_0=t)},t.prototype.ngDoCheck=function(t,e,n){var r=this._changed;return this._changed=!1,n||r&&(this.context.ngOnChanges(this._changes),this._changes={}),r},t.prototype.checkHost=function(t,e,n,r){var i=this.context.display;s.checkBinding(r,this._expr_1,i)&&(t.renderer.setElementStyle(n,"display",null==t.viewUtils.sanitizer.sanitize(a.SecurityContext.STYLE,i)?null:t.viewUtils.sanitizer.sanitize(a.SecurityContext.STYLE,i).toString()),this._expr_1=i)},t.prototype.handleEvent=function(t,e){var n=!0;return n},t.prototype.subscribe=function(t,e){this._eventHandler=e},t}();e.Wrapper_LoadingBar=h;var p=s.createRenderComponentType("",0,c.ViewEncapsulation.None,[],{}),f=function(t){function e(n,r,o,s){t.call(this,e,p,u.ViewType.HOST,n,r,o,s,i.ChangeDetectorStatus.CheckAlways)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.selectOrCreateRenderHostElement(this.renderer,"loading-bar",s.EMPTY_INLINE_ARRAY,t,null),this.compView_0=new y(this.viewUtils,this,0,this._el_0),this._LoadingBar_0_3=new h,this.compView_0.create(this._LoadingBar_0_3.context),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0],null),new l.ComponentRef_(0,this,this._el_0,this._LoadingBar_0_3.context)},e.prototype.injectorGetInternal=function(t,e,n){return t===r.LoadingBar&&0===e?this._LoadingBar_0_3.context:n},e.prototype.detectChangesInternal=function(t){this._LoadingBar_0_3.ngDoCheck(this,this._el_0,t),this._LoadingBar_0_3.checkHost(this,this.compView_0,this._el_0,t),this.compView_0.detectChanges(t)},e.prototype.destroyInternal=function(){this.compView_0.destroy()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView);e.LoadingBarNgFactory=new l.ComponentFactory("loading-bar",f,r.LoadingBar);var _=["[_nghost-%COMP%] {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n display: block;\n\n height: 5px;\n z-index: 100;\n }\n\n span[_ngcontent-%COMP%] {\n display: block;\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n right: attr(progress percentage);\n background-color: #5f7fc3;\n transition: right 0.2s linear;\n }"],d=s.createRenderComponentType("",0,c.ViewEncapsulation.Emulated,_,{}),y=function(t){function e(n,r,o,s){t.call(this,e,d,u.ViewType.COMPONENT,n,r,o,s,i.ChangeDetectorStatus.CheckAlways),this._expr_4=i.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){var e=this.renderer.createViewRoot(this.parentElement);return this._text_0=this.renderer.createText(e,"\n ",null),this._el_1=s.createRenderElement(this.renderer,e,"span",s.EMPTY_INLINE_ARRAY,null),this._text_2=this.renderer.createText(this._el_1," ",null),this._text_3=this.renderer.createText(e,"\n ",null),this.init(null,this.renderer.directRenderer?null:[this._text_0,this._el_1,this._text_2,this._text_3],null),null},e.prototype.detectChangesInternal=function(t){var e=this.context.progress+"%";s.checkBinding(t,this._expr_4,e)&&(this.renderer.setElementStyle(this._el_1,"width",null==this.viewUtils.sanitizer.sanitize(a.SecurityContext.STYLE,e)?null:this.viewUtils.sanitizer.sanitize(a.SecurityContext.STYLE,e).toString()),this._expr_4=e)},e}(o.AppView);e.View_LoadingBar0=y},function(t,e){"use strict";e.styles=["[_nghost-%COMP%] {\n padding-bottom: 100px;\n display: block;\n border-bottom: 1px solid rgba(127, 127, 127, 0.25);\n margin-top: 1em;\n transform: translateZ(0);\n z-index: 2; }\n\n.method-header[_ngcontent-%COMP%] {\n margin-bottom: calc(1em - 6px); }\n\n.method-endpoint[_ngcontent-%COMP%] {\n padding: 10px 20px;\n border-radius: 4px;\n background-color: #222d32;\n display: block;\n font-weight: 300;\n white-space: nowrap;\n overflow-x: auto; }\n\n.method-endpoint[_ngcontent-%COMP%] > .method-params-subheader[_ngcontent-%COMP%] {\n padding-top: 1px;\n padding-bottom: 0;\n margin: 0;\n font-size: 12/14em;\n color: #263238;\n vertical-align: middle;\n display: inline-block;\n border-radius: 2px; }\n\n.method-api-url[_ngcontent-%COMP%] {\n color: rgba(255, 255, 255, 0.6);\n margin-left: 10px;\n margin-top: 2px;\n position: relative;\n top: 1px;\n font-family: Montserrat, sans-serif;\n font-size: 0.929em; }\n .method-api-url-path[_ngcontent-%COMP%] {\n font-family: Montserrat, sans-serif;\n position: relative;\n top: 1px;\n color: #ffffff; }\n\n.method-tags[_ngcontent-%COMP%] {\n margin-top: 20px; }\n .method-tags[_ngcontent-%COMP%] > a[_ngcontent-%COMP%] {\n font-size: 16px;\n color: #999;\n display: inline-block;\n padding: 0 0.5em;\n text-decoration: none; }\n .method-tags[_ngcontent-%COMP%] > a[_ngcontent-%COMP%]:before {\n content: '#';\n margin-right: -0.4em; }\n .method-tags[_ngcontent-%COMP%] > a[_ngcontent-%COMP%]:first-of-type {\n padding: 0; }\n\n.method-content[_ngcontent-%COMP%], .method-samples[_ngcontent-%COMP%] {\n display: block;\n box-sizing: border-box;\n float: left; }\n\n.method-content[_ngcontent-%COMP%] {\n width: 60%;\n padding: 40px; }\n\n.method-samples[_ngcontent-%COMP%] {\n color: #fafbfc;\n width: 40%;\n padding: 40px;\n background: #263238; }\n\n.method-samples[_ngcontent-%COMP%] header[_ngcontent-%COMP%], .method-samples[_ngcontent-%COMP%] > h5[_ngcontent-%COMP%] {\n color: #9fb4be;\n text-transform: uppercase; }\n\n.method-samples[_ngcontent-%COMP%] > h5[_ngcontent-%COMP%] {\n margin-bottom: 8px; }\n\n.method-samples[_ngcontent-%COMP%] schema-sample[_ngcontent-%COMP%] {\n display: block; }\n\n.method[_ngcontent-%COMP%]:after {\n content: \"\";\n display: table;\n clear: both; }\n\n.method-description[_ngcontent-%COMP%] {\n padding: 6px 0 10px 0;\n margin: 0; }\n\n.http-method[_ngcontent-%COMP%] {\n color: #263238;\n background: #ffffff;\n padding: 3px 10px;\n text-transform: uppercase;\n display: inline-block;\n margin: 0; }\n\n[select-on-click][_ngcontent-%COMP%] {\n cursor: pointer; }\n\n@media (max-width: 1100px) {\n .methods[_ngcontent-%COMP%]:before {\n display: none; }\n .method-samples[_ngcontent-%COMP%], .method-content[_ngcontent-%COMP%] {\n width: 100%; }\n .method-samples[_ngcontent-%COMP%] {\n margin-top: 2em; }\n [_nghost-%COMP%] {\n padding-bottom: 0; } }"]},function(t,e){"use strict";e.styles=['[_nghost-%COMP%] {\n display: block;\n overflow: hidden; }\n\n[_nghost-%COMP%] [hidden][_ngcontent-%COMP%] {\n display: none; }\n\n.tag-info[_ngcontent-%COMP%] {\n padding: 40px;\n box-sizing: border-box;\n background-color: white;\n width: 60%; }\n @media (max-width: 1100px) {\n .tag-info[_ngcontent-%COMP%] {\n width: 100%; } }\n\n.tag-info[_ngcontent-%COMP%]:after, .tag-info[_ngcontent-%COMP%]:before {\n content: "";\n display: table; }\n\n.tag-info[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n color: #0033a0;\n text-transform: capitalize;\n font-weight: normal;\n margin-top: 0; }\n\n.methods[_ngcontent-%COMP%] {\n display: block;\n position: relative; }']},function(t,e,n){"use strict";var r=n(221),i=n(9),o=n(19),s=n(8),a=n(15),c=n(12),u=n(13),l=n(20),h=n(458),p=n(23),f=n(56),_=n(79),d=n(25),y=n(34),m=n(54),g=n(46),v=n(36),b=n(479),w=n(76),x=n(67),I=n(28),C=n(39),k=n(220),T=n(304),E=n(35),S=n(22),O=function(){function t(t){this._changed=!1,this.context=new r.MethodsList(t),this._expr_0=i.UNINITIALIZED}return t.prototype.ngOnDetach=function(t,e,n){},t.prototype.ngOnDestroy=function(){},t.prototype.check_pointer=function(t,e,n){(n||s.checkBinding(e,this._expr_0,t))&&(this._changed=!0,this.context.pointer=t,this._expr_0=t)},t.prototype.ngDoCheck=function(t,e,n){var r=this._changed;return this._changed=!1,n||0===t.numberOfChecks&&this.context.ngOnInit(),r},t.prototype.checkHost=function(t,e,n,r){},t.prototype.handleEvent=function(t,e){var n=!0;return n},t.prototype.subscribe=function(t,e){this._eventHandler=e},t}();e.Wrapper_MethodsList=O;var R=s.createRenderComponentType("",0,a.ViewEncapsulation.None,[],{}),A=function(t){function e(n,r,o,s){t.call(this,e,R,c.ViewType.HOST,n,r,o,s,i.ChangeDetectorStatus.CheckAlways)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.selectOrCreateRenderHostElement(this.renderer,"methods-list",s.EMPTY_INLINE_ARRAY,t,null),this.compView_0=new M(this.viewUtils,this,0,this._el_0),this._MethodsList_0_3=new O(this.injectorGet(l.SpecManager,this.parentIndex)),this.compView_0.create(this._MethodsList_0_3.context),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0],null),new u.ComponentRef_(0,this,this._el_0,this._MethodsList_0_3.context)},e.prototype.injectorGetInternal=function(t,e,n){return t===r.MethodsList&&0===e?this._MethodsList_0_3.context:n},e.prototype.detectChangesInternal=function(t){this._MethodsList_0_3.ngDoCheck(this,this._el_0,t)&&this.compView_0.markAsCheckOnce(),this.compView_0.detectChanges(t)},e.prototype.destroyInternal=function(){this.compView_0.destroy()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView);e.MethodsListNgFactory=new u.ComponentFactory("methods-list",A,r.MethodsList);var N=[h.styles],P=s.createRenderComponentType("",0,a.ViewEncapsulation.Emulated,N,{}),M=function(t){function e(n,r,o,s){t.call(this,e,P,c.ViewType.COMPONENT,n,r,o,s,i.ChangeDetectorStatus.CheckOnce)}return __extends(e,t),e.prototype.createInternal=function(t){var e=this.renderer.createViewRoot(this.parentElement);return this._el_0=s.createRenderElement(this.renderer,e,"div",new s.InlineArray2(2,"class","methods"),null),this._text_1=this.renderer.createText(this._el_0,"\n ",null),this._anchor_2=this.renderer.createTemplateAnchor(this._el_0,null),this._vc_2=new p.ViewContainer(2,0,this,this._anchor_2),this._TemplateRef_2_5=new d.TemplateRef_(this,2,this._anchor_2),this._NgFor_2_6=new f.Wrapper_NgFor(this._vc_2.vcRef,this._TemplateRef_2_5,this.parentView.injectorGet(y.IterableDiffers,this.parentIndex),this.ref),this._text_3=this.renderer.createText(this._el_0,"\n",null),this._text_4=this.renderer.createText(e,"\n",null),this._pipe_marked_0=new _.MarkedPipe(this.parentView.injectorGet(m.DomSanitizer,this.parentIndex)),this.init(null,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._anchor_2,this._text_3,this._text_4],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===d.TemplateRef&&2===e?this._TemplateRef_2_5:t===g.NgFor&&2===e?this._NgFor_2_6.context:n},e.prototype.detectChangesInternal=function(t){var e=this.context.tags;this._NgFor_2_6.check_ngForOf(e,t,!1);var n=this.context.trackByTagName;this._NgFor_2_6.check_ngForTrackBy(n,t,!1),this._NgFor_2_6.ngDoCheck(this,this._anchor_2,t),this._vc_2.detectChangesInNestedViews(t)},e.prototype.destroyInternal=function(){this._vc_2.destroyNestedViews()},e.prototype.createEmbeddedViewInternal=function(t){return 2==t?new D(this.viewUtils,this,2,this._anchor_2,this._vc_2):null},e}(o.AppView);e.View_MethodsList0=M;var D=function(t){function e(n,r,o,s,a){t.call(this,e,P,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"div",new s.InlineArray2(2,"class","tag"),null),this._text_1=this.renderer.createText(this._el_0,"\n ",null),this._anchor_2=this.renderer.createTemplateAnchor(this._el_0,null),this._vc_2=new p.ViewContainer(2,0,this,this._anchor_2),this._TemplateRef_2_5=new d.TemplateRef_(this,2,this._anchor_2),this._NgIf_2_6=new v.Wrapper_NgIf(this._vc_2.vcRef,this._TemplateRef_2_5),this._text_3=this.renderer.createText(this._el_0,"\n ",null),this._anchor_4=this.renderer.createTemplateAnchor(this._el_0,null),this._vc_4=new p.ViewContainer(4,0,this,this._anchor_4),this._TemplateRef_4_5=new d.TemplateRef_(this,4,this._anchor_4),this._LazyFor_4_6=new b.Wrapper_LazyFor(this._TemplateRef_4_5,this.parentView.ref,this._vc_4.vcRef,this.parentView.parentView.injectorGet(w.LazyTasksService,this.parentView.parentIndex),this.parentView.parentView.injectorGet(x.ScrollService,this.parentView.parentIndex)),this._text_5=this.renderer.createText(this._el_0,"\n ",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._anchor_2,this._text_3,this._anchor_4,this._text_5],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===d.TemplateRef&&2===e?this._TemplateRef_2_5:t===I.NgIf&&2===e?this._NgIf_2_6.context:t===d.TemplateRef&&4===e?this._TemplateRef_4_5:t===w.LazyFor&&4===e?this._LazyFor_4_6.context:n},e.prototype.detectChangesInternal=function(t){var e=!this.context.$implicit.headless;this._NgIf_2_6.check_ngIf(e,t,!1),this._NgIf_2_6.ngDoCheck(this,this._anchor_2,t);var n=this.context.$implicit.methods;this._LazyFor_4_6.check_lazyForOf(n,t,!1),this._LazyFor_4_6.ngDoCheck(this,this._anchor_4,t),this._vc_2.detectChangesInNestedViews(t),this._vc_4.detectChangesInNestedViews(t)},e.prototype.destroyInternal=function(){this._vc_2.destroyNestedViews(),this._vc_4.destroyNestedViews()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e.prototype.createEmbeddedViewInternal=function(t){return 2==t?new V(this.viewUtils,this,2,this._anchor_2,this._vc_2):4==t?new L(this.viewUtils,this,4,this._anchor_4,this._vc_4):null},e}(o.AppView),V=function(t){function e(n,r,o,s,a){t.call(this,e,P,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a),this._expr_12=i.UNINITIALIZED,this._expr_13=i.UNINITIALIZED,this._expr_14=i.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"div",new s.InlineArray2(2,"class","tag-info"),null),this._text_1=this.renderer.createText(this._el_0,"\n ",null),this._el_2=s.createRenderElement(this.renderer,this._el_0,"h1",new s.InlineArray2(2,"class","sharable-header"),null),this._text_3=this.renderer.createText(this._el_2," ",null),this._el_4=s.createRenderElement(this.renderer,this._el_2,"a",new s.InlineArray2(2,"class","share-link"),null),this._text_5=this.renderer.createText(this._el_2,"",null),this._text_6=this.renderer.createText(this._el_0,"\n ",null),this._anchor_7=this.renderer.createTemplateAnchor(this._el_0,null),this._vc_7=new p.ViewContainer(7,0,this,this._anchor_7),this._TemplateRef_7_5=new d.TemplateRef_(this,7,this._anchor_7),this._NgIf_7_6=new v.Wrapper_NgIf(this._vc_7.vcRef,this._TemplateRef_7_5),this._text_8=this.renderer.createText(this._el_0,"\n ",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._el_2,this._text_3,this._el_4,this._text_5,this._text_6,this._anchor_7,this._text_8],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===d.TemplateRef&&7===e?this._TemplateRef_7_5:t===I.NgIf&&7===e?this._NgIf_7_6.context:n},e.prototype.detectChangesInternal=function(t){var e=this.parentView.context.$implicit.description;this._NgIf_7_6.check_ngIf(e,t,!1),this._NgIf_7_6.ngDoCheck(this,this._anchor_7,t),this._vc_7.detectChangesInNestedViews(t);var n=this.parentView.context.$implicit.id;s.checkBinding(t,this._expr_12,n)&&(this.renderer.setElementAttribute(this._el_0,"section",null==n?null:n.toString()),this._expr_12=n);var r=s.inlineInterpolate(1,"#",this.parentView.context.$implicit.id,"");s.checkBinding(t,this._expr_13,r)&&(this.renderer.setElementProperty(this._el_4,"href",this.viewUtils.sanitizer.sanitize(C.SecurityContext.URL,r)),this._expr_13=r);var i=s.inlineInterpolate(1,"",this.parentView.context.$implicit.name," ");s.checkBinding(t,this._expr_14,i)&&(this.renderer.setText(this._text_5,i),this._expr_14=i)},e.prototype.destroyInternal=function(){this._vc_7.destroyNestedViews()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e.prototype.createEmbeddedViewInternal=function(t){return 7==t?new j(this.viewUtils,this,7,this._anchor_7,this._vc_7):null},e}(o.AppView),j=function(t){function e(n,r,o,s,a){t.call(this,e,P,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a),this._expr_2=i.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"p",s.EMPTY_INLINE_ARRAY,null),this._text_1=this.renderer.createText(this._el_0," ",null),this._pipe_marked_0_0=s.pureProxy1(this.parentView.parentView.parentView._pipe_marked_0.transform.bind(this.parentView.parentView.parentView._pipe_marked_0)),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1],null),null},e.prototype.detectChangesInternal=function(t){var e=new i.ValueUnwrapper;e.reset();var n=e.unwrap(s.castByValue(this._pipe_marked_0_0,this.parentView.parentView.parentView._pipe_marked_0.transform)(this.parentView.parentView.context.$implicit.description));(e.hasWrappedValue||s.checkBinding(t,this._expr_2,n))&&(this.renderer.setElementProperty(this._el_0,"innerHTML",this.viewUtils.sanitizer.sanitize(C.SecurityContext.HTML,n)),this._expr_2=n)},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView),L=function(t){function e(n,r,o,s,a){t.call(this,e,P,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a),this._expr_3=i.UNINITIALIZED,this._expr_4=i.UNINITIALIZED,this._expr_5=i.UNINITIALIZED,this._expr_6=i.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"method",s.EMPTY_INLINE_ARRAY,null),this.compView_0=new T.View_Method0(this.viewUtils,this,0,this._el_0),this._Method_0_3=new T.Wrapper_Method(this.parentView.parentView.parentView.injectorGet(l.SpecManager,this.parentView.parentView.parentIndex),this.parentView.parentView.parentView.injectorGet(E.OptionsService,this.parentView.parentView.parentIndex),new S.ElementRef(this._el_0)),this.compView_0.create(this._Method_0_3.context),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===k.Method&&0===e?this._Method_0_3.context:n},e.prototype.detectChangesInternal=function(t){var e=this.context.$implicit.pointer;this._Method_0_3.check_pointer(e,t,!1);var n=this.context.$implicit.tag;this._Method_0_3.check_tag(n,t,!1),this._Method_0_3.ngDoCheck(this,this._el_0,t)&&this.compView_0.markAsCheckOnce();var r=!this.context.show;s.checkBinding(t,this._expr_3,r)&&(this.renderer.setElementProperty(this._el_0,"hidden",r),this._expr_3=r);var i=this.context.$implicit.pointer;s.checkBinding(t,this._expr_4,i)&&(this.renderer.setElementAttribute(this._el_0,"pointer",null==i?null:i.toString()),this._expr_4=i);var o=this.context.$implicit.tag;s.checkBinding(t,this._expr_5,o)&&(this.renderer.setElementAttribute(this._el_0,"section",null==o?null:o.toString()),this._expr_5=o);var a=this.context.$implicit.operationId;s.checkBinding(t,this._expr_6,a)&&(this.renderer.setElementAttribute(this._el_0,"operation-id",null==a?null:a.toString()),this._expr_6=a),this.compView_0.detectChanges(t)},e.prototype.destroyInternal=function(){this.compView_0.destroy()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView)},function(t,e){"use strict";e.styles=["[_nghost-%COMP%] {\n display: block; }\n\n.param-list-header[_ngcontent-%COMP%] {\n border-bottom: 1px solid rgba(38, 50, 56, 0.3);\n margin: 3em 0 1em 0;\n color: rgba(38, 50, 56, 0.5);\n font-weight: normal;\n text-transform: uppercase; }\n\n.param-name-wrap[_ngcontent-%COMP%] {\n display: inline-block;\n padding-right: 25px;\n font-family: Montserrat, sans-serif; }\n\n.param-info[_ngcontent-%COMP%] {\n border-bottom: 1px solid #9fb4be;\n padding: 10px 0;\n width: 75%;\n box-sizing: border-box; }\n .param-info[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n line-height: 1; }\n\n.param-range[_ngcontent-%COMP%] {\n position: relative;\n top: 1px;\n margin-right: 6px;\n margin-left: 6px;\n border-radius: 2px;\n background-color: rgba(0, 51, 160, 0.1);\n padding: 0 4px;\n color: rgba(0, 51, 160, 0.7); }\n\n.param-required[_ngcontent-%COMP%] {\n vertical-align: middle;\n line-height: 20px;\n color: #e53935;\n font-size: 12px;\n font-weight: bold; }\n\n.param-nullable[_ngcontent-%COMP%] {\n vertical-align: middle;\n line-height: 20px;\n color: #3195a6;\n font-size: 12px;\n font-weight: bold; }\n\n.param-type[_ngcontent-%COMP%], .param-array-format[_ngcontent-%COMP%] {\n vertical-align: middle;\n line-height: 20px;\n color: rgba(38, 50, 56, 0.4);\n font-size: 0.929em; }\n\n.param-type[_ngcontent-%COMP%] {\n font-weight: normal; }\n .param-type.array[_ngcontent-%COMP%]::before, .param-type.tuple[_ngcontent-%COMP%]::before {\n color: #263238;\n font-weight: 300; }\n .param-collection-format-multi[_ngcontent-%COMP%] + .param-type.array[_ngcontent-%COMP%]::before, .param-collection-format-multi[_ngcontent-%COMP%] + .param-type.tuple[_ngcontent-%COMP%]::before {\n content: none; }\n .param-type.array[_ngcontent-%COMP%]::before {\n content: \"Array of \"; }\n .param-type.tuple[_ngcontent-%COMP%]::before {\n content: \"Tuple \"; }\n .param-type.with-hint[_ngcontent-%COMP%] {\n display: inline-block;\n margin-bottom: 0.4em;\n border-bottom: 1px dotted rgba(38, 50, 56, 0.4);\n padding: 0;\n cursor: help; }\n .param-type-trivial[_ngcontent-%COMP%] {\n display: inline-block; }\n .param-type-file[_ngcontent-%COMP%] {\n font-weight: bold;\n text-transform: capitalize; }\n\n.param-name[_ngcontent-%COMP%] {\n border-left: 1px solid rgba(0, 51, 160, 0.5);\n box-sizing: border-box;\n position: relative;\n padding: 10px 0;\n vertical-align: top;\n line-height: 20px;\n white-space: nowrap;\n font-size: 0.929em;\n font-weight: 400; }\n .param-name[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]::before {\n content: '';\n display: inline-block;\n width: 1px;\n height: 7px;\n background-color: #0033a0;\n margin: 0 10px;\n vertical-align: middle; }\n .param-name[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]::after {\n content: '';\n position: absolute;\n border-top: 1px solid rgba(0, 51, 160, 0.5);\n width: 10px;\n left: 0;\n top: 21px; }\n\n.param[_ngcontent-%COMP%]:first-of-type > .param-name[_ngcontent-%COMP%]::before {\n content: '';\n display: block;\n position: absolute;\n left: -1px;\n top: 0;\n border-left: 2px solid #fff;\n height: 21px; }\n\n.param[_ngcontent-%COMP%]:last-of-type > .param-name[_ngcontent-%COMP%], .param.last[_ngcontent-%COMP%] > .param-name[_ngcontent-%COMP%] {\n position: relative; }\n .param[_ngcontent-%COMP%]:last-of-type > .param-name[_ngcontent-%COMP%]::after, .param.last[_ngcontent-%COMP%] > .param-name[_ngcontent-%COMP%]::after {\n content: '';\n display: block;\n position: absolute;\n left: -2px;\n border-left: 2px solid #fff;\n top: 22px;\n background-color: #fff;\n bottom: 0; }\n\n.param-wrap[_ngcontent-%COMP%]:last-of-type > .param-schema[_ngcontent-%COMP%] {\n border-left-color: transparent; }\n\n.param-schema[_ngcontent-%COMP%] .param-wrap[_ngcontent-%COMP%]:first-of-type .param-name[_ngcontent-%COMP%]::before {\n display: none; }\n\n.param-schema.last[_ngcontent-%COMP%] > td[_ngcontent-%COMP%] {\n border-left: 0; }\n\n.param-enum[_ngcontent-%COMP%] {\n color: #263238;\n font-size: 0.95em; }\n .param-enum[_ngcontent-%COMP%]::before {\n content: 'Valid values: '; }\n\n.param-enum[_ngcontent-%COMP%] {\n color: #263238;\n font-size: 0.95em; }\n .param-enum[_ngcontent-%COMP%]::before {\n content: 'Valid values: '; }\n .param-type.array[_ngcontent-%COMP%] ~ .param-enum[_ngcontent-%COMP%]::before {\n content: 'Valid items values: '; }\n\n.param-pattern[_ngcontent-%COMP%] {\n color: #3195a6;\n white-space: nowrap; }\n .param-pattern[_ngcontent-%COMP%]::before, .param-pattern[_ngcontent-%COMP%]::after {\n content: '/';\n margin: 0 3px;\n font-size: 1.2em;\n font-weight: bold; }\n\n.param-default[_ngcontent-%COMP%] {\n font-size: 0.95em; }\n .param-default[_ngcontent-%COMP%]::before {\n content: 'Default: '; }\n\n.param-enum-value[_ngcontent-%COMP%], .param-default-value[_ngcontent-%COMP%] {\n background-color: #fff;\n border: 1px solid rgba(38, 50, 56, 0.2);\n margin: 2px 3px;\n padding: 0 5px;\n border-radius: 2px;\n color: #263238;\n display: inline-block;\n min-width: 20px;\n text-align: center; }\n\nheader.paramType[_ngcontent-%COMP%] {\n margin: 25px 0 5px 0;\n text-transform: capitalize; }\n\n.param-array-format[_ngcontent-%COMP%] {\n color: black;\n font-weight: 300; }\n\n.params-wrap[_ngcontent-%COMP%] {\n display: table;\n width: 100%; }\n\n.param-name[_ngcontent-%COMP%] {\n display: table-cell;\n vertical-align: top; }\n\n.param-info[_ngcontent-%COMP%] {\n display: table-cell;\n width: 100%; }\n\n.param[_ngcontent-%COMP%] {\n display: table-row; }\n\n.param[_ngcontent-%COMP%]:last-of-type > .param-name[_ngcontent-%COMP%] {\n border-left: 0; }\n .param[_ngcontent-%COMP%]:last-of-type > .param-name[_ngcontent-%COMP%]:after {\n content: \"\";\n display: block;\n position: absolute;\n left: 0;\n border-left: 1px solid rgba(0, 51, 160, 0.5);\n height: 21px;\n background-color: white;\n top: 0; }\n\n.param[_ngcontent-%COMP%]:first-of-type .param-name[_ngcontent-%COMP%]:after {\n content: \"\";\n display: block;\n position: absolute;\n left: -1px;\n border-left: 2px solid #fff;\n height: 20px;\n background-color: white;\n top: 0; }\n\n[data-hint][_ngcontent-%COMP%] {\n width: 1.2em;\n text-align: center;\n border-radius: 50%;\n vertical-align: middle;\n color: #999999;\n line-height: 1.2;\n text-transform: none;\n cursor: help;\n border: 1px solid #999999;\n margin-left: 0.5em; }\n\n@media (max-width: 520px) {\n [data-hint][_ngcontent-%COMP%] {\n float: right; }\n [data-hint][_ngcontent-%COMP%]:after {\n margin-left: 12px;\n transform: translateX(-100%) translateY(-8px);\n -moz-transform: translateX(-100%) translateY(-8px);\n -webkit-transform: translateX(-100%) translateY(-8px); } }"]},function(t,e,n){"use strict";var r=n(222),i=n(9),o=n(19),s=n(8),a=n(15),c=n(12),u=n(13),l=n(20),h=n(460),p=n(23),f=n(36),_=n(56),d=n(79),y=n(25),m=n(34),g=n(54),v=n(28),b=n(46),w=n(106),x=n(59),I=n(22),C=n(74),k=n(39),T=n(142),E=n(121),S=n(216),O=n(60),R=n(217),A=n(35),N=function(){function t(t){this._changed=!1,this.context=new r.ParamsList(t),this._expr_0=i.UNINITIALIZED}return t.prototype.ngOnDetach=function(t,e,n){},t.prototype.ngOnDestroy=function(){},t.prototype.check_pointer=function(t,e,n){(n||s.checkBinding(e,this._expr_0,t))&&(this._changed=!0,this.context.pointer=t,this._expr_0=t)},t.prototype.ngDoCheck=function(t,e,n){var r=this._changed;return this._changed=!1,n||0===t.numberOfChecks&&this.context.ngOnInit(),r},t.prototype.checkHost=function(t,e,n,r){},t.prototype.handleEvent=function(t,e){var n=!0;return n},t.prototype.subscribe=function(t,e){this._eventHandler=e},t}();e.Wrapper_ParamsList=N;var P=s.createRenderComponentType("",0,a.ViewEncapsulation.None,[],{}),M=function(t){function e(n,r,o,s){t.call(this,e,P,c.ViewType.HOST,n,r,o,s,i.ChangeDetectorStatus.CheckAlways)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.selectOrCreateRenderHostElement(this.renderer,"params-list",s.EMPTY_INLINE_ARRAY,t,null),this.compView_0=new j(this.viewUtils,this,0,this._el_0),this._ParamsList_0_3=new N(this.injectorGet(l.SpecManager,this.parentIndex)),this.compView_0.create(this._ParamsList_0_3.context),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0],null),new u.ComponentRef_(0,this,this._el_0,this._ParamsList_0_3.context)},e.prototype.injectorGetInternal=function(t,e,n){return t===r.ParamsList&&0===e?this._ParamsList_0_3.context:n},e.prototype.detectChangesInternal=function(t){this._ParamsList_0_3.ngDoCheck(this,this._el_0,t)&&this.compView_0.markAsCheckOnce(),this.compView_0.detectChanges(t)},e.prototype.destroyInternal=function(){this.compView_0.destroy()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView);e.ParamsListNgFactory=new u.ComponentFactory("params-list",M,r.ParamsList);var D=[h.styles],V=s.createRenderComponentType("",0,a.ViewEncapsulation.Emulated,D,{}),j=function(t){function e(n,r,o,s){t.call(this,e,V,c.ViewType.COMPONENT,n,r,o,s,i.ChangeDetectorStatus.CheckOnce)}return __extends(e,t),e.prototype.createInternal=function(t){var e=this.renderer.createViewRoot(this.parentElement);return this._anchor_0=this.renderer.createTemplateAnchor(e,null),this._vc_0=new p.ViewContainer(0,null,this,this._anchor_0),this._TemplateRef_0_5=new y.TemplateRef_(this,0,this._anchor_0),this._NgIf_0_6=new f.Wrapper_NgIf(this._vc_0.vcRef,this._TemplateRef_0_5),this._text_1=this.renderer.createText(e,"\n",null),this._anchor_2=this.renderer.createTemplateAnchor(e,null),this._vc_2=new p.ViewContainer(2,null,this,this._anchor_2),this._TemplateRef_2_5=new y.TemplateRef_(this,2,this._anchor_2),this._NgFor_2_6=new _.Wrapper_NgFor(this._vc_2.vcRef,this._TemplateRef_2_5,this.parentView.injectorGet(m.IterableDiffers,this.parentIndex),this.ref),this._text_3=this.renderer.createText(e,"\n\n",null),this._anchor_4=this.renderer.createTemplateAnchor(e,null),this._vc_4=new p.ViewContainer(4,null,this,this._anchor_4),this._TemplateRef_4_5=new y.TemplateRef_(this,4,this._anchor_4),this._NgIf_4_6=new f.Wrapper_NgIf(this._vc_4.vcRef,this._TemplateRef_4_5),this._text_5=this.renderer.createText(e,"\n",null),this._pipe_collectionFormat_0=new d.CollectionFormatPipe,this._pipe_marked_1=new d.MarkedPipe(this.parentView.injectorGet(g.DomSanitizer,this.parentIndex)),this.init(null,this.renderer.directRenderer?null:[this._anchor_0,this._text_1,this._anchor_2,this._text_3,this._anchor_4,this._text_5],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===y.TemplateRef&&0===e?this._TemplateRef_0_5:t===v.NgIf&&0===e?this._NgIf_0_6.context:t===y.TemplateRef&&2===e?this._TemplateRef_2_5:t===b.NgFor&&2===e?this._NgFor_2_6.context:t===y.TemplateRef&&4===e?this._TemplateRef_4_5:t===v.NgIf&&4===e?this._NgIf_4_6.context:n},e.prototype.detectChangesInternal=function(t){var e=this.context.params.length;this._NgIf_0_6.check_ngIf(e,t,!1),this._NgIf_0_6.ngDoCheck(this,this._anchor_0,t);var n=this.context.params;this._NgFor_2_6.check_ngForOf(n,t,!1),this._NgFor_2_6.ngDoCheck(this,this._anchor_2,t);var r=this.context.bodyParam;this._NgIf_4_6.check_ngIf(r,t,!1),this._NgIf_4_6.ngDoCheck(this,this._anchor_4,t),this._vc_0.detectChangesInNestedViews(t),this._vc_2.detectChangesInNestedViews(t),this._vc_4.detectChangesInNestedViews(t)},e.prototype.destroyInternal=function(){this._vc_0.destroyNestedViews(),this._vc_2.destroyNestedViews(),this._vc_4.destroyNestedViews()},e.prototype.createEmbeddedViewInternal=function(t){return 0==t?new L(this.viewUtils,this,0,this._anchor_0,this._vc_0):2==t?new F(this.viewUtils,this,2,this._anchor_2,this._vc_2):4==t?new G(this.viewUtils,this,4,this._anchor_4,this._vc_4):null},e}(o.AppView);e.View_ParamsList0=j;var L=function(t){function e(n,r,o,s,a){t.call(this,e,V,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"h5",new s.InlineArray2(2,"class","param-list-header"),null),this._text_1=this.renderer.createText(this._el_0," Parameters ",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1],null),null},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView),F=function(t){function e(n,r,o,s,a){t.call(this,e,V,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a), +this._expr_15=i.UNINITIALIZED,this._expr_16=i.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._text_0=this.renderer.createText(null,"\n ",null),this._el_1=s.createRenderElement(this.renderer,null,"header",new s.InlineArray2(2,"class","paramType"),null),this._text_2=this.renderer.createText(this._el_1,"",null),this._el_3=s.createRenderElement(this.renderer,this._el_1,"span",new s.InlineArray2(2,"class","hint--top-right hint--large"),null),this._text_4=this.renderer.createText(this._el_3,"?",null),this._text_5=this.renderer.createText(this._el_1,"\n ",null),this._text_6=this.renderer.createText(null,"\n ",null),this._el_7=s.createRenderElement(this.renderer,null,"div",new s.InlineArray2(2,"class","params-wrap"),null),this._text_8=this.renderer.createText(this._el_7,"\n ",null),this._anchor_9=this.renderer.createTemplateAnchor(this._el_7,null),this._vc_9=new p.ViewContainer(9,7,this,this._anchor_9),this._TemplateRef_9_5=new y.TemplateRef_(this,9,this._anchor_9),this._NgFor_9_6=new _.Wrapper_NgFor(this._vc_9.vcRef,this._TemplateRef_9_5,this.parentView.injectorGet(m.IterableDiffers,this.parentIndex),this.parentView.ref),this._text_10=this.renderer.createText(this._el_7,"\n ",null),this._text_11=this.renderer.createText(null,"\n",null),this.init(this._text_11,this.renderer.directRenderer?null:[this._text_0,this._el_1,this._text_2,this._el_3,this._text_4,this._text_5,this._text_6,this._el_7,this._text_8,this._anchor_9,this._text_10,this._text_11],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===y.TemplateRef&&9===e?this._TemplateRef_9_5:t===b.NgFor&&9===e?this._NgFor_9_6.context:n},e.prototype.detectChangesInternal=function(t){var e=this.context.$implicit.params;this._NgFor_9_6.check_ngForOf(e,t,!1),this._NgFor_9_6.ngDoCheck(this,this._anchor_9,t),this._vc_9.detectChangesInNestedViews(t);var n=s.inlineInterpolate(1,"\n ",this.context.$implicit.place," Parameters\n ");s.checkBinding(t,this._expr_15,n)&&(this.renderer.setText(this._text_2,n),this._expr_15=n);var r=this.context.$implicit.placeHint;s.checkBinding(t,this._expr_16,r)&&(this.renderer.setElementAttribute(this._el_3,"data-hint",null==r?null:r.toString()),this._expr_16=r)},e.prototype.destroyInternal=function(){this._vc_9.destroyNestedViews()},e.prototype.visitRootNodesInternal=function(t,e){t(this._text_0,e),t(this._el_1,e),t(this._text_6,e),t(this._el_7,e),t(this._text_11,e)},e.prototype.createEmbeddedViewInternal=function(t){return 9==t?new B(this.viewUtils,this,9,this._anchor_9,this._vc_9):null},e}(o.AppView),B=function(t){function e(n,r,o,a,u){t.call(this,e,V,c.ViewType.EMBEDDED,n,r,o,a,i.ChangeDetectorStatus.CheckAlways,u),this._expr_50=i.UNINITIALIZED,this._expr_51=i.UNINITIALIZED,this._map_52=s.pureProxy1(function(t){return{"with-hint":t}}),this._expr_53=i.UNINITIALIZED,this._expr_54=i.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"div",new s.InlineArray2(2,"class","param"),null),this._text_1=this.renderer.createText(this._el_0,"\n ",null),this._el_2=s.createRenderElement(this.renderer,this._el_0,"div",new s.InlineArray2(2,"class","param-name"),null),this._text_3=this.renderer.createText(this._el_2,"\n ",null),this._el_4=s.createRenderElement(this.renderer,this._el_2,"span",new s.InlineArray2(2,"class","param-name-wrap"),null),this._text_5=this.renderer.createText(this._el_4,"",null),this._text_6=this.renderer.createText(this._el_2,"\n ",null),this._text_7=this.renderer.createText(this._el_0,"\n ",null),this._el_8=s.createRenderElement(this.renderer,this._el_0,"div",new s.InlineArray2(2,"class","param-info"),null),this._text_9=this.renderer.createText(this._el_8,"\n ",null),this._el_10=s.createRenderElement(this.renderer,this._el_8,"div",s.EMPTY_INLINE_ARRAY,null),this._text_11=this.renderer.createText(this._el_10,"\n ",null),this._anchor_12=this.renderer.createTemplateAnchor(this._el_10,null),this._vc_12=new p.ViewContainer(12,10,this,this._anchor_12),this._TemplateRef_12_5=new y.TemplateRef_(this,12,this._anchor_12),this._NgIf_12_6=new f.Wrapper_NgIf(this._vc_12.vcRef,this._TemplateRef_12_5),this._text_13=this.renderer.createText(this._el_10,"\n ",null),this._el_14=s.createRenderElement(this.renderer,this._el_10,"span",s.EMPTY_INLINE_ARRAY,null),this._NgClass_14_3=new w.Wrapper_NgClass(this.parentView.parentView.injectorGet(m.IterableDiffers,this.parentView.parentIndex),this.parentView.parentView.injectorGet(x.KeyValueDiffers,this.parentView.parentIndex),new I.ElementRef(this._el_14),this.renderer),this._text_15=this.renderer.createText(this._el_14,"",null),this._text_16=this.renderer.createText(this._el_10,"\n ",null),this._anchor_17=this.renderer.createTemplateAnchor(this._el_10,null),this._vc_17=new p.ViewContainer(17,10,this,this._anchor_17),this._TemplateRef_17_5=new y.TemplateRef_(this,17,this._anchor_17),this._NgIf_17_6=new f.Wrapper_NgIf(this._vc_17.vcRef,this._TemplateRef_17_5),this._text_18=this.renderer.createText(this._el_10,"\n ",null),this._anchor_19=this.renderer.createTemplateAnchor(this._el_10,null),this._vc_19=new p.ViewContainer(19,10,this,this._anchor_19),this._TemplateRef_19_5=new y.TemplateRef_(this,19,this._anchor_19),this._NgIf_19_6=new f.Wrapper_NgIf(this._vc_19.vcRef,this._TemplateRef_19_5),this._text_20=this.renderer.createText(this._el_10,"\n ",null),this._anchor_21=this.renderer.createTemplateAnchor(this._el_10,null),this._vc_21=new p.ViewContainer(21,10,this,this._anchor_21),this._TemplateRef_21_5=new y.TemplateRef_(this,21,this._anchor_21),this._NgIf_21_6=new f.Wrapper_NgIf(this._vc_21.vcRef,this._TemplateRef_21_5),this._text_22=this.renderer.createText(this._el_10,"\n ",null),this._anchor_23=this.renderer.createTemplateAnchor(this._el_10,null),this._vc_23=new p.ViewContainer(23,10,this,this._anchor_23),this._TemplateRef_23_5=new y.TemplateRef_(this,23,this._anchor_23),this._NgIf_23_6=new f.Wrapper_NgIf(this._vc_23.vcRef,this._TemplateRef_23_5),this._text_24=this.renderer.createText(this._el_10,"\n ",null),this._anchor_25=this.renderer.createTemplateAnchor(this._el_10,null),this._vc_25=new p.ViewContainer(25,10,this,this._anchor_25),this._TemplateRef_25_5=new y.TemplateRef_(this,25,this._anchor_25),this._NgIf_25_6=new f.Wrapper_NgIf(this._vc_25.vcRef,this._TemplateRef_25_5),this._text_26=this.renderer.createText(this._el_10,"\n ",null),this._text_27=this.renderer.createText(this._el_8,"\n ",null),this._el_28=s.createRenderElement(this.renderer,this._el_8,"div",new s.InlineArray2(2,"class","param-description"),null),this._text_29=this.renderer.createText(this._el_8,"\n ",null),this._text_30=this.renderer.createText(this._el_0,"\n ",null),this._pipe_marked_1_0=s.pureProxy1(this.parentView.parentView._pipe_marked_1.transform.bind(this.parentView.parentView._pipe_marked_1)),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._el_2,this._text_3,this._el_4,this._text_5,this._text_6,this._text_7,this._el_8,this._text_9,this._el_10,this._text_11,this._anchor_12,this._text_13,this._el_14,this._text_15,this._text_16,this._anchor_17,this._text_18,this._anchor_19,this._text_20,this._anchor_21,this._text_22,this._anchor_23,this._text_24,this._anchor_25,this._text_26,this._text_27,this._el_28,this._text_29,this._text_30],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===y.TemplateRef&&12===e?this._TemplateRef_12_5:t===v.NgIf&&12===e?this._NgIf_12_6.context:t===C.NgClass&&14<=e&&e<=15?this._NgClass_14_3.context:t===y.TemplateRef&&17===e?this._TemplateRef_17_5:t===v.NgIf&&17===e?this._NgIf_17_6.context:t===y.TemplateRef&&19===e?this._TemplateRef_19_5:t===v.NgIf&&19===e?this._NgIf_19_6.context:t===y.TemplateRef&&21===e?this._TemplateRef_21_5:t===v.NgIf&&21===e?this._NgIf_21_6.context:t===y.TemplateRef&&23===e?this._TemplateRef_23_5:t===v.NgIf&&23===e?this._NgIf_23_6.context:t===y.TemplateRef&&25===e?this._TemplateRef_25_5:t===v.NgIf&&25===e?this._NgIf_25_6.context:n},e.prototype.detectChangesInternal=function(t){var e=new i.ValueUnwrapper,n="array"===this.context.$implicit.type;this._NgIf_12_6.check_ngIf(n,t,!1),this._NgIf_12_6.ngDoCheck(this,this._anchor_12,t);var r=s.inlineInterpolate(1,"param-type ",this.context.$implicit.type,"");this._NgClass_14_3.check_klass(r,t,!1);var o=this._map_52(this.context.$implicit._displayTypeHint);this._NgClass_14_3.check_ngClass(o,t,!1),this._NgClass_14_3.ngDoCheck(this,this._el_14,t);var a=this.context.$implicit._range;this._NgIf_17_6.check_ngIf(a,t,!1),this._NgIf_17_6.ngDoCheck(this,this._anchor_17,t);var c=this.context.$implicit.required;this._NgIf_19_6.check_ngIf(c,t,!1),this._NgIf_19_6.ngDoCheck(this,this._anchor_19,t);var u=null!=this.context.$implicit.default;this._NgIf_21_6.check_ngIf(u,t,!1),this._NgIf_21_6.ngDoCheck(this,this._anchor_21,t);var l=this.context.$implicit.enum;this._NgIf_23_6.check_ngIf(l,t,!1),this._NgIf_23_6.ngDoCheck(this,this._anchor_23,t);var h=this.context.$implicit.pattern;this._NgIf_25_6.check_ngIf(h,t,!1),this._NgIf_25_6.ngDoCheck(this,this._anchor_25,t),this._vc_12.detectChangesInNestedViews(t),this._vc_17.detectChangesInNestedViews(t),this._vc_19.detectChangesInNestedViews(t),this._vc_21.detectChangesInNestedViews(t),this._vc_23.detectChangesInNestedViews(t),this._vc_25.detectChangesInNestedViews(t);var p=s.inlineInterpolate(1," ",this.context.$implicit.name," ");s.checkBinding(t,this._expr_50,p)&&(this.renderer.setText(this._text_5,p),this._expr_50=p);var f=s.inlineInterpolate(1,"",this.context.$implicit._displayTypeHint,"");s.checkBinding(t,this._expr_51,f)&&(this.renderer.setElementProperty(this._el_14,"title",f),this._expr_51=f);var _=s.inlineInterpolate(2," ",this.context.$implicit._displayType," ",this.context.$implicit._displayFormat,"");s.checkBinding(t,this._expr_53,_)&&(this.renderer.setText(this._text_15,_),this._expr_53=_),e.reset();var d=e.unwrap(s.castByValue(this._pipe_marked_1_0,this.parentView.parentView._pipe_marked_1.transform)(this.context.$implicit.description));(e.hasWrappedValue||s.checkBinding(t,this._expr_54,d))&&(this.renderer.setElementProperty(this._el_28,"innerHTML",this.viewUtils.sanitizer.sanitize(k.SecurityContext.HTML,d)),this._expr_54=d)},e.prototype.destroyInternal=function(){this._vc_12.destroyNestedViews(),this._vc_17.destroyNestedViews(),this._vc_19.destroyNestedViews(),this._vc_21.destroyNestedViews(),this._vc_23.destroyNestedViews(),this._vc_25.destroyNestedViews()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e.prototype.createEmbeddedViewInternal=function(t){return 12==t?new U(this.viewUtils,this,12,this._anchor_12,this._vc_12):17==t?new z(this.viewUtils,this,17,this._anchor_17,this._vc_17):19==t?new H(this.viewUtils,this,19,this._anchor_19,this._vc_19):21==t?new q(this.viewUtils,this,21,this._anchor_21,this._vc_21):23==t?new W(this.viewUtils,this,23,this._anchor_23,this._vc_23):25==t?new $(this.viewUtils,this,25,this._anchor_25,this._vc_25):null},e}(o.AppView),U=function(t){function e(n,r,o,s,a){t.call(this,e,V,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a),this._expr_2=i.UNINITIALIZED,this._expr_3=i.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"span",s.EMPTY_INLINE_ARRAY,null),this._text_1=this.renderer.createText(this._el_0,"",null),this._pipe_collectionFormat_0_0=s.pureProxy1(this.parentView.parentView.parentView._pipe_collectionFormat_0.transform.bind(this.parentView.parentView.parentView._pipe_collectionFormat_0)),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1],null),null},e.prototype.detectChangesInternal=function(t){var e=new i.ValueUnwrapper,n=s.inlineInterpolate(1,"param-array-format param-collection-format-",this.parentView.context.$implicit.collectionFormat,"");s.checkBinding(t,this._expr_2,n)&&(this.renderer.setElementProperty(this._el_0,"className",n),this._expr_2=n),e.reset();var r=s.inlineInterpolate(1,"\n ",e.unwrap(s.castByValue(this._pipe_collectionFormat_0_0,this.parentView.parentView.parentView._pipe_collectionFormat_0.transform)(this.parentView.context.$implicit)),"\n ");(e.hasWrappedValue||s.checkBinding(t,this._expr_3,r))&&(this.renderer.setText(this._text_1,r),this._expr_3=r)},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView),z=function(t){function e(n,r,o,s,a){t.call(this,e,V,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a),this._expr_2=i.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"span",new s.InlineArray2(2,"class","param-range"),null),this._text_1=this.renderer.createText(this._el_0,"",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1],null),null},e.prototype.detectChangesInternal=function(t){var e=s.inlineInterpolate(1," ",this.parentView.context.$implicit._range," ");s.checkBinding(t,this._expr_2,e)&&(this.renderer.setText(this._text_1,e),this._expr_2=e)},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView),H=function(t){function e(n,r,o,s,a){t.call(this,e,V,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"span",new s.InlineArray2(2,"class","param-required"),null),this._text_1=this.renderer.createText(this._el_0,"Required",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1],null),null},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView),q=function(t){function e(n,r,o,s,a){t.call(this,e,V,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a),this._expr_5=i.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"div",new s.InlineArray2(2,"class","param-default"),null),this._text_1=this.renderer.createText(this._el_0,"\n ",null),this._el_2=s.createRenderElement(this.renderer,this._el_0,"span",new s.InlineArray2(2,"class","param-default-value"),null),this._text_3=this.renderer.createText(this._el_2,"",null),this._text_4=this.renderer.createText(this._el_0,"\n ",null),this._pipe_json_0=new T.JsonPipe,this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._el_2,this._text_3,this._text_4],null),null},e.prototype.detectChangesInternal=function(t){var e=new i.ValueUnwrapper;e.reset();var n=s.inlineInterpolate(1,"",e.unwrap(this._pipe_json_0.transform(this.parentView.context.$implicit.default)),"");(e.hasWrappedValue||s.checkBinding(t,this._expr_5,n))&&(this.renderer.setText(this._text_3,n),this._expr_5=n)},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView),W=function(t){function e(n,r,o,s,a){t.call(this,e,V,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"div",new s.InlineArray2(2,"class","param-enum"),null),this._text_1=this.renderer.createText(this._el_0,"\n ",null),this._anchor_2=this.renderer.createTemplateAnchor(this._el_0,null),this._vc_2=new p.ViewContainer(2,0,this,this._anchor_2),this._TemplateRef_2_5=new y.TemplateRef_(this,2,this._anchor_2),this._NgFor_2_6=new _.Wrapper_NgFor(this._vc_2.vcRef,this._TemplateRef_2_5,this.parentView.parentView.parentView.injectorGet(m.IterableDiffers,this.parentView.parentView.parentIndex),this.parentView.parentView.parentView.ref),this._text_3=this.renderer.createText(this._el_0,"\n ",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._anchor_2,this._text_3],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===y.TemplateRef&&2===e?this._TemplateRef_2_5:t===b.NgFor&&2===e?this._NgFor_2_6.context:n},e.prototype.detectChangesInternal=function(t){var e=this.parentView.context.$implicit.enum;this._NgFor_2_6.check_ngForOf(e,t,!1),this._NgFor_2_6.ngDoCheck(this,this._anchor_2,t),this._vc_2.detectChangesInNestedViews(t)},e.prototype.destroyInternal=function(){this._vc_2.destroyNestedViews()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e.prototype.createEmbeddedViewInternal=function(t){return 2==t?new Y(this.viewUtils,this,2,this._anchor_2,this._vc_2):null},e}(o.AppView),Y=function(t){function e(n,r,o,s,a){t.call(this,e,V,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a),this._expr_2=i.UNINITIALIZED,this._expr_3=i.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"span",s.EMPTY_INLINE_ARRAY,null),this._text_1=this.renderer.createText(this._el_0,"",null),this._pipe_json_0=new T.JsonPipe,this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1],null),null},e.prototype.detectChangesInternal=function(t){var e=new i.ValueUnwrapper,n=s.inlineInterpolate(1,"param-enum-value ",this.context.$implicit.type,"");s.checkBinding(t,this._expr_2,n)&&(this.renderer.setElementProperty(this._el_0,"className",n),this._expr_2=n),e.reset();var r=s.inlineInterpolate(1," ",e.unwrap(this._pipe_json_0.transform(this.context.$implicit.val))," ");(e.hasWrappedValue||s.checkBinding(t,this._expr_3,r))&&(this.renderer.setText(this._text_1,r),this._expr_3=r)},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView),$=function(t){function e(n,r,o,s,a){t.call(this,e,V,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a),this._expr_2=i.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"span",new s.InlineArray2(2,"class","param-pattern"),null),this._text_1=this.renderer.createText(this._el_0,"",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1],null),null},e.prototype.detectChangesInternal=function(t){var e=s.inlineInterpolate(1,"",this.parentView.context.$implicit.pattern,"");s.checkBinding(t,this._expr_2,e)&&(this.renderer.setText(this._text_1,e),this._expr_2=e)},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView),G=function(t){function e(n,r,o,s,a){t.call(this,e,V,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a),this._expr_21=i.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"div",s.EMPTY_INLINE_ARRAY,null),this._text_1=this.renderer.createText(this._el_0,"\n ",null),this._anchor_2=this.renderer.createTemplateAnchor(this._el_0,null),this._vc_2=new p.ViewContainer(2,0,this,this._anchor_2),this._TemplateRef_2_5=new y.TemplateRef_(this,2,this._anchor_2),this._NgIf_2_6=new f.Wrapper_NgIf(this._vc_2.vcRef,this._TemplateRef_2_5),this._text_3=this.renderer.createText(this._el_0,"\n\n ",null),this._el_4=s.createRenderElement(this.renderer,this._el_0,"div",new s.InlineArray2(2,"class","body-param-description"),null),this._text_5=this.renderer.createText(this._el_0,"\n ",null),this._el_6=s.createRenderElement(this.renderer,this._el_0,"div",s.EMPTY_INLINE_ARRAY,null),this._text_7=this.renderer.createText(this._el_6,"\n ",null),this._el_8=s.createRenderElement(this.renderer,this._el_6,"br",s.EMPTY_INLINE_ARRAY,null),this._text_9=this.renderer.createText(this._el_6,"\n ",null),this._el_10=s.createRenderElement(this.renderer,this._el_6,"json-schema-lazy",s.EMPTY_INLINE_ARRAY,null),this._vc_10=new p.ViewContainer(10,6,this,this._el_10),this.compView_10=new S.View_JsonSchemaLazy0(this.viewUtils,this,10,this._el_10),this._ComponentFactoryResolver_10_5=new O.CodegenComponentFactoryResolver([R.JsonSchemaNgFactory],this.parentView.injectorGet(O.ComponentFactoryResolver,this.parentIndex)),this._JsonSchemaLazy_10_6=new S.Wrapper_JsonSchemaLazy(this.parentView.injectorGet(l.SpecManager,this.parentIndex),this._vc_10.vcRef,new I.ElementRef(this._el_10),this._ComponentFactoryResolver_10_5,this.parentView.injectorGet(A.OptionsService,this.parentIndex),this.renderer),this._text_11=this.renderer.createText(null,"\n ",null),this.compView_10.create(this._JsonSchemaLazy_10_6.context),this._text_12=this.renderer.createText(this._el_6,"\n ",null),this._text_13=this.renderer.createText(this._el_0,"\n",null),this._pipe_marked_1_1=s.pureProxy1(this.parentView._pipe_marked_1.transform.bind(this.parentView._pipe_marked_1)),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._anchor_2,this._text_3,this._el_4,this._text_5,this._el_6,this._text_7,this._el_8,this._text_9,this._el_10,this._text_11,this._text_12,this._text_13],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===y.TemplateRef&&2===e?this._TemplateRef_2_5:t===v.NgIf&&2===e?this._NgIf_2_6.context:t===O.ComponentFactoryResolver&&10===e?this._ComponentFactoryResolver_10_5:t===E.JsonSchemaLazy&&10<=e&&e<=11?this._JsonSchemaLazy_10_6.context:n},e.prototype.detectChangesInternal=function(t){var e=new i.ValueUnwrapper,n=this.parentView.context.bodyParam;this._NgIf_2_6.check_ngIf(n,t,!1),this._NgIf_2_6.ngDoCheck(this,this._anchor_2,t);var r=s.inlineInterpolate(1,"",this.parentView.context.bodyParam._pointer,"/schema");this._JsonSchemaLazy_10_6.check_pointer(r,t,!1);var o=!0;this._JsonSchemaLazy_10_6.check_auto(o,t,!1);var a=!0;this._JsonSchemaLazy_10_6.check_isRequestSchema(a,t,!1),this._JsonSchemaLazy_10_6.ngDoCheck(this,this._el_10,t),this._vc_2.detectChangesInNestedViews(t),this._vc_10.detectChangesInNestedViews(t),e.reset();var c=e.unwrap(s.castByValue(this._pipe_marked_1_1,this.parentView._pipe_marked_1.transform)(this.parentView.context.bodyParam.description));(e.hasWrappedValue||s.checkBinding(t,this._expr_21,c))&&(this.renderer.setElementProperty(this._el_4,"innerHTML",this.viewUtils.sanitizer.sanitize(k.SecurityContext.HTML,c)),this._expr_21=c),this.compView_10.detectChanges(t),t||0===this.numberOfChecks&&this._JsonSchemaLazy_10_6.context.ngAfterViewInit()},e.prototype.destroyInternal=function(){this._vc_2.destroyNestedViews(),this._vc_10.destroyNestedViews(),this.compView_10.destroy(),this._JsonSchemaLazy_10_6.ngOnDestroy()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e.prototype.createEmbeddedViewInternal=function(t){return 2==t?new Z(this.viewUtils,this,2,this._anchor_2,this._vc_2):null},e}(o.AppView),Z=function(t){function e(n,r,o,s,a){t.call(this,e,V,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"h5",new s.InlineArray2(2,"class","param-list-header"),null),this._text_1=this.renderer.createText(this._el_0," Request Body ",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1],null),null},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView)},function(t,e){"use strict";e.styles=['[_nghost-%COMP%] {\n display: block;\n box-sizing: border-box;\n -webkit-tap-highlight-color: transparent;\n -moz-tap-highlight-color: transparent;\n -ms-tap-highlight-color: transparent;\n -o-tap-highlight-color: transparent;\n tap-highlight-color: transparent;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-smoothing: antialiased;\n -webkit-osx-font-smoothing: grayscale;\n -moz-osx-font-smoothing: grayscale;\n osx-font-smoothing: grayscale;\n -webkit-text-size-adjust: 100%;\n -moz-text-size-adjust: 100%;\n text-size-adjust: 100%;\n -webkit-text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.004);\n -ms-text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.004);\n text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.004);\n text-rendering: optimizeSpeed !important;\n font-smooth: always;\n -webkit-text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n text-size-adjust: 100%; }\n\n.redoc-wrap[_ngcontent-%COMP%] {\n z-index: 0;\n position: relative;\n overflow: hidden;\n font-family: Roboto, sans-serif;\n font-size: 14px;\n line-height: 1.5em;\n color: #263238; }\n\n.menu-content[_ngcontent-%COMP%] {\n overflow: hidden; }\n\n[sticky-sidebar][_ngcontent-%COMP%] {\n width: 260px;\n background-color: #fafafa;\n overflow-y: auto;\n overflow-x: hidden;\n transform: translateZ(0);\n z-index: 75; }\n @media (max-width: 1000px) {\n [sticky-sidebar][_ngcontent-%COMP%] {\n width: 100%;\n bottom: auto !important; } }\n\n.api-content[_ngcontent-%COMP%] {\n margin-left: 260px;\n z-index: 50;\n position: relative;\n top: 0; }\n @media (max-width: 1000px) {\n .api-content[_ngcontent-%COMP%] {\n padding-top: 3em;\n margin-left: 0; } }\n\n.background[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n bottom: 0;\n right: 0;\n left: 260px;\n z-index: 1; }\n .background-actual[_ngcontent-%COMP%] {\n background: #263238;\n left: 60%;\n right: 0;\n top: 0;\n bottom: 0;\n position: absolute; }\n @media (max-width: 1100px) {\n .background[_ngcontent-%COMP%] {\n display: none; } }\n\n.redoc-error[_ngcontent-%COMP%] {\n padding: 20px;\n text-align: center;\n color: #e53935; }\n .redoc-error[_ngcontent-%COMP%] > h2[_ngcontent-%COMP%] {\n color: #e53935;\n font-size: 40px; }\n\n.redoc-error-details[_ngcontent-%COMP%] {\n max-width: 750px;\n margin: 0 auto;\n font-size: 18px; }\n\n\n[_nghost-%COMP%] h1 {\n margin-top: 0;\n font-family: Montserrat, sans-serif;\n color: #263238;\n font-weight: 400;\n line-height: 1.5;\n margin-bottom: 0.5em; }\n\n[_nghost-%COMP%] h2 {\n margin-top: 0;\n font-family: Montserrat, sans-serif;\n color: #263238;\n font-weight: 400;\n line-height: 1.5;\n margin-bottom: 0.5em; }\n\n[_nghost-%COMP%] h3 {\n margin-top: 0;\n font-family: Montserrat, sans-serif;\n color: #263238;\n font-weight: 400;\n line-height: 1.5;\n margin-bottom: 0.5em; }\n\n[_nghost-%COMP%] h4 {\n margin-top: 0;\n font-family: Montserrat, sans-serif;\n color: #263238;\n font-weight: 400;\n line-height: 1.5;\n margin-bottom: 0.5em; }\n\n[_nghost-%COMP%] h5 {\n margin-top: 0;\n font-family: Montserrat, sans-serif;\n color: #263238;\n font-weight: 400;\n line-height: 1.5;\n margin-bottom: 0.5em; }\n\n[_nghost-%COMP%] h1 {\n font-size: 1.85714em;\n color: #0033a0; }\n\n[_nghost-%COMP%] h2 {\n font-size: 1.57143em; }\n\n[_nghost-%COMP%] h3 {\n font-size: 1.28571em; }\n\n[_nghost-%COMP%] h4 {\n font-size: 1.14286em; }\n\n[_nghost-%COMP%] h5 {\n font-size: 0.929em;\n line-height: 20px; }\n\n[_nghost-%COMP%] p {\n font-family: Roboto, sans-serif;\n font-weight: 300;\n margin: 0;\n margin-bottom: 1em;\n line-height: 1.5em; }\n\n[_nghost-%COMP%] a {\n text-decoration: none;\n color: #0033a0; }\n\n[_nghost-%COMP%] p > code {\n color: #e53935;\n border: 1px solid rgba(38, 50, 56, 0.1); }\n\n[_nghost-%COMP%] .hint--inversed:before {\n border-top-color: #fff; }\n\n[_nghost-%COMP%] .hint--inversed:after {\n background: #fff;\n color: #383838; }\n\n[_nghost-%COMP%] .share-link {\n cursor: pointer;\n margin-left: -15px;\n padding: 0;\n line-height: 1;\n width: 15px;\n display: inline-block; }\n\n[_nghost-%COMP%] .share-link:before {\n content: "";\n width: 15px;\n height: 15px;\n background-size: contain;\n background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjUxMiIgaGVpZ2h0PSI1MTIiIHZpZXdCb3g9IjAgMCA1MTIgNTEyIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cGF0aCBmaWxsPSIjMDEwMTAxIiBkPSJNNDU5LjcgMjMzLjRsLTkwLjUgOTAuNWMtNTAgNTAtMTMxIDUwLTE4MSAwIC03LjktNy44LTE0LTE2LjctMTkuNC0yNS44bDQyLjEtNDIuMWMyLTIgNC41LTMuMiA2LjgtNC41IDIuOSA5LjkgOCAxOS4zIDE1LjggMjcuMiAyNSAyNSA2NS42IDI0LjkgOTAuNSAwbDkwLjUtOTAuNWMyNS0yNSAyNS02NS42IDAtOTAuNSAtMjQuOS0yNS02NS41LTI1LTkwLjUgMGwtMzIuMiAzMi4yYy0yNi4xLTEwLjItNTQuMi0xMi45LTgxLjYtOC45bDY4LjYtNjguNmM1MC01MCAxMzEtNTAgMTgxIDBDNTA5LjYgMTAyLjMgNTA5LjYgMTgzLjQgNDU5LjcgMjMzLjR6TTIyMC4zIDM4Mi4ybC0zMi4yIDMyLjJjLTI1IDI0LjktNjUuNiAyNC45LTkwLjUgMCAtMjUtMjUtMjUtNjUuNiAwLTkwLjVsOTAuNS05MC41YzI1LTI1IDY1LjUtMjUgOTAuNSAwIDcuOCA3LjggMTIuOSAxNy4yIDE1LjggMjcuMSAyLjQtMS40IDQuOC0yLjUgNi44LTQuNWw0Mi4xLTQyYy01LjQtOS4yLTExLjYtMTgtMTkuNC0yNS44IC01MC01MC0xMzEtNTAtMTgxIDBsLTkwLjUgOTAuNWMtNTAgNTAtNTAgMTMxIDAgMTgxIDUwIDUwIDEzMSA1MCAxODEgMGw2OC42LTY4LjZDMjc0LjYgMzk1LjEgMjQ2LjQgMzkyLjMgMjIwLjMgMzgyLjJ6Ii8+PC9zdmc+Cg==");\n opacity: 0.5;\n visibility: hidden;\n display: inline-block;\n vertical-align: middle; }\n\n[_nghost-%COMP%] .sharable-header:hover .share-link:before, [_nghost-%COMP%] .share-link:hover:before {\n visibility: visible; }\n\nfooter[_ngcontent-%COMP%] {\n position: relative;\n text-align: right;\n padding: 10px 40px;\n font-size: 15px;\n margin-top: -35px;\n color: white; }\n footer[_ngcontent-%COMP%] a[_ngcontent-%COMP%] {\n color: white; }\n footer[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n font-size: 18px; }\n\n\n[_nghost-%COMP%] .redoc-markdown-block pre {\n font-family: Courier, monospace;\n white-space: pre-wrap;\n background-color: #263238;\n color: white;\n padding: 12px 14px 15px 14px;\n overflow-x: auto;\n line-height: normal;\n border-radius: 2px;\n border: 1px solid rgba(38, 50, 56, 0.1); }\n [_nghost-%COMP%] .redoc-markdown-block pre code {\n background-color: transparent; }\n [_nghost-%COMP%] .redoc-markdown-block pre code:before, [_nghost-%COMP%] .redoc-markdown-block pre code:after {\n content: none; }\n\n[_nghost-%COMP%] .redoc-markdown-block code {\n font-family: Courier, monospace;\n background-color: rgba(38, 50, 56, 0.04);\n padding: 0.1em 0 0.2em 0;\n font-size: 1em;\n border-radius: 2px; }\n [_nghost-%COMP%] .redoc-markdown-block code:before, [_nghost-%COMP%] .redoc-markdown-block code:after {\n letter-spacing: -0.2em;\n content: "\\00a0"; }\n\n[_nghost-%COMP%] .redoc-markdown-block p:last-of-type {\n margin-bottom: 0; }\n\n[_nghost-%COMP%] .redoc-markdown-block blockquote {\n margin: 0;\n margin-bottom: 1em;\n padding: 0 15px;\n color: #777;\n border-left: 4px solid #ddd; }\n\n[_nghost-%COMP%] .redoc-markdown-block img {\n max-width: 100%;\n box-sizing: content-box; }\n\n[_nghost-%COMP%] .redoc-markdown-block ul, [_nghost-%COMP%] .redoc-markdown-block ol {\n padding-left: 2em;\n margin: 0;\n margin-bottom: 1em; }\n\n[_nghost-%COMP%] .redoc-markdown-block table {\n display: block;\n width: 100%;\n overflow: auto;\n word-break: normal;\n word-break: keep-all;\n border-collapse: collapse;\n border-spacing: 0;\n margin-top: 0.5em;\n margin-bottom: 0.5em; }\n\n[_nghost-%COMP%] .redoc-markdown-block table tr {\n background-color: #fff;\n border-top: 1px solid #ccc; }\n [_nghost-%COMP%] .redoc-markdown-block table tr:nth-child(2n) {\n background-color: #f8f8f8; }\n\n[_nghost-%COMP%] .redoc-markdown-block table th, [_nghost-%COMP%] .redoc-markdown-block table td {\n padding: 6px 13px;\n border: 1px solid #ddd; }\n\n[_nghost-%COMP%] .redoc-markdown-block table th {\n text-align: left;\n font-weight: bold; }']},function(t,e,n){"use strict";var r=n(305),i=n(9),o=n(19),s=n(8),a=n(15),c=n(12),u=n(13),l=n(20),h=n(35),p=n(22),f=n(90),_=n(76),d=n(161),y=n(462),m=n(23),g=n(36),v=n(25),b=n(28),w=n(219),x=n(456),I=n(481),C=n(215),k=n(454),T=n(227),E=n(474),S=n(228),O=n(476),R=n(214),A=n(452),N=n(221),P=n(459),M=n(67),D=n(162),V=n(232),j=function(){function t(t,e,n,o,s,a,c){this._changed=!1,this.context=new r.Redoc(t,e,n,o,s,a,c),this._expr_0=i.UNINITIALIZED,this._expr_1=i.UNINITIALIZED, +this._expr_2=i.UNINITIALIZED}return t.prototype.ngOnDetach=function(t,e,n){},t.prototype.ngOnDestroy=function(){},t.prototype.check_specUrl=function(t,e,n){(n||s.checkBinding(e,this._expr_0,t))&&(this._changed=!0,this.context.specUrl=t,this._expr_0=t)},t.prototype.ngDoCheck=function(t,e,n){var r=this._changed;return this._changed=!1,n||0===t.numberOfChecks&&this.context.ngOnInit(),r},t.prototype.checkHost=function(t,e,n,r){var i=this.context.specLoading;s.checkBinding(r,this._expr_1,i)&&(t.renderer.setElementClass(n,"loading",i),this._expr_1=i);var o=this.context.specLoadingRemove;s.checkBinding(r,this._expr_2,o)&&(t.renderer.setElementClass(n,"loading-remove",o),this._expr_2=o)},t.prototype.handleEvent=function(t,e){var n=!0;return n},t.prototype.subscribe=function(t,e){this._eventHandler=e},t}();e.Wrapper_Redoc=j;var L=s.createRenderComponentType("",0,a.ViewEncapsulation.None,[],{}),F=function(t){function e(n,r,o,s){t.call(this,e,L,c.ViewType.HOST,n,r,o,s,i.ChangeDetectorStatus.CheckAlways)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.selectOrCreateRenderHostElement(this.renderer,"redoc",s.EMPTY_INLINE_ARRAY,t,null),this.compView_0=new z(this.viewUtils,this,0,this._el_0),this._Redoc_0_3=new j(this.injectorGet(l.SpecManager,this.parentIndex),this.injectorGet(h.OptionsService,this.parentIndex),new p.ElementRef(this._el_0),this.compView_0.ref,this.injectorGet(f.AppStateService,this.parentIndex),this.injectorGet(_.LazyTasksService,this.parentIndex),this.injectorGet(d.Hash,this.parentIndex)),this.compView_0.create(this._Redoc_0_3.context),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0],null),new u.ComponentRef_(0,this,this._el_0,this._Redoc_0_3.context)},e.prototype.injectorGetInternal=function(t,e,n){return t===r.Redoc&&0===e?this._Redoc_0_3.context:n},e.prototype.detectChangesInternal=function(t){this._Redoc_0_3.ngDoCheck(this,this._el_0,t),this._Redoc_0_3.checkHost(this,this.compView_0,this._el_0,t),this.compView_0.detectChanges(t)},e.prototype.destroyInternal=function(){this.compView_0.destroy()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView);e.RedocNgFactory=new u.ComponentFactory("redoc",F,r.Redoc);var B=[y.styles],U=s.createRenderComponentType("",0,a.ViewEncapsulation.Emulated,B,{}),z=function(t){function e(n,r,o,s){t.call(this,e,U,c.ViewType.COMPONENT,n,r,o,s,i.ChangeDetectorStatus.CheckAlways)}return __extends(e,t),e.prototype.createInternal=function(t){var e=this.renderer.createViewRoot(this.parentElement);return this._anchor_0=this.renderer.createTemplateAnchor(e,null),this._vc_0=new m.ViewContainer(0,null,this,this._anchor_0),this._TemplateRef_0_5=new v.TemplateRef_(this,0,this._anchor_0),this._NgIf_0_6=new g.Wrapper_NgIf(this._vc_0.vcRef,this._TemplateRef_0_5),this._text_1=this.renderer.createText(e,"\n",null),this._anchor_2=this.renderer.createTemplateAnchor(e,null),this._vc_2=new m.ViewContainer(2,null,this,this._anchor_2),this._TemplateRef_2_5=new v.TemplateRef_(this,2,this._anchor_2),this._NgIf_2_6=new g.Wrapper_NgIf(this._vc_2.vcRef,this._TemplateRef_2_5),this._text_3=this.renderer.createText(e,"\n",null),this._anchor_4=this.renderer.createTemplateAnchor(e,null),this._vc_4=new m.ViewContainer(4,null,this,this._anchor_4),this._TemplateRef_4_5=new v.TemplateRef_(this,4,this._anchor_4),this._NgIf_4_6=new g.Wrapper_NgIf(this._vc_4.vcRef,this._TemplateRef_4_5),this._text_5=this.renderer.createText(e,"\n",null),this.init(null,this.renderer.directRenderer?null:[this._anchor_0,this._text_1,this._anchor_2,this._text_3,this._anchor_4,this._text_5],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===v.TemplateRef&&0===e?this._TemplateRef_0_5:t===b.NgIf&&0===e?this._NgIf_0_6.context:t===v.TemplateRef&&2===e?this._TemplateRef_2_5:t===b.NgIf&&2===e?this._NgIf_2_6.context:t===v.TemplateRef&&4===e?this._TemplateRef_4_5:t===b.NgIf&&4===e?this._NgIf_4_6.context:n},e.prototype.detectChangesInternal=function(t){var e=this.context.error;this._NgIf_0_6.check_ngIf(e,t,!1),this._NgIf_0_6.ngDoCheck(this,this._anchor_0,t);var n=this.context.options.lazyRendering;this._NgIf_2_6.check_ngIf(n,t,!1),this._NgIf_2_6.ngDoCheck(this,this._anchor_2,t);var r=this.context.specLoaded&&!this.context.error;this._NgIf_4_6.check_ngIf(r,t,!1),this._NgIf_4_6.ngDoCheck(this,this._anchor_4,t),this._vc_0.detectChangesInNestedViews(t),this._vc_2.detectChangesInNestedViews(t),this._vc_4.detectChangesInNestedViews(t)},e.prototype.destroyInternal=function(){this._vc_0.destroyNestedViews(),this._vc_2.destroyNestedViews(),this._vc_4.destroyNestedViews()},e.prototype.createEmbeddedViewInternal=function(t){return 0==t?new H(this.viewUtils,this,0,this._anchor_0,this._vc_0):2==t?new q(this.viewUtils,this,2,this._anchor_2,this._vc_2):4==t?new W(this.viewUtils,this,4,this._anchor_4,this._vc_4):null},e}(o.AppView);e.View_Redoc0=z;var H=function(t){function e(n,r,o,s,a){t.call(this,e,U,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a),this._expr_8=i.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"div",new s.InlineArray2(2,"class","redoc-error"),null),this._text_1=this.renderer.createText(this._el_0,"\n ",null),this._el_2=s.createRenderElement(this.renderer,this._el_0,"h1",s.EMPTY_INLINE_ARRAY,null),this._text_3=this.renderer.createText(this._el_2,"Oops... ReDoc failed to render this spec",null),this._text_4=this.renderer.createText(this._el_0,"\n ",null),this._el_5=s.createRenderElement(this.renderer,this._el_0,"div",new s.InlineArray2(2,"class","redoc-error-details"),null),this._text_6=this.renderer.createText(this._el_5,"",null),this._text_7=this.renderer.createText(this._el_0,"\n",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._el_2,this._text_3,this._text_4,this._el_5,this._text_6,this._text_7],null),null},e.prototype.detectChangesInternal=function(t){var e=s.inlineInterpolate(1,"",this.parentView.context.error.message,"");s.checkBinding(t,this._expr_8,e)&&(this.renderer.setText(this._text_6,e),this._expr_8=e)},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView),q=function(t){function e(n,r,o,s,a){t.call(this,e,U,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"loading-bar",s.EMPTY_INLINE_ARRAY,null),this.compView_0=new x.View_LoadingBar0(this.viewUtils,this,0,this._el_0),this._LoadingBar_0_3=new x.Wrapper_LoadingBar,this._text_1=this.renderer.createText(null," ",null),this.compView_0.create(this._LoadingBar_0_3.context),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===w.LoadingBar&&0<=e&&e<=1?this._LoadingBar_0_3.context:n},e.prototype.detectChangesInternal=function(t){var e=this.parentView.context.loadingProgress;this._LoadingBar_0_3.check_progress(e,t,!1),this._LoadingBar_0_3.ngDoCheck(this,this._el_0,t),this._LoadingBar_0_3.checkHost(this,this.compView_0,this._el_0,t),this.compView_0.detectChanges(t)},e.prototype.destroyInternal=function(){this.compView_0.destroy()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView),W=function(t){function e(n,r,o,s,a){t.call(this,e,U,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"div",new s.InlineArray2(2,"class","redoc-wrap"),null),this._text_1=this.renderer.createText(this._el_0,"\n ",null),this._el_2=s.createRenderElement(this.renderer,this._el_0,"div",new s.InlineArray2(2,"class","background"),null),this._text_3=this.renderer.createText(this._el_2,"\n ",null),this._el_4=s.createRenderElement(this.renderer,this._el_2,"div",new s.InlineArray2(2,"class","background-actual"),null),this._text_5=this.renderer.createText(this._el_4," ",null),this._text_6=this.renderer.createText(this._el_2,"\n ",null),this._text_7=this.renderer.createText(this._el_0,"\n ",null),this._el_8=s.createRenderElement(this.renderer,this._el_0,"div",new s.InlineArray4(4,"class","menu-content","sticky-sidebar",""),null),this._StickySidebar_8_3=new I.Wrapper_StickySidebar(new p.ElementRef(this._el_8)),this._text_9=this.renderer.createText(this._el_8,"\n ",null),this._el_10=s.createRenderElement(this.renderer,this._el_8,"api-logo",s.EMPTY_INLINE_ARRAY,null),this.compView_10=new k.View_ApiLogo0(this.viewUtils,this,10,this._el_10),this._ApiLogo_10_3=new k.Wrapper_ApiLogo(this.parentView.injectorGet(l.SpecManager,this.parentIndex)),this._text_11=this.renderer.createText(null," ",null),this.compView_10.create(this._ApiLogo_10_3.context),this._text_12=this.renderer.createText(this._el_8,"\n ",null),this._el_13=s.createRenderElement(this.renderer,this._el_8,"side-menu",s.EMPTY_INLINE_ARRAY,null),this.compView_13=new E.View_SideMenu0(this.viewUtils,this,13,this._el_13),this._SideMenu_13_3=new E.Wrapper_SideMenu(this.parentView.injectorGet(l.SpecManager,this.parentIndex),new p.ElementRef(this._el_13),this.parentView.injectorGet(M.ScrollService,this.parentIndex),this.parentView.injectorGet(D.MenuService,this.parentIndex),this.parentView.injectorGet(h.OptionsService,this.parentIndex),this.compView_13.ref),this._text_14=this.renderer.createText(null," ",null),this.compView_13.create(this._SideMenu_13_3.context),this._text_15=this.renderer.createText(this._el_8,"\n ",null),this._text_16=this.renderer.createText(this._el_0,"\n ",null),this._el_17=s.createRenderElement(this.renderer,this._el_0,"div",new s.InlineArray2(2,"class","api-content"),null),this._text_18=this.renderer.createText(this._el_17,"\n ",null),this._el_19=s.createRenderElement(this.renderer,this._el_17,"warnings",s.EMPTY_INLINE_ARRAY,null),this.compView_19=new O.View_Warnings0(this.viewUtils,this,19,this._el_19),this._Warnings_19_3=new O.Wrapper_Warnings(this.parentView.injectorGet(l.SpecManager,this.parentIndex),this.parentView.injectorGet(h.OptionsService,this.parentIndex)),this.compView_19.create(this._Warnings_19_3.context),this._text_20=this.renderer.createText(this._el_17,"\n ",null),this._el_21=s.createRenderElement(this.renderer,this._el_17,"api-info",s.EMPTY_INLINE_ARRAY,null),this.compView_21=new A.View_ApiInfo0(this.viewUtils,this,21,this._el_21),this._ApiInfo_21_3=new A.Wrapper_ApiInfo(this.parentView.injectorGet(l.SpecManager,this.parentIndex),this.parentView.injectorGet(h.OptionsService,this.parentIndex)),this.compView_21.create(this._ApiInfo_21_3.context),this._text_22=this.renderer.createText(this._el_17,"\n ",null),this._el_23=s.createRenderElement(this.renderer,this._el_17,"methods-list",s.EMPTY_INLINE_ARRAY,null),this.compView_23=new P.View_MethodsList0(this.viewUtils,this,23,this._el_23),this._MethodsList_23_3=new P.Wrapper_MethodsList(this.parentView.injectorGet(l.SpecManager,this.parentIndex)),this._text_24=this.renderer.createText(null," ",null),this.compView_23.create(this._MethodsList_23_3.context),this._text_25=this.renderer.createText(this._el_17,"\n ",null),this._el_26=s.createRenderElement(this.renderer,this._el_17,"footer",s.EMPTY_INLINE_ARRAY,null),this._text_27=this.renderer.createText(this._el_26,"\n ",null),this._el_28=s.createRenderElement(this.renderer,this._el_26,"div",new s.InlineArray2(2,"class","powered-by-badge"),null),this._text_29=this.renderer.createText(this._el_28,"\n ",null),this._el_30=s.createRenderElement(this.renderer,this._el_28,"a",new s.InlineArray8(6,"href","https://github.com/Rebilly/ReDoc","target","_blank","title","Swagger-generated API Reference Documentation"),null),this._text_31=this.renderer.createText(this._el_30,"\n Powered by ",null),this._el_32=s.createRenderElement(this.renderer,this._el_30,"strong",s.EMPTY_INLINE_ARRAY,null),this._text_33=this.renderer.createText(this._el_32,"ReDoc",null),this._text_34=this.renderer.createText(this._el_30,"\n ",null),this._text_35=this.renderer.createText(this._el_28,"\n ",null),this._text_36=this.renderer.createText(this._el_26,"\n ",null),this._text_37=this.renderer.createText(this._el_17,"\n ",null),this._text_38=this.renderer.createText(this._el_0,"\n",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._el_2,this._text_3,this._el_4,this._text_5,this._text_6,this._text_7,this._el_8,this._text_9,this._el_10,this._text_11,this._text_12,this._el_13,this._text_14,this._text_15,this._text_16,this._el_17,this._text_18,this._el_19,this._text_20,this._el_21,this._text_22,this._el_23,this._text_24,this._text_25,this._el_26,this._text_27,this._el_28,this._text_29,this._el_30,this._text_31,this._el_32,this._text_33,this._text_34,this._text_35,this._text_36,this._text_37,this._text_38],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===C.ApiLogo&&10<=e&&e<=11?this._ApiLogo_10_3.context:t===T.SideMenu&&13<=e&&e<=14?this._SideMenu_13_3.context:t===V.StickySidebar&&8<=e&&e<=15?this._StickySidebar_8_3.context:t===S.Warnings&&19===e?this._Warnings_19_3.context:t===R.ApiInfo&&21===e?this._ApiInfo_21_3.context:t===N.MethodsList&&23<=e&&e<=24?this._MethodsList_23_3.context:n},e.prototype.detectChangesInternal=function(t){var e=this.parentView.context.options.$scrollParent;this._StickySidebar_8_3.check_scrollParent(e,t,!1);var n=this.parentView.context.options.scrollYOffset;this._StickySidebar_8_3.check_scrollYOffset(n,t,!1),this._StickySidebar_8_3.ngDoCheck(this,this._el_8,t),this._ApiLogo_10_3.ngDoCheck(this,this._el_10,t)&&this.compView_10.markAsCheckOnce(),this._SideMenu_13_3.ngDoCheck(this,this._el_13,t),this._Warnings_19_3.ngDoCheck(this,this._el_19,t),this._ApiInfo_21_3.ngDoCheck(this,this._el_21,t)&&this.compView_21.markAsCheckOnce(),this._MethodsList_23_3.ngDoCheck(this,this._el_23,t)&&this.compView_23.markAsCheckOnce(),this.compView_10.detectChanges(t),this.compView_13.detectChanges(t),this.compView_19.detectChanges(t),this.compView_21.detectChanges(t),this.compView_23.detectChanges(t)},e.prototype.destroyInternal=function(){this.compView_10.destroy(),this.compView_13.destroy(),this.compView_19.destroy(),this.compView_21.destroy(),this.compView_23.destroy(),this._StickySidebar_8_3.ngOnDestroy()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView)},function(t,e){"use strict";e.styles=["[_nghost-%COMP%] {\n overflow: hidden;\n display: block; }\n\n.action-buttons[_ngcontent-%COMP%] {\n opacity: 0;\n transition: opacity 0.3s ease;\n transform: translateY(100%);\n z-index: 3;\n position: relative;\n height: 2em;\n line-height: 2em;\n padding-right: 10px;\n text-align: right;\n margin-top: -1em; }\n .action-buttons[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] > a[_ngcontent-%COMP%] {\n padding: 2px 10px;\n color: #ffffff;\n cursor: pointer; }\n .action-buttons[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] > a[_ngcontent-%COMP%]:hover {\n background-color: #455b66; }\n\n.code-sample[_ngcontent-%COMP%]:hover > .action-buttons[_ngcontent-%COMP%] {\n opacity: 1; }\n\nheader[_ngcontent-%COMP%] {\n font-family: Montserrat;\n font-size: 0.929em;\n text-transform: uppercase;\n margin: 0;\n color: #9fb4be;\n text-transform: uppercase;\n font-weight: normal;\n margin-top: 20px; }\n\n[_nghost-%COMP%] > tabs > ul li {\n font-family: Montserrat;\n font-size: .9em;\n border-radius: 2px;\n margin: 2px 0;\n padding: 3px 10px 2px 10px;\n line-height: 16px;\n color: #9fb4be; }\n [_nghost-%COMP%] > tabs > ul li:hover {\n background-color: rgba(255, 255, 255, 0.1);\n color: #ffffff; }\n [_nghost-%COMP%] > tabs > ul li.active {\n background-color: #ffffff;\n color: #263238; }\n\n[_nghost-%COMP%] tabs ul {\n padding-top: 10px; }\n\n.code-sample[_ngcontent-%COMP%] pre[_ngcontent-%COMP%] {\n overflow-x: auto;\n word-break: break-all;\n word-wrap: break-word;\n white-space: pre-wrap;\n margin-top: 0;\n overflow-x: auto;\n padding: 20px;\n border-radius: 4px;\n background-color: #222d32;\n margin-bottom: 36px; }"]},function(t,e,n){"use strict";var r=n(223),i=n(9),o=n(19),s=n(8),a=n(15),c=n(12),u=n(13),l=n(20),h=n(90),p=n(67),f=n(22),_=n(104),d=n(464),y=n(292),m=n(23),g=n(36),v=n(79),b=n(25),w=n(54),x=n(28),I=n(158),C=n(306),k=n(165),T=n(312),E=n(56),S=n(34),O=n(46),R=n(310),A=n(164),N=n(39),P=function(){function t(t,e,n,o,s){this._changed=!1,this.context=new r.RequestSamples(t,e,n,o,s),this._expr_0=i.UNINITIALIZED,this._expr_1=i.UNINITIALIZED,this._expr_2=i.UNINITIALIZED}return t.prototype.ngOnDetach=function(t,e,n){},t.prototype.ngOnDestroy=function(){},t.prototype.check_pointer=function(t,e,n){(n||s.checkBinding(e,this._expr_0,t))&&(this._changed=!0,this.context.pointer=t,this._expr_0=t)},t.prototype.check_schemaPointer=function(t,e,n){(n||s.checkBinding(e,this._expr_1,t))&&(this._changed=!0,this.context.schemaPointer=t,this._expr_1=t)},t.prototype.ngDoCheck=function(t,e,n){var r=this._changed;return this._changed=!1,n||0===t.numberOfChecks&&this.context.ngOnInit(),r},t.prototype.checkHost=function(t,e,n,r){var i=this.context.hidden;s.checkBinding(r,this._expr_2,i)&&(t.renderer.setElementAttribute(n,"hidden",null==i?null:i.toString()),this._expr_2=i)},t.prototype.handleEvent=function(t,e){var n=!0;return n},t.prototype.subscribe=function(t,e){this._eventHandler=e},t}();e.Wrapper_RequestSamples=P;var M=s.createRenderComponentType("",0,a.ViewEncapsulation.None,[],{}),D=function(t){function e(n,r,o,s){t.call(this,e,M,c.ViewType.HOST,n,r,o,s,i.ChangeDetectorStatus.CheckAlways)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.selectOrCreateRenderHostElement(this.renderer,"request-samples",s.EMPTY_INLINE_ARRAY,t,null),this.compView_0=new L(this.viewUtils,this,0,this._el_0),this._RequestSamples_0_3=new P(this.injectorGet(l.SpecManager,this.parentIndex),this.injectorGet(h.AppStateService,this.parentIndex),this.injectorGet(p.ScrollService,this.parentIndex),new f.ElementRef(this._el_0),this.injectorGet(_.NgZone,this.parentIndex)),this.compView_0.create(this._RequestSamples_0_3.context),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0],null),new u.ComponentRef_(0,this,this._el_0,this._RequestSamples_0_3.context)},e.prototype.injectorGetInternal=function(t,e,n){return t===r.RequestSamples&&0===e?this._RequestSamples_0_3.context:n},e.prototype.detectChangesInternal=function(t){this._RequestSamples_0_3.ngDoCheck(this,this._el_0,t)&&this.compView_0.markAsCheckOnce(),this._RequestSamples_0_3.checkHost(this,this.compView_0,this._el_0,t),this.compView_0.detectChanges(t)},e.prototype.destroyInternal=function(){this.compView_0.destroy()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView);e.RequestSamplesNgFactory=new u.ComponentFactory("request-samples",D,r.RequestSamples);var V=[d.styles],j=s.createRenderComponentType("",0,a.ViewEncapsulation.Emulated,V,{}),L=function(t){function e(n,r,o,s){t.call(this,e,j,c.ViewType.COMPONENT,n,r,o,s,i.ChangeDetectorStatus.CheckOnce)}return __extends(e,t),e.prototype.createInternal=function(t){var e=this.renderer.createViewRoot(this.parentElement);return this._viewQuery_Tabs_0=new y.QueryList,this._anchor_0=this.renderer.createTemplateAnchor(e,null),this._vc_0=new m.ViewContainer(0,null,this,this._anchor_0),this._TemplateRef_0_5=new b.TemplateRef_(this,0,this._anchor_0),this._NgIf_0_6=new g.Wrapper_NgIf(this._vc_0.vcRef,this._TemplateRef_0_5),this._text_1=this.renderer.createText(e,"\n",null),this._anchor_2=this.renderer.createTemplateAnchor(e,null),this._vc_2=new m.ViewContainer(2,null,this,this._anchor_2),this._TemplateRef_2_5=new b.TemplateRef_(this,2,this._anchor_2),this._NgIf_2_6=new g.Wrapper_NgIf(this._vc_2.vcRef,this._TemplateRef_2_5),this._text_3=this.renderer.createText(e,"\n",null),this._anchor_4=this.renderer.createTemplateAnchor(e,null),this._vc_4=new m.ViewContainer(4,null,this,this._anchor_4),this._TemplateRef_4_5=new b.TemplateRef_(this,4,this._anchor_4),this._NgIf_4_6=new g.Wrapper_NgIf(this._vc_4.vcRef,this._TemplateRef_4_5),this._text_5=this.renderer.createText(e,"\n",null),this._pipe_prism_0=new v.PrismPipe(this.parentView.injectorGet(w.DomSanitizer,this.parentIndex)),this.init(null,this.renderer.directRenderer?null:[this._anchor_0,this._text_1,this._anchor_2,this._text_3,this._anchor_4,this._text_5],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===b.TemplateRef&&0===e?this._TemplateRef_0_5:t===x.NgIf&&0===e?this._NgIf_0_6.context:t===b.TemplateRef&&2===e?this._TemplateRef_2_5:t===x.NgIf&&2===e?this._NgIf_2_6.context:t===b.TemplateRef&&4===e?this._TemplateRef_4_5:t===x.NgIf&&4===e?this._NgIf_4_6.context:n},e.prototype.detectChangesInternal=function(t){var e=this.context.schemaPointer||this.context.samples.length;this._NgIf_0_6.check_ngIf(e,t,!1),this._NgIf_0_6.ngDoCheck(this,this._anchor_0,t);var n=this.context.schemaPointer&&!this.context.samples.length;this._NgIf_2_6.check_ngIf(n,t,!1),this._NgIf_2_6.ngDoCheck(this,this._anchor_2,t);var r=this.context.samples.length;this._NgIf_4_6.check_ngIf(r,t,!1),this._NgIf_4_6.ngDoCheck(this,this._anchor_4,t),this._vc_0.detectChangesInNestedViews(t),this._vc_2.detectChangesInNestedViews(t),this._vc_4.detectChangesInNestedViews(t),t||this._viewQuery_Tabs_0.dirty&&(this._viewQuery_Tabs_0.reset([this._vc_4.mapNestedViews(U,function(t){return[t._Tabs_0_3.context]})]),this.context.childQuery=this._viewQuery_Tabs_0,this._viewQuery_Tabs_0.notifyOnChanges())},e.prototype.destroyInternal=function(){this._vc_0.destroyNestedViews(),this._vc_2.destroyNestedViews(),this._vc_4.destroyNestedViews()},e.prototype.createEmbeddedViewInternal=function(t){return 0==t?new F(this.viewUtils,this,0,this._anchor_0,this._vc_0):2==t?new B(this.viewUtils,this,2,this._anchor_2,this._vc_2):4==t?new U(this.viewUtils,this,4,this._anchor_4,this._vc_4):null},e}(o.AppView);e.View_RequestSamples0=L;var F=function(t){function e(n,r,o,s,a){t.call(this,e,j,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"header",s.EMPTY_INLINE_ARRAY,null),this._text_1=this.renderer.createText(this._el_0," Request samples ",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1],null),null},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView),B=function(t){function e(n,r,o,s,a){t.call(this,e,j,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"schema-sample",s.EMPTY_INLINE_ARRAY,null),this.compView_0=new C.View_SchemaSample0(this.viewUtils,this,0,this._el_0),this._SchemaSample_0_3=new C.Wrapper_SchemaSample(this.parentView.injectorGet(l.SpecManager,this.parentIndex),new f.ElementRef(this._el_0)),this._text_1=this.renderer.createText(null," ",null),this.compView_0.create(this._SchemaSample_0_3.context),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===I.SchemaSample&&0<=e&&e<=1?this._SchemaSample_0_3.context:n},e.prototype.detectChangesInternal=function(t){var e=this.parentView.context.schemaPointer;this._SchemaSample_0_3.check_pointer(e,t,!1);var n=!0;this._SchemaSample_0_3.check_skipReadOnly(n,t,!1),this._SchemaSample_0_3.ngDoCheck(this,this._el_0,t)&&this.compView_0.markAsCheckOnce(),this.compView_0.detectChanges(t)},e.prototype.destroyInternal=function(){this.compView_0.destroy()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView),U=function(t){function e(n,r,o,s,a){t.call(this,e,j,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a)}return __extends(e,t),e.prototype.createInternal=function(t){this._el_0=s.createRenderElement(this.renderer,null,"tabs",s.EMPTY_INLINE_ARRAY,null),this.compView_0=new T.View_Tabs0(this.viewUtils,this,0,this._el_0),this._Tabs_0_3=new T.Wrapper_Tabs(this.compView_0.ref),this._text_1=this.renderer.createText(null,"\n ",null),this._anchor_2=this.renderer.createTemplateAnchor(null,null),this._vc_2=new m.ViewContainer(2,0,this,this._anchor_2),this._TemplateRef_2_5=new b.TemplateRef_(this,2,this._anchor_2),this._NgIf_2_6=new g.Wrapper_NgIf(this._vc_2.vcRef,this._TemplateRef_2_5),this._text_3=this.renderer.createText(null,"\n ",null),this._anchor_4=this.renderer.createTemplateAnchor(null,null),this._vc_4=new m.ViewContainer(4,0,this,this._anchor_4),this._TemplateRef_4_5=new b.TemplateRef_(this,4,this._anchor_4),this._NgFor_4_6=new E.Wrapper_NgFor(this._vc_4.vcRef,this._TemplateRef_4_5,this.parentView.injectorGet(S.IterableDiffers,this.parentIndex),this.parentView.ref),this._text_5=this.renderer.createText(null,"\n",null),this.compView_0.create(this._Tabs_0_3.context);var e=s.subscribeToRenderElement(this,this._el_0,new s.InlineArray2(2,"change",null),this.eventHandler(this.handleEvent_0));return this._Tabs_0_3.subscribe(this,this.eventHandler(this.handleEvent_0),!0),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._anchor_2,this._text_3,this._anchor_4,this._text_5],[e]),null},e.prototype.injectorGetInternal=function(t,e,n){return t===b.TemplateRef&&2===e?this._TemplateRef_2_5:t===x.NgIf&&2===e?this._NgIf_2_6.context:t===b.TemplateRef&&4===e?this._TemplateRef_4_5:t===O.NgFor&&4===e?this._NgFor_4_6.context:t===k.Tabs&&0<=e&&e<=5?this._Tabs_0_3.context:n},e.prototype.detectChangesInternal=function(t){var e=this.parentView.context.selectedLang;this._Tabs_0_3.check_selected(e,t,!1),this._Tabs_0_3.ngDoCheck(this,this._el_0,t)&&this.compView_0.markAsCheckOnce();var n=this.parentView.context.schemaPointer;this._NgIf_2_6.check_ngIf(n,t,!1),this._NgIf_2_6.ngDoCheck(this,this._anchor_2,t);var r=this.parentView.context.samples;this._NgFor_4_6.check_ngForOf(r,t,!1),this._NgFor_4_6.ngDoCheck(this,this._anchor_4,t),this._vc_2.detectChangesInNestedViews(t),this._vc_4.detectChangesInNestedViews(t),this.compView_0.detectChanges(t)},e.prototype.dirtyParentQueriesInternal=function(){this.parentView._viewQuery_Tabs_0.setDirty()},e.prototype.destroyInternal=function(){this._vc_2.destroyNestedViews(),this._vc_4.destroyNestedViews(),this.compView_0.destroy(),this._Tabs_0_3.ngOnDestroy()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e.prototype.visitProjectableNodesInternal=function(t,e,n,r){0==t&&0==e&&(n(this._text_1,r),n(this._vc_2.nativeElement,r),this._vc_2.visitNestedViewRootNodes(n,r),n(this._text_3,r),n(this._vc_4.nativeElement,r),this._vc_4.visitNestedViewRootNodes(n,r),n(this._text_5,r))},e.prototype.createEmbeddedViewInternal=function(t){return 2==t?new z(this.viewUtils,this,2,this._anchor_2,this._vc_2):4==t?new H(this.viewUtils,this,4,this._anchor_4,this._vc_4):null},e.prototype.handleEvent_0=function(t,e){this.markPathToRootAsCheckOnce();var n=!0;if("change"==t){var r=this.parentView.context.changeLangNotify(e)!==!1;n=r&&n}return n},e}(o.AppView),z=function(t){function e(n,r,o,s,a){t.call(this,e,j,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"tab",new s.InlineArray2(2,"tabTitle","JSON"),null),this.compView_0=new T.View_Tab0(this.viewUtils,this,0,this._el_0),this._Tab_0_3=new T.Wrapper_Tab(this.parentView._Tabs_0_3.context),this._text_1=this.renderer.createText(null,"\n ",null),this._el_2=s.createRenderElement(this.renderer,null,"schema-sample",s.EMPTY_INLINE_ARRAY,null),this.compView_2=new C.View_SchemaSample0(this.viewUtils,this,2,this._el_2),this._SchemaSample_2_3=new C.Wrapper_SchemaSample(this.parentView.parentView.injectorGet(l.SpecManager,this.parentView.parentIndex),new f.ElementRef(this._el_2)),this._text_3=this.renderer.createText(null," ",null),this.compView_2.create(this._SchemaSample_2_3.context),this._text_4=this.renderer.createText(null,"\n ",null),this.compView_0.create(this._Tab_0_3.context),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._el_2,this._text_3,this._text_4],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===I.SchemaSample&&2<=e&&e<=3?this._SchemaSample_2_3.context:t===k.Tab&&0<=e&&e<=4?this._Tab_0_3.context:n},e.prototype.detectChangesInternal=function(t){var e="JSON";this._Tab_0_3.check_tabTitle(e,t,!1),this._Tab_0_3.ngDoCheck(this,this._el_0,t);var n=this.parentView.parentView.context.schemaPointer;this._SchemaSample_2_3.check_pointer(n,t,!1);var r=!0;this._SchemaSample_2_3.check_skipReadOnly(r,t,!1),this._SchemaSample_2_3.ngDoCheck(this,this._el_2,t)&&this.compView_2.markAsCheckOnce(),this.compView_0.detectChanges(t),this.compView_2.detectChanges(t)},e.prototype.destroyInternal=function(){this.compView_0.destroy(),this.compView_2.destroy()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e.prototype.visitProjectableNodesInternal=function(t,e,n,r){0==t&&0==e&&(n(this._text_1,r),n(this._el_2,r),n(this._text_4,r))},e}(o.AppView),H=function(t){function e(n,r,o,s,a){t.call(this,e,j,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a),this._expr_17=i.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){this._el_0=s.createRenderElement(this.renderer,null,"tab",s.EMPTY_INLINE_ARRAY,null),this.compView_0=new T.View_Tab0(this.viewUtils,this,0,this._el_0),this._Tab_0_3=new T.Wrapper_Tab(this.parentView._Tabs_0_3.context),this._text_1=this.renderer.createText(null,"\n ",null),this._el_2=s.createRenderElement(this.renderer,null,"div",new s.InlineArray2(2,"class","code-sample"),null),this._text_3=this.renderer.createText(this._el_2,"\n ",null),this._el_4=s.createRenderElement(this.renderer,this._el_2,"div",new s.InlineArray2(2,"class","action-buttons"),null),this._text_5=this.renderer.createText(this._el_4,"\n ",null),this._el_6=s.createRenderElement(this.renderer,this._el_4,"span",new s.InlineArray4(4,"class","hint--top-left hint--inversed","copy-button",""),null),this._CopyButton_6_3=new R.Wrapper_CopyButton(this.renderer,new f.ElementRef(this._el_6)),this._el_7=s.createRenderElement(this.renderer,this._el_6,"a",s.EMPTY_INLINE_ARRAY,null),this._text_8=this.renderer.createText(this._el_7,"Copy",null),this._text_9=this.renderer.createText(this._el_4,"\n ",null),this._text_10=this.renderer.createText(this._el_2,"\n ",null),this._el_11=s.createRenderElement(this.renderer,this._el_2,"pre",s.EMPTY_INLINE_ARRAY,null),this._text_12=this.renderer.createText(this._el_2,"\n ",null),this._text_13=this.renderer.createText(null,"\n ",null),this.compView_0.create(this._Tab_0_3.context);var e=s.subscribeToRenderElement(this,this._el_6,new s.InlineArray4(4,"click",null,"mouseleave",null),this.eventHandler(this.handleEvent_6));return this._pipe_prism_0_0=s.pureProxy2(this.parentView.parentView._pipe_prism_0.transform.bind(this.parentView.parentView._pipe_prism_0)),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._el_2,this._text_3,this._el_4,this._text_5,this._el_6,this._el_7,this._text_8,this._text_9,this._text_10,this._el_11,this._text_12,this._text_13],[e]),null},e.prototype.injectorGetInternal=function(t,e,n){return t===A.CopyButton&&6<=e&&e<=8?this._CopyButton_6_3.context:t===k.Tab&&0<=e&&e<=13?this._Tab_0_3.context:n},e.prototype.detectChangesInternal=function(t){var e=new i.ValueUnwrapper,n=this.context.$implicit.lang;this._Tab_0_3.check_tabTitle(n,t,!1),this._Tab_0_3.ngDoCheck(this,this._el_0,t);var r=this.context.$implicit.source;this._CopyButton_6_3.check_copyText(r,t,!1),this._CopyButton_6_3.ngDoCheck(this,this._el_6,t),e.reset();var o=e.unwrap(s.castByValue(this._pipe_prism_0_0,this.parentView.parentView._pipe_prism_0.transform)(this.context.$implicit.source,this.context.$implicit.lang)); +(e.hasWrappedValue||s.checkBinding(t,this._expr_17,o))&&(this.renderer.setElementProperty(this._el_11,"innerHTML",this.viewUtils.sanitizer.sanitize(N.SecurityContext.HTML,o)),this._expr_17=o),this.compView_0.detectChanges(t)},e.prototype.destroyInternal=function(){this.compView_0.destroy()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e.prototype.visitProjectableNodesInternal=function(t,e,n,r){0==t&&0==e&&(n(this._text_1,r),n(this._el_2,r),n(this._text_13,r))},e.prototype.handleEvent_6=function(t,e){this.markPathToRootAsCheckOnce();var n=!0;return n=this._CopyButton_6_3.handleEvent(t,e)&&n},e}(o.AppView)},function(t,e){"use strict";e.styles=['[_nghost-%COMP%] {\n display: block; }\n\n.responses-list-header[_ngcontent-%COMP%] {\n font-size: 18px;\n padding: 0.2em 0;\n margin: 3em 0 1.1em;\n color: #253137;\n font-weight: normal; }\n\n[_nghost-%COMP%] .zippy-title[_ngcontent-%COMP%] {\n font-family: Montserrat, sans-serif; }\n\n.header-name[_ngcontent-%COMP%] {\n font-weight: bold;\n display: inline-block; }\n\n.header-type[_ngcontent-%COMP%] {\n display: inline-block;\n font-weight: bold;\n color: #999; }\n\nheader[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: bold;\n text-transform: uppercase;\n margin-bottom: 15px; }\n header[_ngcontent-%COMP%]:not(:first-child) {\n margin-top: 15px;\n margin-bottom: 0; }\n\n.header[_ngcontent-%COMP%] {\n margin-bottom: 10px; }\n\n.header-range[_ngcontent-%COMP%] {\n position: relative;\n top: 1px;\n margin-right: 6px;\n margin-left: 6px;\n border-radius: 2px;\n background-color: rgba(0, 51, 160, 0.1);\n padding: 0 4px;\n color: rgba(0, 51, 160, 0.7); }\n\n.header-type.array[_ngcontent-%COMP%]::before {\n content: "Array of ";\n color: #263238;\n font-weight: 300; }']},function(t,e,n){"use strict";var r=n(224),i=n(9),o=n(19),s=n(8),a=n(15),c=n(12),u=n(13),l=n(20),h=n(35),p=n(466),f=n(23),_=n(36),d=n(56),y=n(79),m=n(25),g=n(34),v=n(54),b=n(28),w=n(46),x=n(166),I=n(313),C=n(121),k=n(216),T=n(60),E=n(217),S=n(22),O=n(39),R=n(142),A=function(){function t(t,e){this._changed=!1,this.context=new r.ResponsesList(t,e),this._expr_0=i.UNINITIALIZED}return t.prototype.ngOnDetach=function(t,e,n){},t.prototype.ngOnDestroy=function(){},t.prototype.check_pointer=function(t,e,n){(n||s.checkBinding(e,this._expr_0,t))&&(this._changed=!0,this.context.pointer=t,this._expr_0=t)},t.prototype.ngDoCheck=function(t,e,n){var r=this._changed;return this._changed=!1,n||0===t.numberOfChecks&&this.context.ngOnInit(),r},t.prototype.checkHost=function(t,e,n,r){},t.prototype.handleEvent=function(t,e){var n=!0;return n},t.prototype.subscribe=function(t,e){this._eventHandler=e},t}();e.Wrapper_ResponsesList=A;var N=s.createRenderComponentType("",0,a.ViewEncapsulation.None,[],{}),P=function(t){function e(n,r,o,s){t.call(this,e,N,c.ViewType.HOST,n,r,o,s,i.ChangeDetectorStatus.CheckAlways)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.selectOrCreateRenderHostElement(this.renderer,"responses-list",s.EMPTY_INLINE_ARRAY,t,null),this.compView_0=new V(this.viewUtils,this,0,this._el_0),this._ResponsesList_0_3=new A(this.injectorGet(l.SpecManager,this.parentIndex),this.injectorGet(h.OptionsService,this.parentIndex)),this.compView_0.create(this._ResponsesList_0_3.context),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0],null),new u.ComponentRef_(0,this,this._el_0,this._ResponsesList_0_3.context)},e.prototype.injectorGetInternal=function(t,e,n){return t===r.ResponsesList&&0===e?this._ResponsesList_0_3.context:n},e.prototype.detectChangesInternal=function(t){this._ResponsesList_0_3.ngDoCheck(this,this._el_0,t)&&this.compView_0.markAsCheckOnce(),this.compView_0.detectChanges(t)},e.prototype.destroyInternal=function(){this.compView_0.destroy()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView);e.ResponsesListNgFactory=new u.ComponentFactory("responses-list",P,r.ResponsesList);var M=[p.styles],D=s.createRenderComponentType("",0,a.ViewEncapsulation.Emulated,M,{}),V=function(t){function e(n,r,o,s){t.call(this,e,D,c.ViewType.COMPONENT,n,r,o,s,i.ChangeDetectorStatus.CheckOnce)}return __extends(e,t),e.prototype.createInternal=function(t){var e=this.renderer.createViewRoot(this.parentElement);return this._anchor_0=this.renderer.createTemplateAnchor(e,null),this._vc_0=new f.ViewContainer(0,null,this,this._anchor_0),this._TemplateRef_0_5=new m.TemplateRef_(this,0,this._anchor_0),this._NgIf_0_6=new _.Wrapper_NgIf(this._vc_0.vcRef,this._TemplateRef_0_5),this._text_1=this.renderer.createText(e,"\n",null),this._anchor_2=this.renderer.createTemplateAnchor(e,null),this._vc_2=new f.ViewContainer(2,null,this,this._anchor_2),this._TemplateRef_2_5=new m.TemplateRef_(this,2,this._anchor_2),this._NgFor_2_6=new d.Wrapper_NgFor(this._vc_2.vcRef,this._TemplateRef_2_5,this.parentView.injectorGet(g.IterableDiffers,this.parentIndex),this.ref),this._text_3=this.renderer.createText(e,"\n",null),this._pipe_marked_0=new y.MarkedPipe(this.parentView.injectorGet(v.DomSanitizer,this.parentIndex)),this.init(null,this.renderer.directRenderer?null:[this._anchor_0,this._text_1,this._anchor_2,this._text_3],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===m.TemplateRef&&0===e?this._TemplateRef_0_5:t===b.NgIf&&0===e?this._NgIf_0_6.context:t===m.TemplateRef&&2===e?this._TemplateRef_2_5:t===w.NgFor&&2===e?this._NgFor_2_6.context:n},e.prototype.detectChangesInternal=function(t){var e=this.context.responses.length;this._NgIf_0_6.check_ngIf(e,t,!1),this._NgIf_0_6.ngDoCheck(this,this._anchor_0,t);var n=this.context.responses;this._NgFor_2_6.check_ngForOf(n,t,!1);var r=this.context.trackByCode;this._NgFor_2_6.check_ngForTrackBy(r,t,!1),this._NgFor_2_6.ngDoCheck(this,this._anchor_2,t),this._vc_0.detectChangesInNestedViews(t),this._vc_2.detectChangesInNestedViews(t)},e.prototype.destroyInternal=function(){this._vc_0.destroyNestedViews(),this._vc_2.destroyNestedViews()},e.prototype.createEmbeddedViewInternal=function(t){return 0==t?new j(this.viewUtils,this,0,this._anchor_0,this._vc_0):2==t?new L(this.viewUtils,this,2,this._anchor_2,this._vc_2):null},e}(o.AppView);e.View_ResponsesList0=V;var j=function(t){function e(n,r,o,s,a){t.call(this,e,D,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"h2",new s.InlineArray2(2,"class","responses-list-header"),null),this._text_1=this.renderer.createText(this._el_0," Responses ",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1],null),null},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView),L=function(t){function e(n,r,o,s,a){t.call(this,e,D,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a)}return __extends(e,t),e.prototype.createInternal=function(t){this._el_0=s.createRenderElement(this.renderer,null,"zippy",s.EMPTY_INLINE_ARRAY,null),this.compView_0=new I.View_Zippy0(this.viewUtils,this,0,this._el_0),this._Zippy_0_3=new I.Wrapper_Zippy,this._text_1=this.renderer.createText(null,"\n ",null),this._anchor_2=this.renderer.createTemplateAnchor(null,null),this._vc_2=new f.ViewContainer(2,0,this,this._anchor_2),this._TemplateRef_2_5=new m.TemplateRef_(this,2,this._anchor_2),this._NgIf_2_6=new _.Wrapper_NgIf(this._vc_2.vcRef,this._TemplateRef_2_5),this._text_3=this.renderer.createText(null,"\n ",null),this._anchor_4=this.renderer.createTemplateAnchor(null,null),this._vc_4=new f.ViewContainer(4,0,this,this._anchor_4),this._TemplateRef_4_5=new m.TemplateRef_(this,4,this._anchor_4),this._NgIf_4_6=new _.Wrapper_NgIf(this._vc_4.vcRef,this._TemplateRef_4_5),this._text_5=this.renderer.createText(null,"\n ",null),this._el_6=s.createRenderElement(this.renderer,null,"json-schema-lazy",s.EMPTY_INLINE_ARRAY,null),this._vc_6=new f.ViewContainer(6,0,this,this._el_6),this.compView_6=new k.View_JsonSchemaLazy0(this.viewUtils,this,6,this._el_6),this._ComponentFactoryResolver_6_5=new T.CodegenComponentFactoryResolver([E.JsonSchemaNgFactory],this.parentView.injectorGet(T.ComponentFactoryResolver,this.parentIndex)),this._JsonSchemaLazy_6_6=new k.Wrapper_JsonSchemaLazy(this.parentView.injectorGet(l.SpecManager,this.parentIndex),this._vc_6.vcRef,new S.ElementRef(this._el_6),this._ComponentFactoryResolver_6_5,this.parentView.injectorGet(h.OptionsService,this.parentIndex),this.renderer),this._text_7=this.renderer.createText(null,"\n ",null),this.compView_6.create(this._JsonSchemaLazy_6_6.context),this._text_8=this.renderer.createText(null,"\n",null),this.compView_0.create(this._Zippy_0_3.context);var e=s.subscribeToRenderElement(this,this._el_0,new s.InlineArray2(2,"open",null),this.eventHandler(this.handleEvent_0));return this._Zippy_0_3.subscribe(this,this.eventHandler(this.handleEvent_0),!0,!1),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._anchor_2,this._text_3,this._anchor_4,this._text_5,this._el_6,this._text_7,this._text_8],[e]),null},e.prototype.injectorGetInternal=function(t,e,n){return t===m.TemplateRef&&2===e?this._TemplateRef_2_5:t===b.NgIf&&2===e?this._NgIf_2_6.context:t===m.TemplateRef&&4===e?this._TemplateRef_4_5:t===b.NgIf&&4===e?this._NgIf_4_6.context:t===T.ComponentFactoryResolver&&6===e?this._ComponentFactoryResolver_6_5:t===C.JsonSchemaLazy&&6<=e&&e<=7?this._JsonSchemaLazy_6_6.context:t===x.Zippy&&0<=e&&e<=8?this._Zippy_0_3.context:n},e.prototype.detectChangesInternal=function(t){var e=this.context.$implicit.type;this._Zippy_0_3.check_type(e,t,!1);var n=this.context.$implicit.empty;this._Zippy_0_3.check_empty(n,t,!1);var r=s.inlineInterpolate(2,"",this.context.$implicit.code," ",this.context.$implicit.description||this.parentView.context.marked,"");this._Zippy_0_3.check_title(r,t,!1),this._Zippy_0_3.ngDoCheck(this,this._el_0,t);var i=this.context.$implicit.headers;this._NgIf_2_6.check_ngIf(i,t,!1),this._NgIf_2_6.ngDoCheck(this,this._anchor_2,t);var o=this.context.$implicit.schema;this._NgIf_4_6.check_ngIf(o,t,!1),this._NgIf_4_6.ngDoCheck(this,this._anchor_4,t);var a=s.inlineInterpolate(1,"",this.context.$implicit.schema?this.context.$implicit.pointer+"/schema":null,"");this._JsonSchemaLazy_6_6.check_pointer(a,t,!1),this._JsonSchemaLazy_6_6.ngDoCheck(this,this._el_6,t),this._vc_2.detectChangesInNestedViews(t),this._vc_4.detectChangesInNestedViews(t),this._vc_6.detectChangesInNestedViews(t),this.compView_0.detectChanges(t),this.compView_6.detectChanges(t),t||0===this.numberOfChecks&&this._JsonSchemaLazy_6_6.context.ngAfterViewInit()},e.prototype.destroyInternal=function(){this._vc_2.destroyNestedViews(),this._vc_4.destroyNestedViews(),this._vc_6.destroyNestedViews(),this.compView_0.destroy(),this.compView_6.destroy(),this._JsonSchemaLazy_6_6.ngOnDestroy(),this._Zippy_0_3.ngOnDestroy()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e.prototype.visitProjectableNodesInternal=function(t,e,n,r){0==t&&0==e&&(n(this._text_1,r),n(this._vc_2.nativeElement,r),this._vc_2.visitNestedViewRootNodes(n,r),n(this._text_3,r),n(this._vc_4.nativeElement,r),this._vc_4.visitNestedViewRootNodes(n,r),n(this._text_5,r),n(this._vc_6.nativeElement,r),this._vc_6.visitNestedViewRootNodes(n,r),n(this._text_8,r))},e.prototype.createEmbeddedViewInternal=function(t){return 2==t?new F(this.viewUtils,this,2,this._anchor_2,this._vc_2):4==t?new W(this.viewUtils,this,4,this._anchor_4,this._vc_4):null},e.prototype.handleEvent_0=function(t,e){this.markPathToRootAsCheckOnce();var n=!0;if("open"==t){var r=this._JsonSchemaLazy_6_6.context.load()!==!1;n=r&&n}return n},e}(o.AppView),F=function(t){function e(n,r,o,s,a){t.call(this,e,D,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"div",new s.InlineArray2(2,"class","response-headers"),null),this._text_1=this.renderer.createText(this._el_0,"\n ",null),this._el_2=s.createRenderElement(this.renderer,this._el_0,"header",s.EMPTY_INLINE_ARRAY,null),this._text_3=this.renderer.createText(this._el_2,"\n Headers\n ",null),this._text_4=this.renderer.createText(this._el_0,"\n ",null),this._anchor_5=this.renderer.createTemplateAnchor(this._el_0,null),this._vc_5=new f.ViewContainer(5,0,this,this._anchor_5),this._TemplateRef_5_5=new m.TemplateRef_(this,5,this._anchor_5),this._NgFor_5_6=new d.Wrapper_NgFor(this._vc_5.vcRef,this._TemplateRef_5_5,this.parentView.parentView.injectorGet(g.IterableDiffers,this.parentView.parentIndex),this.parentView.parentView.ref),this._text_6=this.renderer.createText(this._el_0,"\n ",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._el_2,this._text_3,this._text_4,this._anchor_5,this._text_6],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===m.TemplateRef&&5===e?this._TemplateRef_5_5:t===w.NgFor&&5===e?this._NgFor_5_6.context:n},e.prototype.detectChangesInternal=function(t){var e=this.parentView.context.$implicit.headers;this._NgFor_5_6.check_ngForOf(e,t,!1),this._NgFor_5_6.ngDoCheck(this,this._anchor_5,t),this._vc_5.detectChangesInNestedViews(t)},e.prototype.destroyInternal=function(){this._vc_5.destroyNestedViews()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e.prototype.createEmbeddedViewInternal=function(t){return 5==t?new B(this.viewUtils,this,5,this._anchor_5,this._vc_5):null},e}(o.AppView),B=function(t){function e(n,r,o,s,a){t.call(this,e,D,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a),this._expr_26=i.UNINITIALIZED,this._expr_27=i.UNINITIALIZED,this._expr_28=i.UNINITIALIZED,this._expr_29=i.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"div",new s.InlineArray2(2,"class","header"),null),this._text_1=this.renderer.createText(this._el_0,"\n ",null),this._el_2=s.createRenderElement(this.renderer,this._el_0,"div",new s.InlineArray2(2,"class","header-name"),null),this._text_3=this.renderer.createText(this._el_2,"",null),this._text_4=this.renderer.createText(this._el_0,"\n ",null),this._el_5=s.createRenderElement(this.renderer,this._el_0,"div",s.EMPTY_INLINE_ARRAY,null),this._text_6=this.renderer.createText(this._el_5,"",null),this._anchor_7=this.renderer.createTemplateAnchor(this._el_5,null),this._vc_7=new f.ViewContainer(7,5,this,this._anchor_7),this._TemplateRef_7_5=new m.TemplateRef_(this,7,this._anchor_7),this._NgIf_7_6=new _.Wrapper_NgIf(this._vc_7.vcRef,this._TemplateRef_7_5),this._text_8=this.renderer.createText(this._el_5,"\n ",null),this._text_9=this.renderer.createText(this._el_0,"\n ",null),this._anchor_10=this.renderer.createTemplateAnchor(this._el_0,null),this._vc_10=new f.ViewContainer(10,0,this,this._anchor_10),this._TemplateRef_10_5=new m.TemplateRef_(this,10,this._anchor_10),this._NgIf_10_6=new _.Wrapper_NgIf(this._vc_10.vcRef,this._TemplateRef_10_5),this._text_11=this.renderer.createText(this._el_0,"\n ",null),this._anchor_12=this.renderer.createTemplateAnchor(this._el_0,null),this._vc_12=new f.ViewContainer(12,0,this,this._anchor_12),this._TemplateRef_12_5=new m.TemplateRef_(this,12,this._anchor_12),this._NgIf_12_6=new _.Wrapper_NgIf(this._vc_12.vcRef,this._TemplateRef_12_5),this._text_13=this.renderer.createText(this._el_0,"\n ",null),this._el_14=s.createRenderElement(this.renderer,this._el_0,"div",new s.InlineArray2(2,"class","header-description"),null),this._text_15=this.renderer.createText(this._el_14," ",null),this._text_16=this.renderer.createText(this._el_0,"\n ",null),this._pipe_marked_0_0=s.pureProxy1(this.parentView.parentView.parentView._pipe_marked_0.transform.bind(this.parentView.parentView.parentView._pipe_marked_0)),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._el_2,this._text_3,this._text_4,this._el_5,this._text_6,this._anchor_7,this._text_8,this._text_9,this._anchor_10,this._text_11,this._anchor_12,this._text_13,this._el_14,this._text_15,this._text_16],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===m.TemplateRef&&7===e?this._TemplateRef_7_5:t===b.NgIf&&7===e?this._NgIf_7_6.context:t===m.TemplateRef&&10===e?this._TemplateRef_10_5:t===b.NgIf&&10===e?this._NgIf_10_6.context:t===m.TemplateRef&&12===e?this._TemplateRef_12_5:t===b.NgIf&&12===e?this._NgIf_12_6.context:n},e.prototype.detectChangesInternal=function(t){var e=new i.ValueUnwrapper,n=this.context.$implicit._range;this._NgIf_7_6.check_ngIf(n,t,!1),this._NgIf_7_6.ngDoCheck(this,this._anchor_7,t);var r=this.context.$implicit.default;this._NgIf_10_6.check_ngIf(r,t,!1),this._NgIf_10_6.ngDoCheck(this,this._anchor_10,t);var o=this.context.$implicit.enum;this._NgIf_12_6.check_ngIf(o,t,!1),this._NgIf_12_6.ngDoCheck(this,this._anchor_12,t),this._vc_7.detectChangesInNestedViews(t),this._vc_10.detectChangesInNestedViews(t),this._vc_12.detectChangesInNestedViews(t);var a=s.inlineInterpolate(1," ",this.context.$implicit.name," ");s.checkBinding(t,this._expr_26,a)&&(this.renderer.setText(this._text_3,a),this._expr_26=a);var c=s.inlineInterpolate(1,"header-type ",this.context.$implicit.type,"");s.checkBinding(t,this._expr_27,c)&&(this.renderer.setElementProperty(this._el_5,"className",c),this._expr_27=c);var u=s.inlineInterpolate(2," ",this.context.$implicit._displayType," ",this.context.$implicit._displayFormat,"\n ");s.checkBinding(t,this._expr_28,u)&&(this.renderer.setText(this._text_6,u),this._expr_28=u),e.reset();var l=e.unwrap(s.castByValue(this._pipe_marked_0_0,this.parentView.parentView.parentView._pipe_marked_0.transform)(this.context.$implicit.description));(e.hasWrappedValue||s.checkBinding(t,this._expr_29,l))&&(this.renderer.setElementProperty(this._el_14,"innerHTML",this.viewUtils.sanitizer.sanitize(O.SecurityContext.HTML,l)),this._expr_29=l)},e.prototype.destroyInternal=function(){this._vc_7.destroyNestedViews(),this._vc_10.destroyNestedViews(),this._vc_12.destroyNestedViews()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e.prototype.createEmbeddedViewInternal=function(t){return 7==t?new U(this.viewUtils,this,7,this._anchor_7,this._vc_7):10==t?new z(this.viewUtils,this,10,this._anchor_10,this._vc_10):12==t?new H(this.viewUtils,this,12,this._anchor_12,this._vc_12):null},e}(o.AppView),U=function(t){function e(n,r,o,s,a){t.call(this,e,D,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a),this._expr_2=i.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"span",new s.InlineArray2(2,"class","header-range"),null),this._text_1=this.renderer.createText(this._el_0,"",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1],null),null},e.prototype.detectChangesInternal=function(t){var e=s.inlineInterpolate(1," ",this.parentView.context.$implicit._range," ");s.checkBinding(t,this._expr_2,e)&&(this.renderer.setText(this._text_1,e),this._expr_2=e)},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView),z=function(t){function e(n,r,o,s,a){t.call(this,e,D,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a),this._expr_2=i.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"div",new s.InlineArray2(2,"class","header-default"),null),this._text_1=this.renderer.createText(this._el_0,"",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1],null),null},e.prototype.detectChangesInternal=function(t){var e=s.inlineInterpolate(1," Default: ",this.parentView.context.$implicit.default," ");s.checkBinding(t,this._expr_2,e)&&(this.renderer.setText(this._text_1,e),this._expr_2=e)},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView),H=function(t){function e(n,r,o,s,a){t.call(this,e,D,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"div",new s.InlineArray2(2,"class","header-enum"),null),this._text_1=this.renderer.createText(this._el_0,"\n ",null),this._anchor_2=this.renderer.createTemplateAnchor(this._el_0,null),this._vc_2=new f.ViewContainer(2,0,this,this._anchor_2),this._TemplateRef_2_5=new m.TemplateRef_(this,2,this._anchor_2),this._NgFor_2_6=new d.Wrapper_NgFor(this._vc_2.vcRef,this._TemplateRef_2_5,this.parentView.parentView.parentView.parentView.injectorGet(g.IterableDiffers,this.parentView.parentView.parentView.parentIndex),this.parentView.parentView.parentView.parentView.ref),this._text_3=this.renderer.createText(this._el_0,"\n ",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._anchor_2,this._text_3],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===m.TemplateRef&&2===e?this._TemplateRef_2_5:t===w.NgFor&&2===e?this._NgFor_2_6.context:n},e.prototype.detectChangesInternal=function(t){var e=this.parentView.context.$implicit.enum;this._NgFor_2_6.check_ngForOf(e,t,!1),this._NgFor_2_6.ngDoCheck(this,this._anchor_2,t),this._vc_2.detectChangesInNestedViews(t)},e.prototype.destroyInternal=function(){this._vc_2.destroyNestedViews()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e.prototype.createEmbeddedViewInternal=function(t){return 2==t?new q(this.viewUtils,this,2,this._anchor_2,this._vc_2):null},e}(o.AppView),q=function(t){function e(n,r,o,s,a){t.call(this,e,D,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a),this._expr_2=i.UNINITIALIZED,this._expr_3=i.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"span",s.EMPTY_INLINE_ARRAY,null),this._text_1=this.renderer.createText(this._el_0,"",null),this._pipe_json_0=new R.JsonPipe,this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1],null),null},e.prototype.detectChangesInternal=function(t){var e=new i.ValueUnwrapper,n=s.inlineInterpolate(1,"enum-value ",this.context.$implicit.type,"");s.checkBinding(t,this._expr_2,n)&&(this.renderer.setElementProperty(this._el_0,"className",n),this._expr_2=n),e.reset();var r=s.inlineInterpolate(1," ",e.unwrap(this._pipe_json_0.transform(this.context.$implicit.val))," ");(e.hasWrappedValue||s.checkBinding(t,this._expr_3,r))&&(this.renderer.setText(this._text_1,r),this._expr_3=r)},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView),W=function(t){function e(n,r,o,s,a){t.call(this,e,D,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"header",s.EMPTY_INLINE_ARRAY,null),this._text_1=this.renderer.createText(this._el_0,"\n Response Schema\n ",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1],null),null},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView)},function(t,e){"use strict";e.styles=["[_nghost-%COMP%] {\n overflow: hidden;\n display: block; }\n\nheader[_ngcontent-%COMP%] {\n font-family: Montserrat;\n font-size: 0.929em;\n text-transform: uppercase;\n margin: 0;\n color: #9fb4be;\n text-transform: uppercase;\n font-weight: normal; }\n\n[_nghost-%COMP%] > tabs > ul li {\n font-family: Montserrat;\n font-size: 0.929em;\n border-radius: 2px;\n margin: 2px 0;\n padding: 2px 8px 3px 8px;\n color: #9fb4be;\n line-height: 16px; }\n [_nghost-%COMP%] > tabs > ul li:hover {\n color: #ffffff;\n background-color: rgba(255, 255, 255, 0.1); }\n [_nghost-%COMP%] > tabs > ul li.active {\n background-color: white;\n color: #263238; }\n\n[_nghost-%COMP%] tabs ul {\n padding-top: 10px; }"]},function(t,e,n){"use strict";var r=n(225),i=n(9),o=n(19),s=n(8),a=n(15),c=n(12),u=n(13),l=n(20),h=n(468),p=n(23),f=n(36),_=n(25),d=n(28),y=n(165),m=n(312),g=n(56),v=n(34),b=n(46),w=n(158),x=n(306),I=n(22),C=function(){function t(t){this._changed=!1,this.context=new r.ResponsesSamples(t),this._expr_0=i.UNINITIALIZED}return t.prototype.ngOnDetach=function(t,e,n){},t.prototype.ngOnDestroy=function(){},t.prototype.check_pointer=function(t,e,n){(n||s.checkBinding(e,this._expr_0,t))&&(this._changed=!0,this.context.pointer=t,this._expr_0=t)},t.prototype.ngDoCheck=function(t,e,n){var r=this._changed;return this._changed=!1,n||0===t.numberOfChecks&&this.context.ngOnInit(),r},t.prototype.checkHost=function(t,e,n,r){},t.prototype.handleEvent=function(t,e){var n=!0;return n},t.prototype.subscribe=function(t,e){this._eventHandler=e},t}();e.Wrapper_ResponsesSamples=C;var k=s.createRenderComponentType("",0,a.ViewEncapsulation.None,[],{}),T=function(t){function e(n,r,o,s){t.call(this,e,k,c.ViewType.HOST,n,r,o,s,i.ChangeDetectorStatus.CheckAlways)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.selectOrCreateRenderHostElement(this.renderer,"responses-samples",s.EMPTY_INLINE_ARRAY,t,null),this.compView_0=new O(this.viewUtils,this,0,this._el_0),this._ResponsesSamples_0_3=new C(this.injectorGet(l.SpecManager,this.parentIndex)),this.compView_0.create(this._ResponsesSamples_0_3.context),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0],null),new u.ComponentRef_(0,this,this._el_0,this._ResponsesSamples_0_3.context)},e.prototype.injectorGetInternal=function(t,e,n){return t===r.ResponsesSamples&&0===e?this._ResponsesSamples_0_3.context:n},e.prototype.detectChangesInternal=function(t){this._ResponsesSamples_0_3.ngDoCheck(this,this._el_0,t)&&this.compView_0.markAsCheckOnce(),this.compView_0.detectChanges(t)},e.prototype.destroyInternal=function(){this.compView_0.destroy()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView);e.ResponsesSamplesNgFactory=new u.ComponentFactory("responses-samples",T,r.ResponsesSamples);var E=[h.styles],S=s.createRenderComponentType("",0,a.ViewEncapsulation.Emulated,E,{}),O=function(t){function e(n,r,o,s){t.call(this,e,S,c.ViewType.COMPONENT,n,r,o,s,i.ChangeDetectorStatus.CheckOnce)}return __extends(e,t),e.prototype.createInternal=function(t){var e=this.renderer.createViewRoot(this.parentElement);return this._anchor_0=this.renderer.createTemplateAnchor(e,null),this._vc_0=new p.ViewContainer(0,null,this,this._anchor_0),this._TemplateRef_0_5=new _.TemplateRef_(this,0,this._anchor_0),this._NgIf_0_6=new f.Wrapper_NgIf(this._vc_0.vcRef,this._TemplateRef_0_5),this._text_1=this.renderer.createText(e,"\n",null),this._anchor_2=this.renderer.createTemplateAnchor(e,null),this._vc_2=new p.ViewContainer(2,null,this,this._anchor_2),this._TemplateRef_2_5=new _.TemplateRef_(this,2,this._anchor_2),this._NgIf_2_6=new f.Wrapper_NgIf(this._vc_2.vcRef,this._TemplateRef_2_5),this._text_3=this.renderer.createText(e,"\n",null),this.init(null,this.renderer.directRenderer?null:[this._anchor_0,this._text_1,this._anchor_2,this._text_3],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===_.TemplateRef&&0===e?this._TemplateRef_0_5:t===d.NgIf&&0===e?this._NgIf_0_6.context:t===_.TemplateRef&&2===e?this._TemplateRef_2_5:t===d.NgIf&&2===e?this._NgIf_2_6.context:n},e.prototype.detectChangesInternal=function(t){var e=this.context.data.responses.length;this._NgIf_0_6.check_ngIf(e,t,!1),this._NgIf_0_6.ngDoCheck(this,this._anchor_0,t);var n=this.context.data.responses.length;this._NgIf_2_6.check_ngIf(n,t,!1),this._NgIf_2_6.ngDoCheck(this,this._anchor_2,t),this._vc_0.detectChangesInNestedViews(t),this._vc_2.detectChangesInNestedViews(t)},e.prototype.destroyInternal=function(){this._vc_0.destroyNestedViews(),this._vc_2.destroyNestedViews()},e.prototype.createEmbeddedViewInternal=function(t){return 0==t?new R(this.viewUtils,this,0,this._anchor_0,this._vc_0):2==t?new A(this.viewUtils,this,2,this._anchor_2,this._vc_2):null},e}(o.AppView);e.View_ResponsesSamples0=O;var R=function(t){function e(n,r,o,s,a){t.call(this,e,S,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"header",s.EMPTY_INLINE_ARRAY,null),this._text_1=this.renderer.createText(this._el_0," Response samples ",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1],null),null},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView),A=function(t){function e(n,r,o,s,a){t.call(this,e,S,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"tabs",s.EMPTY_INLINE_ARRAY,null),this.compView_0=new m.View_Tabs0(this.viewUtils,this,0,this._el_0),this._Tabs_0_3=new m.Wrapper_Tabs(this.compView_0.ref),this._text_1=this.renderer.createText(null,"\n ",null),this._anchor_2=this.renderer.createTemplateAnchor(null,null),this._vc_2=new p.ViewContainer(2,0,this,this._anchor_2),this._TemplateRef_2_5=new _.TemplateRef_(this,2,this._anchor_2),this._NgFor_2_6=new g.Wrapper_NgFor(this._vc_2.vcRef,this._TemplateRef_2_5,this.parentView.injectorGet(v.IterableDiffers,this.parentIndex),this.parentView.ref),this._text_3=this.renderer.createText(null,"\n",null),this.compView_0.create(this._Tabs_0_3.context),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._anchor_2,this._text_3],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===_.TemplateRef&&2===e?this._TemplateRef_2_5:t===b.NgFor&&2===e?this._NgFor_2_6.context:t===y.Tabs&&0<=e&&e<=3?this._Tabs_0_3.context:n},e.prototype.detectChangesInternal=function(t){this._Tabs_0_3.ngDoCheck(this,this._el_0,t)&&this.compView_0.markAsCheckOnce();var e=this.parentView.context.data.responses;this._NgFor_2_6.check_ngForOf(e,t,!1),this._NgFor_2_6.ngDoCheck(this,this._anchor_2,t),this._vc_2.detectChangesInNestedViews(t),this.compView_0.detectChanges(t)},e.prototype.destroyInternal=function(){this._vc_2.destroyNestedViews(),this.compView_0.destroy(),this._Tabs_0_3.ngOnDestroy()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e.prototype.visitProjectableNodesInternal=function(t,e,n,r){0==t&&0==e&&(n(this._text_1,r),n(this._vc_2.nativeElement,r),this._vc_2.visitNestedViewRootNodes(n,r),n(this._text_3,r))},e.prototype.createEmbeddedViewInternal=function(t){return 2==t?new N(this.viewUtils,this,2,this._anchor_2,this._vc_2):null},e}(o.AppView),N=function(t){function e(n,r,o,s,a){t.call(this,e,S,c.ViewType.EMBEDDED,n,r,o,s,i.ChangeDetectorStatus.CheckAlways,a)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"tab",s.EMPTY_INLINE_ARRAY,null),this.compView_0=new m.View_Tab0(this.viewUtils,this,0,this._el_0),this._Tab_0_3=new m.Wrapper_Tab(this.parentView._Tabs_0_3.context),this._text_1=this.renderer.createText(null,"\n ",null),this._el_2=s.createRenderElement(this.renderer,null,"schema-sample",s.EMPTY_INLINE_ARRAY,null),this.compView_2=new x.View_SchemaSample0(this.viewUtils,this,2,this._el_2),this._SchemaSample_2_3=new x.Wrapper_SchemaSample(this.parentView.parentView.injectorGet(l.SpecManager,this.parentView.parentIndex),new I.ElementRef(this._el_2)),this.compView_2.create(this._SchemaSample_2_3.context),this._text_3=this.renderer.createText(null,"\n ",null),this.compView_0.create(this._Tab_0_3.context),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._el_2,this._text_3],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===w.SchemaSample&&2===e?this._SchemaSample_2_3.context:t===y.Tab&&0<=e&&e<=3?this._Tab_0_3.context:n},e.prototype.detectChangesInternal=function(t){var e=s.inlineInterpolate(2,"",this.context.$implicit.code," ",this.context.$implicit.description,""); +this._Tab_0_3.check_tabTitle(e,t,!1);var n=this.context.$implicit.type;this._Tab_0_3.check_tabStatus(n,t,!1),this._Tab_0_3.ngDoCheck(this,this._el_0,t);var r=this.context.$implicit.pointer;this._SchemaSample_2_3.check_pointer(r,t,!1),this._SchemaSample_2_3.ngDoCheck(this,this._el_2,t)&&this.compView_2.markAsCheckOnce(),this.compView_0.detectChanges(t),this.compView_2.detectChanges(t)},e.prototype.destroyInternal=function(){this.compView_0.destroy(),this.compView_2.destroy()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e.prototype.visitProjectableNodesInternal=function(t,e,n,r){0==t&&0==e&&(n(this._text_1,r),n(this._el_2,r),n(this._text_3,r))},e}(o.AppView)},function(t,e){"use strict";e.styles=['@charset "UTF-8";\n[_nghost-%COMP%] {\n display: block; }\n\npre[_ngcontent-%COMP%] {\n background-color: transparent;\n padding: 0;\n margin: 0;\n clear: both;\n position: relative; }\n\n.action-buttons[_ngcontent-%COMP%] {\n opacity: 0;\n transition: opacity 0.3s ease;\n transform: translateY(100%);\n z-index: 3;\n position: relative;\n height: 2em;\n line-height: 2em;\n padding-right: 10px;\n text-align: right;\n margin-top: -1em; }\n .action-buttons[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] > a[_ngcontent-%COMP%] {\n padding: 2px 10px;\n color: #ffffff;\n cursor: pointer; }\n .action-buttons[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] > a[_ngcontent-%COMP%]:hover {\n background-color: #455b66; }\n\n.snippet[_ngcontent-%COMP%]:hover .action-buttons[_ngcontent-%COMP%] {\n opacity: 1; }\n\n[_nghost-%COMP%] .type-null {\n color: gray; }\n\n[_nghost-%COMP%] .type-boolean {\n color: firebrick; }\n\n[_nghost-%COMP%] .type-number {\n color: #4A8BB3; }\n\n[_nghost-%COMP%] .type-string {\n color: #66B16E; }\n\n[_nghost-%COMP%] .callback-function {\n color: gray; }\n\n[_nghost-%COMP%] .collapser:after {\n content: "-";\n cursor: pointer; }\n\n[_nghost-%COMP%] .collapsed > .collapser:after {\n content: "+";\n cursor: pointer; }\n\n[_nghost-%COMP%] .ellipsis:after {\n content: " … "; }\n\n[_nghost-%COMP%] .collapsible {\n margin-left: 2em; }\n\n[_nghost-%COMP%] .hoverable {\n padding-top: 1px;\n padding-bottom: 1px;\n padding-left: 2px;\n padding-right: 2px;\n border-radius: 2px; }\n\n[_nghost-%COMP%] .hovered {\n background-color: #ebeef9; }\n\n[_nghost-%COMP%] .collapser {\n padding-right: 6px;\n padding-left: 6px; }\n\n[_nghost-%COMP%] .redoc-json {\n overflow-x: auto;\n padding: 20px;\n border-radius: 4px;\n background-color: #222d32;\n margin-bottom: 36px; }\n\n[_nghost-%COMP%] ul, [_nghost-%COMP%] .redoc-json ul {\n list-style-type: none;\n padding: 0px;\n margin: 0px 0px 0px 26px; }\n\n[_nghost-%COMP%] li {\n position: relative;\n display: block; }\n\n[_nghost-%COMP%] .hoverable {\n transition: background-color .2s ease-out 0s;\n -webkit-transition: background-color .2s ease-out 0s;\n display: inline-block; }\n\n[_nghost-%COMP%] .hovered {\n transition-delay: .2s;\n -webkit-transition-delay: .2s; }\n\n[_nghost-%COMP%] .selected {\n outline-style: solid;\n outline-width: 1px;\n outline-style: dotted; }\n\n[_nghost-%COMP%] .collapsed > .collapsible {\n display: none; }\n\n[_nghost-%COMP%] .ellipsis {\n display: none; }\n\n[_nghost-%COMP%] .collapsed > .ellipsis {\n display: inherit; }\n\n[_nghost-%COMP%] .collapser {\n position: absolute;\n top: 1px;\n left: -1.5em;\n cursor: default;\n user-select: none;\n -webkit-user-select: none; }\n\n[_nghost-%COMP%] .redoc-json > .collapser {\n display: none; }']},function(t,e){"use strict";e.styles=["[_nghost-%COMP%] {\n display: block; }\n\n.security-definition[_ngcontent-%COMP%]:not(:last-of-type) {\n border-bottom: 1px solid rgba(38, 50, 56, 0.3);\n padding-bottom: 20px; }\n\n[_nghost-%COMP%] h2[_ngcontent-%COMP%] {\n padding-top: 40px; }\n\nh3[_ngcontent-%COMP%] {\n margin: 1em 0;\n font-size: 1em; }\n\n[_nghost-%COMP%] .security-scopes-details[_ngcontent-%COMP%], [_nghost-%COMP%] .security-details[_ngcontent-%COMP%] {\n margin-top: 20px; }\n\ntable.details[_ngcontent-%COMP%] th[_ngcontent-%COMP%], table.details[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n font-weight: bold;\n width: 200px;\n max-width: 50%; }\n\ntable.details[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n text-align: left;\n padding: 6px;\n text-transform: capitalize;\n font-weight: normal; }"]},function(t,e,n){"use strict";var r=n(226),i=n(19),o=n(8),s=n(15),a=n(12),c=n(9),u=n(13),l=n(20),h=n(471),p=n(23),f=n(56),_=n(79),d=n(25),y=n(34),m=n(54),g=n(46),v=n(36),b=n(28),w=n(39),x=function(){function t(t){this._changed=!1,this.context=new r.SecurityDefinitions(t)}return t.prototype.ngOnDetach=function(t,e,n){},t.prototype.ngOnDestroy=function(){},t.prototype.ngDoCheck=function(t,e,n){var r=this._changed;return this._changed=!1,n||0===t.numberOfChecks&&this.context.ngOnInit(),r},t.prototype.checkHost=function(t,e,n,r){},t.prototype.handleEvent=function(t,e){var n=!0;return n},t.prototype.subscribe=function(t,e){this._eventHandler=e},t}();e.Wrapper_SecurityDefinitions=x;var I=o.createRenderComponentType("",0,s.ViewEncapsulation.None,[],{}),C=function(t){function e(n,r,i,o){t.call(this,e,I,a.ViewType.HOST,n,r,i,o,c.ChangeDetectorStatus.CheckAlways)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=o.selectOrCreateRenderHostElement(this.renderer,"security-definitions",o.EMPTY_INLINE_ARRAY,t,null),this.compView_0=new E(this.viewUtils,this,0,this._el_0),this._SecurityDefinitions_0_3=new x(this.injectorGet(l.SpecManager,this.parentIndex)),this.compView_0.create(this._SecurityDefinitions_0_3.context),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0],null),new u.ComponentRef_(0,this,this._el_0,this._SecurityDefinitions_0_3.context)},e.prototype.injectorGetInternal=function(t,e,n){return t===r.SecurityDefinitions&&0===e?this._SecurityDefinitions_0_3.context:n},e.prototype.detectChangesInternal=function(t){this._SecurityDefinitions_0_3.ngDoCheck(this,this._el_0,t)&&this.compView_0.markAsCheckOnce(),this.compView_0.detectChanges(t)},e.prototype.destroyInternal=function(){this.compView_0.destroy()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(i.AppView);e.SecurityDefinitionsNgFactory=new u.ComponentFactory("security-definitions",C,r.SecurityDefinitions);var k=[h.styles],T=o.createRenderComponentType("",0,s.ViewEncapsulation.Emulated,k,{}),E=function(t){function e(n,r,i,o){t.call(this,e,T,a.ViewType.COMPONENT,n,r,i,o,c.ChangeDetectorStatus.CheckOnce)}return __extends(e,t),e.prototype.createInternal=function(t){var e=this.renderer.createViewRoot(this.parentElement);return this._anchor_0=this.renderer.createTemplateAnchor(e,null),this._vc_0=new p.ViewContainer(0,null,this,this._anchor_0),this._TemplateRef_0_5=new d.TemplateRef_(this,0,this._anchor_0),this._NgFor_0_6=new f.Wrapper_NgFor(this._vc_0.vcRef,this._TemplateRef_0_5,this.parentView.injectorGet(y.IterableDiffers,this.parentIndex),this.ref),this._text_1=this.renderer.createText(e,"\n",null),this._pipe_marked_0=new _.MarkedPipe(this.parentView.injectorGet(m.DomSanitizer,this.parentIndex)),this._pipe_keys_1=new _.KeysPipe,this.init(null,this.renderer.directRenderer?null:[this._anchor_0,this._text_1],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===d.TemplateRef&&0===e?this._TemplateRef_0_5:t===g.NgFor&&0===e?this._NgFor_0_6.context:n},e.prototype.detectChangesInternal=function(t){var e=this.context.defs;this._NgFor_0_6.check_ngForOf(e,t,!1),this._NgFor_0_6.ngDoCheck(this,this._anchor_0,t),this._vc_0.detectChangesInNestedViews(t)},e.prototype.destroyInternal=function(){this._vc_0.destroyNestedViews()},e.prototype.createEmbeddedViewInternal=function(t){return 0==t?new S(this.viewUtils,this,0,this._anchor_0,this._vc_0):null},e}(i.AppView);e.View_SecurityDefinitions0=E;var S=function(t){function e(n,r,i,o,s){t.call(this,e,T,a.ViewType.EMBEDDED,n,r,i,o,c.ChangeDetectorStatus.CheckAlways,s),this._expr_37=c.UNINITIALIZED,this._expr_38=c.UNINITIALIZED,this._expr_39=c.UNINITIALIZED,this._expr_40=c.UNINITIALIZED,this._expr_42=c.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=o.createRenderElement(this.renderer,null,"div",new o.InlineArray2(2,"class","security-definition"),null),this._text_1=this.renderer.createText(this._el_0,"\n ",null),this._el_2=o.createRenderElement(this.renderer,this._el_0,"h2",new o.InlineArray2(2,"class","sharable-header"),null),this._text_3=this.renderer.createText(this._el_2,"\n ",null),this._el_4=o.createRenderElement(this.renderer,this._el_2,"a",new o.InlineArray2(2,"class","share-link"),null),this._text_5=this.renderer.createText(this._el_2,"",null),this._text_6=this.renderer.createText(this._el_0,"\n ",null),this._el_7=o.createRenderElement(this.renderer,this._el_0,"div",o.EMPTY_INLINE_ARRAY,null),this._text_8=this.renderer.createText(this._el_0,"\n ",null),this._el_9=o.createRenderElement(this.renderer,this._el_0,"table",new o.InlineArray2(2,"class","security-details"),null),this._text_10=this.renderer.createText(this._el_9,"\n ",null),this._el_11=o.createRenderElement(this.renderer,this._el_9,"tbody",o.EMPTY_INLINE_ARRAY,null),this._el_12=o.createRenderElement(this.renderer,this._el_11,"tr",o.EMPTY_INLINE_ARRAY,null),this._text_13=this.renderer.createText(this._el_12,"\n ",null),this._el_14=o.createRenderElement(this.renderer,this._el_12,"th",o.EMPTY_INLINE_ARRAY,null),this._text_15=this.renderer.createText(this._el_14," Security scheme type: ",null),this._text_16=this.renderer.createText(this._el_12,"\n ",null),this._el_17=o.createRenderElement(this.renderer,this._el_12,"td",o.EMPTY_INLINE_ARRAY,null),this._text_18=this.renderer.createText(this._el_17,"",null),this._text_19=this.renderer.createText(this._el_12,"\n ",null),this._text_20=this.renderer.createText(this._el_11,"\n ",null),this._anchor_21=this.renderer.createTemplateAnchor(this._el_11,null),this._vc_21=new p.ViewContainer(21,11,this,this._anchor_21),this._TemplateRef_21_5=new d.TemplateRef_(this,21,this._anchor_21),this._NgIf_21_6=new v.Wrapper_NgIf(this._vc_21.vcRef,this._TemplateRef_21_5),this._text_22=this.renderer.createText(this._el_11,"\n ",null),this._anchor_23=this.renderer.createTemplateAnchor(this._el_11,null),this._vc_23=new p.ViewContainer(23,11,this,this._anchor_23),this._TemplateRef_23_5=new d.TemplateRef_(this,23,this._anchor_23),this._NgIf_23_6=new v.Wrapper_NgIf(this._vc_23.vcRef,this._TemplateRef_23_5),this._text_24=this.renderer.createText(this._el_11,"\n ",null),this._text_25=this.renderer.createText(this._el_0,"\n ",null),this._anchor_26=this.renderer.createTemplateAnchor(this._el_0,null),this._vc_26=new p.ViewContainer(26,0,this,this._anchor_26),this._TemplateRef_26_5=new d.TemplateRef_(this,26,this._anchor_26),this._NgIf_26_6=new v.Wrapper_NgIf(this._vc_26.vcRef,this._TemplateRef_26_5),this._text_27=this.renderer.createText(this._el_0,"\n",null),this._pipe_marked_0_0=o.pureProxy1(this.parentView._pipe_marked_0.transform.bind(this.parentView._pipe_marked_0)),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._el_2,this._text_3,this._el_4,this._text_5,this._text_6,this._el_7,this._text_8,this._el_9,this._text_10,this._el_11,this._el_12,this._text_13,this._el_14,this._text_15,this._text_16,this._el_17,this._text_18,this._text_19,this._text_20,this._anchor_21,this._text_22,this._anchor_23,this._text_24,this._text_25,this._anchor_26,this._text_27],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===d.TemplateRef&&21===e?this._TemplateRef_21_5:t===b.NgIf&&21===e?this._NgIf_21_6.context:t===d.TemplateRef&&23===e?this._TemplateRef_23_5:t===b.NgIf&&23===e?this._NgIf_23_6.context:t===d.TemplateRef&&26===e?this._TemplateRef_26_5:t===b.NgIf&&26===e?this._NgIf_26_6.context:n},e.prototype.detectChangesInternal=function(t){var e=new c.ValueUnwrapper,n="apiKey"===this.context.$implicit.details.type;this._NgIf_21_6.check_ngIf(n,t,!1),this._NgIf_21_6.ngDoCheck(this,this._anchor_21,t);var r="oauth2"===this.context.$implicit.details.type;this._NgIf_23_6.check_ngIf(r,t,!1),this._NgIf_23_6.ngDoCheck(this,this._anchor_23,t);var i="oauth2"===this.context.$implicit.details.type;this._NgIf_26_6.check_ngIf(i,t,!1),this._NgIf_26_6.ngDoCheck(this,this._anchor_26,t),this._vc_21.detectChangesInNestedViews(t),this._vc_23.detectChangesInNestedViews(t),this._vc_26.detectChangesInNestedViews(t);var s=o.inlineInterpolate(1,"section/Authentication/",this.context.$implicit.name,"");o.checkBinding(t,this._expr_37,s)&&(this.renderer.setElementAttribute(this._el_2,"section",null==s?null:s.toString()),this._expr_37=s);var a=o.inlineInterpolate(1,"#section/Authentication/",this.context.$implicit.name,"");o.checkBinding(t,this._expr_38,a)&&(this.renderer.setElementProperty(this._el_4,"href",this.viewUtils.sanitizer.sanitize(w.SecurityContext.URL,a)),this._expr_38=a);var u=o.inlineInterpolate(1,"",this.context.$implicit.name,"");o.checkBinding(t,this._expr_39,u)&&(this.renderer.setText(this._text_5,u),this._expr_39=u),e.reset();var l=e.unwrap(o.castByValue(this._pipe_marked_0_0,this.parentView._pipe_marked_0.transform)(this.context.$implicit.details.description));(e.hasWrappedValue||o.checkBinding(t,this._expr_40,l))&&(this.renderer.setElementProperty(this._el_7,"innerHTML",this.viewUtils.sanitizer.sanitize(w.SecurityContext.HTML,l)),this._expr_40=l);var h=o.inlineInterpolate(1," ",this.context.$implicit.details._displayType," ");o.checkBinding(t,this._expr_42,h)&&(this.renderer.setText(this._text_18,h),this._expr_42=h)},e.prototype.destroyInternal=function(){this._vc_21.destroyNestedViews(),this._vc_23.destroyNestedViews(),this._vc_26.destroyNestedViews()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e.prototype.createEmbeddedViewInternal=function(t){return 21==t?new O(this.viewUtils,this,21,this._anchor_21,this._vc_21):23==t?new R(this.viewUtils,this,23,this._anchor_23,this._vc_23):26==t?new P(this.viewUtils,this,26,this._anchor_26,this._vc_26):null},e}(i.AppView),O=function(t){function e(n,r,i,o,s){t.call(this,e,T,a.ViewType.EMBEDDED,n,r,i,o,c.ChangeDetectorStatus.CheckAlways,s),this._expr_8=c.UNINITIALIZED,this._expr_9=c.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=o.createRenderElement(this.renderer,null,"tr",o.EMPTY_INLINE_ARRAY,null),this._text_1=this.renderer.createText(this._el_0,"\n ",null),this._el_2=o.createRenderElement(this.renderer,this._el_0,"th",o.EMPTY_INLINE_ARRAY,null),this._text_3=this.renderer.createText(this._el_2,"",null),this._text_4=this.renderer.createText(this._el_0,"\n ",null),this._el_5=o.createRenderElement(this.renderer,this._el_0,"td",o.EMPTY_INLINE_ARRAY,null),this._text_6=this.renderer.createText(this._el_5,"",null),this._text_7=this.renderer.createText(this._el_0,"\n ",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._el_2,this._text_3,this._text_4,this._el_5,this._text_6,this._text_7],null),null},e.prototype.detectChangesInternal=function(t){var e=o.inlineInterpolate(1," ",this.parentView.context.$implicit.details.in," parameter name:");o.checkBinding(t,this._expr_8,e)&&(this.renderer.setText(this._text_3,e),this._expr_8=e);var n=o.inlineInterpolate(1," ",this.parentView.context.$implicit.details.name," ");o.checkBinding(t,this._expr_9,n)&&(this.renderer.setText(this._text_6,n),this._expr_9=n)},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(i.AppView),R=function(t){function e(n,r,i,o,s){t.call(this,e,T,a.ViewType.EMBEDDED,n,r,i,o,c.ChangeDetectorStatus.CheckAlways,s),this._expr_20=c.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._text_0=this.renderer.createText(null,"\n ",null),this._el_1=o.createRenderElement(this.renderer,null,"tr",o.EMPTY_INLINE_ARRAY,null),this._text_2=this.renderer.createText(this._el_1,"\n ",null),this._el_3=o.createRenderElement(this.renderer,this._el_1,"th",o.EMPTY_INLINE_ARRAY,null),this._text_4=this.renderer.createText(this._el_3," OAuth2 Flow",null),this._text_5=this.renderer.createText(this._el_1,"\n ",null),this._el_6=o.createRenderElement(this.renderer,this._el_1,"td",o.EMPTY_INLINE_ARRAY,null),this._text_7=this.renderer.createText(this._el_6,"",null),this._text_8=this.renderer.createText(this._el_1,"\n ",null),this._text_9=this.renderer.createText(null,"\n ",null),this._anchor_10=this.renderer.createTemplateAnchor(null,null),this._vc_10=new p.ViewContainer(10,null,this,this._anchor_10),this._TemplateRef_10_5=new d.TemplateRef_(this,10,this._anchor_10),this._NgIf_10_6=new v.Wrapper_NgIf(this._vc_10.vcRef,this._TemplateRef_10_5),this._text_11=this.renderer.createText(null,"\n ",null),this._anchor_12=this.renderer.createTemplateAnchor(null,null),this._vc_12=new p.ViewContainer(12,null,this,this._anchor_12),this._TemplateRef_12_5=new d.TemplateRef_(this,12,this._anchor_12),this._NgIf_12_6=new v.Wrapper_NgIf(this._vc_12.vcRef,this._TemplateRef_12_5),this._text_13=this.renderer.createText(null,"\n ",null),this.init(this._text_13,this.renderer.directRenderer?null:[this._text_0,this._el_1,this._text_2,this._el_3,this._text_4,this._text_5,this._el_6,this._text_7,this._text_8,this._text_9,this._anchor_10,this._text_11,this._anchor_12,this._text_13],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===d.TemplateRef&&10===e?this._TemplateRef_10_5:t===b.NgIf&&10===e?this._NgIf_10_6.context:t===d.TemplateRef&&12===e?this._TemplateRef_12_5:t===b.NgIf&&12===e?this._NgIf_12_6.context:n},e.prototype.detectChangesInternal=function(t){var e="implicit"===this.parentView.context.$implicit.details.flow||"accessCode"===this.parentView.context.$implicit.details.flow;this._NgIf_10_6.check_ngIf(e,t,!1),this._NgIf_10_6.ngDoCheck(this,this._anchor_10,t);var n="implicit"!==this.parentView.context.$implicit.details.flow;this._NgIf_12_6.check_ngIf(n,t,!1),this._NgIf_12_6.ngDoCheck(this,this._anchor_12,t),this._vc_10.detectChangesInNestedViews(t),this._vc_12.detectChangesInNestedViews(t);var r=o.inlineInterpolate(1," ",this.parentView.context.$implicit.details.flow," ");o.checkBinding(t,this._expr_20,r)&&(this.renderer.setText(this._text_7,r),this._expr_20=r)},e.prototype.destroyInternal=function(){this._vc_10.destroyNestedViews(),this._vc_12.destroyNestedViews()},e.prototype.visitRootNodesInternal=function(t,e){t(this._text_0,e),t(this._el_1,e),t(this._text_9,e),t(this._vc_10.nativeElement,e),this._vc_10.visitNestedViewRootNodes(t,e),t(this._text_11,e),t(this._vc_12.nativeElement,e),this._vc_12.visitNestedViewRootNodes(t,e),t(this._text_13,e)},e.prototype.createEmbeddedViewInternal=function(t){return 10==t?new A(this.viewUtils,this,10,this._anchor_10,this._vc_10):12==t?new N(this.viewUtils,this,12,this._anchor_12,this._vc_12):null},e}(i.AppView),A=function(t){function e(n,r,i,o,s){t.call(this,e,T,a.ViewType.EMBEDDED,n,r,i,o,c.ChangeDetectorStatus.CheckAlways,s),this._expr_8=c.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=o.createRenderElement(this.renderer,null,"tr",o.EMPTY_INLINE_ARRAY,null),this._text_1=this.renderer.createText(this._el_0,"\n ",null),this._el_2=o.createRenderElement(this.renderer,this._el_0,"th",o.EMPTY_INLINE_ARRAY,null),this._text_3=this.renderer.createText(this._el_2," Authorization URL ",null),this._text_4=this.renderer.createText(this._el_0,"\n ",null),this._el_5=o.createRenderElement(this.renderer,this._el_0,"td",o.EMPTY_INLINE_ARRAY,null),this._text_6=this.renderer.createText(this._el_5,"",null),this._text_7=this.renderer.createText(this._el_0,"\n ",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._el_2,this._text_3,this._text_4,this._el_5,this._text_6,this._text_7],null),null},e.prototype.detectChangesInternal=function(t){var e=o.inlineInterpolate(1," ",this.parentView.parentView.context.$implicit.details.authorizationUrl," ");o.checkBinding(t,this._expr_8,e)&&(this.renderer.setText(this._text_6,e),this._expr_8=e)},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(i.AppView),N=function(t){function e(n,r,i,o,s){t.call(this,e,T,a.ViewType.EMBEDDED,n,r,i,o,c.ChangeDetectorStatus.CheckAlways,s),this._expr_8=c.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=o.createRenderElement(this.renderer,null,"tr",o.EMPTY_INLINE_ARRAY,null),this._text_1=this.renderer.createText(this._el_0,"\n ",null),this._el_2=o.createRenderElement(this.renderer,this._el_0,"th",o.EMPTY_INLINE_ARRAY,null),this._text_3=this.renderer.createText(this._el_2," Token URL ",null),this._text_4=this.renderer.createText(this._el_0,"\n ",null),this._el_5=o.createRenderElement(this.renderer,this._el_0,"td",o.EMPTY_INLINE_ARRAY,null),this._text_6=this.renderer.createText(this._el_5,"",null),this._text_7=this.renderer.createText(this._el_0,"\n ",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._el_2,this._text_3,this._text_4,this._el_5,this._text_6,this._text_7],null),null},e.prototype.detectChangesInternal=function(t){var e=o.inlineInterpolate(1," ",this.parentView.parentView.context.$implicit.details.tokenUrl," ");o.checkBinding(t,this._expr_8,e)&&(this.renderer.setText(this._text_6,e),this._expr_8=e)},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(i.AppView),P=function(t){function e(n,r,i,o,s){t.call(this,e,T,a.ViewType.EMBEDDED,n,r,i,o,c.ChangeDetectorStatus.CheckAlways,s)}return __extends(e,t),e.prototype.createInternal=function(t){return this._text_0=this.renderer.createText(null,"\n ",null),this._el_1=o.createRenderElement(this.renderer,null,"h3",o.EMPTY_INLINE_ARRAY,null),this._text_2=this.renderer.createText(this._el_1," OAuth2 Scopes ",null),this._text_3=this.renderer.createText(null,"\n ",null),this._el_4=o.createRenderElement(this.renderer,null,"table",new o.InlineArray2(2,"class","security-scopes-details"),null),this._text_5=this.renderer.createText(this._el_4,"\n ",null),this._el_6=o.createRenderElement(this.renderer,this._el_4,"tbody",o.EMPTY_INLINE_ARRAY,null),this._anchor_7=this.renderer.createTemplateAnchor(this._el_6,null),this._vc_7=new p.ViewContainer(7,6,this,this._anchor_7),this._TemplateRef_7_5=new d.TemplateRef_(this,7,this._anchor_7),this._NgFor_7_6=new f.Wrapper_NgFor(this._vc_7.vcRef,this._TemplateRef_7_5,this.parentView.parentView.injectorGet(y.IterableDiffers,this.parentView.parentIndex),this.parentView.parentView.ref),this._text_8=this.renderer.createText(this._el_6,"\n ",null),this._text_9=this.renderer.createText(null,"\n ",null),this._pipe_keys_1_0=o.pureProxy1(this.parentView.parentView._pipe_keys_1.transform.bind(this.parentView.parentView._pipe_keys_1)),this.init(this._text_9,this.renderer.directRenderer?null:[this._text_0,this._el_1,this._text_2,this._text_3,this._el_4,this._text_5,this._el_6,this._anchor_7,this._text_8,this._text_9],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===d.TemplateRef&&7===e?this._TemplateRef_7_5:t===g.NgFor&&7===e?this._NgFor_7_6.context:n},e.prototype.detectChangesInternal=function(t){var e=new c.ValueUnwrapper;e.reset();var n=e.unwrap(o.castByValue(this._pipe_keys_1_0,this.parentView.parentView._pipe_keys_1.transform)(this.parentView.context.$implicit.details.scopes));this._NgFor_7_6.check_ngForOf(n,t,e.hasWrappedValue),this._NgFor_7_6.ngDoCheck(this,this._anchor_7,t),this._vc_7.detectChangesInNestedViews(t)},e.prototype.destroyInternal=function(){this._vc_7.destroyNestedViews()},e.prototype.visitRootNodesInternal=function(t,e){t(this._text_0,e),t(this._el_1,e),t(this._text_3,e),t(this._el_4,e),t(this._text_9,e)},e.prototype.createEmbeddedViewInternal=function(t){return 7==t?new M(this.viewUtils,this,7,this._anchor_7,this._vc_7):null},e}(i.AppView),M=function(t){function e(n,r,i,o,s){t.call(this,e,T,a.ViewType.EMBEDDED,n,r,i,o,c.ChangeDetectorStatus.CheckAlways,s),this._expr_8=c.UNINITIALIZED,this._expr_9=c.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=o.createRenderElement(this.renderer,null,"tr",o.EMPTY_INLINE_ARRAY,null),this._text_1=this.renderer.createText(this._el_0,"\n ",null),this._el_2=o.createRenderElement(this.renderer,this._el_0,"th",o.EMPTY_INLINE_ARRAY,null),this._text_3=this.renderer.createText(this._el_2,"",null),this._text_4=this.renderer.createText(this._el_0,"\n ",null),this._el_5=o.createRenderElement(this.renderer,this._el_0,"td",o.EMPTY_INLINE_ARRAY,null),this._text_6=this.renderer.createText(this._el_5,"",null),this._text_7=this.renderer.createText(this._el_0,"\n ",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._el_2,this._text_3,this._text_4,this._el_5,this._text_6,this._text_7],null),null},e.prototype.detectChangesInternal=function(t){var e=o.inlineInterpolate(1," ",this.context.$implicit," ");o.checkBinding(t,this._expr_8,e)&&(this.renderer.setText(this._text_3,e),this._expr_8=e);var n=o.inlineInterpolate(1," ",this.parentView.parentView.context.$implicit.details.scopes[this.context.$implicit]," ");o.checkBinding(t,this._expr_9,n)&&(this.renderer.setText(this._text_6,n),this._expr_9=n)},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(i.AppView)},function(t,e){"use strict";e.styles=['[_nghost-%COMP%] {\n display: block;\n box-sizing: border-box; }\n\n.menu-header[_ngcontent-%COMP%] {\n text-transform: uppercase;\n color: #0033a0;\n padding: 0 20px;\n margin: 10px 0; }\n\n.menu-cat-header[_ngcontent-%COMP%] {\n font-size: 0.929em;\n font-family: Montserrat, sans-serif;\n font-weight: 300;\n cursor: pointer;\n color: rgba(38, 50, 56, 0.6);\n text-transform: uppercase;\n background-color: #fafafa;\n -webkit-transition: all .15s ease-in-out;\n -moz-transition: all .15s ease-in-out;\n -ms-transition: all .15s ease-in-out;\n -o-transition: all .15s ease-in-out;\n transition: all .15s ease-in-out;\n display: block;\n padding: 12.5px 20px; }\n .menu-cat-header[_ngcontent-%COMP%]:hover, .menu-cat-header.active[_ngcontent-%COMP%] {\n color: #0033a0;\n background-color: #f0f0f0; }\n .menu-cat-header[hidden][_ngcontent-%COMP%] {\n display: none; }\n .menu-cat-header.disabled[_ngcontent-%COMP%], .menu-cat-header.disabled[_ngcontent-%COMP%]:hover {\n cursor: default;\n color: #bdccd3; }\n\n.menu-subitems[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 0.929em;\n line-height: 1.2em;\n font-weight: 300;\n color: rgba(38, 50, 56, 0.9);\n padding: 0;\n overflow: hidden; }\n .menu-subitems.active[_ngcontent-%COMP%] {\n height: auto; }\n .menu-subitems[_ngcontent-%COMP%] li[_ngcontent-%COMP%] {\n -webkit-transition: all .15s ease-in-out;\n -moz-transition: all .15s ease-in-out;\n -ms-transition: all .15s ease-in-out;\n -o-transition: all .15s ease-in-out;\n transition: all .15s ease-in-out;\n list-style: none inside none;\n cursor: pointer;\n background-color: #f0f0f0;\n padding: 10px 40px;\n padding-left: 40px;\n overflow: hidden;\n text-overflow: ellipsis; }\n .menu-subitems[_ngcontent-%COMP%] li[_ngcontent-%COMP%]:hover, .menu-subitems[_ngcontent-%COMP%] li.active[_ngcontent-%COMP%] {\n background: #e1e1e1; }\n .menu-subitems.disabled[_ngcontent-%COMP%], .menu-subitems.disabled[_ngcontent-%COMP%]:hover {\n cursor: default;\n color: #bdccd3; }\n\n.mobile-nav[_ngcontent-%COMP%] {\n display: none;\n height: 3em;\n line-height: 3em;\n box-sizing: border-box;\n border-bottom: 1px solid #ccc;\n cursor: pointer; }\n .mobile-nav[_ngcontent-%COMP%]:after {\n content: "";\n display: inline-block;\n width: 3em;\n height: 3em;\n background: url(\'data:image/svg+xml;utf8,\');\n background-size: 70%;\n background-repeat: no-repeat;\n background-position: center;\n float: right;\n vertical-align: middle; }\n .mobile-nav[_ngcontent-%COMP%] .menu-header[_ngcontent-%COMP%] {\n padding: 0 10px 0 20px;\n font-size: 0.95em; }\n @media (max-width: 550px) {\n .mobile-nav[_ngcontent-%COMP%] .menu-header[_ngcontent-%COMP%] {\n display: none; } }\n\n@media (max-width: 1000px) {\n .mobile-nav[_ngcontent-%COMP%] {\n display: block; }\n #resources-nav[_ngcontent-%COMP%] {\n height: 0;\n overflow-y: auto;\n transition: all 0.3s ease; }\n #resources-nav[_ngcontent-%COMP%] .menu-header[_ngcontent-%COMP%] {\n display: none; }\n .menu-subitems[_ngcontent-%COMP%] {\n height: auto; } }\n\n.selected-tag[_ngcontent-%COMP%] {\n text-transform: capitalize; }\n\n.selected-endpoint[_ngcontent-%COMP%]:before {\n content: "/";\n padding: 0 2px;\n color: #ccc; }\n\n.selected-endpoint[_ngcontent-%COMP%]:empty:before {\n display: none; }\n\n.selected-item-info[_ngcontent-%COMP%] {\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n box-sizing: border-box;\n max-width: 350px; }\n @media (max-width: 550px) {\n .selected-item-info[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 0 20px;\n max-width: 80%;\n max-width: calc(100% - 4em); } }']},function(t,e,n){"use strict";function r(t,e,n,r){var i=t.animationContext.getAnimationPlayers(e,"itemAnimation","void"==r),o={},s=null,a=0,c=j["*"],u=j[n];null==u&&(u=c);var l=j[r];return null==l&&(l=c),null==s&&("collapsed"==n&&"expanded"==r||"expanded"==n&&"collapsed"==r)&&(s=new g.AnimationSequencePlayer([t.renderer.animate(e,new v.AnimationStyles(b.collectAndResolveStyles(o,[u])),b.balanceAnimationKeyframes(o,l,[new w.AnimationKeyframe(0,new v.AnimationStyles(b.collectAndResolveStyles(o,[{}]))),new w.AnimationKeyframe(1,new v.AnimationStyles(b.collectAndResolveStyles(o,[{}])))]),200,0,"ease",i)]),a=200),null==s&&(s=new x.NoOpAnimationPlayer),s.onDone(function(){s.destroy(),b.renderStyles(e,t.renderer,b.prepareFinalAnimationStyles(u,l))}),new g.AnimationSequencePlayer(i).destroy(),b.renderStyles(e,t.renderer,b.clearStyles(u)),t.animationContext.queueAnimation(e,"itemAnimation",s),new m.AnimationTransition(s,n,r,a)}var i=n(227),o=n(19),s=n(8),a=n(15),c=n(12),u=n(9),l=n(13),h=n(20),p=n(22),f=n(67),_=n(162),d=n(35),y=n(473),m=n(281),g=n(195),v=n(280),b=n(279),w=n(277),x=n(143),I=n(23),C=n(56),k=n(25),T=n(34),E=n(46),S=n(106),O=n(36),R=n(59),A=n(74),N=n(28),P=function(){function t(t,e,n,r,o,s){this._changed=!1,this.context=new i.SideMenu(t,e,n,r,o,s)}return t.prototype.ngOnDetach=function(t,e,n){},t.prototype.ngOnDestroy=function(){},t.prototype.ngDoCheck=function(t,e,n){var r=this._changed;return this._changed=!1,n||0===t.numberOfChecks&&this.context.ngOnInit(),r},t.prototype.checkHost=function(t,e,n,r){},t.prototype.handleEvent=function(t,e){var n=!0;return n},t.prototype.subscribe=function(t,e){this._eventHandler=e},t}();e.Wrapper_SideMenu=P;var M=s.createRenderComponentType("",0,a.ViewEncapsulation.None,[],{}),D=function(t){function e(n,r,i,o){t.call(this,e,M,c.ViewType.HOST,n,r,i,o,u.ChangeDetectorStatus.CheckAlways)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.selectOrCreateRenderHostElement(this.renderer,"side-menu",s.EMPTY_INLINE_ARRAY,t,null),this.compView_0=new F(this.viewUtils,this,0,this._el_0),this._SideMenu_0_3=new P(this.injectorGet(h.SpecManager,this.parentIndex),new p.ElementRef(this._el_0),this.injectorGet(f.ScrollService,this.parentIndex),this.injectorGet(_.MenuService,this.parentIndex),this.injectorGet(d.OptionsService,this.parentIndex),this.compView_0.ref),this.compView_0.create(this._SideMenu_0_3.context), +this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0],null),new l.ComponentRef_(0,this,this._el_0,this._SideMenu_0_3.context)},e.prototype.injectorGetInternal=function(t,e,n){return t===i.SideMenu&&0===e?this._SideMenu_0_3.context:n},e.prototype.detectChangesInternal=function(t){this._SideMenu_0_3.ngDoCheck(this,this._el_0,t),this.compView_0.detectChanges(t)},e.prototype.destroyInternal=function(){this.compView_0.destroy()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(o.AppView);e.SideMenuNgFactory=new l.ComponentFactory("side-menu",D,i.SideMenu);var V=[y.styles],j={collapsed:{height:"0px"},void:{height:"0px"},expanded:{height:"*"},"*":{}},L=s.createRenderComponentType("",0,a.ViewEncapsulation.Emulated,V,{itemAnimation:r}),F=function(t){function e(n,r,i,o){t.call(this,e,L,c.ViewType.COMPONENT,n,r,i,o,u.ChangeDetectorStatus.CheckAlways),this._expr_26=u.UNINITIALIZED,this._expr_27=u.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){var e=this.renderer.createViewRoot(this.parentElement);this._el_0=s.createRenderElement(this.renderer,e,"div",new s.InlineArray2(2,"class","mobile-nav"),null),this._text_1=this.renderer.createText(this._el_0,"\n ",null),this._el_2=s.createRenderElement(this.renderer,this._el_0,"span",new s.InlineArray2(2,"class","menu-header"),null),this._text_3=this.renderer.createText(this._el_2," API Reference: ",null),this._text_4=this.renderer.createText(this._el_0,"\n ",null),this._el_5=s.createRenderElement(this.renderer,this._el_0,"span",new s.InlineArray2(2,"class","selected-item-info"),null),this._text_6=this.renderer.createText(this._el_5,"\n ",null),this._el_7=s.createRenderElement(this.renderer,this._el_5,"span",new s.InlineArray2(2,"class","selected-tag"),null),this._text_8=this.renderer.createText(this._el_7,"",null),this._text_9=this.renderer.createText(this._el_5,"\n ",null),this._el_10=s.createRenderElement(this.renderer,this._el_5,"span",new s.InlineArray2(2,"class","selected-endpoint"),null),this._text_11=this.renderer.createText(this._el_10,"",null),this._text_12=this.renderer.createText(this._el_5,"\n ",null),this._text_13=this.renderer.createText(this._el_0,"\n",null),this._text_14=this.renderer.createText(e,"\n",null),this._el_15=s.createRenderElement(this.renderer,e,"div",new s.InlineArray2(2,"id","resources-nav"),null),this._text_16=this.renderer.createText(this._el_15,"\n ",null),this._el_17=s.createRenderElement(this.renderer,this._el_15,"h5",new s.InlineArray2(2,"class","menu-header"),null),this._text_18=this.renderer.createText(this._el_17," API reference ",null),this._text_19=this.renderer.createText(this._el_15,"\n ",null),this._anchor_20=this.renderer.createTemplateAnchor(this._el_15,null),this._vc_20=new I.ViewContainer(20,15,this,this._anchor_20),this._TemplateRef_20_5=new k.TemplateRef_(this,20,this._anchor_20),this._NgFor_20_6=new C.Wrapper_NgFor(this._vc_20.vcRef,this._TemplateRef_20_5,this.parentView.injectorGet(T.IterableDiffers,this.parentIndex),this.ref),this._text_21=this.renderer.createText(this._el_15,"\n",null),this._text_22=this.renderer.createText(e,"\n",null);var n=s.subscribeToRenderElement(this,this._el_0,new s.InlineArray2(2,"click",null),this.eventHandler(this.handleEvent_0));return this.init(null,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._el_2,this._text_3,this._text_4,this._el_5,this._text_6,this._el_7,this._text_8,this._text_9,this._el_10,this._text_11,this._text_12,this._text_13,this._text_14,this._el_15,this._text_16,this._el_17,this._text_18,this._text_19,this._anchor_20,this._text_21,this._text_22],[n]),null},e.prototype.injectorGetInternal=function(t,e,n){return t===k.TemplateRef&&20===e?this._TemplateRef_20_5:t===E.NgFor&&20===e?this._NgFor_20_6.context:n},e.prototype.detectChangesInternal=function(t){var e=this.context.categories;this._NgFor_20_6.check_ngForOf(e,t,!1),this._NgFor_20_6.ngDoCheck(this,this._anchor_20,t),this._vc_20.detectChangesInNestedViews(t);var n=s.inlineInterpolate(1," ",this.context.activeCatCaption," ");s.checkBinding(t,this._expr_26,n)&&(this.renderer.setText(this._text_8,n),this._expr_26=n);var r=s.inlineInterpolate(1,"",this.context.activeItemCaption,"");s.checkBinding(t,this._expr_27,r)&&(this.renderer.setText(this._text_11,r),this._expr_27=r)},e.prototype.destroyInternal=function(){this._vc_20.destroyNestedViews()},e.prototype.createEmbeddedViewInternal=function(t){return 20==t?new B(this.viewUtils,this,20,this._anchor_20,this._vc_20):null},e.prototype.handleEvent_0=function(t,e){this.markPathToRootAsCheckOnce();var n=!0;if("click"==t){var r=this.context.toggleMobileNav()!==!1;n=r&&n}return n},e}(o.AppView);e.View_SideMenu0=F;var B=function(t){function e(n,r,i,o,a){t.call(this,e,L,c.ViewType.EMBEDDED,n,r,i,o,u.ChangeDetectorStatus.CheckAlways,a),this._expr_11=u.UNINITIALIZED,this._map_12=s.pureProxy2(function(t,e){return{active:t,disabled:e}}),this._expr_13=u.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){this._el_0=s.createRenderElement(this.renderer,null,"div",new s.InlineArray2(2,"class","menu-cat"),null),this._text_1=this.renderer.createText(this._el_0,"\n\n ",null),this._el_2=s.createRenderElement(this.renderer,this._el_0,"label",new s.InlineArray2(2,"class","menu-cat-header"),null),this._NgClass_2_3=new S.Wrapper_NgClass(this.parentView.parentView.injectorGet(T.IterableDiffers,this.parentView.parentIndex),this.parentView.parentView.injectorGet(R.KeyValueDiffers,this.parentView.parentIndex),new p.ElementRef(this._el_2),this.renderer),this._text_3=this.renderer.createText(this._el_2,"",null),this._text_4=this.renderer.createText(this._el_0,"\n ",null),this._anchor_5=this.renderer.createTemplateAnchor(this._el_0,null),this._vc_5=new I.ViewContainer(5,0,this,this._anchor_5),this._TemplateRef_5_5=new k.TemplateRef_(this,5,this._anchor_5),this._NgIf_5_6=new O.Wrapper_NgIf(this._vc_5.vcRef,this._TemplateRef_5_5),this._text_6=this.renderer.createText(this._el_0,"\n\n ",null);var e=s.subscribeToRenderElement(this,this._el_2,new s.InlineArray2(2,"click",null),this.eventHandler(this.handleEvent_2));return this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._el_2,this._text_3,this._text_4,this._anchor_5,this._text_6],[e]),null},e.prototype.injectorGetInternal=function(t,e,n){return t===A.NgClass&&2<=e&&e<=3?this._NgClass_2_3.context:t===k.TemplateRef&&5===e?this._TemplateRef_5_5:t===N.NgIf&&5===e?this._NgIf_5_6.context:n},e.prototype.detectChangesInternal=function(t){var e="menu-cat-header";this._NgClass_2_3.check_klass(e,t,!1);var n=this._map_12(this.context.$implicit.active,!this.context.$implicit.ready);this._NgClass_2_3.check_ngClass(n,t,!1),this._NgClass_2_3.ngDoCheck(this,this._el_2,t);var r=this.context.$implicit.methods.length;this._NgIf_5_6.check_ngIf(r,t,!1),this._NgIf_5_6.ngDoCheck(this,this._anchor_5,t),this._vc_5.detectChangesInNestedViews(t);var i=this.context.$implicit.headless;s.checkBinding(t,this._expr_11,i)&&(this.renderer.setElementProperty(this._el_2,"hidden",i),this._expr_11=i);var o=s.inlineInterpolate(1," ",this.context.$implicit.name,"");s.checkBinding(t,this._expr_13,o)&&(this.renderer.setText(this._text_3,o),this._expr_13=o)},e.prototype.destroyInternal=function(){this._vc_5.destroyNestedViews()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e.prototype.createEmbeddedViewInternal=function(t){return 5==t?new U(this.viewUtils,this,5,this._anchor_5,this._vc_5):null},e.prototype.handleEvent_2=function(t,e){this.markPathToRootAsCheckOnce();var n=!0;if("click"==t){var r=this.parentView.context.activateAndScroll(this.context.index,-1)!==!1;n=r&&n}return n},e}(o.AppView),U=function(t){function e(n,r,i,o,s){t.call(this,e,L,c.ViewType.EMBEDDED,n,r,i,o,u.ChangeDetectorStatus.CheckAlways,s),this._expr_7=u.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=s.createRenderElement(this.renderer,null,"ul",new s.InlineArray2(2,"class","menu-subitems"),null),this._text_1=this.renderer.createText(this._el_0,"\n ",null),this._anchor_2=this.renderer.createTemplateAnchor(this._el_0,null),this._vc_2=new I.ViewContainer(2,0,this,this._anchor_2),this._TemplateRef_2_5=new k.TemplateRef_(this,2,this._anchor_2),this._NgFor_2_6=new C.Wrapper_NgFor(this._vc_2.vcRef,this._TemplateRef_2_5,this.parentView.parentView.parentView.injectorGet(T.IterableDiffers,this.parentView.parentView.parentIndex),this.parentView.parentView.ref),this._text_3=this.renderer.createText(this._el_0,"\n ",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._anchor_2,this._text_3],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===k.TemplateRef&&2===e?this._TemplateRef_2_5:t===E.NgFor&&2===e?this._NgFor_2_6.context:n},e.prototype.detectChangesInternal=function(t){var e=this.parentView.context.$implicit.active?"expanded":"collapsed";if(s.checkBinding(t,this._expr_7,e)){var n=this.componentType.animations.itemAnimation(this,this._el_0,this._expr_7==u.UNINITIALIZED?"void":this._expr_7,e==u.UNINITIALIZED?"void":e);n.onStart(s.noop.bind(this).bind(this,"@itemAnimation.start")),n.onDone(s.noop.bind(this).bind(this,"@itemAnimation.done")),this._expr_7=e}var r=this.parentView.context.$implicit.methods;this._NgFor_2_6.check_ngForOf(r,t,!1);var i=this.parentView.parentView.context.summary;this._NgFor_2_6.check_ngForTrackBy(i,t,!1),this._NgFor_2_6.ngDoCheck(this,this._anchor_2,t),this._vc_2.detectChangesInNestedViews(t)},e.prototype.destroyInternal=function(){this._vc_2.destroyNestedViews()},e.prototype.detachInternal=function(){var t=this.componentType.animations.itemAnimation(this,this._el_0,this._expr_7,"void");t.onStart(s.noop.bind(this).bind(this,"@itemAnimation.start")),t.onDone(s.noop.bind(this).bind(this,"@itemAnimation.done"))},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e.prototype.createEmbeddedViewInternal=function(t){return 2==t?new z(this.viewUtils,this,2,this._anchor_2,this._vc_2):null},e}(o.AppView),z=function(t){function e(n,r,i,o,a){t.call(this,e,L,c.ViewType.EMBEDDED,n,r,i,o,u.ChangeDetectorStatus.CheckAlways,a),this._map_3=s.pureProxy2(function(t,e){return{active:t,disabled:e}}),this._expr_4=u.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){this._el_0=s.createRenderElement(this.renderer,null,"li",s.EMPTY_INLINE_ARRAY,null),this._NgClass_0_3=new S.Wrapper_NgClass(this.parentView.parentView.parentView.parentView.injectorGet(T.IterableDiffers,this.parentView.parentView.parentView.parentIndex),this.parentView.parentView.parentView.parentView.injectorGet(R.KeyValueDiffers,this.parentView.parentView.parentView.parentIndex),new p.ElementRef(this._el_0),this.renderer),this._text_1=this.renderer.createText(this._el_0,"",null);var e=s.subscribeToRenderElement(this,this._el_0,new s.InlineArray2(2,"click",null),this.eventHandler(this.handleEvent_0));return this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1],[e]),null},e.prototype.injectorGetInternal=function(t,e,n){return t===A.NgClass&&0<=e&&e<=1?this._NgClass_0_3.context:n},e.prototype.detectChangesInternal=function(t){var e=this._map_3(this.context.$implicit.active,!this.context.$implicit.ready);this._NgClass_0_3.check_ngClass(e,t,!1),this._NgClass_0_3.ngDoCheck(this,this._el_0,t);var n=s.inlineInterpolate(1,"\n ",this.context.$implicit.summary,"\n ");s.checkBinding(t,this._expr_4,n)&&(this.renderer.setText(this._text_1,n),this._expr_4=n)},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e.prototype.handleEvent_0=function(t,e){this.markPathToRootAsCheckOnce();var n=!0;if("click"==t){var r=this.parentView.parentView.parentView.context.activateAndScroll(this.parentView.parentView.context.index,this.context.index)!==!1;n=r&&n}return n},e}(o.AppView)},function(t,e){"use strict";e.styles=['[_nghost-%COMP%] {\n width: 60%;\n display: block; }\n\n.message[_ngcontent-%COMP%] {\n padding: 5px 40px;\n background-color: #fcf8e3;\n color: #8a6d3b; }\n .message[_ngcontent-%COMP%]:before {\n content: "Warning: ";\n font-weight: bold; }\n\n.warnings-close[_ngcontent-%COMP%] {\n font-size: 150%;\n color: black;\n opacity: 0.4;\n float: right;\n margin: 5px 20px 0 0;\n font-weight: bold;\n cursor: pointer; }\n .warnings-close[_ngcontent-%COMP%]:hover {\n opacity: 0.8; }\n\np[_ngcontent-%COMP%] {\n display: inline; }']},function(t,e,n){"use strict";var r=n(228),i=n(19),o=n(8),s=n(15),a=n(12),c=n(9),u=n(13),l=n(20),h=n(35),p=n(475),f=n(23),_=n(36),d=n(25),y=n(28),m=n(56),g=n(34),v=n(46),b=function(){function t(t,e){this._changed=!1,this.context=new r.Warnings(t,e)}return t.prototype.ngOnDetach=function(t,e,n){},t.prototype.ngOnDestroy=function(){},t.prototype.ngDoCheck=function(t,e,n){var r=this._changed;return this._changed=!1,n||0===t.numberOfChecks&&this.context.ngOnInit(),r},t.prototype.checkHost=function(t,e,n,r){},t.prototype.handleEvent=function(t,e){var n=!0;return n},t.prototype.subscribe=function(t,e){this._eventHandler=e},t}();e.Wrapper_Warnings=b;var w=o.createRenderComponentType("",0,s.ViewEncapsulation.None,[],{}),x=function(t){function e(n,r,i,o){t.call(this,e,w,a.ViewType.HOST,n,r,i,o,c.ChangeDetectorStatus.CheckAlways)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=o.selectOrCreateRenderHostElement(this.renderer,"warnings",o.EMPTY_INLINE_ARRAY,t,null),this.compView_0=new k(this.viewUtils,this,0,this._el_0),this._Warnings_0_3=new b(this.injectorGet(l.SpecManager,this.parentIndex),this.injectorGet(h.OptionsService,this.parentIndex)),this.compView_0.create(this._Warnings_0_3.context),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0],null),new u.ComponentRef_(0,this,this._el_0,this._Warnings_0_3.context)},e.prototype.injectorGetInternal=function(t,e,n){return t===r.Warnings&&0===e?this._Warnings_0_3.context:n},e.prototype.detectChangesInternal=function(t){this._Warnings_0_3.ngDoCheck(this,this._el_0,t),this.compView_0.detectChanges(t)},e.prototype.destroyInternal=function(){this.compView_0.destroy()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(i.AppView);e.WarningsNgFactory=new u.ComponentFactory("warnings",x,r.Warnings);var I=[p.styles],C=o.createRenderComponentType("",0,s.ViewEncapsulation.Emulated,I,{}),k=function(t){function e(n,r,i,o){t.call(this,e,C,a.ViewType.COMPONENT,n,r,i,o,c.ChangeDetectorStatus.CheckAlways)}return __extends(e,t),e.prototype.createInternal=function(t){var e=this.renderer.createViewRoot(this.parentElement);return this._anchor_0=this.renderer.createTemplateAnchor(e,null),this._vc_0=new f.ViewContainer(0,null,this,this._anchor_0),this._TemplateRef_0_5=new d.TemplateRef_(this,0,this._anchor_0),this._NgIf_0_6=new _.Wrapper_NgIf(this._vc_0.vcRef,this._TemplateRef_0_5),this._text_1=this.renderer.createText(e,"\n",null),this.init(null,this.renderer.directRenderer?null:[this._anchor_0,this._text_1],null),null},e.prototype.injectorGetInternal=function(t,e,n){return t===d.TemplateRef&&0===e?this._TemplateRef_0_5:t===y.NgIf&&0===e?this._NgIf_0_6.context:n},e.prototype.detectChangesInternal=function(t){var e=this.context.shown;this._NgIf_0_6.check_ngIf(e,t,!1),this._NgIf_0_6.ngDoCheck(this,this._anchor_0,t),this._vc_0.detectChangesInNestedViews(t)},e.prototype.destroyInternal=function(){this._vc_0.destroyNestedViews()},e.prototype.createEmbeddedViewInternal=function(t){return 0==t?new T(this.viewUtils,this,0,this._anchor_0,this._vc_0):null},e}(i.AppView);e.View_Warnings0=k;var T=function(t){function e(n,r,i,o,s){t.call(this,e,C,a.ViewType.EMBEDDED,n,r,i,o,c.ChangeDetectorStatus.CheckAlways,s)}return __extends(e,t),e.prototype.createInternal=function(t){this._el_0=o.createRenderElement(this.renderer,null,"div",o.EMPTY_INLINE_ARRAY,null),this._text_1=this.renderer.createText(this._el_0,"\n ",null),this._el_2=o.createRenderElement(this.renderer,this._el_0,"a",new o.InlineArray2(2,"class","warnings-close"),null),this._text_3=this.renderer.createText(this._el_2,"×",null),this._text_4=this.renderer.createText(this._el_0,"\n ",null),this._anchor_5=this.renderer.createTemplateAnchor(this._el_0,null),this._vc_5=new f.ViewContainer(5,0,this,this._anchor_5),this._TemplateRef_5_5=new d.TemplateRef_(this,5,this._anchor_5),this._NgFor_5_6=new m.Wrapper_NgFor(this._vc_5.vcRef,this._TemplateRef_5_5,this.parentView.injectorGet(g.IterableDiffers,this.parentIndex),this.parentView.ref),this._text_6=this.renderer.createText(this._el_0,"\n",null);var e=o.subscribeToRenderElement(this,this._el_2,new o.InlineArray2(2,"click",null),this.eventHandler(this.handleEvent_2));return this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1,this._el_2,this._text_3,this._text_4,this._anchor_5,this._text_6],[e]),null},e.prototype.injectorGetInternal=function(t,e,n){return t===d.TemplateRef&&5===e?this._TemplateRef_5_5:t===v.NgFor&&5===e?this._NgFor_5_6.context:n},e.prototype.detectChangesInternal=function(t){var e=this.parentView.context.warnings;this._NgFor_5_6.check_ngForOf(e,t,!1),this._NgFor_5_6.ngDoCheck(this,this._anchor_5,t),this._vc_5.detectChangesInNestedViews(t)},e.prototype.destroyInternal=function(){this._vc_5.destroyNestedViews()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e.prototype.createEmbeddedViewInternal=function(t){return 5==t?new E(this.viewUtils,this,5,this._anchor_5,this._vc_5):null},e.prototype.handleEvent_2=function(t,e){this.markPathToRootAsCheckOnce();var n=!0;if("click"==t){var r=this.parentView.context.close()!==!1;n=r&&n}return n},e}(i.AppView),E=function(t){function e(n,r,i,o,s){t.call(this,e,C,a.ViewType.EMBEDDED,n,r,i,o,c.ChangeDetectorStatus.CheckAlways,s),this._expr_2=c.UNINITIALIZED}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=o.createRenderElement(this.renderer,null,"div",new o.InlineArray2(2,"class","message"),null),this._text_1=this.renderer.createText(this._el_0,"",null),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0,this._text_1],null),null},e.prototype.detectChangesInternal=function(t){var e=o.inlineInterpolate(1,"",this.context.$implicit,"");o.checkBinding(t,this._expr_2,e)&&(this.renderer.setText(this._text_1,e),this._expr_2=e)},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e}(i.AppView)},function(t,e){"use strict";e.styles=["[_nghost-%COMP%] .dk-select {\n max-width: 100%;\n font-family: Montserrat, sans-serif;\n font-size: .929em;\n min-width: 100px;\n width: auto; }\n\n[_nghost-%COMP%] .dk-selected:after {\n display: none; }\n\n[_nghost-%COMP%] .dk-selected {\n color: #263238;\n border-color: rgba(38, 50, 56, 0.5);\n padding: 0.15em 1.5em 0.2em 0.5em;\n border-radius: 2px; }\n\n[_nghost-%COMP%] .dk-select-open-down .dk-selected, [_nghost-%COMP%] .dk-selected:focus, [_nghost-%COMP%] .dk-selected:hover {\n border-color: #0033a0;\n color: #0033a0; }\n\n[_nghost-%COMP%] .dk-selected:before {\n border-top-color: #263238;\n border-width: .35em .35em 0; }\n\n[_nghost-%COMP%] .dk-select-open-down .dk-selected:before, [_nghost-%COMP%] .dk-select-open-up .dk-selected:before {\n border-bottom-color: #0033a0; }\n\n[_nghost-%COMP%] .dk-select-multi:focus .dk-select-options, [_nghost-%COMP%] .dk-select-open-down .dk-select-options, [_nghost-%COMP%] .dk-select-open-up .dk-select-options {\n border-color: rgba(38, 50, 56, 0.2); }\n\n[_nghost-%COMP%] .dk-select-options .dk-option-highlight {\n background: #ffffff; }\n\n[_nghost-%COMP%] .dk-select-options {\n margin-top: 0.2em;\n padding: 0;\n border-radius: 2px;\n box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.08) !important;\n right: auto;\n min-width: 100%; }\n\n[_nghost-%COMP%] .dk-option {\n color: #263238;\n padding: 0.16em 0.6em 0.2em 0.5em; }\n [_nghost-%COMP%] .dk-option:hover {\n background-color: rgba(38, 50, 56, 0.12); }\n [_nghost-%COMP%] .dk-option:focus {\n background-color: rgba(38, 50, 56, 0.12); }\n\n[_nghost-%COMP%] .dk-option-selected {\n background-color: rgba(0, 0, 0, 0.05) !important; }"]},function(t,e,n){"use strict";var r=n(229),i=n(19),o=n(8),s=n(15),a=n(12),c=n(9),u=n(13),l=n(22),h=n(477),p=function(){function t(t){this._changed=!1,this.context=new r.DropDown(t)}return t.prototype.ngOnDetach=function(t,e,n){},t.prototype.ngOnDestroy=function(){this.subscription0&&this.subscription0.unsubscribe()},t.prototype.ngDoCheck=function(t,e,n){var r=this._changed;return this._changed=!1,r},t.prototype.checkHost=function(t,e,n,r){},t.prototype.handleEvent=function(t,e){var n=!0;return n},t.prototype.subscribe=function(t,e,n){this._eventHandler=e,n&&(this.subscription0=this.context.change.subscribe(e.bind(t,"change")))},t}();e.Wrapper_DropDown=p;var f=o.createRenderComponentType("",0,s.ViewEncapsulation.None,[],{}),_=function(t){function e(n,r,i,o){t.call(this,e,f,a.ViewType.HOST,n,r,i,o,c.ChangeDetectorStatus.CheckAlways)}return __extends(e,t),e.prototype.createInternal=function(t){return this._el_0=o.selectOrCreateRenderHostElement(this.renderer,"drop-down",o.EMPTY_INLINE_ARRAY,t,null),this.compView_0=new m(this.viewUtils,this,0,this._el_0),this._DropDown_0_3=new p(new l.ElementRef(this._el_0)),this.compView_0.create(this._DropDown_0_3.context),this.init(this._el_0,this.renderer.directRenderer?null:[this._el_0],null),new u.ComponentRef_(0,this,this._el_0,this._DropDown_0_3.context)},e.prototype.injectorGetInternal=function(t,e,n){return t===r.DropDown&&0===e?this._DropDown_0_3.context:n},e.prototype.detectChangesInternal=function(t){this._DropDown_0_3.ngDoCheck(this,this._el_0,t),t||0===this.numberOfChecks&&this._DropDown_0_3.context.ngAfterContentInit(),this.compView_0.detectChanges(t)},e.prototype.destroyInternal=function(){this.compView_0.destroy(),this._DropDown_0_3.ngOnDestroy()},e.prototype.visitRootNodesInternal=function(t,e){t(this._el_0,e)},e.prototype.visitProjectableNodesInternal=function(t,e,n,r){},e}(i.AppView);e.DropDownNgFactory=new u.ComponentFactory("drop-down",_,r.DropDown);var d=[h.styles],y=o.createRenderComponentType("",1,s.ViewEncapsulation.Emulated,d,{}),m=function(t){function e(n,r,i,o){t.call(this,e,y,a.ViewType.COMPONENT,n,r,i,o,c.ChangeDetectorStatus.CheckAlways)}return __extends(e,t),e.prototype.createInternal=function(t){var e=this.renderer.createViewRoot(this.parentElement);this._text_0=this.renderer.createText(e,"\n ",null),this._el_1=o.createRenderElement(this.renderer,e,"select",o.EMPTY_INLINE_ARRAY,null),this._text_2=this.renderer.createText(this._el_1,"\n ",null),this.projectNodes(this._el_1,0),this._text_3=this.renderer.createText(this._el_1,"\n ",null),this._text_4=this.renderer.createText(e,"\n ",null);var n=o.subscribeToRenderElement(this,this._el_1,new o.InlineArray2(2,"change",null),this.eventHandler(this.handleEvent_1));return this.init(null,this.renderer.directRenderer?null:[this._text_0,this._el_1,this._text_2,this._text_3,this._text_4],[n]),null},e.prototype.handleEvent_1=function(t,e){this.markPathToRootAsCheckOnce();var n=!0;if("change"==t){var r=this.context.onChange(e.target.value)!==!1;n=r&&n}return n},e}(i.AppView);e.View_DropDown0=m},function(t,e,n){"use strict";var r=n(76),i=n(9),o=n(8),s=function(){function t(t,e,n,o,s){this._changed=!1,this.context=new r.LazyFor(t,e,n,o,s),this._expr_0=i.UNINITIALIZED}return t.prototype.ngOnDetach=function(t,e,n){},t.prototype.ngOnDestroy=function(){},t.prototype.check_lazyForOf=function(t,e,n){(n||o.checkBinding(e,this._expr_0,t))&&(this._changed=!0,this.context.lazyForOf=t,this._expr_0=t)},t.prototype.ngDoCheck=function(t,e,n){var r=this._changed;return this._changed=!1,n||0===t.numberOfChecks&&this.context.ngOnInit(),r},t.prototype.checkHost=function(t,e,n,r){},t.prototype.handleEvent=function(t,e){var n=!0;return n},t.prototype.subscribe=function(t,e){this._eventHandler=e},t}();e.Wrapper_LazyFor=s},function(t,e,n){"use strict";var r=n(231),i=function(){function t(t){this._changed=!1,this.context=new r.SelectOnClick(t)}return t.prototype.ngOnDetach=function(t,e,n){},t.prototype.ngOnDestroy=function(){},t.prototype.ngDoCheck=function(t,e,n){var r=this._changed;return this._changed=!1,r},t.prototype.checkHost=function(t,e,n,r){},t.prototype.handleEvent=function(t,e){var n=!0;if("click"==t){var r=this.context.onClick()!==!1;n=r&&n}return n},t.prototype.subscribe=function(t,e){this._eventHandler=e},t}();e.Wrapper_SelectOnClick=i},function(t,e,n){"use strict";var r=n(232),i=n(9),o=n(8),s=function(){function t(t){this._changed=!1,this.context=new r.StickySidebar(t),this._expr_0=i.UNINITIALIZED,this._expr_1=i.UNINITIALIZED}return t.prototype.ngOnDetach=function(t,e,n){},t.prototype.ngOnDestroy=function(){this.context.ngOnDestroy()},t.prototype.check_scrollParent=function(t,e,n){(n||o.checkBinding(e,this._expr_0,t))&&(this._changed=!0,this.context.scrollParent=t,this._expr_0=t)},t.prototype.check_scrollYOffset=function(t,e,n){(n||o.checkBinding(e,this._expr_1,t))&&(this._changed=!0,this.context.scrollYOffset=t,this._expr_1=t)},t.prototype.ngDoCheck=function(t,e,n){var r=this._changed;return this._changed=!1,n||0===t.numberOfChecks&&this.context.ngOnInit(),r},t.prototype.checkHost=function(t,e,n,r){},t.prototype.handleEvent=function(t,e){var n=!0;return n},t.prototype.subscribe=function(t,e){this._eventHandler=e},t}();e.Wrapper_StickySidebar=s},function(t,e){"use strict";e.styles=['[_nghost-%COMP%] {\n display: block; }\n\nul[_ngcontent-%COMP%] {\n display: block;\n margin: 0;\n padding: 0; }\n\nli[_ngcontent-%COMP%] {\n list-style: none;\n display: inline-block;\n cursor: pointer; }\n\n.tab-success[_ngcontent-%COMP%]:before, .tab-error[_ngcontent-%COMP%]:before, .tab-redirect[_ngcontent-%COMP%]:before, .tab-info[_ngcontent-%COMP%]:before {\n content: "";\n display: inline-block;\n position: relative;\n top: -2px;\n height: 4px;\n width: 4px;\n border-radius: 50%;\n margin-right: 0.5em; }\n\n.tab-success[_ngcontent-%COMP%]:before {\n box-shadow: 0 0 3px 0 #00aa13;\n background-color: #00aa13; }\n\n.tab-error[_ngcontent-%COMP%]:before {\n box-shadow: 0 0 3px 0 #e53935;\n background-color: #e53935; }\n\n.tab-redirect[_ngcontent-%COMP%]:before {\n box-shadow: 0 0 3px 0 #f1c400;\n background-color: #f1c400; }\n\n.tab-info[_ngcontent-%COMP%]:before {\n box-shadow: 0 0 3px 0 #0033a0;\n background-color: #0033a0; }']},function(t,e){"use strict";e.styles=['@charset "UTF-8";\n[_nghost-%COMP%] {\n overflow: hidden;\n display: block; }\n\n.zippy-title[_ngcontent-%COMP%] {\n padding: 10px;\n border-radius: 2px;\n margin-bottom: 4px;\n line-height: 1.5em;\n background-color: #f2f2f2;\n cursor: pointer; }\n .zippy-success[_ngcontent-%COMP%] > .zippy-title[_ngcontent-%COMP%] {\n color: #00aa13;\n background-color: rgba(0, 170, 19, 0.08); }\n .zippy-error[_ngcontent-%COMP%] > .zippy-title[_ngcontent-%COMP%] {\n color: #e53935;\n background-color: rgba(229, 57, 53, 0.06); }\n .zippy-redirect[_ngcontent-%COMP%] > .zippy-title[_ngcontent-%COMP%] {\n color: #263238;\n background-color: rgba(38, 50, 56, 0.08); }\n .zippy-info[_ngcontent-%COMP%] > .zippy-title[_ngcontent-%COMP%] {\n color: #0033a0;\n background-color: rgba(0, 51, 160, 0.08); }\n\n.zippy-indicator[_ngcontent-%COMP%] svg[_ngcontent-%COMP%] {\n height: 1.2em;\n vertical-align: middle;\n transition: all 0.3s ease;\n transform: rotateZ(-180deg); }\n\n.zippy-hidden[_ngcontent-%COMP%] > .zippy-title[_ngcontent-%COMP%] svg[_ngcontent-%COMP%] {\n transform: rotateZ(0); }\n\n.zippy-success[_ngcontent-%COMP%] > .zippy-title[_ngcontent-%COMP%] polygon[_ngcontent-%COMP%] {\n fill: #00aa13; }\n\n.zippy-error[_ngcontent-%COMP%] > .zippy-title[_ngcontent-%COMP%] polygon[_ngcontent-%COMP%] {\n fill: #e53935; }\n\n.zippy-redirect[_ngcontent-%COMP%] > .zippy-title[_ngcontent-%COMP%] polygon[_ngcontent-%COMP%] {\n fill: #263238; }\n\n.zippy-info[_ngcontent-%COMP%] > .zippy-title[_ngcontent-%COMP%] polygon[_ngcontent-%COMP%] {\n fill: #0033a0; }\n\nspan.zippy-indicator[_ngcontent-%COMP%] {\n width: 1em;\n font-size: 1.2em;\n text-align: center;\n display: inline-block; }\n\n.zippy-content[_ngcontent-%COMP%] {\n padding: 15px 0; }\n\n.zippy-empty[_ngcontent-%COMP%] .zippy-title[_ngcontent-%COMP%] {\n cursor: default; }\n\n.zippy-empty[_ngcontent-%COMP%] .zippy-indicator[_ngcontent-%COMP%] svg[_ngcontent-%COMP%] {\n display: none; }\n\n.zippy-empty[_ngcontent-%COMP%] .zippy-indicator[_ngcontent-%COMP%]:before {\n content: "—";\n font-weight: bold; }\n\n.zippy-empty[_ngcontent-%COMP%] .zippy-content[_ngcontent-%COMP%] {\n display: none; }\n\n.zippy-hidden[_ngcontent-%COMP%] > .zippy-content[_ngcontent-%COMP%] {\n display: none; }']},function(t,e){"use strict";e.methods=new Set(["get","put","post","delete","options","head","patch"]),e.keywordTypes={multipleOf:"number",maximum:"number",exclusiveMaximum:"number",minimum:"number",exclusiveMinimum:"number",maxLength:"string",minLength:"string",pattern:"string",items:"array",maxItems:"array",minItems:"array",uniqueItems:"array",maxProperties:"object",minProperties:"object",required:"object",additionalProperties:"object",properties:"object"}},function(t,e,n){"use strict";var r=n(193),i=n(9),o=n(8),s=function(){function t(t,e,n){this._changed=!1,this.context=new r.NgStyle(t,e,n),this._expr_0=i.UNINITIALIZED}return t.prototype.ngOnDetach=function(t,e,n){},t.prototype.ngOnDestroy=function(){},t.prototype.check_ngStyle=function(t,e,n){(n||o.checkBinding(e,this._expr_0,t))&&(this._changed=!0,this.context.ngStyle=t,this._expr_0=t)},t.prototype.ngDoCheck=function(t,e,n){var r=this._changed;return this._changed=!1,n||this.context.ngDoCheck(),r},t.prototype.checkHost=function(t,e,n,r){},t.prototype.handleEvent=function(t,e){var n=!0;return n},t.prototype.subscribe=function(t,e){this._eventHandler=e},t}();e.Wrapper_NgStyle=s},function(t,e,n){"use strict";var r=n(139),i=n(9),o=n(8),s=function(){function t(){this._changed=!1,this.context=new r.NgSwitch,this._expr_0=i.UNINITIALIZED}return t.prototype.ngOnDetach=function(t,e,n){},t.prototype.ngOnDestroy=function(){},t.prototype.check_ngSwitch=function(t,e,n){(n||o.checkBinding(e,this._expr_0,t))&&(this._changed=!0,this.context.ngSwitch=t,this._expr_0=t)},t.prototype.ngDoCheck=function(t,e,n){var r=this._changed;return this._changed=!1,r},t.prototype.checkHost=function(t,e,n,r){},t.prototype.handleEvent=function(t,e){var n=!0;return n},t.prototype.subscribe=function(t,e){this._eventHandler=e},t}();e.Wrapper_NgSwitch=s;var a=function(){function t(t,e,n){this._changed=!1,this.context=new r.NgSwitchCase(t,e,n),this._expr_0=i.UNINITIALIZED}return t.prototype.ngOnDetach=function(t,e,n){},t.prototype.ngOnDestroy=function(){},t.prototype.check_ngSwitchCase=function(t,e,n){(n||o.checkBinding(e,this._expr_0,t))&&(this._changed=!0,this.context.ngSwitchCase=t,this._expr_0=t)},t.prototype.ngDoCheck=function(t,e,n){var r=this._changed;return this._changed=!1,n||this.context.ngDoCheck(),r},t.prototype.checkHost=function(t,e,n,r){},t.prototype.handleEvent=function(t,e){var n=!0;return n},t.prototype.subscribe=function(t,e){this._eventHandler=e},t}();e.Wrapper_NgSwitchCase=a;var c=function(){function t(t,e,n){this._changed=!1,this.context=new r.NgSwitchDefault(t,e,n)}return t.prototype.ngOnDetach=function(t,e,n){},t.prototype.ngOnDestroy=function(){},t.prototype.ngDoCheck=function(t,e,n){var r=this._changed;return this._changed=!1,r},t.prototype.checkHost=function(t,e,n,r){},t.prototype.handleEvent=function(t,e){var n=!0;return n},t.prototype.subscribe=function(t,e){this._eventHandler=e},t}();e.Wrapper_NgSwitchDefault=c},function(t,e){"use strict";function n(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");return"="===t[e-2]?2:"="===t[e-1]?1:0}function r(t){return 3*t.length/4-n(t)}function i(t){var e,r,i,o,s,a,c=t.length; +s=n(t),a=new l(3*c/4-s),i=s>0?c-4:c;var h=0;for(e=0,r=0;e>16&255,a[h++]=o>>8&255,a[h++]=255&o;return 2===s?(o=u[t.charCodeAt(e)]<<2|u[t.charCodeAt(e+1)]>>4,a[h++]=255&o):1===s&&(o=u[t.charCodeAt(e)]<<10|u[t.charCodeAt(e+1)]<<4|u[t.charCodeAt(e+2)]>>2,a[h++]=o>>8&255,a[h++]=255&o),a}function o(t){return c[t>>18&63]+c[t>>12&63]+c[t>>6&63]+c[63&t]}function s(t,e,n){for(var r,i=[],s=e;sl?l:u+a));return 1===r?(e=t[n-1],i+=c[e>>2],i+=c[e<<4&63],i+="=="):2===r&&(e=(t[n-2]<<8)+t[n-1],i+=c[e>>10],i+=c[e>>4&63],i+=c[e<<2&63],i+="="),o.push(i),o.join("")}e.byteLength=r,e.toByteArray=i,e.fromByteArray=a;for(var c=[],u=[],l="undefined"!=typeof Uint8Array?Uint8Array:Array,h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",p=0,f=h.length;pu;)c.call(t,s=a[u++])&&e.push(s);return e}},function(t,e){t.exports=function(t,e,n){var r=void 0===n;switch(e.length){case 0:return r?t():t.call(n);case 1:return r?t(e[0]):t.call(n,e[0]);case 2:return r?t(e[0],e[1]):t.call(n,e[0],e[1]);case 3:return r?t(e[0],e[1],e[2]):t.call(n,e[0],e[1],e[2]);case 4:return r?t(e[0],e[1],e[2],e[3]):t.call(n,e[0],e[1],e[2],e[3])}return t.apply(n,e)}},function(t,e,n){var r=n(108),i=n(58);t.exports=function(t,e){for(var n,o=i(t),s=r(o),a=s.length,c=0;a>c;)if(o[n=s[c++]]===e)return n}},function(t,e,n){var r=n(94),i=n(170),o=n(6),s=n(14).Reflect;t.exports=s&&s.ownKeys||function(t){var e=r.f(o(t)),n=i.f;return n?e.concat(n(t)):e}},function(t,e,n){var r=n(14),i=n(17),o=n(127),s=n(344),a=n(24).f;t.exports=function(t){var e=i.Symbol||(i.Symbol=o?{}:r.Symbol||{});"_"==t.charAt(0)||t in e||a(e,t,{value:s.f(t)})}},function(t,e,n){var r=n(1);r(r.P,"Array",{copyWithin:n(320)}),n(124)("copyWithin")},function(t,e,n){"use strict";var r=n(1),i=n(62)(4);r(r.P+r.F*!n(57)([].every,!0),"Array",{every:function(t){return i(this,t,arguments[1])}})},function(t,e,n){var r=n(1);r(r.P,"Array",{fill:n(234)}),n(124)("fill")},function(t,e,n){"use strict";var r=n(1),i=n(62)(2);r(r.P+r.F*!n(57)([].filter,!0),"Array",{filter:function(t){return i(this,t,arguments[1])}})},function(t,e,n){"use strict";var r=n(1),i=n(62)(6),o="findIndex",s=!0;o in[]&&Array(1)[o](function(){s=!1}),r(r.P+r.F*s,"Array",{findIndex:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),n(124)(o)},function(t,e,n){"use strict";var r=n(1),i=n(62)(5),o="find",s=!0;o in[]&&Array(1)[o](function(){s=!1}),r(r.P+r.F*s,"Array",{find:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),n(124)(o)},function(t,e,n){"use strict";var r=n(1),i=n(62)(0),o=n(57)([].forEach,!0);r(r.P+r.F*!o,"Array",{forEach:function(t){return i(this,t,arguments[1])}})},function(t,e,n){"use strict";var r=n(92),i=n(1),o=n(52),s=n(330),a=n(241),c=n(37),u=n(325),l=n(253);i(i.S+i.F*!n(245)(function(t){Array.from(t)}),"Array",{from:function(t){var e,n,i,h,p=o(t),f="function"==typeof this?this:Array,_=arguments.length,d=_>1?arguments[1]:void 0,y=void 0!==d,m=0,g=l(p);if(y&&(d=r(d,_>2?arguments[2]:void 0,2)),void 0==g||f==Array&&a(g))for(e=c(p.length),n=new f(e);e>m;m++)u(n,m,y?d(p[m],m):p[m]);else for(h=g.call(p),n=new f;!(i=h.next()).done;m++)u(n,m,y?s(h,d,[i.value,m],!0):i.value);return n.length=m,n}})},function(t,e,n){"use strict";var r=n(1),i=n(235)(!1),o=[].indexOf,s=!!o&&1/[1].indexOf(1,-0)<0;r(r.P+r.F*(s||!n(57)(o)),"Array",{indexOf:function(t){return s?o.apply(this,arguments)||0:i(this,t,arguments[1])}})},function(t,e,n){var r=n(1);r(r.S,"Array",{isArray:n(242)})},function(t,e,n){"use strict";var r=n(1),i=n(58),o=[].join;r(r.P+r.F*(n(126)!=Object||!n(57)(o)),"Array",{join:function(t){return o.call(i(this),void 0===t?",":t)}})},function(t,e,n){"use strict";var r=n(1),i=n(58),o=n(83),s=n(37),a=[].lastIndexOf,c=!!a&&1/[1].lastIndexOf(1,-0)<0;r(r.P+r.F*(c||!n(57)(a)),"Array",{lastIndexOf:function(t){if(c)return a.apply(this,arguments)||0;var e=i(this),n=s(e.length),r=n-1;for(arguments.length>1&&(r=Math.min(r,o(arguments[1]))),r<0&&(r=n+r);r>=0;r--)if(r in e&&e[r]===t)return r||0;return-1}})},function(t,e,n){"use strict";var r=n(1),i=n(62)(1);r(r.P+r.F*!n(57)([].map,!0),"Array",{map:function(t){return i(this,t,arguments[1])}})},function(t,e,n){"use strict";var r=n(1),i=n(325);r(r.S+r.F*n(10)(function(){function t(){}return!(Array.of.call(t)instanceof t)}),"Array",{of:function(){for(var t=0,e=arguments.length,n=new("function"==typeof this?this:Array)(e);e>t;)i(n,t,arguments[t++]);return n.length=e,n}})},function(t,e,n){"use strict";var r=n(1),i=n(321);r(r.P+r.F*!n(57)([].reduceRight,!0),"Array",{reduceRight:function(t){return i(this,t,arguments.length,arguments[1],!0)}})},function(t,e,n){"use strict";var r=n(1),i=n(321);r(r.P+r.F*!n(57)([].reduce,!0),"Array",{reduce:function(t){return i(this,t,arguments.length,arguments[1],!1)}})},function(t,e,n){"use strict";var r=n(1),i=n(327),o=n(91),s=n(95),a=n(37),c=[].slice;r(r.P+r.F*n(10)(function(){i&&c.call(i)}),"Array",{slice:function(t,e){var n=a(this.length),r=o(this);if(e=void 0===e?n:e,"Array"==r)return c.call(this,t,e);for(var i=s(t,n),u=s(e,n),l=a(u-i),h=Array(l),p=0;p9?t:"0"+t};r(r.P+r.F*(i(function(){return"0385-07-25T07:06:39.999Z"!=new Date(-5e13-1).toISOString()})||!i(function(){new Date(NaN).toISOString()})),"Date",{toISOString:function(){if(!isFinite(o.call(this)))throw RangeError("Invalid time value");var t=this,e=t.getUTCFullYear(),n=t.getUTCMilliseconds(),r=e<0?"-":e>9999?"+":"";return r+("00000"+Math.abs(e)).slice(r?-6:-4)+"-"+s(t.getUTCMonth()+1)+"-"+s(t.getUTCDate())+"T"+s(t.getUTCHours())+":"+s(t.getUTCMinutes())+":"+s(t.getUTCSeconds())+"."+(n>99?n:"0"+s(n))+"Z"}})},function(t,e,n){"use strict";var r=n(1),i=n(52),o=n(84);r(r.P+r.F*n(10)(function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})}),"Date",{toJSON:function(t){var e=i(this),n=o(e);return"number"!=typeof n||isFinite(n)?e.toISOString():null}})},function(t,e,n){var r=n(18)("toPrimitive"),i=Date.prototype;r in i||n(51)(i,r,n(510))},function(t,e,n){var r=Date.prototype,i="Invalid Date",o="toString",s=r[o],a=r.getTime;new Date(NaN)+""!=i&&n(47)(r,o,function(){var t=a.call(this);return t===t?s.call(this):i})},function(t,e,n){var r=n(1);r(r.P,"Function",{bind:n(322)})},function(t,e,n){"use strict";var r=n(11),i=n(63),o=n(18)("hasInstance"),s=Function.prototype;o in s||n(24).f(s,o,{value:function(t){if("function"!=typeof this||!r(t))return!1;if(!r(this.prototype))return t instanceof this;for(;t=i(t);)if(this.prototype===t)return!0;return!1}})},function(t,e,n){var r=n(24).f,i=n(82),o=n(41),s=Function.prototype,a=/^\s*function ([^ (]*)/,c="name",u=Object.isExtensible||function(){return!0};c in s||n(29)&&r(s,c,{configurable:!0,get:function(){try{var t=this,e=(""+t).match(a)[1];return o(t,c)||!u(t)||r(t,c,i(5,e)),e}catch(t){return""}}})},function(t,e,n){var r=n(1),i=n(333),o=Math.sqrt,s=Math.acosh;r(r.S+r.F*!(s&&710==Math.floor(s(Number.MAX_VALUE))&&s(1/0)==1/0),"Math",{acosh:function(t){return(t=+t)<1?NaN:t>94906265.62425156?Math.log(t)+Math.LN2:i(t-1+o(t-1)*o(t+1))}})},function(t,e,n){function r(t){return isFinite(t=+t)&&0!=t?t<0?-r(-t):Math.log(t+Math.sqrt(t*t+1)):t}var i=n(1),o=Math.asinh;i(i.S+i.F*!(o&&1/o(0)>0),"Math",{asinh:r})},function(t,e,n){var r=n(1),i=Math.atanh;r(r.S+r.F*!(i&&1/i(-0)<0),"Math",{atanh:function(t){return 0==(t=+t)?t:Math.log((1+t)/(1-t))/2}})},function(t,e,n){var r=n(1),i=n(247);r(r.S,"Math",{cbrt:function(t){return i(t=+t)*Math.pow(Math.abs(t),1/3)}})},function(t,e,n){var r=n(1);r(r.S,"Math",{clz32:function(t){return(t>>>=0)?31-Math.floor(Math.log(t+.5)*Math.LOG2E):32}})},function(t,e,n){var r=n(1),i=Math.exp;r(r.S,"Math",{cosh:function(t){return(i(t=+t)+i(-t))/2}})},function(t,e,n){var r=n(1),i=n(246);r(r.S+r.F*(i!=Math.expm1),"Math",{expm1:i})},function(t,e,n){var r=n(1),i=n(247),o=Math.pow,s=o(2,-52),a=o(2,-23),c=o(2,127)*(2-a),u=o(2,-126),l=function(t){return t+1/s-1/s};r(r.S,"Math",{fround:function(t){var e,n,r=Math.abs(t),o=i(t);return rc||n!=n?o*(1/0):o*n)}})},function(t,e,n){var r=n(1),i=Math.abs;r(r.S,"Math",{hypot:function(t,e){for(var n,r,o=0,s=0,a=arguments.length,c=0;s0?(r=n/c,o+=r*r):o+=n;return c===1/0?1/0:c*Math.sqrt(o)}})},function(t,e,n){var r=n(1),i=Math.imul;r(r.S+r.F*n(10)(function(){return i(4294967295,5)!=-5||2!=i.length}),"Math",{imul:function(t,e){var n=65535,r=+t,i=+e,o=n&r,s=n&i;return 0|o*s+((n&r>>>16)*s+o*(n&i>>>16)<<16>>>0)}})},function(t,e,n){var r=n(1);r(r.S,"Math",{log10:function(t){return Math.log(t)/Math.LN10}})},function(t,e,n){var r=n(1);r(r.S,"Math",{log1p:n(333)})},function(t,e,n){var r=n(1);r(r.S,"Math",{log2:function(t){return Math.log(t)/Math.LN2}})},function(t,e,n){var r=n(1);r(r.S,"Math",{sign:n(247)})},function(t,e,n){var r=n(1),i=n(246),o=Math.exp;r(r.S+r.F*n(10)(function(){return!Math.sinh(-2e-17)!=-2e-17}),"Math",{sinh:function(t){return Math.abs(t=+t)<1?(i(t)-i(-t))/2:(o(t-1)-o(-t-1))*(Math.E/2)}})},function(t,e,n){var r=n(1),i=n(246),o=Math.exp;r(r.S,"Math",{tanh:function(t){var e=i(t=+t),n=i(-t);return e==1/0?1:n==1/0?-1:(e-n)/(o(t)+o(-t))}})},function(t,e,n){var r=n(1);r(r.S,"Math",{trunc:function(t){return(t>0?Math.floor:Math.ceil)(t)}})},function(t,e,n){"use strict";var r=n(14),i=n(41),o=n(91),s=n(240),a=n(84),c=n(10),u=n(94).f,l=n(70).f,h=n(24).f,p=n(173).trim,f="Number",_=r[f],d=_,y=_.prototype,m=o(n(93)(y))==f,g="trim"in String.prototype,v=function(t){var e=a(t,!1);if("string"==typeof e&&e.length>2){e=g?e.trim():p(e,3);var n,r,i,o=e.charCodeAt(0);if(43===o||45===o){if(n=e.charCodeAt(2),88===n||120===n)return NaN}else if(48===o){switch(e.charCodeAt(1)){case 66:case 98:r=2,i=49;break;case 79:case 111:r=8,i=55;break;default:return+e}for(var s,c=e.slice(2),u=0,l=c.length;ui)return NaN;return parseInt(c,r)}}return+e};if(!_(" 0o1")||!_("0b1")||_("+0x1")){_=function(t){var e=arguments.length<1?0:t,n=this;return n instanceof _&&(m?c(function(){y.valueOf.call(n)}):o(n)!=f)?s(new d(v(e)),n,_):v(e)};for(var b,w=n(29)?u(d):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),x=0;w.length>x;x++)i(d,b=w[x])&&!i(_,b)&&h(_,b,l(d,b));_.prototype=y,y.constructor=_,n(47)(r,f,_)}},function(t,e,n){var r=n(1);r(r.S,"Number",{EPSILON:Math.pow(2,-52)})},function(t,e,n){var r=n(1),i=n(14).isFinite;r(r.S,"Number",{isFinite:function(t){return"number"==typeof t&&i(t)}})},function(t,e,n){var r=n(1);r(r.S,"Number",{isInteger:n(329)})},function(t,e,n){var r=n(1);r(r.S,"Number",{isNaN:function(t){return t!=t}})},function(t,e,n){var r=n(1),i=n(329),o=Math.abs;r(r.S,"Number",{isSafeInteger:function(t){return i(t)&&o(t)<=9007199254740991}})},function(t,e,n){var r=n(1);r(r.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},function(t,e,n){var r=n(1);r(r.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991})},function(t,e,n){var r=n(1),i=n(338);r(r.S+r.F*(Number.parseFloat!=i),"Number",{parseFloat:i})},function(t,e,n){var r=n(1),i=n(339);r(r.S+r.F*(Number.parseInt!=i),"Number",{parseInt:i})},function(t,e,n){"use strict";var r=n(1),i=n(83),o=n(319),s=n(343),a=1..toFixed,c=Math.floor,u=[0,0,0,0,0,0],l="Number.toFixed: incorrect invocation!",h="0",p=function(t,e){for(var n=-1,r=e;++n<6;)r+=t*u[n],u[n]=r%1e7,r=c(r/1e7)},f=function(t){for(var e=6,n=0;--e>=0;)n+=u[e],u[e]=c(n/t),n=n%t*1e7},_=function(){for(var t=6,e="";--t>=0;)if(""!==e||0===t||0!==u[t]){var n=String(u[t]);e=""===e?n:e+s.call(h,7-n.length)+n}return e},d=function(t,e,n){return 0===e?n:e%2===1?d(t,e-1,n*t):d(t*t,e/2,n)},y=function(t){for(var e=0,n=t;n>=4096;)e+=12,n/=4096;for(;n>=2;)e+=1,n/=2;return e};r(r.P+r.F*(!!a&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!n(10)(function(){a.call({})})),"Number",{toFixed:function(t){var e,n,r,a,c=o(this,l),u=i(t),m="",g=h;if(u<0||u>20)throw RangeError(l);if(c!=c)return"NaN";if(c<=-1e21||c>=1e21)return String(c);if(c<0&&(m="-",c=-c),c>1e-21)if(e=y(c*d(2,69,1))-69,n=e<0?c*d(2,-e,1):c/d(2,e,1),n*=4503599627370496,e=52-e,e>0){for(p(0,n),r=u;r>=7;)p(1e7,0),r-=7;for(p(d(10,r,1),0),r=e-1;r>=23;)f(1<<23),r-=23;f(1<0?(a=g.length,g=m+(a<=u?"0."+s.call(h,u-a)+g:g.slice(0,a-u)+"."+g.slice(a-u))):g=m+g,g}})},function(t,e,n){"use strict";var r=n(1),i=n(10),o=n(319),s=1..toPrecision;r(r.P+r.F*(i(function(){return"1"!==s.call(1,void 0)})||!i(function(){s.call({})})),"Number",{toPrecision:function(t){var e=o(this,"Number#toPrecision: incorrect invocation!");return void 0===t?s.call(e):s.call(e,t)}})},function(t,e,n){var r=n(1);r(r.S+r.F,"Object",{assign:n(334)})},function(t,e,n){var r=n(1);r(r.S,"Object",{create:n(93)})},function(t,e,n){var r=n(1);r(r.S+r.F*!n(29),"Object",{defineProperties:n(335)})},function(t,e,n){var r=n(1);r(r.S+r.F*!n(29),"Object",{defineProperty:n(24).f})},function(t,e,n){var r=n(11),i=n(81).onFreeze;n(64)("freeze",function(t){return function(e){return t&&r(e)?t(i(e)):e}})},function(t,e,n){var r=n(58),i=n(70).f;n(64)("getOwnPropertyDescriptor",function(){return function(t,e){return i(r(t),e)}})},function(t,e,n){n(64)("getOwnPropertyNames",function(){return n(336).f})},function(t,e,n){var r=n(52),i=n(63);n(64)("getPrototypeOf",function(){return function(t){return i(r(t))}})},function(t,e,n){var r=n(11);n(64)("isExtensible",function(t){return function(e){return!!r(e)&&(!t||t(e))}})},function(t,e,n){var r=n(11);n(64)("isFrozen",function(t){return function(e){return!r(e)||!!t&&t(e)}})},function(t,e,n){var r=n(11);n(64)("isSealed",function(t){return function(e){return!r(e)||!!t&&t(e)}})},function(t,e,n){var r=n(1);r(r.S,"Object",{is:n(340)})},function(t,e,n){var r=n(52),i=n(108);n(64)("keys",function(){return function(t){return i(r(t))}})},function(t,e,n){var r=n(11),i=n(81).onFreeze;n(64)("preventExtensions",function(t){return function(e){return t&&r(e)?t(i(e)):e}})},function(t,e,n){var r=n(11),i=n(81).onFreeze;n(64)("seal",function(t){return function(e){return t&&r(e)?t(i(e)):e}})},function(t,e,n){var r=n(1);r(r.S,"Object",{setPrototypeOf:n(248).set})},function(t,e,n){var r=n(1),i=n(338);r(r.G+r.F*(parseFloat!=i),{parseFloat:i})},function(t,e,n){var r=n(1),i=n(339);r(r.G+r.F*(parseInt!=i),{parseInt:i})},function(t,e,n){var r=n(1),i=n(80),o=n(6),s=(n(14).Reflect||{}).apply,a=Function.apply;r(r.S+r.F*!n(10)(function(){s(function(){})}),"Reflect",{apply:function(t,e,n){var r=i(t),c=o(n);return s?s(r,e,c):a.call(r,e,c)}})},function(t,e,n){var r=n(1),i=n(93),o=n(80),s=n(6),a=n(11),c=n(10),u=n(322),l=(n(14).Reflect||{}).construct,h=c(function(){function t(){}return!(l(function(){},[],t)instanceof t)}),p=!c(function(){l(function(){})});r(r.S+r.F*(h||p),"Reflect",{construct:function(t,e){o(t),s(e);var n=arguments.length<3?t:o(arguments[2]);if(p&&!h)return l(t,e,n);if(t==n){switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3])}var r=[null];return r.push.apply(r,e),new(u.apply(t,r))}var c=n.prototype,f=i(a(c)?c:Object.prototype),_=Function.apply.call(t,f,e);return a(_)?_:f}})},function(t,e,n){var r=n(24),i=n(1),o=n(6),s=n(84);i(i.S+i.F*n(10)(function(){Reflect.defineProperty(r.f({},1,{value:1}),1,{value:2})}),"Reflect",{defineProperty:function(t,e,n){o(t),e=s(e,!0),o(n);try{return r.f(t,e,n),!0}catch(t){return!1}}})},function(t,e,n){var r=n(1),i=n(70).f,o=n(6);r(r.S,"Reflect",{deleteProperty:function(t,e){var n=i(o(t),e);return!(n&&!n.configurable)&&delete t[e]}})},function(t,e,n){"use strict";var r=n(1),i=n(6),o=function(t){this._t=i(t),this._i=0;var e,n=this._k=[];for(e in t)n.push(e)};n(331)(o,"Object",function(){var t,e=this,n=e._k;do if(e._i>=n.length)return{value:void 0,done:!0};while(!((t=n[e._i++])in e._t));return{value:t,done:!1}}),r(r.S,"Reflect",{enumerate:function(t){return new o(t)}})},function(t,e,n){var r=n(70),i=n(1),o=n(6);i(i.S,"Reflect",{getOwnPropertyDescriptor:function(t,e){return r.f(o(t),e)}})},function(t,e,n){var r=n(1),i=n(63),o=n(6);r(r.S,"Reflect",{getPrototypeOf:function(t){return i(o(t))}})},function(t,e,n){function r(t,e){var n,a,l=arguments.length<3?t:arguments[2];return u(t)===l?t[e]:(n=i.f(t,e))?s(n,"value")?n.value:void 0!==n.get?n.get.call(l):void 0:c(a=o(t))?r(a,e,l):void 0}var i=n(70),o=n(63),s=n(41),a=n(1),c=n(11),u=n(6);a(a.S,"Reflect",{get:r})},function(t,e,n){var r=n(1);r(r.S,"Reflect",{has:function(t,e){return e in t}})},function(t,e,n){var r=n(1),i=n(6),o=Object.isExtensible;r(r.S,"Reflect",{isExtensible:function(t){return i(t),!o||o(t)}})},function(t,e,n){var r=n(1);r(r.S,"Reflect",{ownKeys:n(514)})},function(t,e,n){var r=n(1),i=n(6),o=Object.preventExtensions;r(r.S,"Reflect",{preventExtensions:function(t){i(t);try{return o&&o(t),!0}catch(t){return!1}}})},function(t,e,n){var r=n(1),i=n(248);i&&r(r.S,"Reflect",{setPrototypeOf:function(t,e){i.check(t,e);try{return i.set(t,e),!0}catch(t){return!1}}})},function(t,e,n){function r(t,e,n){var c,p,f=arguments.length<4?t:arguments[3],_=o.f(l(t),e);if(!_){if(h(p=s(t)))return r(p,e,n,f);_=u(0)}return a(_,"value")?!(_.writable===!1||!h(f))&&(c=o.f(f,e)||u(0),c.value=n,i.f(f,e,c),!0):void 0!==_.set&&(_.set.call(f,n),!0)}var i=n(24),o=n(70),s=n(63),a=n(41),c=n(1),u=n(82),l=n(6),h=n(11);c(c.S,"Reflect",{set:r})},function(t,e,n){var r=n(14),i=n(240),o=n(24).f,s=n(94).f,a=n(243),c=n(239),u=r.RegExp,l=u,h=u.prototype,p=/a/g,f=/a/g,_=new u(p)!==p;if(n(29)&&(!_||n(10)(function(){return f[n(18)("match")]=!1,u(p)!=p||u(f)==f||"/a/i"!=u(p,"i")}))){u=function(t,e){var n=this instanceof u,r=a(t),o=void 0===e;return!n&&r&&t.constructor===u&&o?t:i(_?new l(r&&!o?t.source:t,e):l((r=t instanceof u)?t.source:t,r&&o?c.call(t):e),n?this:h,u)};for(var d=(function(t){t in u||o(u,t,{configurable:!0,get:function(){return l[t]},set:function(e){l[t]=e}})}),y=s(l),m=0;y.length>m;)d(y[m++]);h.constructor=u,u.prototype=h,n(47)(r,"RegExp",u)}n(129)("RegExp")},function(t,e,n){"use strict";n(346);var r=n(6),i=n(239),o=n(29),s="toString",a=/./[s],c=function(t){n(47)(RegExp.prototype,s,t,!0)};n(10)(function(){return"/a/b"!=a.call({source:"a",flags:"b"})})?c(function(){var t=r(this);return"/".concat(t.source,"/","flags"in t?t.flags:!o&&t instanceof RegExp?i.call(t):void 0)}):a.name!=s&&c(function(){return a.call(this)})},function(t,e,n){"use strict";n(48)("anchor",function(t){return function(e){return t(this,"a","name",e)}})},function(t,e,n){"use strict";n(48)("big",function(t){return function(){return t(this,"big","","")}})},function(t,e,n){"use strict";n(48)("blink",function(t){return function(){return t(this,"blink","","")}})},function(t,e,n){"use strict";n(48)("bold",function(t){return function(){return t(this,"b","","")}})},function(t,e,n){"use strict";var r=n(1),i=n(342)(!1);r(r.P,"String",{codePointAt:function(t){return i(this,t)}})},function(t,e,n){"use strict";var r=n(1),i=n(37),o=n(250),s="endsWith",a=""[s];r(r.P+r.F*n(238)(s),"String",{endsWith:function(t){var e=o(this,t,s),n=arguments.length>1?arguments[1]:void 0,r=i(e.length),c=void 0===n?r:Math.min(i(n),r),u=String(t);return a?a.call(e,u,c):e.slice(c-u.length,c)===u}})},function(t,e,n){"use strict";n(48)("fixed",function(t){return function(){return t(this,"tt","","")}})},function(t,e,n){"use strict";n(48)("fontcolor",function(t){return function(e){return t(this,"font","color",e)}})},function(t,e,n){"use strict";n(48)("fontsize",function(t){return function(e){return t(this,"font","size",e)}})},function(t,e,n){var r=n(1),i=n(95),o=String.fromCharCode,s=String.fromCodePoint;r(r.S+r.F*(!!s&&1!=s.length),"String",{fromCodePoint:function(t){for(var e,n=[],r=arguments.length,s=0;r>s;){if(e=+arguments[s++],i(e,1114111)!==e)throw RangeError(e+" is not a valid code point");n.push(e<65536?o(e):o(((e-=65536)>>10)+55296,e%1024+56320))}return n.join("")}})},function(t,e,n){"use strict";var r=n(1),i=n(250),o="includes";r(r.P+r.F*n(238)(o),"String",{includes:function(t){return!!~i(this,t,o).indexOf(t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){"use strict";n(48)("italics",function(t){return function(){return t(this,"i","","")}})},function(t,e,n){"use strict";n(48)("link",function(t){return function(e){return t(this,"a","href",e)}})},function(t,e,n){var r=n(1),i=n(58),o=n(37);r(r.S,"String",{raw:function(t){for(var e=i(t.raw),n=o(e.length),r=arguments.length,s=[],a=0;n>a;)s.push(String(e[a++])),a1?arguments[1]:void 0,e.length)),r=String(t);return a?a.call(e,r,n):e.slice(n,n+r.length)===r}})},function(t,e,n){"use strict";n(48)("strike",function(t){return function(){return t(this,"strike","","")}})},function(t,e,n){"use strict";n(48)("sub",function(t){return function(){return t(this,"sub","","")}})},function(t,e,n){"use strict";n(48)("sup",function(t){return function(){return t(this,"sup","","")}})},function(t,e,n){"use strict";n(173)("trim",function(t){return function(){return t(this,3)}})},function(t,e,n){"use strict";var r=n(1),i=n(174),o=n(252),s=n(6),a=n(95),c=n(37),u=n(11),l=n(14).ArrayBuffer,h=n(341),p=o.ArrayBuffer,f=o.DataView,_=i.ABV&&l.isView,d=p.prototype.slice,y=i.VIEW,m="ArrayBuffer";r(r.G+r.W+r.F*(l!==p),{ArrayBuffer:p}),r(r.S+r.F*!i.CONSTR,m,{isView:function(t){return _&&_(t)||u(t)&&y in t}}),r(r.P+r.U+r.F*n(10)(function(){return!new p(2).slice(1,void 0).byteLength}),m,{slice:function(t,e){if(void 0!==d&&void 0===e)return d.call(s(this),t);for(var n=s(this).byteLength,r=a(t,n),i=a(void 0===e?n:e,n),o=new(h(this,p))(c(i-r)),u=new f(this),l=new f(o),_=0;r0?arguments[0]:void 0)}},{add:function(t){return r.def(this,t,!0)}},r,!1,!0)},function(t,e,n){var r=n(69),i=n(6),o=r.key,s=r.set;r.exp({defineMetadata:function(t,e,n,r){s(t,e,i(n),o(r))}})},function(t,e,n){var r=n(69),i=n(6),o=r.key,s=r.map,a=r.store;r.exp({deleteMetadata:function(t,e){var n=arguments.length<3?void 0:o(arguments[2]),r=s(i(e),n,!1);if(void 0===r||!r.delete(t))return!1;if(r.size)return!0;var c=a.get(e);return c.delete(n),!!c.size||a.delete(e)}})},function(t,e,n){var r=n(351),i=n(507),o=n(69),s=n(6),a=n(63),c=o.keys,u=o.key,l=function(t,e){var n=c(t,e),o=a(t);if(null===o)return n;var s=l(o,e);return s.length?n.length?i(new r(n.concat(s))):s:n};o.exp({getMetadataKeys:function(t){return l(s(t),arguments.length<2?void 0:u(arguments[1]))}})},function(t,e,n){var r=n(69),i=n(6),o=n(63),s=r.has,a=r.get,c=r.key,u=function(t,e,n){var r=s(t,e,n);if(r)return a(t,e,n);var i=o(e);return null!==i?u(t,i,n):void 0};r.exp({getMetadata:function(t,e){return u(t,i(e),arguments.length<3?void 0:c(arguments[2]))}})},function(t,e,n){var r=n(69),i=n(6),o=r.keys,s=r.key;r.exp({getOwnMetadataKeys:function(t){return o(i(t),arguments.length<2?void 0:s(arguments[1]))}})},function(t,e,n){var r=n(69),i=n(6),o=r.get,s=r.key;r.exp({getOwnMetadata:function(t,e){return o(t,i(e),arguments.length<3?void 0:s(arguments[2]))}})},function(t,e,n){var r=n(69),i=n(6),o=n(63),s=r.has,a=r.key,c=function(t,e,n){var r=s(t,e,n);if(r)return!0;var i=o(e);return null!==i&&c(t,i,n)};r.exp({hasMetadata:function(t,e){return c(t,i(e),arguments.length<3?void 0:a(arguments[2]))}})},function(t,e,n){var r=n(69),i=n(6),o=r.has,s=r.key;r.exp({hasOwnMetadata:function(t,e){return o(t,i(e),arguments.length<3?void 0:s(arguments[2]))}})},function(t,e,n){var r=n(69),i=n(6),o=n(80),s=r.key,a=r.set;r.exp({metadata:function(t,e){return function(n,r){a(t,e,(void 0!==r?i:o)(n),s(r))}}})},function(t,e,n){e=t.exports=n(177)(),e.push([t.i,'@import url("//fonts.googleapis.com/css?family=Roboto:300,400,700");@import url("//fonts.googleapis.com/css?family=Montserrat:400,700");redoc.loading{position:relative;display:block;min-height:350px}@keyframes rotate{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}redoc.loading:before{font-family:Helvetica;content:"Loading";font-size:24px;text-align:center;padding-top:40px;color:#0033a0;font-weight:400;display:block;top:0;bottom:0;left:0;right:0;background-color:#fff;z-index:9999}redoc.loading:after,redoc.loading:before{position:absolute;opacity:1;transition:all .6s ease-out}redoc.loading:after{z-index:10000;background-image:url(\'data:image/svg+xml;utf8,\');animation:2s rotate linear infinite;width:50px;height:50px;content:"";left:50%;margin-left:-25px;background-size:cover;top:75px}redoc.loading-remove:after,redoc.loading-remove:before{opacity:0}',""]); +},function(t,e,n){e=t.exports=n(177)(),e.push([t.i,".dk-select,.dk-select *,.dk-select-multi,.dk-select-multi *,.dk-select-multi :after,.dk-select-multi :before,.dk-select :after,.dk-select :before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.dk-select,.dk-select-multi{position:relative;display:inline-block;vertical-align:middle;line-height:1.5em;width:200px;cursor:pointer}.dk-selected{width:100%;white-space:nowrap;overflow:hidden;position:relative;background-color:#fff;border:1px solid #ccc;border-radius:.4em;padding:0 1.5em 0 .5em;-o-text-overflow:ellipsis;text-overflow:ellipsis}.dk-selected:after,.dk-selected:before{content:'';display:block;position:absolute;right:0}.dk-selected:before{top:50%;border:solid transparent;border-width:.25em .25em 0;border-top-color:#ccc;margin:-.125em .5em 0 0}.dk-selected:after{top:0;height:100%;border-left:1px solid #ccc;margin:0 1.5em 0 0}.dk-selected-disabled{color:#bbb}.dk-select .dk-select-options{position:absolute;display:none;left:0;right:0}.dk-select-open-up .dk-select-options{border-radius:.4em .4em 0 0;margin-bottom:-1px;bottom:100%}.dk-select-open-down .dk-select-options{border-radius:0 0 .4em .4em;margin-top:-1px;top:100%}.dk-select-multi .dk-select-options{max-height:10em}.dk-select-options{background-color:#fff;border:1px solid #ccc;border-radius:.4em;list-style:none;margin:0;max-height:10.5em;overflow-x:hidden;overflow-y:auto;padding:.25em 0;width:auto;z-index:100}.dk-option-selected{background-color:#3297fd;color:#fff}.dk-select-options-highlight .dk-option-selected{background-color:transparent;color:inherit}.dk-option{padding:0 .5em}.dk-select-options .dk-option-highlight{background-color:#3297fd;color:#fff}.dk-select-options .dk-option-disabled{color:#bbb;background-color:transparent}.dk-select-options .dk-option-hidden{display:none}.dk-optgroup{border:solid #ccc;border-width:1px 0;padding:.25em 0}.dk-optgroup,.dk-optgroup+.dk-option{margin-top:.25em}.dk-optgroup+.dk-optgroup{border-top-width:0;margin-top:0}.dk-optgroup:nth-child(2){padding-top:0;border-top:none;margin-top:0}.dk-optgroup:last-child{border-bottom-width:0;margin-bottom:0;padding-bottom:0}.dk-optgroup-label{padding:0 .5em .25em;font-weight:700;width:100%}.dk-optgroup-options{list-style:none;padding-left:0}.dk-optgroup-options li{padding-left:1.2em}.dk-select-open-up .dk-selected{border-top-left-radius:0;border-top-right-radius:0;border-color:#3297fd}.dk-select-open-down .dk-selected{border-bottom-left-radius:0;border-bottom-right-radius:0;border-color:#3297fd}.dk-select-open-down .dk-selected:before,.dk-select-open-up .dk-selected:before{border-width:0 .25em .25em;border-bottom-color:#3297fd}.dk-select-open-down .dk-selected:after,.dk-select-open-up .dk-selected:after{border-left-color:#3297fd}.dk-select-multi:focus .dk-select-options,.dk-select-open-down .dk-select-options,.dk-select-open-up .dk-select-options{display:block;border-color:#3297fd}.dk-select-multi:focus,.dk-select-multi:hover{outline:none}.dk-selected:focus,.dk-selected:hover{outline:none;border-color:#3297fd}.dk-selected:focus:before,.dk-selected:hover:before{border-top-color:#3297fd}.dk-selected:focus:after,.dk-selected:hover:after{border-left-color:#3297fd}.dk-select-disabled{opacity:.6;color:#bbb;cursor:not-allowed}.dk-select-disabled .dk-selected:focus,.dk-select-disabled .dk-selected:hover{border-color:inherit}.dk-select-disabled .dk-selected:focus:before,.dk-select-disabled .dk-selected:hover:before{border-top-color:inherit}.dk-select-disabled .dk-selected:focus:after,.dk-select-disabled .dk-selected:hover:after{border-left-color:inherit}select[data-dkcacheid]{display:none}",""])},function(t,e,n){e=t.exports=n(177)(),e.push([t.i,"/*! Hint.css (base version) - v2.3.2 - 2016-07-28\n* http://kushagragour.in/lab/hint/\n* Copyright (c) 2016 Kushagra Gour; Licensed */[class*=hint--]{position:relative;display:inline-block}[class*=hint--]:after,[class*=hint--]:before{position:absolute;-webkit-transform:translateZ(0);-moz-transform:translateZ(0);transform:translateZ(0);visibility:hidden;opacity:0;z-index:1000000;pointer-events:none;-webkit-transition:.3s ease;-moz-transition:.3s ease;transition:.3s ease;-webkit-transition-delay:0ms;-moz-transition-delay:0ms;transition-delay:0ms}[class*=hint--]:hover:after,[class*=hint--]:hover:before{visibility:visible;opacity:1;-webkit-transition-delay:.1s;-moz-transition-delay:.1s;transition-delay:.1s}[class*=hint--]:before{content:'';position:absolute;background:transparent;border:6px solid transparent;z-index:1000001}[class*=hint--]:after{background:#383838;color:#fff;padding:8px 10px;font-size:12px;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;line-height:12px;white-space:nowrap}[class*=hint--][aria-label]:after{content:attr(aria-label)}[class*=hint--][data-hint]:after{content:attr(data-hint)}[aria-label='']:after,[aria-label='']:before,[data-hint='']:after,[data-hint='']:before{display:none!important}.hint--top-left:before,.hint--top-right:before,.hint--top:before{border-top-color:#383838}.hint--bottom-left:before,.hint--bottom-right:before,.hint--bottom:before{border-bottom-color:#383838}.hint--left:before{border-left-color:#383838}.hint--right:before{border-right-color:#383838}.hint--top:before{margin-bottom:-11px}.hint--top:after,.hint--top:before{bottom:100%;left:50%}.hint--top:before{left:calc(50% - 6px)}.hint--top:after{-webkit-transform:translateX(-50%);-moz-transform:translateX(-50%);transform:translateX(-50%)}.hint--top:hover:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.hint--top:hover:after{-webkit-transform:translateX(-50%) translateY(-8px);-moz-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}.hint--bottom:before{margin-top:-11px}.hint--bottom:after,.hint--bottom:before{top:100%;left:50%}.hint--bottom:before{left:calc(50% - 6px)}.hint--bottom:after{-webkit-transform:translateX(-50%);-moz-transform:translateX(-50%);transform:translateX(-50%)}.hint--bottom:hover:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.hint--bottom:hover:after{-webkit-transform:translateX(-50%) translateY(8px);-moz-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}.hint--right:before{margin-left:-11px;margin-bottom:-6px}.hint--right:after{margin-bottom:-14px}.hint--right:after,.hint--right:before{left:100%;bottom:50%}.hint--right:hover:after,.hint--right:hover:before{-webkit-transform:translateX(8px);-moz-transform:translateX(8px);transform:translateX(8px)}.hint--left:before{margin-right:-11px;margin-bottom:-6px}.hint--left:after{margin-bottom:-14px}.hint--left:after,.hint--left:before{right:100%;bottom:50%}.hint--left:hover:after,.hint--left:hover:before{-webkit-transform:translateX(-8px);-moz-transform:translateX(-8px);transform:translateX(-8px)}.hint--top-left:before{margin-bottom:-11px}.hint--top-left:after,.hint--top-left:before{bottom:100%;left:50%}.hint--top-left:before{left:calc(50% - 6px)}.hint--top-left:after{-webkit-transform:translateX(-100%);-moz-transform:translateX(-100%);transform:translateX(-100%);margin-left:12px}.hint--top-left:hover:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.hint--top-left:hover:after{-webkit-transform:translateX(-100%) translateY(-8px);-moz-transform:translateX(-100%) translateY(-8px);transform:translateX(-100%) translateY(-8px)}.hint--top-right:before{margin-bottom:-11px}.hint--top-right:after,.hint--top-right:before{bottom:100%;left:50%}.hint--top-right:before{left:calc(50% - 6px)}.hint--top-right:after{-webkit-transform:translateX(0);-moz-transform:translateX(0);transform:translateX(0);margin-left:-12px}.hint--top-right:hover:after,.hint--top-right:hover:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.hint--bottom-left:before{margin-top:-11px}.hint--bottom-left:after,.hint--bottom-left:before{top:100%;left:50%}.hint--bottom-left:before{left:calc(50% - 6px)}.hint--bottom-left:after{-webkit-transform:translateX(-100%);-moz-transform:translateX(-100%);transform:translateX(-100%);margin-left:12px}.hint--bottom-left:hover:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.hint--bottom-left:hover:after{-webkit-transform:translateX(-100%) translateY(8px);-moz-transform:translateX(-100%) translateY(8px);transform:translateX(-100%) translateY(8px)}.hint--bottom-right:before{margin-top:-11px}.hint--bottom-right:after,.hint--bottom-right:before{top:100%;left:50%}.hint--bottom-right:before{left:calc(50% - 6px)}.hint--bottom-right:after{-webkit-transform:translateX(0);-moz-transform:translateX(0);transform:translateX(0);margin-left:-12px}.hint--bottom-right:hover:after,.hint--bottom-right:hover:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.hint--large:after,.hint--medium:after,.hint--small:after{white-space:normal;line-height:1.4em;word-wrap:break-word}.hint--small:after{width:80px}.hint--medium:after{width:150px}.hint--large:after{width:300px}.hint--always:after,.hint--always:before{opacity:1;visibility:visible}.hint--always.hint--top:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.hint--always.hint--top:after{-webkit-transform:translateX(-50%) translateY(-8px);-moz-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}.hint--always.hint--top-left:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.hint--always.hint--top-left:after{-webkit-transform:translateX(-100%) translateY(-8px);-moz-transform:translateX(-100%) translateY(-8px);transform:translateX(-100%) translateY(-8px)}.hint--always.hint--top-right:after,.hint--always.hint--top-right:before{-webkit-transform:translateY(-8px);-moz-transform:translateY(-8px);transform:translateY(-8px)}.hint--always.hint--bottom:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.hint--always.hint--bottom:after{-webkit-transform:translateX(-50%) translateY(8px);-moz-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}.hint--always.hint--bottom-left:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.hint--always.hint--bottom-left:after{-webkit-transform:translateX(-100%) translateY(8px);-moz-transform:translateX(-100%) translateY(8px);transform:translateX(-100%) translateY(8px)}.hint--always.hint--bottom-right:after,.hint--always.hint--bottom-right:before{-webkit-transform:translateY(8px);-moz-transform:translateY(8px);transform:translateY(8px)}.hint--always.hint--left:after,.hint--always.hint--left:before{-webkit-transform:translateX(-8px);-moz-transform:translateX(-8px);transform:translateX(-8px)}.hint--always.hint--right:after,.hint--always.hint--right:before{-webkit-transform:translateX(8px);-moz-transform:translateX(8px);transform:translateX(8px)}",""])},function(t,e,n){e=t.exports=n(177)(),e.push([t.i,"code[class*=language-],pre[class*=language-]{color:#fff;background:none;text-shadow:0 -.1em .2em #000;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}:not(pre)>code[class*=language-],pre[class*=language-]{background:#4d4033}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto;border:.3em solid #7a6652;border-radius:.5em;box-shadow:inset 1px 1px .5em #000}:not(pre)>code[class*=language-]{padding:.15em .2em .05em;border-radius:.3em;border:.13em solid #7a6652;box-shadow:inset 1px 1px .3em -.1em #000;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#998066}.namespace,.token.punctuation{opacity:.7}.token.boolean,.token.constant,.token.number,.token.property,.token.symbol,.token.tag{color:#d1949e}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#bde052}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url,.token.variable{color:#f5b83d}.token.atrule,.token.attr-value,.token.keyword{color:#d1949e}.token.important,.token.regex{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.deleted{color:red}",""])},function(t,e,n){!function(){if(!window.CustomEvent&&document.createEventObject)return void(window.CustomEvent=function(t,e){if(!arguments.length)throw new Error("Not enough arguments");var n={type:t,bubbles:!1,cancelable:!1,detail:null},r=document.createEventObject();for(var i in n)r[i]=n[i];for(var i in e)r[i]=e[i];return r});try{new CustomEvent("test")}catch(e){var t=function(t,e){if(!arguments.length)throw new Error("Not enough arguments");var n={bubbles:!1,cancelable:!1,detail:null};for(var r in e)n[r]=e[r];var i=document.createEvent("CustomEvent");return i.initCustomEvent(t,n.bubbles,n.cancelable,n.detail),i};t.prototype=(window.CustomEvent||window.Event).prototype,window.CustomEvent=t}}(),function(){if(!document.addEventListener&&window.Element&&window.Event){var t="__events",e="__immediateStopped";Event.prototype.NONE=Event.NONE=0,Event.prototype.CAPTURING_PHASE=Event.CAPTURING_PHASE=1,Event.prototype.AT_TARGET=Event.AT_TARGET=2,Event.prototype.BUBBLING_PHASE=Event.BUBBLING_PHASE=3,Event.prototype.preventDefault=function(){this.cancelable!==!1&&(this.returnValue=!1)},Event.prototype.stopPropagation=function(){this.cancelBubble=!0},Event.prototype.stopImmediatePropagation=function(){this[e]=this.cancelBubble=!0};for(var n=function(t,e){return t.timeStamp=+new Date,t.target||(t.target=t.srcElement||e),t.pageX=t.clientX+document.documentElement.scrollLeft,t.pageY=t.clientY+document.documentElement.scrollTop,"mouseover"==t.type?t.relatedTarget=t.fromElement:"mouseout"==t.type?t.relatedTarget=t.toElement:t.relatedTarget=null,t},r=function(t,e,n){for(var r=0;r-1)){if(t in this)var u=this[t];else{var u={_handler:function(){a.apply(o,arguments)}};this[t]=u}e in u||(u[e]=[]),u[e].push({listener:n,useCapture:i}),c||this.attachEvent("on"+e,u._handler)}},removeEventListener:function(e,n,i){var o=(this[t]||{})[e]||[],s=r(o,n,i);-1!=s&&(o.splice(s,1),o.length||this.detachEvent("on"+e,this[t]._handler))},dispatchEvent:function(t){return t.returnValue=!0,a.call(this,t)}}),u=[Element,window.constructor,document.constructor];u.length;){var l=u.pop();for(var h in c)l.prototype[h]=c[h]}}}(),Array.prototype.forEach||(Array.prototype.forEach=function(t,e){var n,r;if(null==this)throw new TypeError(" this is null or not defined");var i=Object(this),o=i.length>>>0;if("function"!=typeof t)throw new TypeError(t+" is not a function");for(arguments.length>1&&(n=e),r=0;o>r;){var s;r in i&&(s=i[r],t.call(n,s,r,i)),r++}}),Array.prototype.indexOf||(Array.prototype.indexOf=function(t,e){var n;if(null==this)throw new TypeError('"this" is null or not defined');var r=Object(this),i=r.length>>>0;if(0===i)return-1;var o=+e||0;if(Math.abs(o)===1/0&&(o=0),o>=i)return-1;for(n=Math.max(o>=0?o:i-Math.abs(o),0);i>n;){if(n in r&&r[n]===t)return n;n++}return-1}),function(e){var r;try{r=n(1077)}catch(t){}t.exports=e(window,document,r)}(function(t,e,n,r){var i,o=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),s=t.parent!==t.self,a=-1!==navigator.appVersion.indexOf("MSIE"),c=function(n,r){var i,o;if(this===t)return new c(n,r);for("string"==typeof n&&"#"===n[0]&&(n=e.getElementById(n.substr(1))),i=0;i: ",n),!1):"SELECT"===n.nodeName?this.init(n,r):void 0:(console.error("You must pass a select to DropKick"),!1)},u=function(){},l={initialize:u,mobile:!1,change:u,open:u,close:u,search:"strict",bubble:!0},h={hasClass:function(t,e){var n=new RegExp("(^|\\s+)"+e+"(\\s+|$)");return t&&n.test(t.className)},addClass:function(t,e){t&&!h.hasClass(t,e)&&(t.className+=" "+e)},removeClass:function(t,e){var n=new RegExp("(^|\\s+)"+e+"(\\s+|$)");t&&(t.className=t.className.replace(n," "))},toggleClass:function(t,e){var n=h.hasClass(t,e)?"remove":"add";h[n+"Class"](t,e)},extend:function(t){return Array.prototype.slice.call(arguments,1).forEach(function(e){if(e)for(var n in e)t[n]=e[n]}),t},offset:function(n){var r=n.getBoundingClientRect()||{top:0,left:0},i=e.documentElement,o=a?i.scrollTop:t.pageYOffset,s=a?i.scrollLeft:t.pageXOffset;return{top:r.top+o-i.clientTop,left:r.left+s-i.clientLeft}},position:function(t,e){for(var n={top:0,left:0};t&&t!==e;)n.top+=t.offsetTop,n.left+=t.offsetLeft,t=t.parentNode;return n},closest:function(t,e){for(;t;){if(t===e)return t;t=t.parentNode}return!1},create:function(t,n){var r,i=e.createElement(t);n||(n={});for(r in n)n.hasOwnProperty(r)&&("innerHTML"===r?i.innerHTML=n[r]:i.setAttribute(r,n[r]));return i},deferred:function(e){return function(){var n=arguments,r=this;t.setTimeout(function(){e.apply(r,n)},1)}}};return c.cache={},c.uid=0,c.prototype={add:function(t,n){var r,i,o;"string"==typeof t&&(r=t,t=e.createElement("option"),t.text=r),"OPTION"===t.nodeName&&(i=h.create("li",{class:"dk-option","data-value":t.value,text:t.text,innerHTML:t.innerHTML,role:"option","aria-selected":"false",id:"dk"+this.data.cacheID+"-"+(t.id||t.value.replace(" ","-"))}),h.addClass(i,t.className),this.length+=1,t.disabled&&(h.addClass(i,"dk-option-disabled"),i.setAttribute("aria-disabled","true")),t.hidden&&(h.addClass(i,"dk-option-hidden"),i.setAttribute("aria-hidden","true")),this.data.select.add(t,n),"number"==typeof n&&(n=this.item(n)),o=this.options.indexOf(n),o>-1?(n.parentNode.insertBefore(i,n),this.options.splice(o,0,i)):(this.data.elem.lastChild.appendChild(i),this.options.push(i)),i.addEventListener("mouseover",this),t.selected&&this.select(o))},item:function(t){return t=0>t?this.options.length+t:t,this.options[t]||null},remove:function(t){var e=this.item(t);e.parentNode.removeChild(e),this.options.splice(t,1),this.data.select.remove(t),this.select(this.data.select.selectedIndex),this.length-=1},init:function(t,n){var r,a=c.build(t,"dk"+c.uid);if(this.data={},this.data.select=t,this.data.elem=a.elem,this.data.settings=h.extend({},l,n),this.disabled=t.disabled,this.form=t.form,this.length=t.length,this.multiple=t.multiple,this.options=a.options.slice(0),this.selectedIndex=t.selectedIndex,this.selectedOptions=a.selected.slice(0),this.value=t.value,this.data.cacheID=c.uid,c.cache[this.data.cacheID]=this,this.data.settings.initialize.call(this),c.uid+=1,this._changeListener||(t.addEventListener("change",this),this._changeListener=!0),!o||this.data.settings.mobile){if(t.parentNode.insertBefore(this.data.elem,t),t.setAttribute("data-dkCacheId",this.data.cacheID),this.data.elem.addEventListener("click",this),this.data.elem.addEventListener("keydown",this),this.data.elem.addEventListener("keypress",this),this.form&&this.form.addEventListener("reset",this),!this.multiple)for(r=0;rn,o=c>n,s=i&&!o?"-up":"-down",this.isOpen=!0,h.addClass(u,"dk-select-open"+s),l.setAttribute("aria-expanded","true"),this._scrollTo(this.options.length-1),this._scrollTo(this.selectedIndex),void this.data.settings.open.call(this))}),disable:function(t,e){var n="dk-option-disabled";0!==arguments.length&&"boolean"!=typeof t||(e=t===r,t=this.data.elem,n="dk-select-disabled",this.disabled=e),e===r&&(e=!0),"number"==typeof t&&(t=this.item(t)),e?(t.setAttribute("aria-disabled",!0),h.addClass(t,n)):(t.setAttribute("aria-disabled",!1),h.removeClass(t,n))},hide:function(t,e){var n="dk-option-hidden";e===r&&(e=!0),t=this.item(t),e?(t.setAttribute("aria-hidden",!0),h.addClass(t,n)):(t.setAttribute("aria-hidden",!1),h.removeClass(t,n))},select:function(t,e){var n,r,i,o,s=this.data.select;if("number"==typeof t&&(t=this.item(t)),"string"==typeof t)for(n=0;n0&&(!o||this.data.settings.mobile)&&this.dispose().init(this.data.select,this.data.settings)},dispose:function(){return Object.keys(this).length>0&&(!o||this.data.settings.mobile)&&(delete c.cache[this.data.cacheID],this.data.elem.parentNode.removeChild(this.data.elem),this.data.select.removeAttribute("data-dkCacheId")),this},handleEvent:function(t){if(!this.disabled)switch(t.type){case"click":this._delegate(t);break;case"keydown":this._keyHandler(t);break;case"keypress":this._searchOptions(t);break;case"mouseover":this._highlight(t);break;case"reset":this.reset();break;case"change":this.data.settings.change.call(this)}},_delegate:function(e){var n,r,i,o,s=e.target;if(h.hasClass(s,"dk-option-disabled"))return!1;if(this.multiple){if(h.hasClass(s,"dk-option"))if(n=t.getSelection(),"Range"===n.type&&n.collapseToStart(),e.shiftKey)if(i=this.options.indexOf(this.selectedOptions[0]),o=this.options.indexOf(this.selectedOptions[this.selectedOptions.length-1]),r=this.options.indexOf(s),r>i&&o>r&&(r=i),r>o&&o>i&&(o=i),this.reset(!0),o>r)for(;o+1>r;)this.select(r++);else for(;r>o-1;)this.select(r--);else e.ctrlKey||e.metaKey?this.select(s):(this.reset(!0),this.select(s))}else this[this.isOpen?"close":"open"](),h.hasClass(s,"dk-option")&&this.select(s)},_highlight:function(t){var e,n=t.target;if(!this.multiple){for(e=0;ei.length-1?o=i.length-1:0>o&&(o=0),this.data.select.options[o].disabled||(this.reset(!0),this.select(o),this._scrollTo(o));break;case s.space:if(!this.isOpen){t.preventDefault(),this.open();break}case s.tab:case s.enter:for(o=0;oi.offsetHeight?(e+=t.offsetHeight,i.scrollTop=e-i.offsetHeight):0>n&&(i.scrollTop=e)))}},c.build=function(t,e){var n,r,i,o=[],s={elem:null,options:[],selected:[]},a=function(t){var n,r,i,o,c=[];switch(t.nodeName){case"OPTION":n=h.create("li",{class:"dk-option ","data-value":t.value,text:t.text,innerHTML:t.innerHTML,role:"option","aria-selected":"false",id:e+"-"+(t.id||t.value.replace(" ","-"))}),h.addClass(n,t.className),t.disabled&&(h.addClass(n,"dk-option-disabled"),n.setAttribute("aria-disabled","true")),t.hidden&&(h.addClass(n,"dk-option-hidden"),n.setAttribute("aria-hidden","true")),t.selected&&(h.addClass(n,"dk-option-selected"),n.setAttribute("aria-selected","true"),s.selected.push(n)),s.options.push(this.appendChild(n));break;case"OPTGROUP":for(r=h.create("li",{class:"dk-optgroup"}),t.label&&r.appendChild(h.create("div",{class:"dk-optgroup-label",innerHTML:t.label})),i=h.create("ul",{class:"dk-optgroup-options"}),o=t.children.length;o--;c.unshift(t.children[o]));c.forEach(a,i),this.appendChild(r).appendChild(i)}};for(s.elem=h.create("div",{class:"dk-select"+(t.multiple?"-multi":"")}),r=h.create("ul",{class:"dk-select-options",id:e+"-listbox",role:"listbox"}),t.disabled&&(h.addClass(s.elem,"dk-select-disabled"),s.elem.setAttribute("aria-disabled",!0)),s.elem.id=e+(t.id?"-"+t.id:""),h.addClass(s.elem,t.className),t.multiple?(s.elem.setAttribute("tabindex",t.getAttribute("tabindex")||"0"),r.setAttribute("aria-multiselectable","true")):(n=t.options[t.selectedIndex],s.elem.appendChild(h.create("div",{class:"dk-selected "+n.className,tabindex:t.tabindex||0,innerHTML:n?n.text:" ",id:e+"-combobox","aria-live":"assertive","aria-owns":r.id,role:"combobox"})),r.setAttribute("aria-expanded","false")),i=t.children.length;i--;o.unshift(t.children[i]));return o.forEach(a,s.elem.appendChild(r)),s},c.onDocClick=function(t){var e,n;if(1!==t.target.nodeType)return!1;null!==(e=t.target.getAttribute("data-dkcacheid"))&&c.cache[e].focus();for(n in c.cache)h.closest(t.target,c.cache[n].data.elem)||n===e||c.cache[n].disabled||c.cache[n].close()},n!==r&&(n.fn.dropkick=function(){var t=Array.prototype.slice.call(arguments);return n(this).each(function(){t[0]&&"object"!=typeof t[0]?"string"==typeof t[0]&&c.prototype[t[0]].apply(new c(this),t.slice(1)):new c(this,t[0]||{})})}),c})},function(t,e){var n=Object.prototype.hasOwnProperty,r=Object.prototype.toString;t.exports=function(t,e,i){if("[object Function]"!==r.call(e))throw new TypeError("iterator must be a function");var o=t.length;if(o===+o)for(var s=0;s>1,l=-7,h=n?i-1:0,p=n?-1:1,f=t[e+h];for(h+=p,o=f&(1<<-l)-1,f>>=-l,l+=a;l>0;o=256*o+t[e+h],h+=p,l-=8);for(s=o&(1<<-l)-1,o>>=-l,l+=r;l>0;s=256*s+t[e+h],h+=p,l-=8);if(0===o)o=1-u;else{if(o===c)return s?NaN:(f?-1:1)*(1/0);s+=Math.pow(2,r),o-=u}return(f?-1:1)*s*Math.pow(2,o-r)},e.write=function(t,e,n,r,i,o){var s,a,c,u=8*o-i-1,l=(1<>1,p=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,f=r?0:o-1,_=r?1:-1,d=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=l):(s=Math.floor(Math.log(e)/Math.LN2),e*(c=Math.pow(2,-s))<1&&(s--,c*=2),e+=s+h>=1?p/c:p*Math.pow(2,1-h),e*c>=2&&(s++,c/=2),s+h>=l?(a=0,s=l):s+h>=1?(a=(e*c-1)*Math.pow(2,i),s+=h):(a=e*Math.pow(2,h-1)*Math.pow(2,i),s=0));i>=8;t[n+f]=255&a,f+=_,a/=256,i-=8);for(s=s<0;t[n+f]=255&s,f+=_,s/=256,u-=8);t[n+f-_]|=128*d}},function(t,e,n){"use strict";function r(t,e,n){if(3===arguments.length)return r.set(t,e,n);if(2===arguments.length)return r.get(t,e);var i=r.bind(r,t);for(var o in r)r.hasOwnProperty(o)&&(i[o]=r[o].bind(i,t));return i}var i=n(654);t.exports=r,r.get=function(t,e){for(var n=Array.isArray(e)?e:r.parse(e),i=0;i0&&p.splice(0,0,p.splice(f,1)[0]),p.forEach(function(t){var e=c.join(n,t),p=c.join(r,t),f=h[t];a.is$Ref(f)?o(h,t,n,p,s,u,l):i(h,t,e,p,s,u,l)})}}function o(t,e,n,r,o,s,u){if(!o.some(function(n){return n.parent===t&&n.key===e})){var h=null===e?t:t[e],p=l.resolve(n,h.$ref),f=s._resolve(p,u),_=c.parse(r).length,d=l.stripHash(f.path),y=l.getHash(f.path),m=d!==s._root$Ref.path,g=a.isExtended$Ref(h);o.push({$ref:h,parent:t,key:e,pathFromRoot:r,depth:_,file:d,hash:y,value:f.value,circular:f.circular,extended:g,external:m}),i(f.value,null,f.path,r,o,s,u)}}function s(t){t.sort(function(t,e){return t.file!==e.file?t.file0&&e[0]&&(n=n.filter(function(n){return e.indexOf(t[n].pathType)!==-1})),n.map(function(e){return{encoded:e,decoded:"file"===t[e].pathType?a.toFileSystemPath(e,!0):e}})}var o=n(86),s=n(131),a=n(72);t.exports=r,r.prototype.paths=function(t){var e=i(this._$refs,arguments);return e.map(function(t){return t.decoded})},r.prototype.values=function(t){var e=this._$refs,n=i(e,arguments);return n.reduce(function(t,n){return t[n.decoded]=e[n.encoded].value,t},{})},r.prototype.toJSON=r.prototype.values,r.prototype.exists=function(t,e){try{return this._resolve(t,e),!0}catch(t){return!1}},r.prototype.get=function(t,e){return this._resolve(t,e).value},r.prototype.set=function(t,e){t=a.resolve(this._root$Ref.path,t);var n=a.stripHash(t),r=this._$refs[n];if(!r)throw o('Error resolving $ref pointer "%s". \n"%s" not found.',t,n);r.set(t,e)},r.prototype._add=function(t,e){var n=a.stripHash(t),r=new s;return r.path=n,r.value=e,r.$refs=this,this._$refs[n]=r,this._root$Ref=this._root$Ref||r,r},r.prototype._resolve=function(t,e){t=a.resolve(this._root$Ref.path,t);var n=a.stripHash(t),r=this._$refs[n];if(!r)throw o('Error resolving $ref pointer "%s". \n"%s" not found.',t,n);return r.resolve(t,e)},r.prototype._get$Ref=function(t){t=a.resolve(this._root$Ref.path,t);var e=a.stripHash(t);return this._$refs[e]}},function(t,e,n){"use strict";function r(t,e){if(!e.resolve.external)return s.resolve();try{l("Resolving $ref pointers in %s",t.$refs._root$Ref.path);var n=i(t.schema,t.$refs._root$Ref.path+"#",t.$refs,e);return s.all(n)}catch(t){return s.reject(t)}}function i(t,e,n,r){var s=[];return t&&"object"==typeof t&&(a.isExternal$Ref(t)?s.push(o(t,e,n,r)):Object.keys(t).forEach(function(u){var l=c.join(e,u),h=t[u];a.isExternal$Ref(h)?s.push(o(h,l,n,r)):s=s.concat(i(h,l,n,r))})),s}function o(t,e,n,r){l('Resolving $ref pointer "%s" at %s',t.$ref,e);var o=h.resolve(e,t.$ref),a=h.stripHash(o);return t=n._$refs[a],t?s.resolve(t.value):u(o,n,r).then(function(t){l("Resolving $ref pointers in %s",a);var e=i(t,a+"#",n,r);return s.all(e)})}var s=n(85),a=n(131),c=n(178),u=n(354),l=n(99),h=n(72);t.exports=r},function(t,e,n){"use strict";var r=n(697),i=n(86),o=n(85),s=n(72),a=n(99);t.exports={order:100,canRead:function(t){return s.isFileSystemPath(t.url)},read:function(t){return new o(function(e,n){var o;try{o=s.toFileSystemPath(t.url)}catch(e){n(i.uri(e,"Malformed URI: %s",t.url))}a("Opening file: %s",o);try{r.readFile(o,function(t,r){t?n(i(t,'Error opening file "%s"',o)):e(r)})}catch(t){n(i(t,'Error opening file "%s"',o))}})}}},function(t,e,n){"use strict";(function(e,r){function i(t,e,n){return new h(function(s,a){t=u.parse(t),n=n||[],n.push(t.href),o(t,e).then(function(o){if(o.statusCode>=400)throw c({status:o.statusCode},"HTTP ERROR %d",o.statusCode);if(o.statusCode>=300)if(n.length>e.redirects)a(c({status:o.statusCode},"Error downloading %s. \nToo many redirects: \n %s",n[0],n.join(" \n ")));else{if(!o.headers.location)throw c({status:o.statusCode},"HTTP %d redirect with no location header",o.statusCode);l("HTTP %d redirect %s -> %s",o.statusCode,t.href,o.headers.location);var h=u.resolve(t,o.headers.location);i(h,e,n).then(s,a)}else s(o.body||new r(0))}).catch(function(e){a(c(e,"Error downloading",t.href))})})}function o(t,e){return new h(function(n,i){l("GET",t.href);var o="https:"===t.protocol?a:s,c=o.get({hostname:t.hostname,port:t.port,path:t.path,auth:t.auth,headers:e.headers||{},withCredentials:e.withCredentials});"function"==typeof c.setTimeout&&c.setTimeout(e.timeout),c.on("timeout",function(){c.abort()}),c.on("error",i),c.once("response",function(t){t.body=new r(0),t.on("data",function(e){t.body=r.concat([t.body,new r(e)])}),t.on("error",i),t.on("end",function(){n(t)})})})}var s=n(390),a=n(390),c=n(86),u=n(72),l=n(99),h=n(85);t.exports={order:200,headers:null,timeout:5e3,redirects:5,withCredentials:!1,canRead:function(t){return u.isHttp(t.url)},read:function(t){var n=u.parse(t.url);return e.browser&&!n.protocol&&(n.protocol=u.parse(location.href).protocol),i(n,this)}}}).call(e,n(43),n(16).Buffer)},function(t,e,n){"use strict";function r(t,e,n,r){var i=t[e];if("function"==typeof i)return i.apply(t,[n,r]);if(!r){if(i instanceof RegExp)return i.test(n.url);if("string"==typeof i)return i===n.extension;if(Array.isArray(i))return i.indexOf(n.extension)!==-1}return i}var i=n(85),o=n(99);e.all=function(t){return Object.keys(t).filter(function(e){return"object"==typeof t[e]}).map(function(e){return t[e].name=e,t[e]})},e.filter=function(t,e,n){return t.filter(function(t){return!!r(t,e,n)})},e.sort=function(t){return t.forEach(function(t){t.order=t.order||Number.MAX_SAFE_INTEGER}),t.sort(function(t,e){return t.order-e.order})},e.run=function(t,e,n){var s,a,c=0;return new i(function(i,u){function l(){if(s=t[c++],!s)return u(a);try{o(" %s",s.name);var i=r(s,e,n,h);i&&"function"==typeof i.then?i.then(p,f):void 0!==i&&p(i)}catch(t){f(t)}}function h(t,e){t?f(t):p(e)}function p(t){o(" success"),i({plugin:s,result:t})}function f(t){o(" %s",t.message||t),a=t,l()}l()})}},function(t,e){"use strict";t.exports={order:100,canValidate:function(t){return!!t.resolved},validate:function(t){}}},function(t,e,n){"use strict";(function(e,n){var r=e.process&&n.nextTick||e.setImmediate||function(t){setTimeout(t,0)};t.exports=function(t,e){return t?void e.then(function(e){r(function(){t(null,e)})},function(e){r(function(){t(e)})}):e}}).call(e,n(27),n(43))},function(t,e,n){function r(){return"WebkitAppearance"in document.documentElement.style||window.console&&(console.firebug||console.exception&&console.table)||navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31}function i(){var t=arguments,n=this.useColors;if(t[0]=(n?"%c":"")+this.namespace+(n?" %c":" ")+t[0]+(n?"%c ":" ")+"+"+e.humanize(this.diff),!n)return t;var r="color: "+this.color;t=[t[0],r,"color: inherit"].concat(Array.prototype.slice.call(t,1));var i=0,o=0;return t[0].replace(/%[a-z%]/g,function(t){"%%"!==t&&(i++,"%c"===t&&(o=i))}),t.splice(o,0,r),t}function o(){return"object"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}function s(t){try{null==t?e.storage.removeItem("debug"):e.storage.debug=t}catch(t){}}function a(){var t;try{t=e.storage.debug}catch(t){}return t}function c(){try{return window.localStorage}catch(t){}}e=t.exports=n(673),e.log=o,e.formatArgs=i,e.save=s,e.load=a,e.useColors=r,e.storage="undefined"!=typeof chrome&&"undefined"!=typeof chrome.storage?chrome.storage.local:c(),e.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],e.formatters.j=function(t){return JSON.stringify(t)},e.enable(a())},function(t,e,n){function r(){return e.colors[l++%e.colors.length]}function i(t){function n(){}function i(){var t=i,n=+new Date,o=n-(u||n);t.diff=o,t.prev=u,t.curr=n,u=n,null==t.useColors&&(t.useColors=e.useColors()),null==t.color&&t.useColors&&(t.color=r());var s=Array.prototype.slice.call(arguments);s[0]=e.coerce(s[0]),"string"!=typeof s[0]&&(s=["%o"].concat(s));var a=0;s[0]=s[0].replace(/%([a-z%])/g,function(n,r){if("%%"===n)return n;a++;var i=e.formatters[r];if("function"==typeof i){var o=s[a];n=i.call(t,o),s.splice(a,1),a--}return n}),"function"==typeof e.formatArgs&&(s=e.formatArgs.apply(t,s));var c=i.log||e.log||console.log.bind(console);c.apply(t,s)}n.enabled=!1,i.enabled=!0;var o=e.enabled(t)?i:n;return o.namespace=t,o}function o(t){e.save(t);for(var n=(t||"").split(/[\s,]+/),r=n.length,i=0;i1e4)){var e=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(t);if(e){var n=parseFloat(e[1]),r=(e[2]||"ms").toLowerCase();switch(r){case"years":case"year":case"yrs":case"yr":case"y":return n*l;case"days":case"day":case"d":return n*u;case"hours":case"hour":case"hrs":case"hr":case"h":return n*c;case"minutes":case"minute":case"mins":case"min":case"m":return n*a;case"seconds":case"second":case"secs":case"sec":case"s":return n*s;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return n}}}}function r(t){return t>=u?Math.round(t/u)+"d":t>=c?Math.round(t/c)+"h":t>=a?Math.round(t/a)+"m":t>=s?Math.round(t/s)+"s":t+"ms"}function i(t){return o(t,u,"day")||o(t,c,"hour")||o(t,a,"minute")||o(t,s,"second")||t+" ms"}function o(t,e,n){if(!(tr&&" "!==t[_+1],_=o);else if(!l(s))return lt;d=d&&h(s)}c=c||f&&o-_-1>r&&" "!==t[_+1]}return a||c?" "===t[0]&&n>9?lt:c?ut:ct:d&&!i(t)?st:at}function _(t,e,n,r){t.dump=function(){function i(e){return c(t,e)}if(0===e.length)return"''";if(!t.noCompatMode&&ot.indexOf(e)!==-1)return"'"+e+"'";var o=t.indent*Math.max(1,n),a=t.lineWidth===-1?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-o),u=r||t.flowLevel>-1&&n>=t.flowLevel;switch(f(e,u,t.indent,a,i)){case st:return e;case at:return"'"+e.replace(/'/g,"''")+"'";case ct:return"|"+d(e,t.indent)+y(s(e,o));case ut:return">"+d(e,t.indent)+y(s(m(e,a),o));case lt:return'"'+v(e,a)+'"';default:throw new A("impossible error: invalid scalar style")}}()}function d(t,e){var n=" "===t[0]?String(e):"",r="\n"===t[t.length-1],i=r&&("\n"===t[t.length-2]||"\n"===t),o=i?"+":r?"":"-";return n+o+"\n"}function y(t){return"\n"===t[t.length-1]?t.slice(0,-1):t}function m(t,e){for(var n,r,i=/(\n+)([^\n]*)/g,o=function(){var n=t.indexOf("\n");return n=n!==-1?n:t.length,i.lastIndex=n,g(t.slice(0,n),e)}(),s="\n"===t[0]||" "===t[0];r=i.exec(t);){var a=r[1],c=r[2];n=" "===c[0],o+=a+(s||n||""===c?"":"\n")+g(c,e),s=n}return o}function g(t,e){if(""===t||" "===t[0])return t;for(var n,r,i=/ [^ ]/g,o=0,s=0,a=0,c="";n=i.exec(t);)a=n.index,a-o>e&&(r=s>o?s:a,c+="\n"+t.slice(o,r),o=r+1),s=a;return c+="\n",c+=t.length-o>e&&s>o?t.slice(o,s)+"\n"+t.slice(s+1):t.slice(o),c.slice(1)}function v(t){for(var e,n,r="",o=0;o1024&&(a+="? "),a+=t.dump+": ",k(t,e,s,!1,!1)&&(a+=t.dump,c+=a));t.tag=u,t.dump="{"+c+"}"}function I(t,e,n,r){var i,o,s,c,u,l,h="",p=t.tag,f=Object.keys(n);if(t.sortKeys===!0)f.sort();else if("function"==typeof t.sortKeys)f.sort(t.sortKeys);else if(t.sortKeys)throw new A("sortKeys must be a boolean or a function");for(i=0,o=f.length;i1024,u&&(l+=t.dump&&j===t.dump.charCodeAt(0)?"?":"? "),l+=t.dump,u&&(l+=a(t,e)),k(t,e+1,c,!0,u)&&(l+=t.dump&&j===t.dump.charCodeAt(0)?":":": ",l+=t.dump,h+=l));t.tag=p,t.dump=h||"{}"}function C(t,e,n){var r,i,o,s,a,c;for(i=n?t.explicitTypes:t.implicitTypes,o=0,s=i.length;o tag resolver accepts not "'+c+'" style');r=a.represent[c](e,c)}t.dump=r}return!0}return!1}function k(t,e,n,r,i,o){t.tag=null,t.dump=n,C(t,n,!1)||C(t,n,!0);var s=M.call(t.dump);r&&(r=t.flowLevel<0||t.flowLevel>e);var a,c,u="[object Object]"===s||"[object Array]"===s;if(u&&(a=t.duplicates.indexOf(n),c=a!==-1),(null!==t.tag&&"?"!==t.tag||c||2!==t.indent&&e>0)&&(i=!1),c&&t.usedDuplicates[a])t.dump="*ref_"+a;else{if(u&&c&&!t.usedDuplicates[a]&&(t.usedDuplicates[a]=!0),"[object Object]"===s)r&&0!==Object.keys(t.dump).length?(I(t,e,t.dump,i),c&&(t.dump="&ref_"+a+t.dump)):(x(t,e,t.dump),c&&(t.dump="&ref_"+a+" "+t.dump));else if("[object Array]"===s)r&&0!==t.dump.length?(w(t,e,t.dump,i),c&&(t.dump="&ref_"+a+t.dump)):(b(t,e,t.dump),c&&(t.dump="&ref_"+a+" "+t.dump));else{if("[object String]"!==s){if(t.skipInvalid)return!1;throw new A("unacceptable kind of an object to dump "+s)}"?"!==t.tag&&_(t,t.dump,e,o)}null!==t.tag&&"?"!==t.tag&&(t.dump="!<"+t.tag+"> "+t.dump)}return!0}function T(t,e){var n,r,i=[],o=[];for(E(t,i,o),n=0,r=o.length;n>10)+55296,(t-65536&1023)+56320)}function p(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||q,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit, +this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function f(t,e){return new U(e,new z(t.filename,t.input,t.position,t.line,t.position-t.lineStart))}function _(t,e){throw f(t,e)}function d(t,e){t.onWarning&&t.onWarning.call(null,f(t,e))}function y(t,e,n,r){var i,o,s,a;if(e1&&(t.result+=B.repeat("\n",e-1))}function I(t,e,n){var a,c,u,l,h,p,f,_,d,m=t.kind,g=t.result;if(d=t.input.charCodeAt(t.position),o(d)||s(d)||35===d||38===d||42===d||33===d||124===d||62===d||39===d||34===d||37===d||64===d||96===d)return!1;if((63===d||45===d)&&(c=t.input.charCodeAt(t.position+1),o(c)||n&&s(c)))return!1;for(t.kind="scalar",t.result="",u=l=t.position,h=!1;0!==d;){if(58===d){if(c=t.input.charCodeAt(t.position+1),o(c)||n&&s(c))break}else if(35===d){if(a=t.input.charCodeAt(t.position-1),o(a))break}else{if(t.position===t.lineStart&&w(t)||n&&s(d))break;if(r(d)){if(p=t.line,f=t.lineStart,_=t.lineIndent,b(t,!1,-1),t.lineIndent>=e){h=!0,d=t.input.charCodeAt(t.position);continue}t.position=l,t.line=p,t.lineStart=f,t.lineIndent=_;break}}h&&(y(t,u,l,!1),x(t,t.line-p),u=l=t.position,h=!1),i(d)||(l=t.position+1),d=t.input.charCodeAt(++t.position)}return y(t,u,l,!1),!!t.result||(t.kind=m,t.result=g,!1)}function C(t,e){var n,i,o;if(n=t.input.charCodeAt(t.position),39!==n)return!1;for(t.kind="scalar",t.result="",t.position++,i=o=t.position;0!==(n=t.input.charCodeAt(t.position));)if(39===n){if(y(t,i,t.position,!0),n=t.input.charCodeAt(++t.position),39!==n)return!0;i=o=t.position,t.position++}else r(n)?(y(t,i,o,!0),x(t,b(t,!1,e)),i=o=t.position):t.position===t.lineStart&&w(t)?_(t,"unexpected end of the document within a single quoted scalar"):(t.position++,o=t.position);_(t,"unexpected end of the stream within a single quoted scalar")}function k(t,e){var n,i,o,s,u,l;if(l=t.input.charCodeAt(t.position),34!==l)return!1;for(t.kind="scalar",t.result="",t.position++,n=i=t.position;0!==(l=t.input.charCodeAt(t.position));){if(34===l)return y(t,n,t.position,!0),t.position++,!0;if(92===l){if(y(t,n,t.position,!0),l=t.input.charCodeAt(++t.position),r(l))b(t,!1,e);else if(l<256&&it[l])t.result+=ot[l],t.position++;else if((u=c(l))>0){for(o=u,s=0;o>0;o--)l=t.input.charCodeAt(++t.position),(u=a(l))>=0?s=(s<<4)+u:_(t,"expected hexadecimal character");t.result+=h(s),t.position++}else _(t,"unknown escape sequence");n=i=t.position}else r(l)?(y(t,n,i,!0),x(t,b(t,!1,e)),n=i=t.position):t.position===t.lineStart&&w(t)?_(t,"unexpected end of the document within a double quoted scalar"):(t.position++,i=t.position)}_(t,"unexpected end of the stream within a double quoted scalar")}function T(t,e){var n,r,i,s,a,c,u,l,h,p,f,d=!0,y=t.tag,m=t.anchor,v={};if(f=t.input.charCodeAt(t.position),91===f)s=93,u=!1,r=[];else{if(123!==f)return!1;s=125,u=!0,r={}}for(null!==t.anchor&&(t.anchorMap[t.anchor]=r),f=t.input.charCodeAt(++t.position);0!==f;){if(b(t,!0,e),f=t.input.charCodeAt(t.position),f===s)return t.position++,t.tag=y,t.anchor=m,t.kind=u?"mapping":"sequence",t.result=r,!0;d||_(t,"missed comma between flow collection entries"),h=l=p=null,a=c=!1,63===f&&(i=t.input.charCodeAt(t.position+1),o(i)&&(a=c=!0,t.position++,b(t,!0,e))),n=t.line,P(t,e,Y,!1,!0),h=t.tag,l=t.result,b(t,!0,e),f=t.input.charCodeAt(t.position),!c&&t.line!==n||58!==f||(a=!0,f=t.input.charCodeAt(++t.position),b(t,!0,e),P(t,e,Y,!1,!0),p=t.result),u?g(t,r,v,h,l,p):a?r.push(g(t,null,v,h,l,p)):r.push(l),b(t,!0,e),f=t.input.charCodeAt(t.position),44===f?(d=!0,f=t.input.charCodeAt(++t.position)):d=!1}_(t,"unexpected end of the stream within a flow collection")}function E(t,e){var n,o,s,a,c=J,l=!1,h=!1,p=e,f=0,d=!1;if(a=t.input.charCodeAt(t.position),124===a)o=!1;else{if(62!==a)return!1;o=!0}for(t.kind="scalar",t.result="";0!==a;)if(a=t.input.charCodeAt(++t.position),43===a||45===a)J===c?c=43===a?X:K:_(t,"repeat of a chomping mode identifier");else{if(!((s=u(a))>=0))break;0===s?_(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):h?_(t,"repeat of an indentation width identifier"):(p=e+s-1,h=!0)}if(i(a)){do a=t.input.charCodeAt(++t.position);while(i(a));if(35===a)do a=t.input.charCodeAt(++t.position);while(!r(a)&&0!==a)}for(;0!==a;){for(v(t),t.lineIndent=0,a=t.input.charCodeAt(t.position);(!h||t.lineIndentp&&(p=t.lineIndent),r(a))f++;else{if(t.lineIndente)&&0!==i)_(t,"bad indentation of a sequence entry");else if(t.lineIndente)&&(P(t,e,Z,!0,s)&&(m?d=t.result:y=t.result),m||(g(t,h,p,f,d,y),f=d=y=null),b(t,!0,-1),c=t.input.charCodeAt(t.position)),t.lineIndent>e&&0!==c)_(t,"bad indentation of a mapping entry");else if(t.lineIndente?f=1:t.lineIndent===e?f=0:t.lineIndente?f=1:t.lineIndent===e?f=0:t.lineIndent tag; it should be "'+l.kind+'", not "'+t.kind+'"'),l.resolve(t.result)?(t.result=l.construct(t.result),null!==t.anchor&&(t.anchorMap[t.anchor]=t.result)):_(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")):_(t,"unknown tag !<"+t.tag+">");return null!==t.listener&&t.listener("close",t),null!==t.tag||null!==t.anchor||y}function M(t){var e,n,s,a,c=t.position,u=!1;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap={},t.anchorMap={};0!==(a=t.input.charCodeAt(t.position))&&(b(t,!0,-1),a=t.input.charCodeAt(t.position),!(t.lineIndent>0||37!==a));){for(u=!0,a=t.input.charCodeAt(++t.position),e=t.position;0!==a&&!o(a);)a=t.input.charCodeAt(++t.position);for(n=t.input.slice(e,t.position),s=[],n.length<1&&_(t,"directive name must not be less than one character in length");0!==a;){for(;i(a);)a=t.input.charCodeAt(++t.position);if(35===a){do a=t.input.charCodeAt(++t.position);while(0!==a&&!r(a));break}if(r(a))break;for(e=t.position;0!==a&&!o(a);)a=t.input.charCodeAt(++t.position);s.push(t.input.slice(e,t.position))}0!==a&&v(t),W.call(at,n)?at[n](t,n,s):d(t,'unknown document directive "'+n+'"')}return b(t,!0,-1),0===t.lineIndent&&45===t.input.charCodeAt(t.position)&&45===t.input.charCodeAt(t.position+1)&&45===t.input.charCodeAt(t.position+2)?(t.position+=3,b(t,!0,-1)):u&&_(t,"directives end mark is expected"),P(t,t.lineIndent-1,Z,!1,!0),b(t,!0,-1),t.checkLineBreaks&&tt.test(t.input.slice(c,t.position))&&d(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&w(t)?void(46===t.input.charCodeAt(t.position)&&(t.position+=3,b(t,!0,-1))):void(t.position0&&"\0\r\n…\u2028\u2029".indexOf(this.buffer.charAt(r-1))===-1;)if(r-=1,this.position-r>e/2-1){n=" ... ",r+=5;break}for(o="",s=this.position;se/2-1){o=" ... ",s-=5;break}return a=this.buffer.slice(r,s),i.repeat(" ",t)+n+a+o+"\n"+i.repeat(" ",t+this.position-r+n.length)+"^"},r.prototype.toString=function(t){var e,n="";return this.name&&(n+='in "'+this.name+'" '),n+="at line "+(this.line+1)+", column "+(this.column+1),t||(e=this.getSnippet(),e&&(n+=":\n"+e)),n},t.exports=r},function(t,e,n){"use strict";function r(t){if(null===t)return!1;var e,n,r=0,i=t.length,o=u;for(n=0;n64)){if(e<0)return!1;r+=6}return r%8===0}function i(t){var e,n,r=t.replace(/[\r\n=]/g,""),i=r.length,o=u,s=0,c=[];for(e=0;e>16&255),c.push(s>>8&255),c.push(255&s)),s=s<<6|o.indexOf(r.charAt(e));return n=i%4*6,0===n?(c.push(s>>16&255),c.push(s>>8&255),c.push(255&s)):18===n?(c.push(s>>10&255),c.push(s>>2&255)):12===n&&c.push(s>>4&255),a?new a(c):c}function o(t){var e,n,r="",i=0,o=t.length,s=u;for(e=0;e>18&63],r+=s[i>>12&63],r+=s[i>>6&63],r+=s[63&i]),i=(i<<8)+t[e];return n=o%3,0===n?(r+=s[i>>18&63],r+=s[i>>12&63],r+=s[i>>6&63],r+=s[63&i]):2===n?(r+=s[i>>10&63],r+=s[i>>4&63],r+=s[i<<2&63],r+=s[64]):1===n&&(r+=s[i>>2&63],r+=s[i<<4&63],r+=s[64],r+=s[64]),r}function s(t){return a&&a.isBuffer(t)}var a;try{a=n(16).Buffer}catch(t){}var c=n(26),u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";t.exports=new c("tag:yaml.org,2002:binary",{kind:"scalar",resolve:r,construct:i,predicate:s,represent:o})},function(t,e,n){"use strict";function r(t){if(null===t)return!1;var e=t.length;return 4===e&&("true"===t||"True"===t||"TRUE"===t)||5===e&&("false"===t||"False"===t||"FALSE"===t)}function i(t){return"true"===t||"True"===t||"TRUE"===t}function o(t){return"[object Boolean]"===Object.prototype.toString.call(t)}var s=n(26);t.exports=new s("tag:yaml.org,2002:bool",{kind:"scalar",resolve:r,construct:i,predicate:o,represent:{lowercase:function(t){return t?"true":"false"},uppercase:function(t){return t?"TRUE":"FALSE"},camelcase:function(t){return t?"True":"False"}},defaultStyle:"lowercase"})},function(t,e,n){"use strict";function r(t){return null!==t&&!!u.test(t)}function i(t){var e,n,r,i;return e=t.replace(/_/g,"").toLowerCase(),n="-"===e[0]?-1:1,i=[],"+-".indexOf(e[0])>=0&&(e=e.slice(1)),".inf"===e?1===n?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===e?NaN:e.indexOf(":")>=0?(e.split(":").forEach(function(t){i.unshift(parseFloat(t,10))}),e=0,r=1,i.forEach(function(t){e+=t*r,r*=60}),n*e):n*parseFloat(e,10)}function o(t,e){var n;if(isNaN(t))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(a.isNegativeZero(t))return"-0.0";return n=t.toString(10),l.test(n)?n.replace("e",".e"):n}function s(t){return"[object Number]"===Object.prototype.toString.call(t)&&(t%1!==0||a.isNegativeZero(t))}var a=n(109),c=n(26),u=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)\\.[0-9_]*(?:[eE][-+][0-9]+)?|\\.[0-9_]+(?:[eE][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$"),l=/^[-+]?[0-9]+e/;t.exports=new c("tag:yaml.org,2002:float",{kind:"scalar",resolve:r,construct:i,predicate:s,represent:o,defaultStyle:"lowercase"})},function(t,e,n){"use strict";function r(t){return 48<=t&&t<=57||65<=t&&t<=70||97<=t&&t<=102}function i(t){return 48<=t&&t<=55}function o(t){return 48<=t&&t<=57}function s(t){if(null===t)return!1;var e,n=t.length,s=0,a=!1;if(!n)return!1;if(e=t[s],"-"!==e&&"+"!==e||(e=t[++s]),"0"===e){if(s+1===n)return!0;if(e=t[++s],"b"===e){for(s++;s3)return!1;if("/"!==e[e.length-r.length-1])return!1}return!0}function i(t){var e=t,n=/\/([gim]*)$/.exec(t),r="";return"/"===e[0]&&(n&&(r=n[1]),e=e.slice(1,e.length-r.length-1)),new RegExp(e,r)}function o(t){var e="/"+t.source+"/";return t.global&&(e+="g"),t.multiline&&(e+="m"),t.ignoreCase&&(e+="i"),e}function s(t){return"[object RegExp]"===Object.prototype.toString.call(t)}var a=n(26);t.exports=new a("tag:yaml.org,2002:js/regexp",{kind:"scalar",resolve:r,construct:i,predicate:s,represent:o})},function(t,e,n){"use strict";function r(){return!0}function i(){}function o(){return""}function s(t){return"undefined"==typeof t}var a=n(26);t.exports=new a("tag:yaml.org,2002:js/undefined",{kind:"scalar",resolve:r,construct:i,predicate:s,represent:o})},function(t,e,n){"use strict";var r=n(26);t.exports=new r("tag:yaml.org,2002:map",{kind:"mapping",construct:function(t){return null!==t?t:{}}})},function(t,e,n){"use strict";function r(t){return"<<"===t||null===t}var i=n(26);t.exports=new i("tag:yaml.org,2002:merge",{kind:"scalar",resolve:r})},function(t,e,n){"use strict";function r(t){if(null===t)return!0;var e=t.length;return 1===e&&"~"===t||4===e&&("null"===t||"Null"===t||"NULL"===t)}function i(){return null}function o(t){return null===t}var s=n(26);t.exports=new s("tag:yaml.org,2002:null",{kind:"scalar",resolve:r,construct:i,predicate:o,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"}},defaultStyle:"lowercase"})},function(t,e,n){"use strict";function r(t){if(null===t)return!0;var e,n,r,i,o,c=[],u=t;for(e=0,n=u.length;e=t.maximum||!t.exclusiveMaximum&&e>t.maximum)&&(e=(t.maximum+t.minimum)/2),e):t.minimum?t.exclusiveMinimum?Math.floor(t.minimum)+1:t.minimum:t.maximum?t.exclusiveMaximum?t.maximum>0?0:Math.floor(t.maximum)-1:t.maximum>0?0:t.maximum:0}Object.defineProperty(n,"__esModule",{value:!0}),n.sampleNumber=r},{}],7:[function(t,e,n){"use strict";function r(t){var e=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],n={};return t&&"object"===i(t.properties)&&Object.keys(t.properties).forEach(function(r){e.skipReadOnly&&t.properties[r].readOnly||(n[r]=(0,o.traverse)(t.properties[r]))}),t&&"object"===i(t.additionalProperties)&&(n.property1=(0,o.traverse)(t.additionalProperties),n.property2=(0,o.traverse)(t.additionalProperties)),n}Object.defineProperty(n,"__esModule",{value:!0});var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t};n.sampleObject=r;var o=t("../traverse")},{"../traverse":9}],8:[function(t,e,n){"use strict";function r(){return"user@example.com"}function i(t,e){var n="pa$$word";return t>n.length&&(n+="_",n+=(0,_.ensureMinLength)(d,t-n.length).substring(0,t-n.length)),n}function o(t,e,n){var r=(0,_.toRFCDateTime)(new Date,n,!1);if(r.lengthe)throw Erorr("Using maxLength = "+e+' is incorrect with format "date-time"');return r}function s(t,e){return o(t,e)}function a(t,e){return o(t,e,!0)}function c(t,e){var n=(0,_.ensureMinLength)("string",t);return e&&n.length>e&&(n=n.substring(0,e)),n}function u(){return"192.168.0.1"}function l(){return"2001:0db8:85a3:0000:0000:8a2e:0370:7334"}function h(){return"example.com"}function p(){return"http://example.com"}function f(t){var e=t.format||"default",n=y[e]||c;return n(0|t.minLength,t.maxLength)}Object.defineProperty(n,"__esModule",{value:!0}),n.sampleString=f;var _=t("../utils"),d="qwerty!@#$%^123456",y={email:r,password:i,"date-time":s,date:a,ipv4:u,ipv6:l,hostname:h,uri:p,default:c}},{"../utils":10}],9:[function(t,e,n){"use strict";function r(t,e){if(t.allOf&&(0,o.mergeAllOf)(t),null!=t.example)return t.example;if(null!=t.default)return t.default;if(t.enum&&t.enum.length)return t.enum[0];var n=t.type,r=i._samplers[n];return r?r(t,e):{}}Object.defineProperty(n,"__esModule",{value:!0}),n.traverse=r;var i=t("./openapi-sampler"),o=t("./normalize")},{"./normalize":1,"./openapi-sampler":2}],10:[function(t,e,n){"use strict";function r(t){return t<10?"0"+t:t}function i(t,e,n){var i=t.getUTCFullYear()+"-"+r(t.getUTCMonth()+1)+"-"+r(t.getUTCDate());return e||(i+="T"+r(t.getUTCHours())+":"+r(t.getUTCMinutes())+":"+r(t.getUTCSeconds())+(n?"."+(t.getUTCMilliseconds()/1e3).toFixed(3).slice(2,5):"")+"Z"),i}function o(t,e){return e>t.length?t.repeat(Math.trunc(e/t.length)+1).substring(0,e):t}function s(t,e){for(var n=Object.keys(e),r=-1,i=n.length;++r>?>?|[!=]=?)=?|[~?@]/}),Prism.languages.actionscript["class-name"].alias="function",Prism.languages.markup&&Prism.languages.insertBefore("actionscript","string",{xml:{pattern:/(^|[^.])<\/?\w+(?:\s+[^\s>\/=]+=("|')(?:\\\1|\\?(?!\1)[\w\W])*\2)*\s*\/?>/,lookbehind:!0,inside:{rest:Prism.languages.markup}}})},function(t,e){!function(t){var e={variable:[{pattern:/\$?\(\([\w\W]+?\)\)/,inside:{variable:[{pattern:/(^\$\(\([\w\W]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b-?(?:0x[\dA-Fa-f]+|\d*\.?\d+(?:[Ee]-?\d+)?)\b/,operator:/--?|-=|\+\+?|\+=|!=?|~|\*\*?|\*=|\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\^=?|\|\|?|\|=|\?|:/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\([^)]+\)|`[^`]+`/,inside:{variable:/^\$\(|^`|\)$|`$/}},/\$(?:[a-z0-9_#\?\*!@]+|\{[^}]+\})/i]};t.languages.bash={shebang:{pattern:/^#!\s*\/bin\/bash|^#!\s*\/bin\/sh/,alias:"important"},comment:{pattern:/(^|[^"{\\])#.*/,lookbehind:!0},string:[{pattern:/((?:^|[^<])<<\s*)(?:"|')?(\w+?)(?:"|')?\s*\r?\n(?:[\s\S])*?\r?\n\2/g,lookbehind:!0,greedy:!0,inside:e},{pattern:/(["'])(?:\\\\|\\?[^\\])*?\1/g,greedy:!0,inside:e}],variable:e.variable,function:{pattern:/(^|\s|;|\||&)(?:alias|apropos|apt-get|aptitude|aspell|awk|basename|bash|bc|bg|builtin|bzip2|cal|cat|cd|cfdisk|chgrp|chmod|chown|chroot|chkconfig|cksum|clear|cmp|comm|command|cp|cron|crontab|csplit|cut|date|dc|dd|ddrescue|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|enable|env|ethtool|eval|exec|expand|expect|export|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|getopts|git|grep|groupadd|groupdel|groupmod|groups|gzip|hash|head|help|hg|history|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|jobs|join|kill|killall|less|link|ln|locate|logname|logout|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|make|man|mkdir|mkfifo|mkisofs|mknod|more|most|mount|mtools|mtr|mv|mmv|nano|netstat|nice|nl|nohup|notify-send|nslookup|open|op|passwd|paste|pathchk|ping|pkill|popd|pr|printcap|printenv|printf|ps|pushd|pv|pwd|quota|quotacheck|quotactl|ram|rar|rcp|read|readarray|readonly|reboot|rename|renice|remsync|rev|rm|rmdir|rsync|screen|scp|sdiff|sed|seq|service|sftp|shift|shopt|shutdown|sleep|slocate|sort|source|split|ssh|stat|strace|su|sudo|sum|suspend|sync|tail|tar|tee|test|time|timeout|times|touch|top|traceroute|trap|tr|tsort|tty|type|ulimit|umask|umount|unalias|uname|unexpand|uniq|units|unrar|unshar|uptime|useradd|userdel|usermod|users|uuencode|uudecode|v|vdir|vi|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yes|zip)(?=$|\s|;|\||&)/,lookbehind:!0},keyword:{pattern:/(^|\s|;|\||&)(?:let|:|\.|if|then|else|elif|fi|for|break|continue|while|in|case|function|select|do|done|until|echo|exit|return|set|declare)(?=$|\s|;|\||&)/,lookbehind:!0},boolean:{pattern:/(^|\s|;|\||&)(?:true|false)(?=$|\s|;|\||&)/,lookbehind:!0},operator:/&&?|\|\|?|==?|!=?|<<>|<=?|>=?|=~/,punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];]/};var n=e.variable[1].inside;n.function=t.languages.bash.function,n.keyword=t.languages.bash.keyword,n.boolean=t.languages.bash.boolean,n.operator=t.languages.bash.operator,n.punctuation=t.languages.bash.punctuation}(Prism)},function(t,e){Prism.languages.c=Prism.languages.extend("clike",{keyword:/\b(asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while)\b/,operator:/\-[>-]?|\+\+?|!=?|<>?=?|==?|&&?|\|?\||[~^%?*\/]/,number:/\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)[ful]*\b/i}),Prism.languages.insertBefore("c","string",{macro:{pattern:/(^\s*)#\s*[a-z]+([^\r\n\\]|\\.|\\(?:\r\n?|\n))*/im,lookbehind:!0,alias:"property",inside:{string:{pattern:/(#\s*include\s*)(<.+?>|("|')(\\?.)+?\3)/,lookbehind:!0},directive:{pattern:/(#\s*)\b(define|elif|else|endif|error|ifdef|ifndef|if|import|include|line|pragma|undef|using)\b/,lookbehind:!0,alias:"keyword"}}},constant:/\b(__FILE__|__LINE__|__DATE__|__TIME__|__TIMESTAMP__|__func__|EOF|NULL|stdin|stdout|stderr)\b/}),delete Prism.languages.c["class-name"],delete Prism.languages.c.boolean},function(t,e){!function(t){var e=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};t.languages.coffeescript=t.languages.extend("javascript",{comment:e,string:[{pattern:/'(?:\\?[^\\])*?'/,greedy:!0},{pattern:/"(?:\\?[^\\])*?"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),t.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:e,interpolation:n}}}),t.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\?[\s\S])*?`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},rest:t.languages.javascript}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),t.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete t.languages.coffeescript["template-string"]}(Prism)},function(t,e){Prism.languages.cpp=Prism.languages.extend("c",{keyword:/\b(alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|class|compl|const|constexpr|const_cast|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|long|mutable|namespace|new|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,boolean:/\b(true|false)\b/,operator:/[-+]{1,2}|!=?|<{1,2}=?|>{1,2}=?|\->|:{1,2}|={1,2}|\^|~|%|&{1,2}|\|?\||\?|\*|\/|\b(and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/}),Prism.languages.insertBefore("cpp","keyword",{"class-name":{pattern:/(class\s+)[a-z0-9_]+/i,lookbehind:!0}})},function(t,e){Prism.languages.csharp=Prism.languages.extend("clike",{keyword:/\b(abstract|as|async|await|base|bool|break|byte|case|catch|char|checked|class|const|continue|decimal|default|delegate|do|double|else|enum|event|explicit|extern|false|finally|fixed|float|for|foreach|goto|if|implicit|in|int|interface|internal|is|lock|long|namespace|new|null|object|operator|out|override|params|private|protected|public|readonly|ref|return|sbyte|sealed|short|sizeof|stackalloc|static|string|struct|switch|this|throw|true|try|typeof|uint|ulong|unchecked|unsafe|ushort|using|virtual|void|volatile|while|add|alias|ascending|async|await|descending|dynamic|from|get|global|group|into|join|let|orderby|partial|remove|select|set|value|var|where|yield)\b/,string:[/@("|')(\1\1|\\\1|\\?(?!\1)[\s\S])*\1/,/("|')(\\?.)*?\1/],number:/\b-?(0x[\da-f]+|\d*\.?\d+f?)\b/i}),Prism.languages.insertBefore("csharp","keyword",{"generic-method":{pattern:/[a-z0-9_]+\s*<[^>\r\n]+?>\s*(?=\()/i,alias:"function",inside:{keyword:Prism.languages.csharp.keyword,punctuation:/[<>(),.:]/}},preprocessor:{pattern:/(^\s*)#.*/m,lookbehind:!0,alias:"property",inside:{directive:{pattern:/(\s*#)\b(define|elif|else|endif|endregion|error|if|line|pragma|region|undef|warning)\b/,lookbehind:!0,alias:"keyword"}}}})},function(t,e){Prism.languages.go=Prism.languages.extend("clike",{keyword:/\b(break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,builtin:/\b(bool|byte|complex(64|128)|error|float(32|64)|rune|string|u?int(8|16|32|64|)|uintptr|append|cap|close|complex|copy|delete|imag|len|make|new|panic|print(ln)?|real|recover)\b/,boolean:/\b(_|iota|nil|true|false)\b/,operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,number:/\b(-?(0x[a-f\d]+|(\d+\.?\d*|\.\d+)(e[-+]?\d+)?)i?)\b/i,string:/("|'|`)(\\?.|\r|\n)*?\1/}),delete Prism.languages.go["class-name"]},function(t,e){Prism.languages.haskell={comment:{pattern:/(^|[^-!#$%*+=?&@|~.:<>^\\\/])(--[^-!#$%*+=?&@|~.:<>^\\\/].*|{-[\w\W]*?-})/m,lookbehind:!0},char:/'([^\\']|\\([abfnrtv\\"'&]|\^[A-Z@[\]\^_]|NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|\d+|o[0-7]+|x[0-9a-fA-F]+))'/,string:{pattern:/"([^\\"]|\\([abfnrtv\\"'&]|\^[A-Z@[\]\^_]|NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|\d+|o[0-7]+|x[0-9a-fA-F]+)|\\\s+\\)*"/,greedy:!0},keyword:/\b(case|class|data|deriving|do|else|if|in|infixl|infixr|instance|let|module|newtype|of|primitive|then|type|where)\b/,import_statement:{pattern:/(\r?\n|\r|^)\s*import\s+(qualified\s+)?([A-Z][_a-zA-Z0-9']*)(\.[A-Z][_a-zA-Z0-9']*)*(\s+as\s+([A-Z][_a-zA-Z0-9']*)(\.[A-Z][_a-zA-Z0-9']*)*)?(\s+hiding\b)?/m,inside:{keyword:/\b(import|qualified|as|hiding)\b/}},builtin:/\b(abs|acos|acosh|all|and|any|appendFile|approxRational|asTypeOf|asin|asinh|atan|atan2|atanh|basicIORun|break|catch|ceiling|chr|compare|concat|concatMap|const|cos|cosh|curry|cycle|decodeFloat|denominator|digitToInt|div|divMod|drop|dropWhile|either|elem|encodeFloat|enumFrom|enumFromThen|enumFromThenTo|enumFromTo|error|even|exp|exponent|fail|filter|flip|floatDigits|floatRadix|floatRange|floor|fmap|foldl|foldl1|foldr|foldr1|fromDouble|fromEnum|fromInt|fromInteger|fromIntegral|fromRational|fst|gcd|getChar|getContents|getLine|group|head|id|inRange|index|init|intToDigit|interact|ioError|isAlpha|isAlphaNum|isAscii|isControl|isDenormalized|isDigit|isHexDigit|isIEEE|isInfinite|isLower|isNaN|isNegativeZero|isOctDigit|isPrint|isSpace|isUpper|iterate|last|lcm|length|lex|lexDigits|lexLitChar|lines|log|logBase|lookup|map|mapM|mapM_|max|maxBound|maximum|maybe|min|minBound|minimum|mod|negate|not|notElem|null|numerator|odd|or|ord|otherwise|pack|pi|pred|primExitWith|print|product|properFraction|putChar|putStr|putStrLn|quot|quotRem|range|rangeSize|read|readDec|readFile|readFloat|readHex|readIO|readInt|readList|readLitChar|readLn|readOct|readParen|readSigned|reads|readsPrec|realToFrac|recip|rem|repeat|replicate|return|reverse|round|scaleFloat|scanl|scanl1|scanr|scanr1|seq|sequence|sequence_|show|showChar|showInt|showList|showLitChar|showParen|showSigned|showString|shows|showsPrec|significand|signum|sin|sinh|snd|sort|span|splitAt|sqrt|subtract|succ|sum|tail|take|takeWhile|tan|tanh|threadToIOResult|toEnum|toInt|toInteger|toLower|toRational|toUpper|truncate|uncurry|undefined|unlines|until|unwords|unzip|unzip3|userError|words|writeFile|zip|zip3|zipWith|zipWith3)\b/,number:/\b(\d+(\.\d+)?(e[+-]?\d+)?|0o[0-7]+|0x[0-9a-f]+)\b/i,operator:/\s\.\s|[-!#$%*+=?&@|~.:<>^\\\/]*\.[-!#$%*+=?&@|~.:<>^\\\/]+|[-!#$%*+=?&@|~.:<>^\\\/]+\.[-!#$%*+=?&@|~.:<>^\\\/]*|[-!#$%*+=?&@|~:<>^\\\/]+|`([A-Z][_a-zA-Z0-9']*\.)*[_a-z][_a-zA-Z0-9']*`/,hvariable:/\b([A-Z][_a-zA-Z0-9']*\.)*[_a-z][_a-zA-Z0-9']*\b/,constant:/\b([A-Z][_a-zA-Z0-9']*\.)*[A-Z][_a-zA-Z0-9']*\b/,punctuation:/[{}[\];(),.:]/}},function(t,e){Prism.languages.java=Prism.languages.extend("clike",{keyword:/\b(abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|const|float|native|super|while)\b/,number:/\b0b[01]+\b|\b0x[\da-f]*\.?[\da-fp\-]+\b|\b\d*\.?\d+(?:e[+-]?\d+)?[df]?\b/i,operator:{pattern:/(^|[^.])(?:\+[+=]?|-[-=]?|!=?|<>?>?=?|==?|&[&=]?|\|[|=]?|\*=?|\/=?|%=?|\^=?|[?:~])/m,lookbehind:!0}}),Prism.languages.insertBefore("java","function",{annotation:{alias:"punctuation",pattern:/(^|[^.])@\w+/,lookbehind:!0}})},function(t,e){Prism.languages.lua={comment:/^#!.+|--(?:\[(=*)\[[\s\S]*?\]\1\]|.*)/m,string:{pattern:/(["'])(?:(?!\1)[^\\\r\n]|\\z(?:\r\n|\s)|\\(?:\r\n|[\s\S]))*\1|\[(=*)\[[\s\S]*?\]\2\]/,greedy:!0},number:/\b0x[a-f\d]+\.?[a-f\d]*(?:p[+-]?\d+)?\b|\b\d+(?:\.\B|\.?\d*(?:e[+-]?\d+)?\b)|\B\.\d+(?:e[+-]?\d+)?\b/i,keyword:/\b(?:and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|return|then|true|until|while)\b/,function:/(?!\d)\w+(?=\s*(?:[({]))/,operator:[/[-+*%^&|#]|\/\/?|<[<=]?|>[>=]?|[=~]=?/,{pattern:/(^|[^.])\.\.(?!\.)/,lookbehind:!0}],punctuation:/[\[\](){},;]|\.+|:+/}},function(t,e){Prism.languages.matlab={string:/\B'(?:''|[^'\n])*'/,comment:[/%\{[\s\S]*?\}%/,/%.+/],number:/\b-?(?:\d*\.?\d+(?:[eE][+-]?\d+)?(?:[ij])?|[ij])\b/,keyword:/\b(?:break|case|catch|continue|else|elseif|end|for|function|if|inf|NaN|otherwise|parfor|pause|pi|return|switch|try|while)\b/,function:/(?!\d)\w+(?=\s*\()/,operator:/\.?[*^\/\\']|[+\-:@]|[<>=~]=?|&&?|\|\|?/,punctuation:/\.{3}|[.,;\[\](){}!]/}},function(t,e){Prism.languages.objectivec=Prism.languages.extend("c",{keyword:/\b(asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while|in|self|super)\b|(@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,string:/("|')(\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1|@"(\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,operator:/-[->]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*\/@]/})},function(t,e){Prism.languages.perl={comment:[{pattern:/(^\s*)=\w+[\s\S]*?=cut.*/m,lookbehind:!0},{pattern:/(^|[^\\$])#.*/,lookbehind:!0}],string:[/\b(?:q|qq|qx|qw)\s*([^a-zA-Z0-9\s\{\(\[<])(?:[^\\]|\\[\s\S])*?\1/,/\b(?:q|qq|qx|qw)\s+([a-zA-Z0-9])(?:[^\\]|\\[\s\S])*?\1/,/\b(?:q|qq|qx|qw)\s*\((?:[^()\\]|\\[\s\S])*\)/,/\b(?:q|qq|qx|qw)\s*\{(?:[^{}\\]|\\[\s\S])*\}/,/\b(?:q|qq|qx|qw)\s*\[(?:[^[\]\\]|\\[\s\S])*\]/,/\b(?:q|qq|qx|qw)\s*<(?:[^<>\\]|\\[\s\S])*>/,/("|`)(?:[^\\]|\\[\s\S])*?\1/,/'(?:[^'\\\r\n]|\\.)*'/],regex:[/\b(?:m|qr)\s*([^a-zA-Z0-9\s\{\(\[<])(?:[^\\]|\\[\s\S])*?\1[msixpodualngc]*/,/\b(?:m|qr)\s+([a-zA-Z0-9])(?:[^\\]|\\.)*?\1[msixpodualngc]*/,/\b(?:m|qr)\s*\((?:[^()\\]|\\[\s\S])*\)[msixpodualngc]*/,/\b(?:m|qr)\s*\{(?:[^{}\\]|\\[\s\S])*\}[msixpodualngc]*/,/\b(?:m|qr)\s*\[(?:[^[\]\\]|\\[\s\S])*\][msixpodualngc]*/,/\b(?:m|qr)\s*<(?:[^<>\\]|\\[\s\S])*>[msixpodualngc]*/,{pattern:/(^|[^-]\b)(?:s|tr|y)\s*([^a-zA-Z0-9\s\{\(\[<])(?:[^\\]|\\[\s\S])*?\2(?:[^\\]|\\[\s\S])*?\2[msixpodualngcer]*/,lookbehind:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s+([a-zA-Z0-9])(?:[^\\]|\\[\s\S])*?\2(?:[^\\]|\\[\s\S])*?\2[msixpodualngcer]*/,lookbehind:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s*\((?:[^()\\]|\\[\s\S])*\)\s*\((?:[^()\\]|\\[\s\S])*\)[msixpodualngcer]*/,lookbehind:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s*\{(?:[^{}\\]|\\[\s\S])*\}\s*\{(?:[^{}\\]|\\[\s\S])*\}[msixpodualngcer]*/,lookbehind:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s*\[(?:[^[\]\\]|\\[\s\S])*\]\s*\[(?:[^[\]\\]|\\[\s\S])*\][msixpodualngcer]*/,lookbehind:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s*<(?:[^<>\\]|\\[\s\S])*>\s*<(?:[^<>\\]|\\[\s\S])*>[msixpodualngcer]*/,lookbehind:!0},/\/(?:[^\/\\\r\n]|\\.)*\/[msixpodualngc]*(?=\s*(?:$|[\r\n,.;})&|\-+*~<>!?^]|(lt|gt|le|ge|eq|ne|cmp|not|and|or|xor|x)\b))/],variable:[/[&*$@%]\{\^[A-Z]+\}/,/[&*$@%]\^[A-Z_]/,/[&*$@%]#?(?=\{)/,/[&*$@%]#?((::)*'?(?!\d)[\w$]+)+(::)*/i,/[&*$@%]\d+/,/(?!%=)[$@%][!"#$%&'()*+,\-.\/:;<=>?@[\\\]^_`{|}~]/],filehandle:{pattern:/<(?![<=])\S*>|\b_\b/,alias:"symbol"},vstring:{pattern:/v\d+(\.\d+)*|\d+(\.\d+){2,}/,alias:"string"},function:{pattern:/sub [a-z0-9_]+/i,inside:{keyword:/sub/}},keyword:/\b(any|break|continue|default|delete|die|do|else|elsif|eval|for|foreach|given|goto|if|last|local|my|next|our|package|print|redo|require|say|state|sub|switch|undef|unless|until|use|when|while)\b/,number:/\b-?(0x[\dA-Fa-f](_?[\dA-Fa-f])*|0b[01](_?[01])*|(\d(_?\d)*)?\.?\d(_?\d)*([Ee][+-]?\d+)?)\b/,operator:/-[rwxoRWXOezsfdlpSbctugkTBMAC]\b|\+[+=]?|-[-=>]?|\*\*?=?|\/\/?=?|=[=~>]?|~[~=]?|\|\|?=?|&&?=?|<(?:=>?|<=?)?|>>?=?|![~=]?|[%^]=?|\.(?:=|\.\.?)?|[\\?]|\bx(?:=|\b)|\b(lt|gt|le|ge|eq|ne|cmp|not|and|or|xor)\b/,punctuation:/[{}[\];(),:]/}},function(t,e){Prism.languages.php=Prism.languages.extend("clike",{keyword:/\b(and|or|xor|array|as|break|case|cfunction|class|const|continue|declare|default|die|do|else|elseif|enddeclare|endfor|endforeach|endif|endswitch|endwhile|extends|for|foreach|function|include|include_once|global|if|new|return|static|switch|use|require|require_once|var|while|abstract|interface|public|implements|private|protected|parent|throw|null|echo|print|trait|namespace|final|yield|goto|instanceof|finally|try|catch)\b/i,constant:/\b[A-Z0-9_]{2,}\b/,comment:{pattern:/(^|[^\\])(?:\/\*[\w\W]*?\*\/|\/\/.*)/,lookbehind:!0}}),Prism.languages.insertBefore("php","class-name",{"shell-comment":{pattern:/(^|[^\\])#.*/,lookbehind:!0,alias:"comment"}}),Prism.languages.insertBefore("php","keyword",{delimiter:/\?>|<\?(?:php)?/i,variable:/\$\w+\b/i,package:{pattern:/(\\|namespace\s+|use\s+)[\w\\]+/,lookbehind:!0,inside:{punctuation:/\\/}}}),Prism.languages.insertBefore("php","operator",{property:{pattern:/(->)[\w]+/,lookbehind:!0}}),Prism.languages.markup&&(Prism.hooks.add("before-highlight",function(t){"php"===t.language&&(t.tokenStack=[],t.backupCode=t.code,t.code=t.code.replace(/(?:<\?php|<\?)[\w\W]*?(?:\?>)/gi,function(e){return t.tokenStack.push(e),"{{{PHP"+t.tokenStack.length+"}}}"}))}),Prism.hooks.add("before-insert",function(t){"php"===t.language&&(t.code=t.backupCode,delete t.backupCode)}),Prism.hooks.add("after-highlight",function(t){if("php"===t.language){for(var e,n=0;e=t.tokenStack[n];n++)t.highlightedCode=t.highlightedCode.replace("{{{PHP"+(n+1)+"}}}",Prism.highlight(e,t.grammar,"php").replace(/\$/g,"$$$$"));t.element.innerHTML=t.highlightedCode}}),Prism.hooks.add("wrap",function(t){"php"===t.language&&"markup"===t.type&&(t.content=t.content.replace(/(\{\{\{PHP[0-9]+\}\}\})/g,'$1'))}),Prism.languages.insertBefore("php","comment",{markup:{pattern:/<[^?]\/?(.*?)>/,inside:Prism.languages.markup},php:/\{\{\{PHP[0-9]+\}\}\}/}))},function(t,e){Prism.languages.python={"triple-quoted-string":{pattern:/"""[\s\S]+?"""|'''[\s\S]+?'''/,alias:"string"},comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0},string:{pattern:/("|')(?:\\\\|\\?[^\\\r\n])*?\1/,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_][a-zA-Z0-9_]*(?=\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)[a-z0-9_]+/i,lookbehind:!0},keyword:/\b(?:as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|pass|print|raise|return|try|while|with|yield)\b/,boolean:/\b(?:True|False)\b/,number:/\b-?(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*\.?\d*|\.\d+)(?:e[+-]?\d+)?j?\b/i,operator:/[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]|\b(?:or|and|not)\b/,punctuation:/[{}[\];(),.:]/}},function(t,e){Prism.languages.r={comment:/#.*/,string:/(['"])(?:\\?.)*?\1/,"percent-operator":{pattern:/%[^%\s]*%/,alias:"operator"},boolean:/\b(?:TRUE|FALSE)\b/,ellipsis:/\.\.(?:\.|\d+)/,number:[/\b(?:NaN|Inf)\b/,/\b(?:0x[\dA-Fa-f]+(?:\.\d*)?|\d*\.?\d+)(?:[EePp][+-]?\d+)?[iL]?\b/],keyword:/\b(?:if|else|repeat|while|function|for|in|next|break|NULL|NA|NA_integer_|NA_real_|NA_complex_|NA_character_)\b/,operator:/->?>?|<(?:=|=!]=?|::?|&&?|\|\|?|[+*\/^$@~]/,punctuation:/[(){}\[\],;]/}},function(t,e){!function(t){t.languages.ruby=t.languages.extend("clike",{comment:/#(?!\{[^\r\n]*?\}).*/,keyword:/\b(alias|and|BEGIN|begin|break|case|class|def|define_method|defined|do|each|else|elsif|END|end|ensure|false|for|if|in|module|new|next|nil|not|or|raise|redo|require|rescue|retry|return|self|super|then|throw|true|undef|unless|until|when|while|yield)\b/});var e={pattern:/#\{[^}]+\}/,inside:{delimiter:{pattern:/^#\{|\}$/,alias:"tag"},rest:t.util.clone(t.languages.ruby)}};t.languages.insertBefore("ruby","keyword",{regex:[{pattern:/%r([^a-zA-Z0-9\s\{\(\[<])(?:[^\\]|\\[\s\S])*?\1[gim]{0,3}/,inside:{interpolation:e}},{pattern:/%r\((?:[^()\\]|\\[\s\S])*\)[gim]{0,3}/,inside:{interpolation:e}},{pattern:/%r\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}[gim]{0,3}/,inside:{interpolation:e}},{pattern:/%r\[(?:[^\[\]\\]|\\[\s\S])*\][gim]{0,3}/,inside:{interpolation:e}},{pattern:/%r<(?:[^<>\\]|\\[\s\S])*>[gim]{0,3}/,inside:{interpolation:e}},{pattern:/(^|[^\/])\/(?!\/)(\[.+?]|\\.|[^\/\r\n])+\/[gim]{0,3}(?=\s*($|[\r\n,.;})]))/,lookbehind:!0}],variable:/[@$]+[a-zA-Z_][a-zA-Z_0-9]*(?:[?!]|\b)/,symbol:/:[a-zA-Z_][a-zA-Z_0-9]*(?:[?!]|\b)/}),t.languages.insertBefore("ruby","number",{builtin:/\b(Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Stat|File|Fixnum|Fload|Hash|Integer|IO|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|String|Struct|TMS|Symbol|ThreadGroup|Thread|Time|TrueClass)\b/,constant:/\b[A-Z][a-zA-Z_0-9]*(?:[?!]|\b)/}),t.languages.ruby.string=[{pattern:/%[qQiIwWxs]?([^a-zA-Z0-9\s\{\(\[<])(?:[^\\]|\\[\s\S])*?\1/,inside:{interpolation:e}},{pattern:/%[qQiIwWxs]?\((?:[^()\\]|\\[\s\S])*\)/,inside:{interpolation:e}},{pattern:/%[qQiIwWxs]?\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}/,inside:{interpolation:e}},{pattern:/%[qQiIwWxs]?\[(?:[^\[\]\\]|\\[\s\S])*\]/,inside:{interpolation:e}},{pattern:/%[qQiIwWxs]?<(?:[^<>\\]|\\[\s\S])*>/,inside:{interpolation:e}},{pattern:/("|')(#\{[^}]+\}|\\(?:\r?\n|\r)|\\?.)*?\1/,inside:{interpolation:e}}]}(Prism)},function(t,e){Prism.languages.scala=Prism.languages.extend("java",{keyword:/<-|=>|\b(?:abstract|case|catch|class|def|do|else|extends|final|finally|for|forSome|if|implicit|import|lazy|match|new|null|object|override|package|private|protected|return|sealed|self|super|this|throw|trait|try|type|val|var|while|with|yield)\b/,string:[{pattern:/"""[\W\w]*?"""/,greedy:!0},{pattern:/("|')(?:\\\\|\\?[^\\\r\n])*?\1/,greedy:!0}],builtin:/\b(?:String|Int|Long|Short|Byte|Boolean|Double|Float|Char|Any|AnyRef|AnyVal|Unit|Nothing)\b/,number:/\b(?:0x[\da-f]*\.?[\da-f]+|\d*\.?\d+e?\d*[dfl]?)\b/i,symbol:/'[^\d\s\\]\w*/}),delete Prism.languages.scala["class-name"],delete Prism.languages.scala.function},function(t,e){Prism.languages.swift=Prism.languages.extend("clike",{string:{pattern:/("|')(\\(?:\((?:[^()]|\([^)]+\))+\)|\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0,inside:{interpolation:{pattern:/\\\((?:[^()]|\([^)]+\))+\)/,inside:{delimiter:{pattern:/^\\\(|\)$/,alias:"variable"}}}}},keyword:/\b(as|associativity|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic(?:Type)?|else|enum|extension|fallthrough|final|for|func|get|guard|if|import|in|infix|init|inout|internal|is|lazy|left|let|mutating|new|none|nonmutating|operator|optional|override|postfix|precedence|prefix|private|Protocol|public|repeat|required|rethrows|return|right|safe|self|Self|set|static|struct|subscript|super|switch|throws?|try|Type|typealias|unowned|unsafe|var|weak|where|while|willSet|__(?:COLUMN__|FILE__|FUNCTION__|LINE__))\b/,number:/\b([\d_]+(\.[\de_]+)?|0x[a-f0-9_]+(\.[a-f0-9p_]+)?|0b[01_]+|0o[0-7_]+)\b/i,constant:/\b(nil|[A-Z_]{2,}|k[A-Z][A-Za-z_]+)\b/,atrule:/@\b(IB(?:Outlet|Designable|Action|Inspectable)|class_protocol|exported|noreturn|NS(?:Copying|Managed)|objc|UIApplicationMain|auto_closure)\b/,builtin:/\b([A-Z]\S+|abs|advance|alignof(?:Value)?|assert|contains|count(?:Elements)?|debugPrint(?:ln)?|distance|drop(?:First|Last)|dump|enumerate|equal|filter|find|first|getVaList|indices|isEmpty|join|last|lexicographicalCompare|map|max(?:Element)?|min(?:Element)?|numericCast|overlaps|partition|print(?:ln)?|reduce|reflect|reverse|sizeof(?:Value)?|sort(?:ed)?|split|startsWith|stride(?:of(?:Value)?)?|suffix|swap|toDebugString|toString|transcode|underestimateCount|unsafeBitCast|with(?:ExtendedLifetime|Unsafe(?:MutablePointers?|Pointers?)|VaList))\b/}),Prism.languages.swift.string.inside.interpolation.inside.rest=Prism.util.clone(Prism.languages.swift)},function(t,e,n){(function(e){var n="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},r=function(){var t=/\blang(?:uage)?-(\w+)\b/i,e=0,r=n.Prism={util:{encode:function(t){return t instanceof i?new i(t.type,r.util.encode(t.content),t.alias):"Array"===r.util.type(t)?t.map(r.util.encode):t.replace(/&/g,"&").replace(/t.length)break t;if(!(m instanceof i)){l.lastIndex=0;var g=l.exec(m),v=1;if(!g&&f&&y!=o.length-1){var b=o[y+1].matchedStr||o[y+1],w=m+b;if(y=m.length)continue;var I=g.index+g[0].length,C=m.length+b.length;if(v=3,I<=C){if(o[y+1].greedy)continue;v=2,w=w.slice(0,C)}m=w}if(g){p&&(_=g[1].length);var x=g.index+_,g=g[0].slice(_),I=x+g.length,k=m.slice(0,x),T=m.slice(I),E=[y,v];k&&E.push(k);var S=new i(a,h?r.tokenize(g,h):g,d,g,f);E.push(S),T&&E.push(T),Array.prototype.splice.apply(o,E)}}}}}return o},hooks:{all:{},add:function(t,e){var n=r.hooks.all;n[t]=n[t]||[],n[t].push(e)},run:function(t,e){var n=r.hooks.all[t];if(n&&n.length)for(var i,o=0;i=n[o++];)i(e)}}},i=r.Token=function(t,e,n,r,i){this.type=t,this.content=e,this.alias=n,this.matchedStr=r||null,this.greedy=!!i};if(i.stringify=function(t,e,n){if("string"==typeof t)return t;if("Array"===r.util.type(t))return t.map(function(n){return i.stringify(n,e,t)}).join("");var o={type:t.type,content:i.stringify(t.content,e,n),tag:"span",classes:["token",t.type],attributes:{},language:e,parent:n};if("comment"==o.type&&(o.attributes.spellcheck="true"),t.alias){var s="Array"===r.util.type(t.alias)?t.alias:[t.alias];Array.prototype.push.apply(o.classes,s)}r.hooks.run("wrap",o);var a="";for(var c in o.attributes)a+=(a?" ":"")+c+'="'+(o.attributes[c]||"")+'"';return"<"+o.tag+' class="'+o.classes.join(" ")+'" '+a+">"+o.content+""},!n.document)return n.addEventListener?(n.addEventListener("message",function(t){var e=JSON.parse(t.data),i=e.language,o=e.code,s=e.immediateClose;n.postMessage(r.highlight(o,r.languages[i],i)),s&&n.close()},!1),n.Prism):n.Prism;var o=document.currentScript||[].slice.call(document.getElementsByTagName("script")).pop();return o&&(r.filename=o.src,document.addEventListener&&!o.hasAttribute("data-manual")&&("loading"!==document.readyState?requestAnimationFrame(r.highlightAll,0):document.addEventListener("DOMContentLoaded",r.highlightAll))),n.Prism}();"undefined"!=typeof t&&t.exports&&(t.exports=r),"undefined"!=typeof e&&(e.Prism=r),r.languages.markup={comment://,prolog:/<\?[\w\W]+?\?>/,doctype://,cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=.$<]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\w\W])*\1|[^\s'">=]+))?)*\s*\/?>/i,inside:{tag:{pattern:/^<\/?[^\s>\/]+/i,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/i,inside:{punctuation:/[=>"']/}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:/&#?[\da-z]{1,8};/i},r.hooks.add("wrap",function(t){"entity"===t.type&&(t.attributes.title=t.content.replace(/&/,"&"))}),r.languages.xml=r.languages.markup,r.languages.html=r.languages.markup,r.languages.mathml=r.languages.markup,r.languages.svg=r.languages.markup,r.languages.css={comment:/\/\*[\w\W]*?\*\//,atrule:{pattern:/@[\w-]+?.*?(;|(?=\s*\{))/i,inside:{rule:/@[\w-]+/}},url:/url\((?:(["'])(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1|.*?)\)/i,selector:/[^\{\}\s][^\{\};]*?(?=\s*\{)/,string:/("|')(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1/,property:/(\b|\B)[\w-]+(?=\s*:)/i,important:/\B!important\b/i,function:/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:]/},r.languages.css.atrule.inside.rest=r.util.clone(r.languages.css),r.languages.markup&&(r.languages.insertBefore("markup","tag",{style:{pattern:/()[\w\W]*?(?=<\/style>)/i,lookbehind:!0,inside:r.languages.css,alias:"language-css"}}),r.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/\s*style=("|').*?\1/i,inside:{"attr-name":{pattern:/^\s*style/i,inside:r.languages.markup.tag.inside},punctuation:/^\s*=\s*['"]|['"]\s*$/,"attr-value":{pattern:/.+/i,inside:r.languages.css}},alias:"language-css"}},r.languages.markup.tag)),r.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\w\W]*?\*\//,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0}],string:{pattern:/(["'])(\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/i, +lookbehind:!0,inside:{punctuation:/(\.|\\)/}},keyword:/\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,boolean:/\b(true|false)\b/,function:/[a-z0-9_]+(?=\()/i,number:/\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)\b/i,operator:/--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,punctuation:/[{}[\];(),.:]/},r.languages.javascript=r.languages.extend("clike",{keyword:/\b(as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\b/,number:/\b-?(0x[\dA-Fa-f]+|0b[01]+|0o[0-7]+|\d*\.?\d+([Ee][+-]?\d+)?|NaN|Infinity)\b/,function:/[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*(?=\()/i}),r.languages.insertBefore("javascript","keyword",{regex:{pattern:/(^|[^\/])\/(?!\/)(\[.+?]|\\.|[^\/\\\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})]))/,lookbehind:!0,greedy:!0}}),r.languages.insertBefore("javascript","string",{"template-string":{pattern:/`(?:\\\\|\\?[^\\])*?`/,greedy:!0,inside:{interpolation:{pattern:/\$\{[^}]+\}/,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:r.languages.javascript}},string:/[\s\S]+/}}}),r.languages.markup&&r.languages.insertBefore("markup","tag",{script:{pattern:/()[\w\W]*?(?=<\/script>)/i,lookbehind:!0,inside:r.languages.javascript,alias:"language-javascript"}}),r.languages.js=r.languages.javascript,function(){"undefined"!=typeof self&&self.Prism&&self.document&&document.querySelector&&(self.Prism.fileHighlight=function(){var t={js:"javascript",py:"python",rb:"ruby",ps1:"powershell",psm1:"powershell",sh:"bash",bat:"batch",h:"c",tex:"latex"};Array.prototype.forEach&&Array.prototype.slice.call(document.querySelectorAll("pre[data-src]")).forEach(function(e){for(var n,i=e.getAttribute("data-src"),o=e,s=/\blang(?:uage)?-(?!\*)(\w+)\b/i;o&&!s.test(o.className);)o=o.parentNode;if(o&&(n=(e.className.match(s)||[,""])[1]),!n){var a=(i.match(/\.(\w+)$/)||[,""])[1];n=t[a]||a}var c=document.createElement("code");c.className="language-"+n,e.textContent="",c.textContent="Loading…",e.appendChild(c);var u=new XMLHttpRequest;u.open("GET",i,!0),u.onreadystatechange=function(){4==u.readyState&&(u.status<400&&u.responseText?(c.textContent=u.responseText,r.highlightElement(c)):u.status>=400?c.textContent="✖ Error "+u.status+" while fetching file: "+u.statusText:c.textContent="✖ Error: File does not exist or is empty")},u.send(null)})},document.addEventListener("DOMContentLoaded",self.Prism.fileHighlight))}()}).call(e,n(27))},function(t,e,n){(function(t,r){var i;!function(o){function s(t){throw new RangeError(N[t])}function a(t,e){for(var n=t.length,r=[];n--;)r[n]=e(t[n]);return r}function c(t,e){var n=t.split("@"),r="";n.length>1&&(r=n[0]+"@",t=n[1]),t=t.replace(A,".");var i=t.split("."),o=a(i,e).join(".");return r+o}function u(t){for(var e,n,r=[],i=0,o=t.length;i=55296&&e<=56319&&i65535&&(t-=65536,e+=D(t>>>10&1023|55296),t=56320|1023&t),e+=D(t)}).join("")}function h(t){return t-48<10?t-22:t-65<26?t-65:t-97<26?t-97:w}function p(t,e){return t+22+75*(t<26)-((0!=e)<<5)}function f(t,e,n){var r=0;for(t=n?M(t/k):t>>1,t+=M(t/e);t>P*I>>1;r+=w)t=M(t/P);return M(r+(P+1)*t/(t+C))}function _(t){var e,n,r,i,o,a,c,u,p,_,d=[],y=t.length,m=0,g=E,v=T;for(n=t.lastIndexOf(S),n<0&&(n=0),r=0;r=128&&s("not-basic"),d.push(t.charCodeAt(r));for(i=n>0?n+1:0;i=y&&s("invalid-input"),u=h(t.charCodeAt(i++)),(u>=w||u>M((b-m)/a))&&s("overflow"),m+=u*a,p=c<=v?x:c>=v+I?I:c-v,!(uM(b/_)&&s("overflow"),a*=_;e=d.length+1,v=f(m-o,e,0==o),M(m/e)>b-g&&s("overflow"),g+=M(m/e),m%=e,d.splice(m++,0,g)}return l(d)}function d(t){var e,n,r,i,o,a,c,l,h,_,d,y,m,g,v,C=[];for(t=u(t),y=t.length,e=E,n=0,o=T,a=0;a=e&&dM((b-n)/m)&&s("overflow"),n+=(c-e)*m,e=c,a=0;ab&&s("overflow"),d==e){for(l=n,h=w;_=h<=o?x:h>=o+I?I:h-o,!(l<_);h+=w)v=l-_,g=w-_,C.push(D(p(_+v%g,0))),l=M(v/g);C.push(D(p(l,0))),o=f(n,m,r==i),n=0,++r}++n,++e}return C.join("")}function y(t){return c(t,function(t){return O.test(t)?_(t.slice(4).toLowerCase()):t})}function m(t){return c(t,function(t){return R.test(t)?"xn--"+d(t):t})}var g=("object"==typeof e&&e&&!e.nodeType&&e,"object"==typeof t&&t&&!t.nodeType&&t,"object"==typeof r&&r);g.global!==g&&g.window!==g&&g.self!==g||(o=g);var v,b=2147483647,w=36,x=1,I=26,C=38,k=700,T=72,E=128,S="-",O=/^xn--/,R=/[^\x20-\x7E]/,A=/[\x2E\u3002\uFF0E\uFF61]/g,N={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},P=w-x,M=Math.floor,D=String.fromCharCode;v={version:"1.4.1",ucs2:{decode:u,encode:l},decode:_,encode:d,toASCII:m,toUnicode:y},i=function(){return v}.call(e,n,e,t),!(void 0!==i&&(t.exports=i))}(this)}).call(e,n(397)(t),n(27))},function(t,e){"use strict";function n(t,e){return Object.prototype.hasOwnProperty.call(t,e)}t.exports=function(t,e,i,o){e=e||"&",i=i||"=";var s={};if("string"!=typeof t||0===t.length)return s;var a=/\+/g;t=t.split(e);var c=1e3;o&&"number"==typeof o.maxKeys&&(c=o.maxKeys);var u=t.length;c>0&&u>c&&(u=c);for(var l=0;l=0?(h=d.substr(0,y),p=d.substr(y+1)):(h=d,p=""),f=decodeURIComponent(h),_=decodeURIComponent(p),n(s,f)?r(s[f])?s[f].push(_):s[f]=[s[f],_]:s[f]=_}return s};var r=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}},function(t,e){"use strict";function n(t,e){if(t.map)return t.map(e);for(var n=[],r=0;r`\x00-\x20]+/,o=/'[^']*'/,s=/"[^"]*"/,a=n(/(?:unquoted|single_quoted|double_quoted)/)("unquoted",i)("single_quoted",o)("double_quoted",s)(),c=n(/(?:\s+attr_name(?:\s*=\s*attr_value)?)/)("attr_name",r)("attr_value",a)(),u=n(/<[A-Za-z][A-Za-z0-9]*attribute*\s*\/?>/)("attribute",c)(),l=/<\/[A-Za-z][A-Za-z0-9]*\s*>/,h=//,p=/<[?].*?[?]>/,f=/]*>/,_=/])*\]\]>/,d=n(/^(?:open_tag|close_tag|comment|processing|declaration|cdata)/)("open_tag",u)("close_tag",l)("comment",h)("processing",p)("declaration",f)("cdata",_)();t.exports.HTML_TAG_RE=d},function(t,e){"use strict";t.exports=["coap","doi","javascript","aaa","aaas","about","acap","cap","cid","crid","data","dav","dict","dns","file","ftp","geo","go","gopher","h323","http","https","iax","icap","im","imap","info","ipp","iris","iris.beep","iris.xpc","iris.xpcs","iris.lwz","ldap","mailto","mid","msrp","msrps","mtqp","mupdate","news","nfs","ni","nih","nntp","opaquelocktoken","pop","pres","rtsp","service","session","shttp","sieve","sip","sips","sms","snmp","soap.beep","soap.beeps","tag","tel","telnet","tftp","thismessage","tn3270","tip","tv","urn","vemmi","ws","wss","xcon","xcon-userid","xmlrpc.beep","xmlrpc.beeps","xmpp","z39.50r","z39.50s","adiumxtra","afp","afs","aim","apt","attachment","aw","beshare","bitcoin","bolo","callto","chrome","chrome-extension","com-eventbrite-attendee","content","cvs","dlna-playsingle","dlna-playcontainer","dtn","dvb","ed2k","facetime","feed","finger","fish","gg","git","gizmoproject","gtalk","hcp","icon","ipn","irc","irc6","ircs","itms","jar","jms","keyparc","lastfm","ldaps","magnet","maps","market","message","mms","ms-help","msnim","mumble","mvn","notes","oid","palm","paparazzi","platform","proxy","psyc","query","res","resource","rmi","rsync","rtmp","secondlife","sftp","sgn","skype","smb","soldat","spotify","ssh","steam","svn","teamspeak","things","udp","unreal","ut2004","ventrilo","view-source","webcal","wtai","wyciwyg","xfire","xri","ymsgr"]},function(t,e){"use strict";t.exports={options:{html:!0,xhtmlOut:!0,breaks:!1,langPrefix:"language-",linkify:!1,linkTarget:"",typographer:!1,quotes:"“”‘’",highlight:null,maxNesting:20},components:{core:{rules:["block","inline","references","abbr2"]},block:{rules:["blockquote","code","fences","heading","hr","htmlblock","lheading","list","paragraph"]},inline:{rules:["autolink","backticks","emphasis","entity","escape","htmltag","links","newline","text"]}}}},function(t,e){"use strict";t.exports={options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:"language-",linkify:!1,linkTarget:"",typographer:!1,quotes:"“”‘’",highlight:null,maxNesting:20},components:{core:{rules:["block","inline","references","replacements","linkify","smartquotes","references","abbr2","footnote_tail"]},block:{rules:["blockquote","code","fences","heading","hr","htmlblock","lheading","list","paragraph","table"]},inline:{rules:["autolink","backticks","del","emphasis","entity","escape","footnote_ref","htmltag","links","newline","text"]}}}},function(t,e){"use strict";t.exports={options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:"language-",linkify:!1,linkTarget:"",typographer:!1,quotes:"“”‘’",highlight:null,maxNesting:20},components:{core:{},block:{},inline:{}}}},function(t,e,n){"use strict";function r(t,e,n){this.src=e,this.env=n,this.options=t.options,this.tokens=[],this.inlineMode=!1,this.inline=t.inline,this.block=t.block,this.renderer=t.renderer,this.typographer=t.typographer}function i(t,e){"string"!=typeof t&&(e=t,t="default"),this.inline=new u,this.block=new c,this.core=new a,this.renderer=new s,this.ruler=new l,this.options={},this.configure(h[t]),this.set(e||{})}var o=n(44).assign,s=n(739),a=n(737),c=n(736),u=n(738),l=n(181),h={default:n(733),full:n(734),commonmark:n(732)};i.prototype.set=function(t){o(this.options,t)},i.prototype.configure=function(t){var e=this;if(!t)throw new Error("Wrong `remarkable` preset, check name/content");t.options&&e.set(t.options),t.components&&Object.keys(t.components).forEach(function(n){t.components[n].rules&&e[n].ruler.enable(t.components[n].rules,!0)})},i.prototype.use=function(t,e){return t(this,e),this},i.prototype.parse=function(t,e){var n=new r(this,t,e);return this.core.process(n),n.tokens},i.prototype.render=function(t,e){return e=e||{},this.renderer.render(this.parse(t,e),this.options,e)},i.prototype.parseInline=function(t,e){var n=new r(this,t,e);return n.inlineMode=!0,this.core.process(n),n.tokens},i.prototype.renderInline=function(t,e){return e=e||{},this.renderer.render(this.parseInline(t,e),this.options,e)},t.exports=i,t.exports.utils=n(44)},function(t,e,n){"use strict";function r(){this.ruler=new i;for(var t=0;t=n))&&!(t.tShift[a]=0&&(t=t.replace(a,function(e,n){var r;return 10===t.charCodeAt(n)?(s=n+1,l=0,e):(r=" ".slice((n-s-l)%4),l=n-s+1,r)})),i=new o(t,this,e,n,r),void this.tokenize(i,i.line,i.lineMax)):[]},t.exports=r},function(t,e,n){"use strict";function r(){this.options={},this.ruler=new i;for(var t=0;t0)return void(t.pos=n);for(e=0;e=o)break}else t.pending+=t.src[t.pos++]}t.pending&&t.pushPending()},r.prototype.parse=function(t,e,n,r){var i=new s(t,this,e,n,r);this.tokenize(i)},t.exports=r},function(t,e,n){"use strict";function r(){this.rules=i.assign({},o),this.getBreak=o.getBreak}var i=n(44),o=n(740);t.exports=r,r.prototype.renderInline=function(t,e,n){for(var r=this.rules,i=t.length,o=0,s="";i--;)s+=r[t[o].type](t,o++,e,n,this);return s},r.prototype.render=function(t,e,n){for(var r=this.rules,i=t.length,o=-1,s="";++o=t.length-2?e:"paragraph_open"===t[e].type&&t[e].tight&&"inline"===t[e+1].type&&0===t[e+1].content.length&&"paragraph_close"===t[e+2].type&&t[e+2].tight?r(t,e+2):e}var i=n(44).has,o=n(44).unescapeMd,s=n(44).replaceEntities,a=n(44).escapeHtml,c={};c.blockquote_open=function(){return"
\n"},c.blockquote_close=function(t,e){return"
"+u(t,e)},c.code=function(t,e){return t[e].block?"
"+a(t[e].content)+"
"+u(t,e):""+a(t[e].content)+""},c.fence=function(t,e,n,r,c){var l,h,p=t[e],f="",_=n.langPrefix,d="";if(p.params){if(l=p.params.split(/\s+/g)[0],i(c.rules.fence_custom,l))return c.rules.fence_custom[l](t,e,n,r,c);d=a(s(o(l))),f=' class="'+_+d+'"'}return h=n.highlight?n.highlight(p.content,d)||a(p.content):a(p.content),"
"+h+"
"+u(t,e)},c.fence_custom={},c.heading_open=function(t,e){return""},c.heading_close=function(t,e){return"\n"},c.hr=function(t,e,n){return(n.xhtmlOut?"
":"
")+u(t,e)},c.bullet_list_open=function(){return"
    \n"},c.bullet_list_close=function(t,e){return"
"+u(t,e)},c.list_item_open=function(){return"
  • "},c.list_item_close=function(){return"
  • \n"},c.ordered_list_open=function(t,e){var n=t[e],r=n.order>1?' start="'+n.order+'"':"";return"\n"},c.ordered_list_close=function(t,e){return""+u(t,e)},c.paragraph_open=function(t,e){return t[e].tight?"":"

    "},c.paragraph_close=function(t,e){var n=!(t[e].tight&&e&&"inline"===t[e-1].type&&!t[e-1].content);return(t[e].tight?"":"

    ")+(n?u(t,e):"")},c.link_open=function(t,e,n){var r=t[e].title?' title="'+a(s(t[e].title))+'"':"",i=n.linkTarget?' target="'+n.linkTarget+'"':"";return'"},c.link_close=function(){return""},c.image=function(t,e,n){var r=' src="'+a(t[e].src)+'"',i=t[e].title?' title="'+a(s(t[e].title))+'"':"",o=' alt="'+(t[e].alt?a(s(t[e].alt)):"")+'"',c=n.xhtmlOut?" /":"";return""},c.table_open=function(){return"\n"},c.table_close=function(){return"
    \n"},c.thead_open=function(){return"\n"},c.thead_close=function(){return"\n"},c.tbody_open=function(){return"\n"},c.tbody_close=function(){return"\n"},c.tr_open=function(){return""},c.tr_close=function(){return"\n"},c.th_open=function(t,e){var n=t[e];return""},c.th_close=function(){return""},c.td_open=function(t,e){var n=t[e];return""},c.td_close=function(){return""},c.strong_open=function(){return""},c.strong_close=function(){return""},c.em_open=function(){return""},c.em_close=function(){return""},c.del_open=function(){return""},c.del_close=function(){return""},c.ins_open=function(){return""},c.ins_close=function(){return""},c.mark_open=function(){return""},c.mark_close=function(){return""},c.sub=function(t,e){return""+a(t[e].content)+""},c.sup=function(t,e){return""+a(t[e].content)+""},c.hardbreak=function(t,e,n){return n.xhtmlOut?"
    \n":"
    \n"},c.softbreak=function(t,e,n){return n.breaks?n.xhtmlOut?"
    \n":"
    \n":"\n"},c.text=function(t,e){return a(t[e].content)},c.htmlblock=function(t,e){return t[e].content},c.htmltag=function(t,e){return t[e].content},c.abbr_open=function(t,e){return''},c.abbr_close=function(){return""},c.footnote_ref=function(t,e){var n=Number(t[e].id+1).toString(),r="fnref"+n;return t[e].subId>0&&(r+=":"+t[e].subId),'['+n+"]"},c.footnote_block_open=function(t,e,n){var r=n.xhtmlOut?'
    \n':'
    \n';return r+'
    \n
      \n'},c.footnote_block_close=function(){return"
    \n
    \n"},c.footnote_open=function(t,e){var n=Number(t[e].id+1).toString();return'
  • '},c.footnote_close=function(){return"
  • \n"},c.footnote_anchor=function(t,e){var n=Number(t[e].id+1).toString(),r="fnref"+n;return t[e].subId>0&&(r+=":"+t[e].subId),' '},c.dl_open=function(){return"
    \n"},c.dt_open=function(){return"
    "},c.dd_open=function(){return"
    "},c.dl_close=function(){return"
    \n"},c.dt_close=function(){return"\n"},c.dd_close=function(){return"\n"};var u=c.getBreak=function(t,e){return e=r(t,e),ey)return!1;if(62!==t.src.charCodeAt(d++))return!1;if(t.level>=t.options.maxNesting)return!1;if(r)return!0;for(32===t.src.charCodeAt(d)&&d++,c=t.blkIndent,t.blkIndent=0,a=[t.bMarks[e]],t.bMarks[e]=d,d=d=y,s=[t.tShift[e]],t.tShift[e]=d-t.bMarks[e],h=t.parser.ruler.getRules("blockquote"),i=e+1;i=y));i++)if(62!==t.src.charCodeAt(d++)){if(o)break;for(_=!1,p=0,f=h.length;p=y,s.push(t.tShift[i]),t.tShift[i]=d-t.bMarks[i];for(u=t.parentType,t.parentType="blockquote",t.tokens.push({type:"blockquote_open",lines:l=[e,0],level:t.level++}),t.parser.tokenize(t,e,i),t.tokens.push({type:"blockquote_close",level:--t.level}),t.parentType=u,l[1]=t.line,p=0;p=4))break;r++,i=r}return t.line=r,t.tokens.push({type:"code",content:t.getLines(e,i,4+t.blkIndent,!0),block:!0,lines:[e,t.line],level:t.level}),!0}},function(t,e){"use strict";function n(t,e){var n,r,i=t.bMarks[e]+t.tShift[e],o=t.eMarks[e];return i>=o?-1:(r=t.src.charCodeAt(i++),126!==r&&58!==r?-1:(n=t.skipSpaces(i),i===n?-1:n>=o?-1:n))}function r(t,e){var n,r,i=t.level+2;for(n=e+2,r=t.tokens.length-2;n=0;if(p=e+1,t.isEmpty(p)&&++p>i)return!1;if(t.tShift[p]=t.options.maxNesting)return!1;h=t.tokens.length,t.tokens.push({type:"dl_open",lines:l=[e,0],level:t.level++}),c=e,a=p;t:for(;;){for(v=!0,g=!1,t.tokens.push({type:"dt_open",lines:[c,c],level:t.level++}),t.tokens.push({type:"inline",content:t.getLines(c,c+1,t.blkIndent,!1).trim(),level:t.level+1,lines:[c,c],children:[]}),t.tokens.push({type:"dt_close",level:--t.level});;){if(t.tokens.push({type:"dd_open",lines:u=[p,0],level:t.level++}),m=t.tight,_=t.ddIndent,f=t.blkIndent,y=t.tShift[a],d=t.parentType,t.blkIndent=t.ddIndent=t.tShift[a]+2,t.tShift[a]=s-t.bMarks[a],t.tight=!0,t.parentType="deflist",t.parser.tokenize(t,a,i,!0),t.tight&&!g||(v=!1),g=t.line-a>1&&t.isEmpty(t.line-1),t.tShift[a]=y,t.tight=m,t.parentType=d,t.blkIndent=f,t.ddIndent=_,t.tokens.push({type:"dd_close",level:--t.level}),u[1]=p=t.line,p>=i)break t;if(t.tShift[p]=i)break;if(c=p,t.isEmpty(c))break;if(t.tShift[c]=i)break;if(t.isEmpty(a)&&a++,a>=i)break;if(t.tShift[a]h)return!1;if(i=t.src.charCodeAt(l),126!==i&&96!==i)return!1;if(c=l,l=t.skipChars(l,i),o=l-c,o<3)return!1;if(s=t.src.slice(l,h).trim(),s.indexOf("`")>=0)return!1;if(r)return!0;for(a=e;(a++,!(a>=n))&&(l=c=t.bMarks[a]+t.tShift[a],h=t.eMarks[a],!(l=4||(l=t.skipChars(l,i),l-cl)return!1;if(91!==t.src.charCodeAt(u))return!1;if(94!==t.src.charCodeAt(u+1))return!1;if(t.level>=t.options.maxNesting)return!1;for(a=u+2;a=l||58!==t.src.charCodeAt(++a))&&(!!r||(a++,t.env.footnotes||(t.env.footnotes={}),t.env.footnotes.refs||(t.env.footnotes.refs={}),c=t.src.slice(u+2,a-2),t.env.footnotes.refs[":"+c]=-1,t.tokens.push({type:"footnote_reference_open",label:c,level:t.level++}),i=t.bMarks[e],o=t.tShift[e],s=t.parentType,t.tShift[e]=t.skipSpaces(a)-a,t.bMarks[e]=a,t.blkIndent+=4,t.parentType="footnote",t.tShift[e]=c)return!1;if(i=t.src.charCodeAt(a),35!==i||a>=c)return!1;for(o=1,i=t.src.charCodeAt(++a);35===i&&a6||aa&&32===t.src.charCodeAt(s-1)&&(c=s),t.line=e+1,t.tokens.push({type:"heading_open",hLevel:o,lines:[e,t.line],level:t.level}),ac)return!1;if(i=t.src.charCodeAt(a++),42!==i&&45!==i&&95!==i)return!1;for(o=1;a=97&&e<=122}var i=n(729),o=/^<([a-zA-Z]{1,15})[\s\/>]/,s=/^<\/([a-zA-Z]{1,15})[\s>]/;t.exports=function(t,e,n,a){var c,u,l,h=t.bMarks[e],p=t.eMarks[e],f=t.tShift[e];if(h+=f,!t.options.html)return!1;if(f>3||h+2>=p)return!1;if(60!==t.src.charCodeAt(h))return!1;if(c=t.src.charCodeAt(h+1),33===c||63===c){if(a)return!0}else{if(47!==c&&!r(c))return!1;if(47===c){if(u=t.src.slice(h,p).match(s),!u)return!1}else if(u=t.src.slice(h,p).match(o),!u)return!1;if(i[u[1].toLowerCase()]!==!0)return!1;if(a)return!0}for(l=e+1;l=n)&&(!(t.tShift[s]3)&&(i=t.bMarks[s]+t.tShift[s],o=t.eMarks[s],!(i>=o)&&(r=t.src.charCodeAt(i),(45===r||61===r)&&(i=t.skipChars(i,r),i=t.skipSpaces(i),!(i=i?-1:(n=t.src.charCodeAt(r++),42!==n&&45!==n&&43!==n?-1:r=i)return-1;if(n=t.src.charCodeAt(r++),n<48||n>57)return-1;for(;;){if(r>=i)return-1;if(n=t.src.charCodeAt(r++),!(n>=48&&n<=57)){if(41===n||46===n)break;return-1}}return r=0)v=!0;else{if(!((_=n(t,e))>=0))return!1;v=!1}if(t.level>=t.options.maxNesting)return!1;if(g=t.src.charCodeAt(_-1),s)return!0;for(w=t.tokens.length,v?(f=t.bMarks[e]+t.tShift[e],m=Number(t.src.substr(f,_-f-1)),t.tokens.push({type:"ordered_list_open",order:m,lines:I=[e,0],level:t.level++})):t.tokens.push({type:"bullet_list_open",lines:I=[e,0],level:t.level++}),a=e,x=!1,k=t.parser.ruler.getRules("list");!(!(a=d?1:b-_,y>4&&(y=1),y<1&&(y=1),c=_-t.bMarks[a]+y,t.tokens.push({type:"list_item_open",lines:C=[e,0],level:t.level++}),l=t.blkIndent,h=t.tight,u=t.tShift[e],p=t.parentType,t.tShift[e]=b-t.bMarks[e],t.blkIndent=c,t.tight=!0,t.parentType="list",t.parser.tokenize(t,e,o,!0),t.tight&&!x||(O=!1),x=t.line-e>1&&t.isEmpty(t.line-1),t.blkIndent=l,t.tShift[e]=u,t.tight=h,t.parentType=p,t.tokens.push({type:"list_item_close",level:--t.level}),a=e=t.line,C[1]=a,b=t.bMarks[e],a>=o)||t.isEmpty(a)||t.tShift[a]3)){for(i=!1,o=0,s=a.length;o=this.eMarks[t]},n.prototype.skipEmptyLines=function(t){for(var e=this.lineMax;tn;)if(e!==this.src.charCodeAt(--t))return t+1;return t},n.prototype.getLines=function(t,e,n,r){var i,o,s,a,c,u=t;if(t>=e)return"";if(u+1===e)return o=this.bMarks[u]+Math.min(this.tShift[u],n),s=r?this.eMarks[u]+1:this.eMarks[u],this.src.slice(o,s);for(a=new Array(e-t),i=0;un&&(c=n),c<0&&(c=0),o=this.bMarks[u]+c,s=u+1r)return!1; +if(u=e+1,t.tShift[u]=t.eMarks[u])return!1;if(o=t.src.charCodeAt(a),124!==o&&45!==o&&58!==o)return!1;if(s=n(t,e+1),!/^[-:| ]+$/.test(s))return!1;if(l=s.split("|"),l<=2)return!1;for(h=[],c=0;c=0;e--)if(a=s[e],"text"===a.type){for(l=0,c=a.content,p.lastIndex=0,h=a.level,u=[];f=p.exec(c);)p.lastIndex>l&&u.push({type:"text",content:c.slice(l,f.index+f[1].length),level:h}),u.push({type:"abbr_open",title:t.env.abbreviations[":"+f[2]],level:h++}),u.push({type:"text",content:f[2],level:h}),u.push({type:"abbr_close",level:--h}),l=p.lastIndex-f[3].length;u.length&&(l0?s[e].count:1,r=0;r\s]/i.test(t)}function i(t){return/^<\/a\s*>/i.test(t)}function o(){var t=[],e=new s({stripPrefix:!1,url:!0,email:!0,twitter:!1,replaceFn:function(e,n){switch(n.getType()){case"url":t.push({text:n.matchedText,url:n.getUrl()});break;case"email":t.push({text:n.matchedText,url:"mailto:"+n.getEmail().replace(/^mailto:/i,"")})}return!1}});return{links:t,autolinker:e}}var s=n(779),a=/www|@|\:\/\//;t.exports=function(t){var e,n,s,c,u,l,h,p,f,_,d,y,m,g=t.tokens,v=null;if(t.options.linkify)for(n=0,s=g.length;n=0;e--)if(u=c[e],"link_close"!==u.type){if("htmltag"===u.type&&(r(u.content)&&d>0&&d--,i(u.content)&&d++),!(d>0)&&"text"===u.type&&a.test(u.content)){if(v||(v=o(),y=v.links,m=v.autolinker),l=u.content,y.length=0,m.link(l),!y.length)continue;for(h=[],_=u.level,p=0;p=0;a--)if("inline"===t.tokens[a].type)for(s=t.tokens[a].children,e=s.length-1;e>=0;e--)i=s[e],"text"===i.type&&(o=i.content,o=n(o),r.test(o)&&(o=o.replace(/\+-/g,"±").replace(/\.{2,}/g,"…").replace(/([?!])…/g,"$1..").replace(/([?!]){4,}/g,"$1$1$1").replace(/,{2,}/g,",").replace(/(^|[^-])---([^-]|$)/gm,"$1—$2").replace(/(^|\s)--(\s|$)/gm,"$1–$2").replace(/(^|[^-\s])--([^-\s]|$)/gm,"$1–$2")),i.content=o)}},function(t,e){"use strict";function n(t,e){return!(e<0||e>=t.length)&&!s.test(t[e])}function r(t,e,n){return t.substr(0,e)+n+t.substr(e+1)}var i=/['"]/,o=/['"]/g,s=/[-\s()\[\]]/,a="’";t.exports=function(t){var e,s,c,u,l,h,p,f,_,d,y,m,g,v,b,w,x;if(t.options.typographer)for(x=[],b=t.tokens.length-1;b>=0;b--)if("inline"===t.tokens[b].type)for(w=t.tokens[b].children,x.length=0,e=0;e=0&&!(x[g].level<=p);g--);x.length=g+1,c=s.content,l=0,h=c.length;t:for(;l=0&&(d=x[g],!(x[g].level/,s=/^<([a-zA-Z.\-]{1,25}):([^<>\x00-\x20]*)>/;t.exports=function(t,e){var n,a,c,u,l,h=t.pos;return 60===t.src.charCodeAt(h)&&(n=t.src.slice(h),!(n.indexOf(">")<0)&&((a=n.match(s))?!(r.indexOf(a[1].toLowerCase())<0)&&(u=a[0].slice(1,-1),l=i(u),!!t.parser.validateLink(u)&&(e||(t.push({type:"link_open",href:l,level:t.level}),t.push({type:"text",content:u,level:t.level+1}),t.push({type:"link_close",level:t.level})),t.pos+=a[0].length,!0)):(c=n.match(o),!!c&&(u=c[0].slice(1,-1),l=i("mailto:"+u),!!t.parser.validateLink(l)&&(e||(t.push({type:"link_open",href:l,level:t.level}),t.push({type:"text",content:u,level:t.level+1}),t.push({type:"link_close",level:t.level})),t.pos+=c[0].length,!0)))))}},function(t,e){"use strict";t.exports=function(t,e){var n,r,i,o,s,a=t.pos,c=t.src.charCodeAt(a);if(96!==c)return!1;for(n=a,a++,r=t.posMax;a=a)return!1;if(126!==t.src.charCodeAt(c+1))return!1;if(t.level>=t.options.maxNesting)return!1;if(o=c>0?t.src.charCodeAt(c-1):-1,s=t.src.charCodeAt(c+2),126===o)return!1;if(126===s)return!1;if(32===s||10===s)return!1;for(r=c+2;rc+3)return t.pos+=r-c,e||(t.pending+=t.src.slice(c,r)),!0;for(t.pos=c+2,i=1;t.pos+1=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122}function r(t,e){var r,i,o,s=e,a=!0,c=!0,u=t.posMax,l=t.src.charCodeAt(e);for(r=e>0?t.src.charCodeAt(e-1):-1;s=u&&(a=!1),o=s-e,o>=4?a=c=!1:(i=s=t.options.maxNesting)return!1;for(t.pos=h+n,c=[n];t.pos?@[]^_`{|}~-".split("").forEach(function(t){n[t.charCodeAt(0)]=1}),t.exports=function(t,e){var r,i=t.pos,o=t.posMax;if(92!==t.src.charCodeAt(i))return!1;if(i++,i=a)&&(94===t.src.charCodeAt(c)&&(91===t.src.charCodeAt(c+1)&&(!(t.level>=t.options.maxNesting)&&(n=c+2,i=r(t,c+1),!(i<0)&&(e||(t.env.footnotes||(t.env.footnotes={}),t.env.footnotes.list||(t.env.footnotes.list=[]),o=t.env.footnotes.list.length,t.pos=n,t.posMax=i,t.push({type:"footnote_ref",id:o,level:t.level}),t.linkLevel++,s=t.tokens.length,t.parser.tokenize(t),t.env.footnotes.list[o]={tokens:t.tokens.splice(s)},t.linkLevel--),t.pos=i+1,t.posMax=a,!0)))))}},function(t,e){"use strict";t.exports=function(t,e){var n,r,i,o,s=t.posMax,a=t.pos;if(a+3>s)return!1;if(!t.env.footnotes||!t.env.footnotes.refs)return!1;if(91!==t.src.charCodeAt(a))return!1;if(94!==t.src.charCodeAt(a+1))return!1;if(t.level>=t.options.maxNesting)return!1;for(r=a+2;r=s)&&(r++,n=t.src.slice(a+2,r-1),"undefined"!=typeof t.env.footnotes.refs[":"+n]&&(e||(t.env.footnotes.list||(t.env.footnotes.list=[]),t.env.footnotes.refs[":"+n]<0?(i=t.env.footnotes.list.length,t.env.footnotes.list[i]={label:n,count:0},t.env.footnotes.refs[":"+n]=i):i=t.env.footnotes.refs[":"+n],o=t.env.footnotes.list[i].count,t.env.footnotes.list[i].count++,t.push({type:"footnote_ref",id:i,subId:o,level:t.level})),t.pos=r,t.posMax=s,!0)))}},function(t,e,n){"use strict";function r(t){var e=32|t;return e>=97&&e<=122}var i=n(730).HTML_TAG_RE;t.exports=function(t,e){var n,o,s,a=t.pos;return!!t.options.html&&(s=t.posMax,!(60!==t.src.charCodeAt(a)||a+2>=s)&&(n=t.src.charCodeAt(a+1),!(33!==n&&63!==n&&47!==n&&!r(n))&&(!!(o=t.src.slice(a).match(i))&&(e||t.push({type:"htmltag",content:t.src.slice(a,a+o[0].length),level:t.level}),t.pos+=o[0].length,!0))))}},function(t,e){"use strict";t.exports=function(t,e){var n,r,i,o,s,a=t.posMax,c=t.pos;if(43!==t.src.charCodeAt(c))return!1;if(e)return!1;if(c+4>=a)return!1;if(43!==t.src.charCodeAt(c+1))return!1;if(t.level>=t.options.maxNesting)return!1;if(o=c>0?t.src.charCodeAt(c-1):-1,s=t.src.charCodeAt(c+2),43===o)return!1;if(43===s)return!1;if(32===s||10===s)return!1;for(r=c+2;r=t.options.maxNesting)return!1;if(n=m+1,a=r(t,m),a<0)return!1;if(h=a+1,h=y)return!1;for(m=h,i(t,h)?(u=t.linkContent,h=t.pos):u="",m=h;h=y||41!==t.src.charCodeAt(h))return t.pos=d,!1;h++}else{if(t.linkLevel>0)return!1;for(;h=0?c=t.src.slice(m,h++):h=m-1),c||("undefined"==typeof c&&(h=a+1),c=t.src.slice(n,a)),p=t.env.references[s(c)],!p)return t.pos=d,!1;u=p.href,l=p.title}return e||(t.pos=n,t.posMax=a,_?t.push({type:"image",src:u,title:l,alt:t.src.substr(n,a-n),level:t.level}):(t.push({type:"link_open",href:u,title:l,level:t.level++}),t.linkLevel++,t.parser.tokenize(t),t.linkLevel--,t.push({type:"link_close",level:--t.level}))),t.pos=h,t.posMax=y,!0}},function(t,e){"use strict";t.exports=function(t,e){var n,r,i,o,s,a=t.posMax,c=t.pos;if(61!==t.src.charCodeAt(c))return!1;if(e)return!1;if(c+4>=a)return!1;if(61!==t.src.charCodeAt(c+1))return!1;if(t.level>=t.options.maxNesting)return!1;if(o=c>0?t.src.charCodeAt(c-1):-1,s=t.src.charCodeAt(c+2),61===o)return!1;if(61===s)return!1;if(32===s||10===s)return!1;for(r=c+2;r=0&&32===t.pending.charCodeAt(n)?n>=1&&32===t.pending.charCodeAt(n-1)?(t.pending=t.pending.replace(/ +$/,""),t.push({type:"hardbreak",level:t.level})):(t.pending=t.pending.slice(0,-1),t.push({type:"softbreak",level:t.level})):t.push({type:"softbreak",level:t.level})),i++;i?@[\]^_`{|}~-])/g;t.exports=function(t,e){var r,i,o=t.posMax,s=t.pos;if(126!==t.src.charCodeAt(s))return!1;if(e)return!1;if(s+2>=o)return!1;if(t.level>=t.options.maxNesting)return!1;for(t.pos=s+1;t.pos?@[\]^_`{|}~-])/g;t.exports=function(t,e){var r,i,o=t.posMax,s=t.pos;if(94!==t.src.charCodeAt(s))return!1;if(e)return!1;if(s+2>=o)return!1;if(t.level>=t.options.maxNesting)return!1;for(t.pos=s+1;t.pose&&(n=null==n?"..":n,t=t.substring(0,e-n.length)+n),t},indexOf:function(t,e){if(Array.prototype.indexOf)return t.indexOf(e);for(var n=0,r=t.length;n",this.getInnerHtml(),""].join("")},buildAttrsStr:function(){if(!this.attrs)return"";var t=this.getAttrs(),e=[];for(var n in t)t.hasOwnProperty(n)&&e.push(n+'="'+t[n]+'"');return e.join(" ")}}),t.AnchorTagBuilder=t.Util.extend(Object,{constructor:function(e){t.Util.assign(this,e)},build:function(e){var n=new t.HtmlTag({tagName:"a",attrs:this.createAttrs(e.getType(),e.getAnchorHref()),innerHtml:this.processAnchorText(e.getAnchorText())});return n},createAttrs:function(t,e){var n={href:e},r=this.createCssClass(t);return r&&(n.class=r),this.newWindow&&(n.target="_blank"),n},createCssClass:function(t){var e=this.className;return e?e+" "+e+"-"+t:""},processAnchorText:function(t){return t=this.doTruncate(t)},doTruncate:function(e){return t.Util.ellipsis(e,this.truncate||Number.POSITIVE_INFINITY)}}),t.htmlParser.HtmlParser=t.Util.extend(Object,{htmlRegex:function(){var t=/[0-9a-zA-Z][0-9a-zA-Z:]*/,e=/[^\s\0"'>\/=\x01-\x1F\x7F]+/,n=/(?:"[^"]*?"|'[^']*?'|[^'"=<>`\s]+)/,r=e.source+"(?:\\s*=\\s*"+n.source+")?";return new RegExp(["(?:","<(!DOCTYPE)","(?:","\\s+","(?:",r,"|",n.source+")",")*",">",")","|","(?:","<(/)?","("+t.source+")","(?:","\\s+",r,")*","\\s*/?",">",")"].join(""),"gi")}(),htmlCharacterEntitiesRegex:/( | |<|<|>|>|"|"|')/gi,parse:function(t){for(var e,n,r=this.htmlRegex,i=0,o=[];null!==(e=r.exec(t));){var s=e[0],a=e[1]||e[3],c=!!e[2],u=t.substring(i,e.index);u&&(n=this.parseTextAndEntityNodes(u),o.push.apply(o,n)),o.push(this.createElementNode(s,a,c)),i=e.index+s.length}if(i=r)return void i.complete();i.next(e[n]),t.index=n+1,this.schedule(t)}},e.prototype._subscribe=function(t){var n=0,r=this,i=r.arrayLike,o=r.scheduler,s=i.length;if(o)return o.schedule(e.dispatch,0,{arrayLike:i,index:n,length:s,subscriber:t});for(var a=0;a_?_:e):e}function o(t){return"number"==typeof t&&c.root.isFinite(t)}function s(t){var e=+t;return 0===e?e:isNaN(e)?e:e<0?-1:1}var a=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},c=n(38),u=n(0),l=n(137),h=function(t){function e(e,n){if(t.call(this),this.scheduler=n,null==e)throw new Error("iterator cannot be null."); +this.iterator=r(e)}return a(e,t),e.create=function(t,n){return new e(t,n)},e.dispatch=function(t){var e=t.index,n=t.hasError,r=t.iterator,i=t.subscriber;if(n)return void i.error(t.error);var o=r.next();return o.done?void i.complete():(i.next(o.value),t.index=e+1,void(i.closed||this.schedule(t)))},e.prototype._subscribe=function(t){var n=0,r=this,i=r.iterator,o=r.scheduler;if(o)return o.schedule(e.dispatch,0,{index:n,iterator:i,subscriber:t});for(;;){var s=i.next();if(s.done){t.complete();break}if(t.next(s.value),t.closed)break}},e}(u.Observable);e.IteratorObservable=h;var p=function(){function t(t,e,n){void 0===e&&(e=0),void 0===n&&(n=t.length),this.str=t,this.idx=e,this.len=n}return t.prototype[l.$$iterator]=function(){return this},t.prototype.next=function(){return this.idx=r?void i.complete():(i.next(e),void(i.closed||(t.index=n+1,t.start=e+1,this.schedule(t))))},e.prototype._subscribe=function(t){var n=0,r=this.start,i=this._count,o=this.scheduler;if(o)return o.schedule(e.dispatch,0,{index:n,count:i,start:r,subscriber:t});for(;;){if(n++>=i){t.complete();break}if(t.next(r++),t.closed)break}},e}(i.Observable);e.RangeObservable=o},function(t,e,n){"use strict";var r=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},i=n(0),o=n(381),s=n(270),a=function(t){function e(e,n,r){void 0===n&&(n=0),void 0===r&&(r=o.asap),t.call(this),this.source=e,this.delayTime=n,this.scheduler=r,(!s.isNumeric(n)||n<0)&&(this.delayTime=0),r&&"function"==typeof r.schedule||(this.scheduler=o.asap)}return r(e,t),e.create=function(t,n,r){return void 0===n&&(n=0),void 0===r&&(r=o.asap),new e(t,n,r)},e.dispatch=function(t){var e=t.source,n=t.subscriber;return e.subscribe(n)},e.prototype._subscribe=function(t){var n=this.delayTime,r=this.source,i=this.scheduler;return i.schedule(e.dispatch,n,{source:r,subscriber:t})},e}(i.Observable);e.SubscribeOnObservable=a},function(t,e,n){"use strict";var r=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},i=n(270),o=n(0),s=n(45),a=n(88),c=n(189),u=function(t){function e(e,n,r){void 0===e&&(e=0),t.call(this),this.period=-1,this.dueTime=0,i.isNumeric(n)?this.period=Number(n)<1&&1||Number(n):a.isScheduler(n)&&(r=n),a.isScheduler(r)||(r=s.async),this.scheduler=r,this.dueTime=c.isDate(e)?+e-this.scheduler.now():e}return r(e,t),e.create=function(t,n,r){return void 0===t&&(t=0),new e(t,n,r)},e.dispatch=function(t){var e=t.index,n=t.period,r=t.subscriber,i=this;if(r.next(e),!r.closed){if(n===-1)return r.complete();t.index=e+1,i.schedule(t,n)}},e.prototype._subscribe=function(t){var n=0,r=this,i=r.period,o=r.dueTime,s=r.scheduler;return s.schedule(e.dispatch,o,{index:n,period:i,subscriber:t})},e}(o.Observable);e.TimerObservable=u},function(t,e,n){"use strict";var r=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},i=n(0),o=n(5),s=n(4),a=function(t){function e(e,n){t.call(this),this.resourceFactory=e,this.observableFactory=n}return r(e,t),e.create=function(t,n){return new e(t,n)},e.prototype._subscribe=function(t){var e,n=this,r=n.resourceFactory,i=n.observableFactory;try{return e=r(),new c(t,e,i)}catch(e){t.error(e)}},e}(i.Observable);e.UsingObservable=a;var c=function(t){function e(e,n,r){t.call(this,e),this.resource=n,this.observableFactory=r,e.add(n),this.tryUse()}return r(e,t),e.prototype.tryUse=function(){try{var t=this.observableFactory.call(this,this.resource);t&&this.add(o.subscribeToResult(this,t))}catch(t){this._error(t)}},e}(s.OuterSubscriber)},function(t,e,n){"use strict";var r=n(915);e.bindCallback=r.BoundCallbackObservable.create},function(t,e,n){"use strict";var r=n(916);e.bindNodeCallback=r.BoundNodeCallbackObservable.create},function(t,e,n){"use strict";function r(){for(var t=[],e=0;e0;){var r=n.shift();r.length>0&&e.next(r)}t.prototype._complete.call(this)},e}(o.Subscriber)},function(t,e,n){"use strict";function r(t){var e=arguments.length,n=c.async;l.isScheduler(arguments[arguments.length-1])&&(n=arguments[arguments.length-1],e--);var r=null;e>=2&&(r=arguments[1]);var i=Number.POSITIVE_INFINITY;return e>=3&&(i=arguments[2]),this.lift(new h(t,r,i,n))}function i(t){var e=t.subscriber,n=t.context;n&&e.closeContext(n),e.closed||(t.context=e.openContext(),t.context.closeAction=this.schedule(t,t.bufferTimeSpan))}function o(t){var e=t.bufferCreationInterval,n=t.bufferTimeSpan,r=t.subscriber,i=t.scheduler,o=r.openContext(),a=this;r.closed||(r.add(o.closeAction=i.schedule(s,n,{subscriber:r,context:o})),a.schedule(t,e))}function s(t){var e=t.subscriber,n=t.context;e.closeContext(n)}var a=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},c=n(45),u=n(3),l=n(88);e.bufferTime=r;var h=function(){function t(t,e,n,r){this.bufferTimeSpan=t,this.bufferCreationInterval=e,this.maxBufferSize=n,this.scheduler=r}return t.prototype.call=function(t,e){return e._subscribe(new f(t,this.bufferTimeSpan,this.bufferCreationInterval,this.maxBufferSize,this.scheduler))},t}(),p=function(){function t(){this.buffer=[]}return t}(),f=function(t){function e(e,n,r,a,c){t.call(this,e),this.bufferTimeSpan=n,this.bufferCreationInterval=r,this.maxBufferSize=a,this.scheduler=c,this.contexts=[];var u=this.openContext();if(this.timespanOnly=null==r||r<0,this.timespanOnly){var l={subscriber:this,context:u,bufferTimeSpan:n};this.add(u.closeAction=c.schedule(i,n,l))}else{var h={subscriber:this,context:u},p={bufferTimeSpan:n,bufferCreationInterval:r,subscriber:this,scheduler:c};this.add(u.closeAction=c.schedule(s,n,h)),this.add(c.schedule(o,r,p))}}return a(e,t),e.prototype._next=function(t){for(var e,n=this.contexts,r=n.length,i=0;i0;){var i=n.shift();r.next(i.buffer)}t.prototype._complete.call(this)},e.prototype._unsubscribe=function(){this.contexts=null},e.prototype.onBufferFull=function(t){this.closeContext(t);var e=t.closeAction;if(e.unsubscribe(),this.remove(e),this.timespanOnly){t=this.openContext();var n=this.bufferTimeSpan,r={subscriber:this,context:t,bufferTimeSpan:n};this.add(t.closeAction=this.scheduler.schedule(i,n,r))}},e.prototype.openContext=function(){var t=new p;return this.contexts.push(t),t},e.prototype.closeContext=function(t){this.destination.next(t.buffer);var e=this.contexts,n=e?e.indexOf(t):-1;n>=0&&e.splice(e.indexOf(t),1)},e}(u.Subscriber)},function(t,e,n){"use strict";function r(t,e){return this.lift(new c(t,e))}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(30),s=n(5),a=n(4);e.bufferToggle=r;var c=function(){function t(t,e){this.openings=t,this.closingSelector=e}return t.prototype.call=function(t,e){return e._subscribe(new u(t,this.openings,this.closingSelector))},t}(),u=function(t){function e(e,n,r){t.call(this,e),this.openings=n,this.closingSelector=r,this.contexts=[],this.add(s.subscribeToResult(this,n))}return i(e,t),e.prototype._next=function(t){for(var e=this.contexts,n=e.length,r=0;r0;){var r=n.shift();r.subscription.unsubscribe(),r.buffer=null,r.subscription=null}this.contexts=null,t.prototype._error.call(this,e)},e.prototype._complete=function(){for(var e=this.contexts;e.length>0;){var n=e.shift();this.destination.next(n.buffer),n.subscription.unsubscribe(),n.buffer=null,n.subscription=null}this.contexts=null,t.prototype._complete.call(this)},e.prototype.notifyNext=function(t,e,n,r,i){t?this.closeBuffer(t):this.openBuffer(e)},e.prototype.notifyComplete=function(t){this.closeBuffer(t.context)},e.prototype.openBuffer=function(t){try{var e=this.closingSelector,n=e.call(this,t);n&&this.trySubscribe(n)}catch(t){this._error(t)}},e.prototype.closeBuffer=function(t){var e=this.contexts;if(e&&t){var n=t.buffer,r=t.subscription;this.destination.next(n),e.splice(e.indexOf(t),1),this.remove(r),r.unsubscribe()}},e.prototype.trySubscribe=function(t){var e=this.contexts,n=[],r=new o.Subscription,i={buffer:n,subscription:r};e.push(i);var a=s.subscribeToResult(this,t,i);!a||a.closed?this.closeBuffer(i):(a.context=i,this.add(a),r.add(a))},e}(a.OuterSubscriber)},function(t,e,n){"use strict";function r(t){return this.lift(new l(t))}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(30),s=n(33),a=n(31),c=n(4),u=n(5);e.bufferWhen=r;var l=function(){function t(t){this.closingSelector=t}return t.prototype.call=function(t,e){return e._subscribe(new h(t,this.closingSelector))},t}(),h=function(t){function e(e,n){t.call(this,e),this.closingSelector=n,this.subscribing=!1,this.openBuffer()}return i(e,t),e.prototype._next=function(t){this.buffer.push(t)},e.prototype._complete=function(){var e=this.buffer;e&&this.destination.next(e),t.prototype._complete.call(this)},e.prototype._unsubscribe=function(){this.buffer=null,this.subscribing=!1},e.prototype.notifyNext=function(t,e,n,r,i){this.openBuffer()},e.prototype.notifyComplete=function(){this.subscribing?this.complete():this.openBuffer()},e.prototype.openBuffer=function(){var t=this.closingSubscription;t&&(this.remove(t),t.unsubscribe());var e=this.buffer;this.buffer&&this.destination.next(e),this.buffer=[];var n=s.tryCatch(this.closingSelector)();n===a.errorObject?this.error(a.errorObject.e):(t=new o.Subscription,this.closingSubscription=t,this.add(t),this.subscribing=!0,t.add(u.subscribeToResult(this,n)),this.subscribing=!1)},e}(c.OuterSubscriber)},function(t,e,n){"use strict";function r(t,e,n){void 0===t&&(t=Number.POSITIVE_INFINITY),void 0===e&&(e=Number.POSITIVE_INFINITY);var r,s,a=this,c=0,u=function(){return r=new o.ReplaySubject(t,e,n)};return new i.Observable(function(t){r||(r=u(),s=a.subscribe(function(t){return r.next(t)},function(t){var e=r;r=null,e.error(t)},function(){return r.complete()})),c++,r||(r=u());var e=r.subscribe(t);return function(){c--,e&&e.unsubscribe(),0===c&&s.unsubscribe()}})}var i=n(0),o=n(183);e.cache=r},function(t,e,n){"use strict";function r(t){var e=new a(t),n=this.lift(e);return e.caught=n}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(4),s=n(5);e._catch=r;var a=function(){function t(t){this.selector=t}return t.prototype.call=function(t,e){return e._subscribe(new c(t,this.selector,this.caught))},t}(),c=function(t){function e(e,n,r){t.call(this,e),this.selector=n,this.caught=r}return i(e,t),e.prototype.error=function(t){if(!this.isStopped){var e=void 0;try{e=this.selector(t,this.caught)}catch(t){return void this.destination.error(t)}this.unsubscribe(),this.destination.remove(this),s.subscribeToResult(this,e)}},e}(o.OuterSubscriber)},function(t,e,n){"use strict";function r(t){return this.lift(new i.CombineLatestOperator(t))}var i=n(262);e.combineAll=r},function(t,e,n){"use strict";function r(){return this.lift(new i.MergeAllOperator(1))}var i=n(184);e.concatAll=r},function(t,e,n){"use strict";function r(t,e){return this.lift(new i.MergeMapOperator(t,e,1))}var i=n(374);e.concatMap=r},function(t,e,n){"use strict";function r(t,e){return this.lift(new i.MergeMapToOperator(t,e,1))}var i=n(375);e.concatMapTo=r},function(t,e,n){"use strict";function r(t){return this.lift(new s(t,this))}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(3);e.count=r;var s=function(){function t(t,e){this.predicate=t,this.source=e}return t.prototype.call=function(t,e){return e._subscribe(new a(t,this.predicate,this.source))},t}(),a=function(t){function e(e,n,r){t.call(this,e),this.predicate=n,this.source=r,this.count=0,this.index=0}return i(e,t),e.prototype._next=function(t){this.predicate?this._tryPredicate(t):this.count++},e.prototype._tryPredicate=function(t){var e;try{e=this.predicate(t,this.index++,this.source)}catch(t){return void this.destination.error(t)}e&&this.count++},e.prototype._complete=function(){this.destination.next(this.count),this.destination.complete()},e}(o.Subscriber)},function(t,e,n){"use strict";function r(t){return this.lift(new a(t))}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(4),s=n(5);e.debounce=r;var a=function(){function t(t){this.durationSelector=t}return t.prototype.call=function(t,e){return e._subscribe(new c(t,this.durationSelector))},t}(),c=function(t){function e(e,n){t.call(this,e),this.durationSelector=n,this.hasValue=!1,this.durationSubscription=null}return i(e,t),e.prototype._next=function(t){try{var e=this.durationSelector.call(this,t);e&&this._tryNext(t,e)}catch(t){this.destination.error(t)}},e.prototype._complete=function(){this.emitValue(),this.destination.complete()},e.prototype._tryNext=function(t,e){var n=this.durationSubscription;this.value=t,this.hasValue=!0,n&&(n.unsubscribe(),this.remove(n)),n=s.subscribeToResult(this,e),n.closed||this.add(this.durationSubscription=n)},e.prototype.notifyNext=function(t,e,n,r,i){this.emitValue()},e.prototype.notifyComplete=function(){this.emitValue()},e.prototype.emitValue=function(){if(this.hasValue){var e=this.value,n=this.durationSubscription;n&&(this.durationSubscription=null,n.unsubscribe(),this.remove(n)),this.value=null,this.hasValue=!1,t.prototype._next.call(this,e)}},e}(o.OuterSubscriber)},function(t,e,n){"use strict";function r(t,e){return void 0===e&&(e=a.async),this.lift(new c(t,e))}function i(t){t.debouncedNext()}var o=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},s=n(3),a=n(45);e.debounceTime=r;var c=function(){function t(t,e){this.dueTime=t,this.scheduler=e}return t.prototype.call=function(t,e){return e._subscribe(new u(t,this.dueTime,this.scheduler))},t}(),u=function(t){function e(e,n,r){t.call(this,e),this.dueTime=n,this.scheduler=r,this.debouncedSubscription=null,this.lastValue=null,this.hasValue=!1}return o(e,t),e.prototype._next=function(t){this.clearDebounce(),this.lastValue=t,this.hasValue=!0,this.add(this.debouncedSubscription=this.scheduler.schedule(i,this.dueTime,this))},e.prototype._complete=function(){this.debouncedNext(),this.destination.complete()},e.prototype.debouncedNext=function(){this.clearDebounce(),this.hasValue&&(this.destination.next(this.lastValue),this.lastValue=null,this.hasValue=!1)},e.prototype.clearDebounce=function(){var t=this.debouncedSubscription;null!==t&&(this.remove(t),t.unsubscribe(),this.debouncedSubscription=null)},e}(s.Subscriber)},function(t,e,n){"use strict";function r(t){return void 0===t&&(t=null),this.lift(new s(t))}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(3);e.defaultIfEmpty=r;var s=function(){function t(t){this.defaultValue=t}return t.prototype.call=function(t,e){return e._subscribe(new a(t,this.defaultValue))},t}(),a=function(t){function e(e,n){t.call(this,e),this.defaultValue=n,this.isEmpty=!0}return i(e,t),e.prototype._next=function(t){this.isEmpty=!1,this.destination.next(t)},e.prototype._complete=function(){this.isEmpty&&this.destination.next(this.defaultValue),this.destination.complete()},e}(o.Subscriber)},function(t,e,n){"use strict";function r(t,e){void 0===e&&(e=o.async);var n=s.isDate(t),r=n?+t-e.now():Math.abs(t);return this.lift(new u(r,e))}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(45),s=n(189),a=n(3),c=n(134);e.delay=r;var u=function(){function t(t,e){this.delay=t,this.scheduler=e}return t.prototype.call=function(t,e){return e._subscribe(new l(t,this.delay,this.scheduler))},t}(),l=function(t){function e(e,n,r){t.call(this,e),this.delay=n,this.scheduler=r,this.queue=[],this.active=!1,this.errored=!1}return i(e,t),e.dispatch=function(t){for(var e=t.source,n=e.queue,r=t.scheduler,i=t.destination;n.length>0&&n[0].time-r.now()<=0;)n.shift().notification.observe(i);if(n.length>0){var o=Math.max(0,n[0].time-r.now());this.schedule(t,o)}else e.active=!1},e.prototype._schedule=function(t){this.active=!0,this.add(t.schedule(e.dispatch,this.delay,{source:this,destination:this.destination,scheduler:t}))},e.prototype.scheduleNotification=function(t){if(this.errored!==!0){var e=this.scheduler,n=new h(e.now()+this.delay,t);this.queue.push(n),this.active===!1&&this._schedule(e)}},e.prototype._next=function(t){this.scheduleNotification(c.Notification.createNext(t))},e.prototype._error=function(t){this.errored=!0,this.queue=[],this.destination.error(t)},e.prototype._complete=function(){this.scheduleNotification(c.Notification.createComplete())},e}(a.Subscriber),h=function(){function t(t,e){this.time=t,this.notification=e}return t}()},function(t,e,n){"use strict";function r(t,e){return e?new h(this,e).lift(new u(t)):this.lift(new u(t))}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(3),s=n(0),a=n(4),c=n(5);e.delayWhen=r;var u=function(){function t(t){this.delayDurationSelector=t}return t.prototype.call=function(t,e){return e._subscribe(new l(t,this.delayDurationSelector))},t}(),l=function(t){function e(e,n){t.call(this,e),this.delayDurationSelector=n,this.completed=!1,this.delayNotifierSubscriptions=[],this.values=[]}return i(e,t),e.prototype.notifyNext=function(t,e,n,r,i){this.destination.next(t),this.removeSubscription(i),this.tryComplete()},e.prototype.notifyError=function(t,e){this._error(t)},e.prototype.notifyComplete=function(t){var e=this.removeSubscription(t);e&&this.destination.next(e),this.tryComplete()},e.prototype._next=function(t){try{var e=this.delayDurationSelector(t);e&&this.tryDelay(e,t)}catch(t){this.destination.error(t)}},e.prototype._complete=function(){this.completed=!0,this.tryComplete()},e.prototype.removeSubscription=function(t){t.unsubscribe();var e=this.delayNotifierSubscriptions.indexOf(t),n=null;return e!==-1&&(n=this.values[e],this.delayNotifierSubscriptions.splice(e,1),this.values.splice(e,1)),n},e.prototype.tryDelay=function(t,e){var n=c.subscribeToResult(this,t,e);this.add(n),this.delayNotifierSubscriptions.push(n),this.values.push(e)},e.prototype.tryComplete=function(){this.completed&&0===this.delayNotifierSubscriptions.length&&this.destination.complete()},e}(a.OuterSubscriber),h=function(t){function e(e,n){t.call(this),this.source=e,this.subscriptionDelay=n}return i(e,t),e.prototype._subscribe=function(t){this.subscriptionDelay.subscribe(new p(t,this.source))},e}(s.Observable),p=function(t){function e(e,n){t.call(this),this.parent=e,this.source=n,this.sourceSubscribed=!1}return i(e,t),e.prototype._next=function(t){this.subscribeToSource()},e.prototype._error=function(t){this.unsubscribe(),this.parent.error(t)},e.prototype._complete=function(){this.subscribeToSource()},e.prototype.subscribeToSource=function(){this.sourceSubscribed||(this.sourceSubscribed=!0,this.unsubscribe(),this.source.subscribe(this.parent))},e}(o.Subscriber)},function(t,e,n){"use strict";function r(){return this.lift(new s)}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(3);e.dematerialize=r;var s=function(){function t(){}return t.prototype.call=function(t,e){return e._subscribe(new a(t))},t}(),a=function(t){function e(e){t.call(this,e)}return i(e,t),e.prototype._next=function(t){t.observe(this.destination)},e}(o.Subscriber)},function(t,e,n){"use strict";function r(t,e,n){return i.distinct.call(this,function(n,r){return e?e(n[t],r[t]):n[t]===r[t]},n)}var i=n(369);e.distinctKey=r},function(t,e,n){"use strict";function r(t,e){return i.distinctUntilChanged.call(this,function(n,r){return e?e(n[t],r[t]):n[t]===r[t]})}var i=n(370);e.distinctUntilKeyChanged=r},function(t,e,n){"use strict";function r(t,e,n){ +return this.lift(new s(t,e,n))}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(3);e._do=r;var s=function(){function t(t,e,n){this.nextOrObserver=t,this.error=e,this.complete=n}return t.prototype.call=function(t,e){return e._subscribe(new a(t,this.nextOrObserver,this.error,this.complete))},t}(),a=function(t){function e(e,n,r,i){t.call(this,e);var s=new o.Subscriber(n,r,i);s.syncErrorThrowable=!0,this.add(s),this.safeSubscriber=s}return i(e,t),e.prototype._next=function(t){var e=this.safeSubscriber;e.next(t),e.syncErrorThrown?this.destination.error(e.syncErrorValue):this.destination.next(t)},e.prototype._error=function(t){var e=this.safeSubscriber;e.error(t),e.syncErrorThrown?this.destination.error(e.syncErrorValue):this.destination.error(t)},e.prototype._complete=function(){var t=this.safeSubscriber;t.complete(),t.syncErrorThrown?this.destination.error(t.syncErrorValue):this.destination.complete()},e}(o.Subscriber)},function(t,e,n){"use strict";function r(t,e){return this.lift(new a(t,e))}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(3),s=n(187);e.elementAt=r;var a=function(){function t(t,e){if(this.index=t,this.defaultValue=e,t<0)throw new s.ArgumentOutOfRangeError}return t.prototype.call=function(t,e){return e._subscribe(new c(t,this.index,this.defaultValue))},t}(),c=function(t){function e(e,n,r){t.call(this,e),this.index=n,this.defaultValue=r}return i(e,t),e.prototype._next=function(t){0===this.index--&&(this.destination.next(t),this.destination.complete())},e.prototype._complete=function(){var t=this.destination;this.index>=0&&("undefined"!=typeof this.defaultValue?t.next(this.defaultValue):t.error(new s.ArgumentOutOfRangeError)),t.complete()},e}(o.Subscriber)},function(t,e,n){"use strict";function r(t,e){return this.lift(new s(t,e,this))}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(3);e.every=r;var s=function(){function t(t,e,n){this.predicate=t,this.thisArg=e,this.source=n}return t.prototype.call=function(t,e){return e._subscribe(new a(t,this.predicate,this.thisArg,this.source))},t}(),a=function(t){function e(e,n,r,i){t.call(this,e),this.predicate=n,this.thisArg=r,this.source=i,this.index=0,this.thisArg=r||this}return i(e,t),e.prototype.notifyComplete=function(t){this.destination.next(t),this.destination.complete()},e.prototype._next=function(t){var e=!1;try{e=this.predicate.call(this.thisArg,t,this.index++,this.source)}catch(t){return void this.destination.error(t)}e||this.notifyComplete(!1)},e.prototype._complete=function(){this.notifyComplete(!0)},e}(o.Subscriber)},function(t,e,n){"use strict";function r(){return this.lift(new a)}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(4),s=n(5);e.exhaust=r;var a=function(){function t(){}return t.prototype.call=function(t,e){return e._subscribe(new c(t))},t}(),c=function(t){function e(e){t.call(this,e),this.hasCompleted=!1,this.hasSubscription=!1}return i(e,t),e.prototype._next=function(t){this.hasSubscription||(this.hasSubscription=!0,this.add(s.subscribeToResult(this,t)))},e.prototype._complete=function(){this.hasCompleted=!0,this.hasSubscription||this.destination.complete()},e.prototype.notifyComplete=function(t){this.remove(t),this.hasSubscription=!1,this.hasCompleted&&this.destination.complete()},e}(o.OuterSubscriber)},function(t,e,n){"use strict";function r(t,e){return this.lift(new a(t,e))}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(4),s=n(5);e.exhaustMap=r;var a=function(){function t(t,e){this.project=t,this.resultSelector=e}return t.prototype.call=function(t,e){return e._subscribe(new c(t,this.project,this.resultSelector))},t}(),c=function(t){function e(e,n,r){t.call(this,e),this.project=n,this.resultSelector=r,this.hasSubscription=!1,this.hasCompleted=!1,this.index=0}return i(e,t),e.prototype._next=function(t){this.hasSubscription||this.tryNext(t)},e.prototype.tryNext=function(t){var e=this.index++,n=this.destination;try{var r=this.project(t,e);this.hasSubscription=!0,this.add(s.subscribeToResult(this,r,t,e))}catch(t){n.error(t)}},e.prototype._complete=function(){this.hasCompleted=!0,this.hasSubscription||this.destination.complete()},e.prototype.notifyNext=function(t,e,n,r,i){var o=this,s=o.resultSelector,a=o.destination;s?this.trySelectResult(t,e,n,r):a.next(e)},e.prototype.trySelectResult=function(t,e,n,r){var i=this,o=i.resultSelector,s=i.destination;try{var a=o(t,e,n,r);s.next(a)}catch(t){s.error(t)}},e.prototype.notifyError=function(t){this.destination.error(t)},e.prototype.notifyComplete=function(t){this.remove(t),this.hasSubscription=!1,this.hasCompleted&&this.destination.complete()},e}(o.OuterSubscriber)},function(t,e,n){"use strict";function r(t,e,n){return void 0===e&&(e=Number.POSITIVE_INFINITY),void 0===n&&(n=void 0),e=(e||0)<1?Number.POSITIVE_INFINITY:e,this.lift(new u(t,e,n))}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(33),s=n(31),a=n(4),c=n(5);e.expand=r;var u=function(){function t(t,e,n){this.project=t,this.concurrent=e,this.scheduler=n}return t.prototype.call=function(t,e){return e._subscribe(new l(t,this.project,this.concurrent,this.scheduler))},t}();e.ExpandOperator=u;var l=function(t){function e(e,n,r,i){t.call(this,e),this.project=n,this.concurrent=r,this.scheduler=i,this.index=0,this.active=0,this.hasCompleted=!1,r0&&this._next(e.shift()),this.hasCompleted&&0===this.active&&this.destination.complete()},e}(a.OuterSubscriber);e.ExpandSubscriber=l},function(t,e,n){"use strict";function r(t){return this.lift(new a(t))}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(3),s=n(30);e._finally=r;var a=function(){function t(t){this.callback=t}return t.prototype.call=function(t,e){return e._subscribe(new c(t,this.callback))},t}(),c=function(t){function e(e,n){t.call(this,e),this.add(new s.Subscription(n))}return i(e,t),e}(o.Subscriber)},function(t,e,n){"use strict";function r(t,e){return this.lift(new i.FindValueOperator(t,this,!0,e))}var i=n(372);e.findIndex=r},function(t,e,n){"use strict";function r(t,e,n){return this.lift(new a(t,e,n,this))}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(3),s=n(188);e.first=r;var a=function(){function t(t,e,n,r){this.predicate=t,this.resultSelector=e,this.defaultValue=n,this.source=r}return t.prototype.call=function(t,e){return e._subscribe(new c(t,this.predicate,this.resultSelector,this.defaultValue,this.source))},t}(),c=function(t){function e(e,n,r,i,o){t.call(this,e),this.predicate=n,this.resultSelector=r,this.defaultValue=i,this.source=o,this.index=0,this.hasCompleted=!1}return i(e,t),e.prototype._next=function(t){var e=this.index++;this.predicate?this._tryPredicate(t,e):this._emit(t,e)},e.prototype._tryPredicate=function(t,e){var n;try{n=this.predicate(t,e,this.source)}catch(t){return void this.destination.error(t)}n&&this._emit(t,e)},e.prototype._emit=function(t,e){return this.resultSelector?void this._tryResultSelector(t,e):void this._emitFinal(t)},e.prototype._tryResultSelector=function(t,e){var n;try{n=this.resultSelector(t,e)}catch(t){return void this.destination.error(t)}this._emitFinal(n)},e.prototype._emitFinal=function(t){var e=this.destination;e.next(t),e.complete(),this.hasCompleted=!0},e.prototype._complete=function(){var t=this.destination;this.hasCompleted||"undefined"==typeof this.defaultValue?this.hasCompleted||t.error(new s.EmptyError):(t.next(this.defaultValue),t.complete())},e}(o.Subscriber)},function(t,e,n){"use strict";function r(t,e,n){return this.lift(new h(this,t,e,n))}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(3),s=n(30),a=n(0),c=n(21),u=n(1054),l=n(1052);e.groupBy=r;var h=function(){function t(t,e,n,r){this.source=t,this.keySelector=e,this.elementSelector=n,this.durationSelector=r}return t.prototype.call=function(t,e){return e._subscribe(new p(t,this.keySelector,this.elementSelector,this.durationSelector))},t}(),p=function(t){function e(e,n,r,i){t.call(this,e),this.keySelector=n,this.elementSelector=r,this.durationSelector=i,this.groups=null,this.attemptedToUnsubscribe=!1,this.count=0}return i(e,t),e.prototype._next=function(t){var e;try{e=this.keySelector(t)}catch(t){return void this.error(t)}this._group(t,e)},e.prototype._group=function(t,e){var n=this.groups;n||(n=this.groups="string"==typeof e?new l.FastMap:new u.Map);var r,i=n.get(e);if(this.elementSelector)try{r=this.elementSelector(t)}catch(t){this.error(t)}else r=t;if(!i){n.set(e,i=new c.Subject);var o=new _(e,i,this);if(this.destination.next(o),this.durationSelector){var s=void 0;try{s=this.durationSelector(new _(e,i))}catch(t){return void this.error(t)}this.add(s.subscribe(new f(e,i,this)))}}i.closed||i.next(r)},e.prototype._error=function(t){var e=this.groups;e&&(e.forEach(function(e,n){e.error(t)}),e.clear()),this.destination.error(t)},e.prototype._complete=function(){var t=this.groups;t&&(t.forEach(function(t,e){t.complete()}),t.clear()),this.destination.complete()},e.prototype.removeGroup=function(t){this.groups.delete(t)},e.prototype.unsubscribe=function(){this.closed||this.attemptedToUnsubscribe||(this.attemptedToUnsubscribe=!0,0===this.count&&t.prototype.unsubscribe.call(this))},e}(o.Subscriber),f=function(t){function e(e,n,r){t.call(this),this.key=e,this.group=n,this.parent=r}return i(e,t),e.prototype._next=function(t){this._complete()},e.prototype._error=function(t){var e=this.group;e.closed||e.error(t),this.parent.removeGroup(this.key)},e.prototype._complete=function(){var t=this.group;t.closed||t.complete(),this.parent.removeGroup(this.key)},e}(o.Subscriber),_=function(t){function e(e,n,r){t.call(this),this.key=e,this.groupSubject=n,this.refCountSubscription=r}return i(e,t),e.prototype._subscribe=function(t){var e=new s.Subscription,n=this,r=n.refCountSubscription,i=n.groupSubject;return r&&!r.closed&&e.add(new d(r)),e.add(i.subscribe(t)),e},e}(a.Observable);e.GroupedObservable=_;var d=function(t){function e(e){t.call(this),this.parent=e,e.count++}return i(e,t),e.prototype.unsubscribe=function(){var e=this.parent;e.closed||this.closed||(t.prototype.unsubscribe.call(this),e.count-=1,0===e.count&&e.attemptedToUnsubscribe&&e.unsubscribe())},e}(s.Subscription)},function(t,e,n){"use strict";function r(){return this.lift(new a)}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(3),s=n(388);e.ignoreElements=r;var a=function(){function t(){}return t.prototype.call=function(t,e){return e._subscribe(new c(t))},t}(),c=function(t){function e(){t.apply(this,arguments)}return i(e,t),e.prototype._next=function(t){s.noop()},e}(o.Subscriber)},function(t,e,n){"use strict";function r(){return this.lift(new s)}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(3);e.isEmpty=r;var s=function(){function t(){}return t.prototype.call=function(t,e){return e._subscribe(new a(t))},t}(),a=function(t){function e(e){t.call(this,e)}return i(e,t),e.prototype.notifyComplete=function(t){var e=this.destination;e.next(t),e.complete()},e.prototype._next=function(t){this.notifyComplete(!1)},e.prototype._complete=function(){this.notifyComplete(!0)},e}(o.Subscriber)},function(t,e,n){"use strict";function r(t,e,n){return this.lift(new a(t,e,n,this))}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(3),s=n(188);e.last=r;var a=function(){function t(t,e,n,r){this.predicate=t,this.resultSelector=e,this.defaultValue=n,this.source=r}return t.prototype.call=function(t,e){return e._subscribe(new c(t,this.predicate,this.resultSelector,this.defaultValue,this.source))},t}(),c=function(t){function e(e,n,r,i,o){t.call(this,e),this.predicate=n,this.resultSelector=r,this.defaultValue=i,this.source=o,this.hasValue=!1,this.index=0,"undefined"!=typeof i&&(this.lastValue=i,this.hasValue=!0)}return i(e,t),e.prototype._next=function(t){var e=this.index++;if(this.predicate)this._tryPredicate(t,e);else{if(this.resultSelector)return void this._tryResultSelector(t,e);this.lastValue=t,this.hasValue=!0}},e.prototype._tryPredicate=function(t,e){var n;try{n=this.predicate(t,e,this.source)}catch(t){return void this.destination.error(t)}if(n){if(this.resultSelector)return void this._tryResultSelector(t,e);this.lastValue=t,this.hasValue=!0}},e.prototype._tryResultSelector=function(t,e){var n;try{n=this.resultSelector(t,e)}catch(t){return void this.destination.error(t)}this.lastValue=n,this.hasValue=!0},e.prototype._complete=function(){var t=this.destination;this.hasValue?(t.next(this.lastValue),t.complete()):t.error(new s.EmptyError)},e}(o.Subscriber)},function(t,e){"use strict";function n(t){return t(this)}e.letProto=n},function(t,e,n){"use strict";function r(t){return this.lift(new s(t))}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(3);e.mapTo=r;var s=function(){function t(t){this.value=t}return t.prototype.call=function(t,e){return e._subscribe(new a(t,this.value))},t}(),a=function(t){function e(e,n){t.call(this,e),this.value=n}return i(e,t),e.prototype._next=function(t){this.destination.next(this.value)},e}(o.Subscriber)},function(t,e,n){"use strict";function r(){return this.lift(new a)}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(3),s=n(134);e.materialize=r;var a=function(){function t(){}return t.prototype.call=function(t,e){return e._subscribe(new c(t))},t}(),c=function(t){function e(e){t.call(this,e)}return i(e,t),e.prototype._next=function(t){this.destination.next(s.Notification.createNext(t))},e.prototype._error=function(t){var e=this.destination;e.next(s.Notification.createError(t)),e.complete()},e.prototype._complete=function(){var t=this.destination;t.next(s.Notification.createComplete()),t.complete()},e}(o.Subscriber)},function(t,e,n){"use strict";function r(t){var e="function"==typeof t?function(e,n){return t(e,n)>0?e:n}:function(t,e){return t>e?t:e};return this.lift(new i.ReduceOperator(e))}var i=n(266);e.max=r},function(t,e,n){"use strict";function r(t,e,n){return void 0===n&&(n=Number.POSITIVE_INFINITY),this.lift(new u(t,e,n))}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(33),s=n(31),a=n(5),c=n(4);e.mergeScan=r;var u=function(){function t(t,e,n){this.project=t,this.seed=e,this.concurrent=n}return t.prototype.call=function(t,e){return e._subscribe(new l(t,this.project,this.seed,this.concurrent))},t}();e.MergeScanOperator=u;var l=function(t){function e(e,n,r,i){t.call(this,e),this.project=n,this.acc=r,this.concurrent=i,this.hasValue=!1,this.hasCompleted=!1,this.buffer=[],this.active=0,this.index=0}return i(e,t),e.prototype._next=function(t){if(this.active0?this._next(e.shift()):0===this.active&&this.hasCompleted&&(this.hasValue===!1&&this.destination.next(this.acc),this.destination.complete())},e}(c.OuterSubscriber);e.MergeScanSubscriber=l},function(t,e,n){"use strict";function r(t){var e="function"==typeof t?function(e,n){return t(e,n)<0?e:n}:function(t,e){return t-1&&(this.count=r-1),this.unsubscribe(),this.isStopped=!1,this.closed=!1,n.subscribe(this)}},e}(o.Subscriber)},function(t,e,n){"use strict";function r(t){return this.lift(new l(t,this))}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(21),s=n(33),a=n(31),c=n(4),u=n(5);e.repeatWhen=r;var l=function(){function t(t,e){this.notifier=t,this.source=e}return t.prototype.call=function(t,e){return e._subscribe(new h(t,this.notifier,this.source))},t}(),h=function(t){function e(e,n,r){t.call(this,e),this.notifier=n,this.source=r}return i(e,t),e.prototype.complete=function(){if(!this.isStopped){var e=this.notifications,n=this.retries,r=this.retriesSubscription;if(n)this.notifications=null,this.retriesSubscription=null;else{if(e=new o.Subject,n=s.tryCatch(this.notifier)(e),n===a.errorObject)return t.prototype.complete.call(this);r=u.subscribeToResult(this,n)}this.unsubscribe(),this.closed=!1,this.notifications=e,this.retries=n,this.retriesSubscription=r,e.next()}},e.prototype._unsubscribe=function(){var t=this,e=t.notifications,n=t.retriesSubscription;e&&(e.unsubscribe(),this.notifications=null),n&&(n.unsubscribe(),this.retriesSubscription=null),this.retries=null},e.prototype.notifyNext=function(t,e,n,r,i){var o=this,s=o.notifications,a=o.retries,c=o.retriesSubscription;this.notifications=null,this.retries=null,this.retriesSubscription=null,this.unsubscribe(),this.isStopped=!1,this.closed=!1,this.notifications=s,this.retries=a,this.retriesSubscription=c,this.source.subscribe(this)},e}(c.OuterSubscriber)},function(t,e,n){"use strict";function r(t){return void 0===t&&(t=-1),this.lift(new s(t,this))}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(3);e.retry=r;var s=function(){function t(t,e){this.count=t,this.source=e}return t.prototype.call=function(t,e){return e._subscribe(new a(t,this.count,this.source))},t}(),a=function(t){function e(e,n,r){t.call(this,e),this.count=n,this.source=r}return i(e,t),e.prototype.error=function(e){if(!this.isStopped){var n=this,r=n.source,i=n.count;if(0===i)return t.prototype.error.call(this,e);i>-1&&(this.count=i-1),this.unsubscribe(),this.isStopped=!1,this.closed=!1,r.subscribe(this)}},e}(o.Subscriber)},function(t,e,n){"use strict";function r(t){return this.lift(new l(t,this))}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(21),s=n(33),a=n(31),c=n(4),u=n(5);e.retryWhen=r;var l=function(){function t(t,e){this.notifier=t,this.source=e}return t.prototype.call=function(t,e){return e._subscribe(new h(t,this.notifier,this.source))},t}(),h=function(t){function e(e,n,r){t.call(this,e),this.notifier=n,this.source=r}return i(e,t),e.prototype.error=function(e){if(!this.isStopped){var n=this.errors,r=this.retries,i=this.retriesSubscription;if(r)this.errors=null,this.retriesSubscription=null;else{if(n=new o.Subject,r=s.tryCatch(this.notifier)(n),r===a.errorObject)return t.prototype.error.call(this,a.errorObject.e);i=u.subscribeToResult(this,r)}this.unsubscribe(),this.closed=!1,this.errors=n,this.retries=r,this.retriesSubscription=i,n.next(e)}},e.prototype._unsubscribe=function(){var t=this,e=t.errors,n=t.retriesSubscription;e&&(e.unsubscribe(),this.errors=null),n&&(n.unsubscribe(),this.retriesSubscription=null),this.retries=null},e.prototype.notifyNext=function(t,e,n,r,i){var o=this,s=o.errors,a=o.retries,c=o.retriesSubscription;this.errors=null,this.retries=null,this.retriesSubscription=null,this.unsubscribe(),this.isStopped=!1,this.closed=!1,this.errors=s,this.retries=a,this.retriesSubscription=c,this.source.subscribe(this)},e}(c.OuterSubscriber)},function(t,e,n){"use strict";function r(t){return this.lift(new a(t))}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(4),s=n(5);e.sample=r;var a=function(){function t(t){this.notifier=t}return t.prototype.call=function(t,e){return e._subscribe(new c(t,this.notifier))},t}(),c=function(t){function e(e,n){t.call(this,e),this.hasValue=!1,this.add(s.subscribeToResult(this,n))}return i(e,t),e.prototype._next=function(t){this.value=t,this.hasValue=!0},e.prototype.notifyNext=function(t,e,n,r,i){this.emitValue()},e.prototype.notifyComplete=function(){this.emitValue()},e.prototype.emitValue=function(){this.hasValue&&(this.hasValue=!1,this.destination.next(this.value))},e}(o.OuterSubscriber)},function(t,e,n){"use strict";function r(t,e){return void 0===e&&(e=a.async),this.lift(new c(t,e))}function i(t){var e=t.subscriber,n=t.period;e.notifyNext(),this.schedule(t,n)}var o=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},s=n(3),a=n(45);e.sampleTime=r;var c=function(){function t(t,e){this.period=t,this.scheduler=e}return t.prototype.call=function(t,e){return e._subscribe(new u(t,this.period,this.scheduler))},t}(),u=function(t){function e(e,n,r){t.call(this,e),this.period=n,this.scheduler=r,this.hasValue=!1,this.add(r.schedule(i,n,{subscriber:this,period:n}))}return o(e,t),e.prototype._next=function(t){this.lastValue=t,this.hasValue=!0},e.prototype.notifyNext=function(){this.hasValue&&(this.hasValue=!1,this.destination.next(this.lastValue))},e}(s.Subscriber)},function(t,e,n){"use strict";function r(t,e){return this.lift(new s(t,e))}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(3);e.scan=r;var s=function(){function t(t,e){this.accumulator=t,this.seed=e}return t.prototype.call=function(t,e){return e._subscribe(new a(t,this.accumulator,this.seed))},t}(),a=function(t){function e(e,n,r){t.call(this,e),this.accumulator=n,this.index=0,this.accumulatorSet=!1,this.seed=r,this.accumulatorSet="undefined"!=typeof r}return i(e,t),Object.defineProperty(e.prototype,"seed",{get:function(){return this._seed},set:function(t){this.accumulatorSet=!0,this._seed=t},enumerable:!0,configurable:!0}),e.prototype._next=function(t){return this.accumulatorSet?this._tryNext(t):(this.seed=t,void this.destination.next(t))},e.prototype._tryNext=function(t){var e,n=this.index++;try{e=this.accumulator(this.seed,t,n)}catch(t){this.destination.error(t)}this.seed=e,this.destination.next(e)},e}(o.Subscriber)},function(t,e,n){"use strict";function r(t,e){return this.lift(new c(t,e))}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(3),s=n(33),a=n(31);e.sequenceEqual=r;var c=function(){function t(t,e){this.compareTo=t,this.comparor=e}return t.prototype.call=function(t,e){return e._subscribe(new u(t,this.compareTo,this.comparor))},t}();e.SequenceEqualOperator=c;var u=function(t){function e(e,n,r){t.call(this,e),this.compareTo=n,this.comparor=r,this._a=[],this._b=[],this._oneComplete=!1,this.add(n.subscribe(new l(e,this)))}return i(e,t),e.prototype._next=function(t){this._oneComplete&&0===this._b.length?this.emit(!1):(this._a.push(t),this.checkValues())},e.prototype._complete=function(){this._oneComplete?this.emit(0===this._a.length&&0===this._b.length):this._oneComplete=!0},e.prototype.checkValues=function(){for(var t=this,e=t._a,n=t._b,r=t.comparor;e.length>0&&n.length>0;){var i=e.shift(),o=n.shift(),c=!1;r?(c=s.tryCatch(r)(i,o),c===a.errorObject&&this.destination.error(a.errorObject.e)):c=i===o,c||this.emit(!1)}},e.prototype.emit=function(t){var e=this.destination;e.next(t),e.complete()},e.prototype.nextB=function(t){this._oneComplete&&0===this._a.length?this.emit(!1):(this._b.push(t),this.checkValues())},e}(o.Subscriber);e.SequenceEqualSubscriber=u;var l=function(t){function e(e,n){t.call(this,e),this.parent=n}return i(e,t),e.prototype._next=function(t){this.parent.nextB(t)},e.prototype._error=function(t){this.parent.error(t)},e.prototype._complete=function(){this.parent._complete()},e}(o.Subscriber)},function(t,e,n){"use strict";function r(){return new s.Subject}function i(){return o.multicast.call(this,r).refCount()}var o=n(112),s=n(21);e.share=i},function(t,e,n){"use strict";function r(t){return this.lift(new a(t,this))}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(3),s=n(188);e.single=r;var a=function(){function t(t,e){this.predicate=t,this.source=e}return t.prototype.call=function(t,e){return e._subscribe(new c(t,this.predicate,this.source))},t}(),c=function(t){function e(e,n,r){t.call(this,e),this.predicate=n,this.source=r,this.seenValue=!1,this.index=0}return i(e,t),e.prototype.applySingleValue=function(t){this.seenValue?this.destination.error("Sequence contains more than one element"):(this.seenValue=!0,this.singleValue=t)},e.prototype._next=function(t){var e=this.predicate;this.index++,e?this.tryNext(t):this.applySingleValue(t)},e.prototype.tryNext=function(t){try{var e=this.predicate(t,this.index,this.source);e&&this.applySingleValue(t)}catch(t){this.destination.error(t)}},e.prototype._complete=function(){var t=this.destination;this.index>0?(t.next(this.seenValue?this.singleValue:void 0),t.complete()):t.error(new s.EmptyError)},e}(o.Subscriber)},function(t,e,n){"use strict";function r(t){return this.lift(new s(t))}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(3);e.skip=r;var s=function(){function t(t){this.total=t}return t.prototype.call=function(t,e){return e._subscribe(new a(t,this.total))},t}(),a=function(t){function e(e,n){t.call(this,e),this.total=n,this.count=0}return i(e,t),e.prototype._next=function(t){++this.count>this.total&&this.destination.next(t)},e}(o.Subscriber)},function(t,e,n){"use strict";function r(t){return this.lift(new a(t))}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(4),s=n(5);e.skipUntil=r;var a=function(){function t(t){this.notifier=t}return t.prototype.call=function(t,e){return e._subscribe(new c(t,this.notifier))},t}(),c=function(t){function e(e,n){t.call(this,e),this.hasValue=!1,this.isInnerStopped=!1,this.add(s.subscribeToResult(this,n))}return i(e,t),e.prototype._next=function(e){this.hasValue&&t.prototype._next.call(this,e)}, +e.prototype._complete=function(){this.isInnerStopped?t.prototype._complete.call(this):this.unsubscribe()},e.prototype.notifyNext=function(t,e,n,r,i){this.hasValue=!0},e.prototype.notifyComplete=function(){this.isInnerStopped=!0,this.isStopped&&t.prototype._complete.call(this)},e}(o.OuterSubscriber)},function(t,e,n){"use strict";function r(t){return this.lift(new s(t))}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(3);e.skipWhile=r;var s=function(){function t(t){this.predicate=t}return t.prototype.call=function(t,e){return e._subscribe(new a(t,this.predicate))},t}(),a=function(t){function e(e,n){t.call(this,e),this.predicate=n,this.skipping=!0,this.index=0}return i(e,t),e.prototype._next=function(t){var e=this.destination;this.skipping&&this.tryCallPredicate(t),this.skipping||e.next(t)},e.prototype.tryCallPredicate=function(t){try{var e=this.predicate(t,this.index++);this.skipping=Boolean(e)}catch(t){this.destination.error(t)}},e}(o.Subscriber)},function(t,e,n){"use strict";function r(){for(var t=[],e=0;e1?a.concatStatic(new i.ArrayObservable(t,n),this):a.concatStatic(new s.EmptyObservable(n),this)}var i=n(73),o=n(261),s=n(87),a=n(263),c=n(88);e.startWith=r},function(t,e,n){"use strict";function r(t,e){return void 0===e&&(e=0),new i.SubscribeOnObservable(this,e,t)}var i=n(929);e.subscribeOn=r},function(t,e,n){"use strict";function r(){return this.lift(new a)}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(4),s=n(5);e._switch=r;var a=function(){function t(){}return t.prototype.call=function(t,e){return e._subscribe(new c(t))},t}(),c=function(t){function e(e){t.call(this,e),this.active=0,this.hasCompleted=!1}return i(e,t),e.prototype._next=function(t){this.unsubscribeInner(),this.active++,this.add(this.innerSubscription=s.subscribeToResult(this,t))},e.prototype._complete=function(){this.hasCompleted=!0,0===this.active&&this.destination.complete()},e.prototype.unsubscribeInner=function(){this.active=this.active>0?this.active-1:0;var t=this.innerSubscription;t&&(t.unsubscribe(),this.remove(t))},e.prototype.notifyNext=function(t,e,n,r,i){this.destination.next(e)},e.prototype.notifyError=function(t){this.destination.error(t)},e.prototype.notifyComplete=function(){this.unsubscribeInner(),this.hasCompleted&&0===this.active&&this.destination.complete()},e}(o.OuterSubscriber)},function(t,e,n){"use strict";function r(t,e){return this.lift(new a(t,e))}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(4),s=n(5);e.switchMap=r;var a=function(){function t(t,e){this.project=t,this.resultSelector=e}return t.prototype.call=function(t,e){return e._subscribe(new c(t,this.project,this.resultSelector))},t}(),c=function(t){function e(e,n,r){t.call(this,e),this.project=n,this.resultSelector=r,this.index=0}return i(e,t),e.prototype._next=function(t){var e,n=this.index++;try{e=this.project(t,n)}catch(t){return void this.destination.error(t)}this._innerSub(e,t,n)},e.prototype._innerSub=function(t,e,n){var r=this.innerSubscription;r&&r.unsubscribe(),this.add(this.innerSubscription=s.subscribeToResult(this,t,e,n))},e.prototype._complete=function(){var e=this.innerSubscription;e&&!e.closed||t.prototype._complete.call(this)},e.prototype._unsubscribe=function(){this.innerSubscription=null},e.prototype.notifyComplete=function(e){this.remove(e),this.innerSubscription=null,this.isStopped&&t.prototype._complete.call(this)},e.prototype.notifyNext=function(t,e,n,r,i){this.resultSelector?this._tryNotifyNext(t,e,n,r):this.destination.next(e)},e.prototype._tryNotifyNext=function(t,e,n,r){var i;try{i=this.resultSelector(t,e,n,r)}catch(t){return void this.destination.error(t)}this.destination.next(i)},e}(o.OuterSubscriber)},function(t,e,n){"use strict";function r(t,e){return this.lift(new a(t,e))}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(4),s=n(5);e.switchMapTo=r;var a=function(){function t(t,e){this.observable=t,this.resultSelector=e}return t.prototype.call=function(t,e){return e._subscribe(new c(t,this.observable,this.resultSelector))},t}(),c=function(t){function e(e,n,r){t.call(this,e),this.inner=n,this.resultSelector=r,this.index=0}return i(e,t),e.prototype._next=function(t){var e=this.innerSubscription;e&&e.unsubscribe(),this.add(this.innerSubscription=s.subscribeToResult(this,this.inner,t,this.index++))},e.prototype._complete=function(){var e=this.innerSubscription;e&&!e.closed||t.prototype._complete.call(this)},e.prototype._unsubscribe=function(){this.innerSubscription=null},e.prototype.notifyComplete=function(e){this.remove(e),this.innerSubscription=null,this.isStopped&&t.prototype._complete.call(this)},e.prototype.notifyNext=function(t,e,n,r,i){var o=this,s=o.resultSelector,a=o.destination;s?this.tryResultSelector(t,e,n,r):a.next(e)},e.prototype.tryResultSelector=function(t,e,n,r){var i,o=this,s=o.resultSelector,a=o.destination;try{i=s(t,e,n,r)}catch(t){return void a.error(t)}a.next(i)},e}(o.OuterSubscriber)},function(t,e,n){"use strict";function r(t){return 0===t?new a.EmptyObservable:this.lift(new c(t))}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(3),s=n(187),a=n(87);e.take=r;var c=function(){function t(t){if(this.total=t,this.total<0)throw new s.ArgumentOutOfRangeError}return t.prototype.call=function(t,e){return e._subscribe(new u(t,this.total))},t}(),u=function(t){function e(e,n){t.call(this,e),this.total=n,this.count=0}return i(e,t),e.prototype._next=function(t){var e=this.total;++this.count<=e&&(this.destination.next(t),this.count===e&&(this.destination.complete(),this.unsubscribe()))},e}(o.Subscriber)},function(t,e,n){"use strict";function r(t){return 0===t?new a.EmptyObservable:this.lift(new c(t))}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(3),s=n(187),a=n(87);e.takeLast=r;var c=function(){function t(t){if(this.total=t,this.total<0)throw new s.ArgumentOutOfRangeError}return t.prototype.call=function(t,e){return e._subscribe(new u(t,this.total))},t}(),u=function(t){function e(e,n){t.call(this,e),this.total=n,this.ring=new Array,this.count=0}return i(e,t),e.prototype._next=function(t){var e=this.ring,n=this.total,r=this.count++;if(e.length0)for(var n=this.count>=this.total?this.total:this.count,r=this.ring,i=0;i0?this.startWindowEvery:this.windowSize,n=this.destination,r=this.windowSize,i=this.windows,o=i.length,a=0;a=0&&c%e===0&&!this.closed&&i.shift().complete(),++this.count%e===0&&!this.closed){var u=new s.Subject;i.push(u),n.next(u)}},e.prototype._error=function(t){var e=this.windows;if(e)for(;e.length>0&&!this.closed;)e.shift().error(t);this.destination.error(t)},e.prototype._complete=function(){var t=this.windows;if(t)for(;t.length>0&&!this.closed;)t.shift().complete();this.destination.complete()},e.prototype._unsubscribe=function(){this.count=0,this.windows=null},e}(o.Subscriber)},function(t,e,n){"use strict";function r(t,e,n){return void 0===e&&(e=null),void 0===n&&(n=u.async),this.lift(new h(t,e,n))}function i(t){var e=t.subscriber,n=t.windowTimeSpan,r=t.window;r&&r.complete(),t.window=e.openWindow(),this.schedule(t,n)}function o(t){var e=t.windowTimeSpan,n=t.subscriber,r=t.scheduler,i=t.windowCreationInterval,o=n.openWindow(),a=this,c={action:a,subscription:null},u={subscriber:n,window:o,context:c};c.subscription=r.schedule(s,e,u),a.add(c.subscription),a.schedule(t,i)}function s(t){var e=t.subscriber,n=t.window,r=t.context;r&&r.action&&r.subscription&&r.action.remove(r.subscription),e.closeWindow(n)}var a=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},c=n(21),u=n(45),l=n(3);e.windowTime=r;var h=function(){function t(t,e,n){this.windowTimeSpan=t,this.windowCreationInterval=e,this.scheduler=n}return t.prototype.call=function(t,e){return e._subscribe(new p(t,this.windowTimeSpan,this.windowCreationInterval,this.scheduler))},t}(),p=function(t){function e(e,n,r,a){if(t.call(this,e),this.destination=e,this.windowTimeSpan=n,this.windowCreationInterval=r,this.scheduler=a,this.windows=[],null!==r&&r>=0){var c=this.openWindow(),u={subscriber:this,window:c,context:null},l={windowTimeSpan:n,windowCreationInterval:r,subscriber:this,scheduler:a};this.add(a.schedule(s,n,u)),this.add(a.schedule(o,r,l))}else{var h=this.openWindow(),p={subscriber:this,window:h,windowTimeSpan:n};this.add(a.schedule(i,n,p))}}return a(e,t),e.prototype._next=function(t){for(var e=this.windows,n=e.length,r=0;r0;)e.shift().error(t);this.destination.error(t)},e.prototype._complete=function(){for(var t=this.windows;t.length>0;){var e=t.shift();e.closed||e.complete()}this.destination.complete()},e.prototype.openWindow=function(){var t=new c.Subject;this.windows.push(t);var e=this.destination;return e.next(t),t},e.prototype.closeWindow=function(t){t.complete();var e=this.windows;e.splice(e.indexOf(t),1)},e}(l.Subscriber)},function(t,e,n){"use strict";function r(t,e){return this.lift(new h(t,e))}var i=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},o=n(21),s=n(30),a=n(33),c=n(31),u=n(4),l=n(5);e.windowToggle=r;var h=function(){function t(t,e){this.openings=t,this.closingSelector=e}return t.prototype.call=function(t,e){return e._subscribe(new p(t,this.openings,this.closingSelector))},t}(),p=function(t){function e(e,n,r){t.call(this,e),this.openings=n,this.closingSelector=r,this.contexts=[],this.add(this.openSubscription=l.subscribeToResult(this,n,n))}return i(e,t),e.prototype._next=function(t){var e=this.contexts;if(e)for(var n=e.length,r=0;r0){var s=o.indexOf(n);s!==-1&&o.splice(s,1)}},e.prototype.notifyComplete=function(){},e.prototype._next=function(t){if(0===this.toRespond.length){var e=[t].concat(this.values);this.project?this._tryProject(e):this.destination.next(e)}},e.prototype._tryProject=function(t){var e;try{e=this.project.apply(this,t)}catch(t){return void this.destination.error(t)}this.destination.next(e)},e}(o.OuterSubscriber)},function(t,e,n){"use strict";function r(t){return this.lift(new i.ZipOperator(t))}var i=n(267);e.zipAll=r},function(t,e,n){"use strict";var r=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},i=n(30),o=function(t){function e(e,n){t.call(this)}return r(e,t),e.prototype.schedule=function(t,e){return void 0===e&&(e=0),this},e}(i.Subscription);e.Action=o},function(t,e,n){"use strict";var r=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},i=n(135),o=n(1051),s=function(t){function e(e,n){t.call(this,e,n),this.scheduler=e,this.work=n}return r(e,t),e.prototype.requestAsyncId=function(e,n,r){return void 0===r&&(r=0),null!==r&&r>0?t.prototype.requestAsyncId.call(this,e,n,r):(e.actions.push(this),e.scheduled||(e.scheduled=o.AnimationFrame.requestAnimationFrame(e.flush.bind(e,null))))},e.prototype.recycleAsyncId=function(e,n,r){return void 0===r&&(r=0),null!==r&&r>0?t.prototype.recycleAsyncId.call(this,e,n,r):void(0===e.actions.length&&(o.AnimationFrame.cancelAnimationFrame(n),e.scheduled=void 0))},e}(i.AsyncAction);e.AnimationFrameAction=s},function(t,e,n){"use strict";var r=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},i=n(136),o=function(t){function e(){t.apply(this,arguments)}return r(e,t),e.prototype.flush=function(){this.active=!0,this.scheduled=void 0;var t,e=this.actions,n=-1,r=e.length,i=e.shift();do if(t=i.execute(i.state,i.delay))break;while(++n0?t.prototype.requestAsyncId.call(this,e,n,r):(e.actions.push(this),e.scheduled||(e.scheduled=i.Immediate.setImmediate(e.flush.bind(e,null))))},e.prototype.recycleAsyncId=function(e,n,r){return void 0===r&&(r=0),null!==r&&r>0?t.prototype.recycleAsyncId.call(this,e,n,r):void(0===e.actions.length&&(i.Immediate.clearImmediate(n),e.scheduled=void 0))},e}(o.AsyncAction);e.AsapAction=s},function(t,e,n){"use strict";var r=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},i=n(136),o=function(t){function e(){t.apply(this,arguments)}return r(e,t),e.prototype.flush=function(){this.active=!0,this.scheduled=void 0;var t,e=this.actions,n=-1,r=e.length,i=e.shift();do if(t=i.execute(i.state,i.delay))break;while(++n0?t.prototype.schedule.call(this,e,n):(this.delay=n,this.state=e,this.scheduler.flush(this),this)},e.prototype.execute=function(e,n){return n>0||this.closed?t.prototype.execute.call(this,e,n):this._execute(e,n)},e.prototype.requestAsyncId=function(e,n,r){return void 0===r&&(r=0),null!==r&&r>0?t.prototype.requestAsyncId.call(this,e,n,r):e.flush(this)},e}(i.AsyncAction);e.QueueAction=o},function(t,e,n){"use strict";var r=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},i=n(136),o=function(t){function e(){t.apply(this,arguments)}return r(e,t),e}(i.AsyncScheduler);e.QueueScheduler=o},function(t,e,n){"use strict";var r=n(1041),i=n(1042);e.animationFrame=new i.AnimationFrameScheduler(r.AnimationFrameAction)},function(t,e,n){"use strict";var r=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)},i=n(0),o=n(30),s=n(384),a=n(386),c=function(t){function e(e,n){t.call(this,function(t){var e=this,n=e.logSubscribedFrame();return t.add(new o.Subscription(function(){e.logUnsubscribedFrame(n)})),e.scheduleMessages(t),t}),this.messages=e,this.subscriptions=[],this.scheduler=n}return r(e,t),e.prototype.scheduleMessages=function(t){for(var e=this.messages.length,n=0;n0;)e.shift().setup();t.prototype.flush.call(this);for(var n=this.flushTests.filter(function(t){return t.ready});n.length>0;){var r=n.shift();this.assertDeepEqual(r.actual,r.expected)}},e.parseMarblesAsSubscriptions=function(t){if("string"!=typeof t)return new c.SubscriptionLog(Number.POSITIVE_INFINITY);for(var e=t.length,n=-1,r=Number.POSITIVE_INFINITY,i=Number.POSITIVE_INFINITY,o=0;o-1?n:s;break;case"!":if(i!==Number.POSITIVE_INFINITY)throw new Error("found a second subscription point '^' in a subscription marble diagram. There can only be one.");i=n>-1?n:s;break;default:throw new Error("there can only be '^' and '!' markers in a subscription marble diagram. Found instead '"+a+"'.")}}return i<0?new c.SubscriptionLog(r):new c.SubscriptionLog(r,i)},e.parseMarbles=function(t,e,n,r){if(void 0===r&&(r=!1),t.indexOf("!")!==-1)throw new Error('conventional marble diagrams cannot have the unsubscription marker "!"');for(var i=t.length,a=[],c=t.indexOf("^"),u=c===-1?0:c*-this.frameTimeFactor,l="object"!=typeof e?function(t){return t}:function(t){return r&&e[t]instanceof s.ColdObservable?e[t].messages:e[t]},h=-1,p=0;p-1?h:f,notification:_})}return a},e}(u.VirtualTimeScheduler);e.TestScheduler=h},function(t,e,n){"use strict";var r=n(38),i=function(){function t(t){t.requestAnimationFrame?(this.cancelAnimationFrame=t.cancelAnimationFrame.bind(t),this.requestAnimationFrame=t.requestAnimationFrame.bind(t)):t.mozRequestAnimationFrame?(this.cancelAnimationFrame=t.mozCancelAnimationFrame.bind(t),this.requestAnimationFrame=t.mozRequestAnimationFrame.bind(t)):t.webkitRequestAnimationFrame?(this.cancelAnimationFrame=t.webkitCancelAnimationFrame.bind(t),this.requestAnimationFrame=t.webkitRequestAnimationFrame.bind(t)):t.msRequestAnimationFrame?(this.cancelAnimationFrame=t.msCancelAnimationFrame.bind(t),this.requestAnimationFrame=t.msRequestAnimationFrame.bind(t)):t.oRequestAnimationFrame?(this.cancelAnimationFrame=t.oCancelAnimationFrame.bind(t),this.requestAnimationFrame=t.oRequestAnimationFrame.bind(t)):(this.cancelAnimationFrame=t.clearTimeout.bind(t),this.requestAnimationFrame=function(e){return t.setTimeout(e,1e3/60)})}return t}();e.RequestAnimationFrameDefinition=i,e.AnimationFrame=new i(r.root)},function(t,e){"use strict";var n=function(){function t(){this.values={}}return t.prototype.delete=function(t){return this.values[t]=null,!0},t.prototype.set=function(t,e){return this.values[t]=e,this},t.prototype.get=function(t){return this.values[t]},t.prototype.forEach=function(t,e){var n=this.values;for(var r in n)n.hasOwnProperty(r)&&null!==n[r]&&t.call(e,n[r],r)},t.prototype.clear=function(){this.values={}},t}();e.FastMap=n},function(t,e,n){"use strict";var r=n(38),i=function(){function t(t){if(this.root=t,t.setImmediate&&"function"==typeof t.setImmediate)this.setImmediate=t.setImmediate.bind(t),this.clearImmediate=t.clearImmediate.bind(t);else{this.nextHandle=1,this.tasksByHandle={},this.currentlyRunningATask=!1,this.canUseProcessNextTick()?this.setImmediate=this.createProcessNextTickSetImmediate():this.canUsePostMessage()?this.setImmediate=this.createPostMessageSetImmediate():this.canUseMessageChannel()?this.setImmediate=this.createMessageChannelSetImmediate():this.canUseReadyStateChange()?this.setImmediate=this.createReadyStateChangeSetImmediate():this.setImmediate=this.createSetTimeoutSetImmediate();var e=function t(e){delete t.instance.tasksByHandle[e]};e.instance=this,this.clearImmediate=e}}return t.prototype.identify=function(t){return this.root.Object.prototype.toString.call(t)},t.prototype.canUseProcessNextTick=function(){return"[object process]"===this.identify(this.root.process)},t.prototype.canUseMessageChannel=function(){return Boolean(this.root.MessageChannel)},t.prototype.canUseReadyStateChange=function(){var t=this.root.document;return Boolean(t&&"onreadystatechange"in t.createElement("script"))},t.prototype.canUsePostMessage=function(){var t=this.root;if(t.postMessage&&!t.importScripts){var e=!0,n=t.onmessage;return t.onmessage=function(){e=!1},t.postMessage("","*"),t.onmessage=n,e}return!1},t.prototype.partiallyApplied=function(t){for(var e=[],n=1;nt._pos){var o=n.substr(t._pos);if("x-user-defined"===t._charset){for(var s=new r(o.length),a=0;at._pos&&(t.push(new r(new Uint8Array(u.result.slice(t._pos)))),t._pos=u.result.byteLength)},u.onload=function(){t.push(null)},u.readAsArrayBuffer(n)}t._xhr.readyState===c.DONE&&"ms-stream"!==t._mode&&t.push(null)}}).call(e,n(43),n(16).Buffer,n(27))},function(t,e,n){"use strict";function r(t){return this instanceof r?void i.call(this,t):new r(t)}t.exports=r;var i=n(393),o=n(65);o.inherits=n(42),o.inherits(r,i),r.prototype._transform=function(t,e,n){n(null,t)}},function(t,e,n){"use strict";function r(){this.head=null,this.tail=null,this.length=0}var i=(n(16).Buffer,n(233));t.exports=r,r.prototype.push=function(t){var e={data:t,next:null};this.length>0?this.tail.next=e:this.head=e,this.tail=e,++this.length},r.prototype.unshift=function(t){var e={data:t,next:this.head};0===this.length&&(this.tail=e),this.head=e,++this.length},r.prototype.shift=function(){if(0!==this.length){var t=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,t}},r.prototype.clear=function(){this.head=this.tail=null,this.length=0},r.prototype.join=function(t){if(0===this.length)return"";for(var e=this.head,n=""+e.data;e=e.next;)n+=t+e.data;return n},r.prototype.concat=function(t){if(0===this.length)return i.alloc(0);if(1===this.length)return this.head.data;for(var e=i.allocUnsafe(t>>>0),n=this.head,r=0;n;)n.data.copy(e,r),r+=n.data.length,n=n.next;return e}},function(t,e,n){var r=n(649);"string"==typeof r&&(r=[[t.i,r,""]]);n(191)(r,{});r.locals&&(t.exports=r.locals)},function(t,e,n){var r=n(650);"string"==typeof r&&(r=[[t.i,r,""]]);n(191)(r,{});r.locals&&(t.exports=r.locals)},function(t,e,n){var r=n(651);"string"==typeof r&&(r=[[t.i,r,""]]);n(191)(r,{});r.locals&&(t.exports=r.locals)},function(t,e,n){var r=n(652);"string"==typeof r&&(r=[[t.i,r,""]]);n(191)(r,{});r.locals&&(t.exports=r.locals)},function(t,e,n){var r=n(16).Buffer;t.exports=function(t){if(t instanceof Uint8Array){if(0===t.byteOffset&&t.byteLength===t.buffer.byteLength)return t.buffer;if("function"==typeof t.buffer.slice)return t.buffer.slice(t.byteOffset,t.byteOffset+t.byteLength)}if(r.isBuffer(t)){for(var e=new Uint8Array(t.length),n=t.length,i=0;i=0;a--)(i=t[a])&&(s=(o<3?i(s):o>3?i(e,n,s):i(e,n))||s);return o>3&&s&&Object.defineProperty(e,n,s),s}function i(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)}function o(t,e){return function(n,r){e(n,r,t)}}function s(t,e,n,r){return new(n||(n=Promise))(function(i,o){function s(t){try{c(r.next(t))}catch(t){o(t)}}function a(t){try{c(r.throw(t))}catch(t){o(t)}}function c(t){t.done?i(t.value):new n(function(e){e(t.value)}).then(s,a)}c((r=r.apply(t,e)).next())})}!function(t){t.__assign=t&&t.__assign||Object.assign||e,t.__extends=t&&t.__extends||n,t.__decorate=t&&t.__decorate||r,t.__metadata=t&&t.__metadata||i,t.__param=t&&t.__param||o,t.__awaiter=t&&t.__awaiter||s}("undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope?self:"undefined"!=typeof t?t:Function("return this;")())}).call(e,n(27))},function(t,e){"use strict";t.exports={isString:function(t){return"string"==typeof t},isObject:function(t){return"object"==typeof t&&null!==t},isNull:function(t){return null===t},isNullOrUndefined:function(t){return null==t}}},function(t,e){t.exports=function(t){return t&&"object"==typeof t&&"function"==typeof t.copy&&"function"==typeof t.fill&&"function"==typeof t.readUInt8}},function(t,e,n){(function(t,r){function i(t,n){var r={seen:[],stylize:s};return arguments.length>=3&&(r.depth=arguments[2]),arguments.length>=4&&(r.colors=arguments[3]),d(n)?r.showHidden=n:n&&e._extend(r,n),w(r.showHidden)&&(r.showHidden=!1),w(r.depth)&&(r.depth=2),w(r.colors)&&(r.colors=!1),w(r.customInspect)&&(r.customInspect=!0),r.colors&&(r.stylize=o),c(r,t,r.depth)}function o(t,e){var n=i.styles[e];return n?"["+i.colors[n][0]+"m"+t+"["+i.colors[n][1]+"m":t}function s(t,e){return t}function a(t){var e={};return t.forEach(function(t,n){e[t]=!0}),e}function c(t,n,r){if(t.customInspect&&n&&T(n.inspect)&&n.inspect!==e.inspect&&(!n.constructor||n.constructor.prototype!==n)){var i=n.inspect(r,t);return v(i)||(i=c(t,i,r)),i}var o=u(t,n);if(o)return o;var s=Object.keys(n),d=a(s);if(t.showHidden&&(s=Object.getOwnPropertyNames(n)),k(n)&&(s.indexOf("message")>=0||s.indexOf("description")>=0))return l(n);if(0===s.length){if(T(n)){var y=n.name?": "+n.name:"";return t.stylize("[Function"+y+"]","special")}if(x(n))return t.stylize(RegExp.prototype.toString.call(n),"regexp");if(C(n))return t.stylize(Date.prototype.toString.call(n),"date");if(k(n))return l(n)}var m="",g=!1,b=["{","}"];if(_(n)&&(g=!0,b=["[","]"]),T(n)){var w=n.name?": "+n.name:"";m=" [Function"+w+"]"}if(x(n)&&(m=" "+RegExp.prototype.toString.call(n)),C(n)&&(m=" "+Date.prototype.toUTCString.call(n)),k(n)&&(m=" "+l(n)),0===s.length&&(!g||0==n.length))return b[0]+m+b[1];if(r<0)return x(n)?t.stylize(RegExp.prototype.toString.call(n),"regexp"):t.stylize("[Object]","special");t.seen.push(n);var I;return I=g?h(t,n,r,d,s):s.map(function(e){return p(t,n,r,d,e,g)}),t.seen.pop(),f(I,m,b)}function u(t,e){if(w(e))return t.stylize("undefined","undefined");if(v(e)){var n="'"+JSON.stringify(e).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return t.stylize(n,"string")}return g(e)?t.stylize(""+e,"number"):d(e)?t.stylize(""+e,"boolean"):y(e)?t.stylize("null","null"):void 0}function l(t){return"["+Error.prototype.toString.call(t)+"]"}function h(t,e,n,r,i){for(var o=[],s=0,a=e.length;s-1&&(a=o?a.split("\n").map(function(t){return" "+t}).join("\n").substr(2):"\n"+a.split("\n").map(function(t){return" "+t}).join("\n"))):a=t.stylize("[Circular]","special")),w(s)){if(o&&i.match(/^\d+$/))return a;s=JSON.stringify(""+i),s.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(s=s.substr(1,s.length-2),s=t.stylize(s,"name")):(s=s.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),s=t.stylize(s,"string"))}return s+": "+a}function f(t,e,n){var r=0,i=t.reduce(function(t,e){return r++,e.indexOf("\n")>=0&&r++,t+e.replace(/\u001b\[\d\d?m/g,"").length+1},0);return i>60?n[0]+(""===e?"":e+"\n ")+" "+t.join(",\n ")+" "+n[1]:n[0]+e+" "+t.join(", ")+" "+n[1]}function _(t){return Array.isArray(t)}function d(t){return"boolean"==typeof t}function y(t){return null===t}function m(t){return null==t}function g(t){return"number"==typeof t}function v(t){return"string"==typeof t}function b(t){return"symbol"==typeof t}function w(t){return void 0===t}function x(t){return I(t)&&"[object RegExp]"===S(t)}function I(t){return"object"==typeof t&&null!==t}function C(t){return I(t)&&"[object Date]"===S(t)}function k(t){return I(t)&&("[object Error]"===S(t)||t instanceof Error)}function T(t){return"function"==typeof t}function E(t){return null===t||"boolean"==typeof t||"number"==typeof t||"string"==typeof t||"symbol"==typeof t||"undefined"==typeof t}function S(t){return Object.prototype.toString.call(t)}function O(t){return t<10?"0"+t.toString(10):t.toString(10)}function R(){var t=new Date,e=[O(t.getHours()),O(t.getMinutes()),O(t.getSeconds())].join(":");return[t.getDate(),D[t.getMonth()],e].join(" ")}function A(t,e){return Object.prototype.hasOwnProperty.call(t,e)}var N=/%[sdj%]/g;e.format=function(t){if(!v(t)){for(var e=[],n=0;n=o)return t;switch(t){case"%s":return String(r[n++]);case"%d":return Number(r[n++]);case"%j":try{return JSON.stringify(r[n++])}catch(t){return"[Circular]"}default:return t}}),a=r[n];n=0;n--)"function"==typeof t[n]&&(t[n]=Zone.current.wrap(t[n],e+"_"+n));return t}function r(t,e){for(var r=t.constructor.name,i=function(i){var o=e[i],s=t[o];s&&(t[o]=function(t){return function(){return t.apply(this,n(arguments,r+"."+o))}}(s))},o=0;o1?new e(t,n):new e(t),s=Object.getOwnPropertyDescriptor(i,"onmessage");return s&&s.configurable===!1?(r=Object.create(i),["addEventListener","removeEventListener","send","close"].forEach(function(t){r[t]=function(){return i[t].apply(i,arguments)}})):r=i,o(r,["close","error","message","open"]),r};for(var n in e)t.WebSocket[n]=e[n]}function x(t){if(!R){var e="undefined"!=typeof WebSocket;I()?(A&&o(HTMLElement.prototype,W),o(XMLHttpRequest.prototype,null),"undefined"!=typeof IDBIndex&&(o(IDBIndex.prototype,null),o(IDBRequest.prototype,null),o(IDBOpenDBRequest.prototype,null),o(IDBDatabase.prototype,null),o(IDBTransaction.prototype,null),o(IDBCursor.prototype,null)),e&&o(WebSocket.prototype,null)):(C(),h("XMLHttpRequest"),e&&w(t))}}function I(){if(A&&!Object.getOwnPropertyDescriptor(HTMLElement.prototype,"onclick")&&"undefined"!=typeof Element){var t=Object.getOwnPropertyDescriptor(Element.prototype,"onclick");if(t&&!t.configurable)return!1}Object.defineProperty(XMLHttpRequest.prototype,"onreadystatechange",{get:function(){return!0}});var e=new XMLHttpRequest,n=!!e.onreadystatechange;return Object.defineProperty(XMLHttpRequest.prototype,"onreadystatechange",{}),n}function C(){for(var t=function(t){var e=W[t],n="on"+e;document.addEventListener(e,function(t){var e,r,i=t.target;for(r=i?i.constructor.name+"."+n:"unknown."+n;i;)i[n]&&!i[n][Y]&&(e=Zone.current.wrap(i[n],r),e[Y]=i[n],i[n]=e),i=i.parentElement},!0)},e=0;e",this._properties=e&&e.properties||{},this._zoneDelegate=new d(this,this._parent&&this._parent._zoneDelegate,e)}return n.assertZonePatched=function(){if(t.Promise!==P)throw new Error("Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten.\nMost likely cause is that a Promise polyfill has been loaded after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. If you must load one, do so before loading zone.js.)")},Object.defineProperty(n,"current",{get:function(){return b},enumerable:!0,configurable:!0}),Object.defineProperty(n,"currentTask",{get:function(){return w},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"parent",{get:function(){return this._parent},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"name",{get:function(){return this._name},enumerable:!0,configurable:!0}),n.prototype.get=function(t){var e=this.getZoneWith(t);if(e)return e._properties[t]},n.prototype.getZoneWith=function(t){for(var e=this;e;){if(e._properties.hasOwnProperty(t))return e;e=e._parent}return null},n.prototype.fork=function(t){if(!t)throw new Error("ZoneSpec required!");return this._zoneDelegate.fork(this,t)},n.prototype.wrap=function(t,e){if("function"!=typeof t)throw new Error("Expecting function got: "+t);var n=this._zoneDelegate.intercept(this,t,e),r=this;return function(){return r.runGuarded(n,this,arguments,e)}},n.prototype.run=function(t,e,n,r){void 0===e&&(e=null),void 0===n&&(n=null),void 0===r&&(r=null);var i=b;b=this;try{return this._zoneDelegate.invoke(this,t,e,n,r)}finally{b=i}},n.prototype.runGuarded=function(t,e,n,r){void 0===e&&(e=null),void 0===n&&(n=null),void 0===r&&(r=null);var i=b;b=this;try{try{return this._zoneDelegate.invoke(this,t,e,n,r)}catch(t){if(this._zoneDelegate.handleError(this,t))throw t}}finally{b=i}},n.prototype.runTask=function(t,e,n){if(t.runCount++,t.zone!=this)throw new Error("A task can only be run in the zone which created it! (Creation: "+t.zone.name+"; Execution: "+this.name+")");var r=w;w=t;var i=b;b=this;try{"macroTask"==t.type&&t.data&&!t.data.isPeriodic&&(t.cancelFn=null);try{return this._zoneDelegate.invokeTask(this,t,e,n)}catch(t){if(this._zoneDelegate.handleError(this,t))throw t}}finally{b=i,w=r}},n.prototype.scheduleMicroTask=function(t,e,n,r){return this._zoneDelegate.scheduleTask(this,new y("microTask",this,t,e,n,r,null))},n.prototype.scheduleMacroTask=function(t,e,n,r,i){return this._zoneDelegate.scheduleTask(this,new y("macroTask",this,t,e,n,r,i))},n.prototype.scheduleEventTask=function(t,e,n,r,i){return this._zoneDelegate.scheduleTask(this,new y("eventTask",this,t,e,n,r,i))},n.prototype.cancelTask=function(t){var e=this._zoneDelegate.cancelTask(this,t);return t.runCount=-1,t.cancelFn=null,e},n.__symbol__=e,n}(),d=function(){function t(t,e,n){this._taskCounts={microTask:0,macroTask:0,eventTask:0},this.zone=t,this._parentDelegate=e,this._forkZS=n&&(n&&n.onFork?n:e._forkZS),this._forkDlgt=n&&(n.onFork?e:e._forkDlgt),this._interceptZS=n&&(n.onIntercept?n:e._interceptZS),this._interceptDlgt=n&&(n.onIntercept?e:e._interceptDlgt),this._invokeZS=n&&(n.onInvoke?n:e._invokeZS),this._invokeDlgt=n&&(n.onInvoke?e:e._invokeDlgt),this._handleErrorZS=n&&(n.onHandleError?n:e._handleErrorZS),this._handleErrorDlgt=n&&(n.onHandleError?e:e._handleErrorDlgt),this._scheduleTaskZS=n&&(n.onScheduleTask?n:e._scheduleTaskZS),this._scheduleTaskDlgt=n&&(n.onScheduleTask?e:e._scheduleTaskDlgt),this._invokeTaskZS=n&&(n.onInvokeTask?n:e._invokeTaskZS),this._invokeTaskDlgt=n&&(n.onInvokeTask?e:e._invokeTaskDlgt),this._cancelTaskZS=n&&(n.onCancelTask?n:e._cancelTaskZS),this._cancelTaskDlgt=n&&(n.onCancelTask?e:e._cancelTaskDlgt),this._hasTaskZS=n&&(n.onHasTask?n:e._hasTaskZS),this._hasTaskDlgt=n&&(n.onHasTask?e:e._hasTaskDlgt)}return t.prototype.fork=function(t,e){return this._forkZS?this._forkZS.onFork(this._forkDlgt,this.zone,t,e):new _(t,e)},t.prototype.intercept=function(t,e,n){return this._interceptZS?this._interceptZS.onIntercept(this._interceptDlgt,this.zone,t,e,n):e},t.prototype.invoke=function(t,e,n,r,i){return this._invokeZS?this._invokeZS.onInvoke(this._invokeDlgt,this.zone,t,e,n,r,i):e.apply(n,r)},t.prototype.handleError=function(t,e){return!this._handleErrorZS||this._handleErrorZS.onHandleError(this._handleErrorDlgt,this.zone,t,e)},t.prototype.scheduleTask=function(t,e){try{if(this._scheduleTaskZS)return this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt,this.zone,t,e);if(e.scheduleFn)e.scheduleFn(e);else{if("microTask"!=e.type)throw new Error("Task is missing scheduleFn.");r(e)}return e}finally{t==this.zone&&this._updateTaskCount(e.type,1)}},t.prototype.invokeTask=function(t,e,n,r){try{return this._invokeTaskZS?this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt,this.zone,t,e,n,r):e.callback.apply(n,r)}finally{t!=this.zone||"eventTask"==e.type||e.data&&e.data.isPeriodic||this._updateTaskCount(e.type,-1)}},t.prototype.cancelTask=function(t,e){var n;if(this._cancelTaskZS)n=this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt,this.zone,t,e);else{if(!e.cancelFn)throw new Error("Task does not support cancellation, or is already canceled.");n=e.cancelFn(e)}return t==this.zone&&this._updateTaskCount(e.type,-1),n},t.prototype.hasTask=function(t,e){return this._hasTaskZS&&this._hasTaskZS.onHasTask(this._hasTaskDlgt,this.zone,t,e)},t.prototype._updateTaskCount=function(t,e){var n=this._taskCounts,r=n[t],i=n[t]=r+e;if(i<0)throw new Error("More tasks executed then were scheduled.");if(0==r||0==i){var o={microTask:n.microTask>0,macroTask:n.macroTask>0,eventTask:n.eventTask>0,change:t};try{this.hasTask(this.zone,o)}finally{this._parentDelegate&&this._parentDelegate._updateTaskCount(t,e)}}},t}(),y=function(){function t(t,e,n,r,i,s,a){this.runCount=0,this.type=t,this.zone=e,this.source=n,this.data=i,this.scheduleFn=s,this.cancelFn=a,this.callback=r;var c=this;this.invoke=function(){k++;try{return e.runTask(c,this,arguments)}finally{1==k&&o(),k--}}}return t.prototype.toString=function(){return this.data&&"undefined"!=typeof this.data.handleId?this.data.handleId:this.toString()},t}(),m=e("setTimeout"),g=e("Promise"),v=e("then"),b=new _(null,null),w=null,x=[],I=!1,C=[],k=0,T=e("state"),E=e("value"),S="Promise.then",O=null,R=!0,A=!1,N=0,P=function(){function t(e){var n=this;if(!(n instanceof t))throw new Error("Must be an instanceof Promise.");n[T]=O,n[E]=[];try{e&&e(u(n,R),u(n,A))}catch(t){l(n,!1,t)}}return t.resolve=function(t){return l(new this(null),R,t)},t.reject=function(t){return l(new this(null),A,t)},t.race=function(t){function e(t){o&&(o=r(t))}function n(t){o&&(o=i(t))}for(var r,i,o=new this(function(t,e){r=t,i=e}),a=0,c=t;a exit ``` We could easily use this or other environment variables in our web application to make a connection to our `redis` -container. \ No newline at end of file +container. diff --git a/engine/examples/running_riak_service.md b/engine/examples/running_riak_service.md index 08003610e7f..5a68a3ea8a0 100644 --- a/engine/examples/running_riak_service.md +++ b/engine/examples/running_riak_service.md @@ -99,4 +99,4 @@ Riak is a distributed database. Many production deployments consist of [at least five nodes]( http://basho.com/why-your-riak-cluster-should-have-at-least-five-nodes/). See the [docker-riak](https://github.com/hectcastro/docker-riak) project -details on how to deploy a Riak cluster using Docker and Pipework. \ No newline at end of file +details on how to deploy a Riak cluster using Docker and Pipework. diff --git a/engine/examples/running_ssh_service.md b/engine/examples/running_ssh_service.md index 3a8c24125a3..9e60160cdb8 100644 --- a/engine/examples/running_ssh_service.md +++ b/engine/examples/running_ssh_service.md @@ -80,4 +80,4 @@ container, and then removing the image. $ docker stop test_sshd $ docker rm test_sshd $ docker rmi eg_sshd -``` \ No newline at end of file +``` diff --git a/engine/getstarted/last_page.md b/engine/getstarted/last_page.md index 14f5b10e1c3..a4cbd4cb035 100644 --- a/engine/getstarted/last_page.md +++ b/engine/getstarted/last_page.md @@ -21,23 +21,23 @@ Depending on your interest, the Docker documentation contains a wealth of inform More about Docker for Mac, features, examples, FAQs, relationship to Docker Machine and Docker Toolbox, and how this fits in the Docker ecosystem - Getting Started with Docker for Mac + [Getting Started with Docker for Mac](https://docs.docker.com/docker-for-mac/) More about Docker for Windows, features, examples, FAQs, relationship to Docker Machine and Docker Toolbox, and how this fits in the Docker ecosystem - Getting Started with Docker for Windows + [Getting Started with Docker for Windows](https://docs.docker.com/docker-for-windows/) More about Docker Toolbox - Docker Toolbox Overview + [Docker Toolbox Overview](/toolbox/overview.md) More about Docker for Linux distributions - Install Docker Engine on Linux + [Install Docker Engine on Linux](/engine/installation/linux/index.md) More advanced tutorials on running containers, building your own images, networking containers, managing data for containers, and storing images on Docker Hub - Learn by example + [Learn by example](/engine/tutorials/index.md) Information about the Docker product line @@ -46,11 +46,12 @@ Depending on your interest, the Docker documentation contains a wealth of inform How to set up an automated build on Docker Hub - Docker Hub documentation + Docker Hub documentation How to run a multi-container application with Compose - Docker Compose documentation + [Docker Compose documentation](/compose/overview.md) + A tutorial on Docker Swarm, which provides clustering capabilities to scale applications across multiple Docker nodes diff --git a/engine/getstarted/linux_install_help.md b/engine/getstarted/linux_install_help.md index fec35fc30a7..c0459837ef4 100644 --- a/engine/getstarted/linux_install_help.md +++ b/engine/getstarted/linux_install_help.md @@ -35,4 +35,4 @@ target="_blank">repositories instead for your installation. >command fails for the Docker repo during installation. To work around this, >add the key directly using the following: > - > $ curl -fsSL https://get.docker.com/gpg | sudo apt-key add - \ No newline at end of file + > $ curl -fsSL https://get.docker.com/gpg | sudo apt-key add - diff --git a/engine/getstarted/step_one.md b/engine/getstarted/step_one.md index 9994d26b06f..c95b505c0da 100644 --- a/engine/getstarted/step_one.md +++ b/engine/getstarted/step_one.md @@ -8,9 +8,9 @@ redirect_from: title: Install Docker and run hello-world --- -- [Step 1: Get Docker](step_one.md#step-1-get-docker) -- [Step 2: Install Docker](step_one.md#step-2-install-docker) -- [Step 3: Verify your installation](step_one.md#step-3-verify-your-installation) +- [Step 1: Get Docker](#step-1-get-docker) +- [Step 2: Install Docker](#step-2-install-docker) +- [Step 3: Verify your installation](#step-3-verify-your-installation) ## Step 1: Get Docker diff --git a/engine/getstarted/step_three.md b/engine/getstarted/step_three.md index d073985aa8c..e7013943aab 100644 --- a/engine/getstarted/step_three.md +++ b/engine/getstarted/step_three.md @@ -14,7 +14,7 @@ image you'll use in the rest of this getting started. ## Step 1: Locate the whalesay image -1. Open your browser and [browse to the Docker Hub](https://hub.docker.com/?utm_source=getting_started_guide&utm_medium=embedded_MacOSX&utm_campaign=find_whalesay). +1. Open your browser and browse to the Docker Hub. ![Browse Docker Hub](tutimg/browse_and_search.png) @@ -66,15 +66,15 @@ Make sure Docker is running. On Docker for Mac and Docker for Windows, this is i ----- \ \ - \ - ## . - ## ## ## == - ## ## ## ## === - /""""""""""""""""___/ === - ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~ - \______ o __/ - \ \ __/ - \____\______/ + \ + ## . + ## ## ## == + ## ## ## ## === + /""""""""""""""""___/ === + ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~ + \______ o __/ + \ \ __/ + \____\______/ The first time you run a software image, the `docker` command looks for it on your local system. If the image isn't there, then `docker` gets it from @@ -108,15 +108,15 @@ Make sure Docker is running. On Docker for Mac and Docker for Windows, this is i --------- \ \ - \ - ## . - ## ## ## == - ## ## ## ## === - /""""""""""""""""___/ === - ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~ - \______ o __/ - \ \ __/ - \____\______/ + \ + ## . + ## ## ## == + ## ## ## ## === + /""""""""""""""""___/ === + ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~ + \______ o __/ + \ \ __/ + \____\______/ ## Where to go next @@ -127,4 +127,4 @@ it on your computer. Now, you are ready to create your own Docker image. Go on to the next part [to build your own image](step_four.md). -  \ No newline at end of file +  diff --git a/engine/index.md b/engine/index.md index be4066cee46..760fea258cc 100644 --- a/engine/index.md +++ b/engine/index.md @@ -112,4 +112,4 @@ The complete list of deprecated features can be found on the Docker is licensed under the Apache License, Version 2.0. See [LICENSE](https://github.com/docker/docker/blob/master/LICENSE) for the full -license text. \ No newline at end of file +license text. diff --git a/engine/installation/binaries.md b/engine/installation/binaries.md index d8f0c615d76..a0ce93fe01a 100644 --- a/engine/installation/binaries.md +++ b/engine/installation/binaries.md @@ -4,224 +4,184 @@ keywords: binaries, installation, docker, documentation, linux title: Install Docker from binaries --- -**This instruction set is meant for hackers who want to try out Docker -on a variety of environments.** - -Before following these directions, you should really check if a packaged -version of Docker is already available for your distribution. We have -packages for many distributions, and more keep showing up all the time! - -## Check runtime dependencies - -To run properly, docker needs the following software to be installed at -runtime: - - - iptables version 1.4 or later - - Git version 1.7 or later - - procps (or similar provider of a "ps" executable) - - XZ Utils 4.9 or later - - a [properly mounted]( - https://github.com/tianon/cgroupfs-mount/blob/master/cgroupfs-mount) - cgroupfs hierarchy (having a single, all-encompassing "cgroup" mount - point [is](https://github.com/docker/docker/issues/2683) - [not](https://github.com/docker/docker/issues/3485) - [sufficient](https://github.com/docker/docker/issues/4568)) - -## Check kernel dependencies +> **Note**: You may have been redirected to this page because there is no longer +> a dynamically-linked Docker package for your Linux distribution. + +If you want to try Docker or use it in a testing environment, but you're not on +a supported platform, you can try installing from static binaries. +**This is strongly discouraged in production environments.** + +Static binaries for the Docker daemon binary are only available for Linux (as +`dockerd`) and Windows Server 2016 or Windows 10 (as `dockerd.exe`). Static +binaries for the Docker client are available for Linux and macOS (as `docker`), +and Windows Server 2016 or Windows 10 (as `docker.exe`). + +## Install daemon and client binaries on Linux + +### Prerequisites + +Before attempting to install Docker from binaries, be sure your host machine +meets the prerequisites: + +- A 64-bit installation +- Version 3.10 or higher of the Linux kernel. The latest version of the kernel + available for you platform is recommended. +- `iptables` version 1.4 or higher +- `git` version 1.7 or higher +- A `ps` executable, usually provided by `procps` or a similar package. +- [XZ Utils](http://tukaani.org/xz/) 4.9 or higher +- a [properly mounted]( + https://github.com/tianon/cgroupfs-mount/blob/master/cgroupfs-mount) + `cgroupfs` hierarchy; a single, all-encompassing `cgroup` mount + point is not sufficient. See Github issues + [#2683](https://github.com/docker/docker/issues/2683), + [#3485](https://github.com/docker/docker/issues/3485), + [#4568](https://github.com/docker/docker/issues/4568)). + +#### Enable AppArmor and SELinux when possible + +It is recommended to use AppArmor or SELinux if your Linux distribution supports +either of the two. This helps improve security and blocks certain +types of exploits. Review the documentation for your Linux distribution for +instructions for enabling and configuring AppArmor or SELinux. -Docker in daemon mode has specific kernel requirements. For details, -check your distribution in [*Installation*](index.md#on-linux). +> **Warning**: +> If either of the security mechanisms is enabled, do not disable it as a +> work-around to make Docker or its containers run. Instead, configure it +> correctly to fix any problems. -A 3.10 Linux kernel is the minimum requirement for Docker. -Kernels older than 3.10 lack some of the features required to run Docker -containers. These older versions are known to have bugs which cause data loss -and frequently panic under certain conditions. +### Install static binaries -The latest minor version (3.x.y) of the 3.10 (or a newer maintained version) -Linux kernel is recommended. Keeping the kernel up to date with the latest -minor version will ensure critical kernel bugs get fixed. +1. Download the static binary archive. You can download either the latest + release binaries or a specific version. To find the download link, see the + [release notes](https://github.com/docker/docker/releases) for the version + of Docker you want to install. You can choose a `tar.gz` archive or `zip` + archive. -> **Warning**: -> Installing custom kernels and kernel packages is probably not -> supported by your Linux distribution's vendor. Please make sure to -> ask your vendor about Docker support first before attempting to -> install custom kernels on your distribution. +2. Extract the archive using `tar` or `unzip`, depending on the format you + downloaded. The `dockerd` and `docker` binaries are extracted. -> **Warning**: -> Installing a newer kernel might not be enough for some distributions -> which provide packages which are too old or incompatible with -> newer kernels. + ```bash + $ tar xzvf /path/to/.tar.gz + ``` -Note that Docker also has a client mode, which can run on virtually any -Linux kernel (it even builds on macOS!). + ```bash + $ unzip /path/to/.zip + ``` -## Enable AppArmor and SELinux when possible +3. **Optional**: Move the binaries to a directory on your executable path, such + as `/usr/bin/`. If you skip this step, you must provide the path to the + executable when you invoke `docker` or `dockerd` commands. -Please use AppArmor or SELinux if your Linux distribution supports -either of the two. This helps improve security and blocks certain -types of exploits. Your distribution's documentation should provide -detailed steps on how to enable the recommended security mechanism. - -Some Linux distributions enable AppArmor or SELinux by default and -they run a kernel which doesn't meet the minimum requirements (3.10 -or newer). Updating the kernel to 3.10 or newer on such a system -might not be enough to start Docker and run containers. -Incompatibilities between the version of AppArmor/SELinux user -space utilities provided by the system and the kernel could prevent -Docker from running, from starting containers or, cause containers to -exhibit unexpected behaviour. + ```bash + $ sudo cp docker/* /usr/bin/ + ``` -> **Warning**: -> If either of the security mechanisms is enabled, it should not be -> disabled to make Docker or its containers run. This will reduce -> security in that environment, lose support from the distribution's -> vendor for the system, and might break regulations and security -> policies in heavily regulated environments. - -## Get the Docker Engine binaries - -You can download either the latest release binaries or a specific version. View -the `docker/docker` [Releases page](https://github.com/docker/docker/releases). - -A group of download links is included at the bottom of the release notes for -each version of Docker. You can use these links to download the source code -archive for that release, binaries for supported platforms, and static binaries -for unsupported Linux platforms. Use the links listed in the Downloads section -to download the appropriate binaries. - -### Limitations of Windows and macOS binaries +4. Start the Docker daemon: -For Windows, the `i386` download contains a 32-bit client-only binary. The -`x86_64` download contains both client and daemon binaries for 64-bit Windows -Server 2016 and Windows 10 systems. + ```bash + $ sudo dockerd & + ``` -The macOS binary only contains a client. You cannot use it to run the `dockerd` -daemon. If you need to run the daemon, install -[Docker for Mac](/docker-for-mac/index.md) instead. + If you need to start the daemon with additional options, modify the above + command accordingly. +>>>>>>> c02c644... Rewrite and reorganize Linux install instructions -### URL patterns for static binaries +5. Verify that Docker is installed correctly by running the `hello-world` + image. -The URLs for released binaries are stable and follow a predictable pattern. -Unfortunately, it is not possible to browse the releases in a directory -structure. If you do not want to get the links from the release notes for a -release, you can infer the URL for the binaries by using the following patterns: + ```bash + $ sudo docker run hello-world + ``` -| Description | URL pattern | -|------------------------|-------------------------------------------------------------------| -| Latest Linux 64-bit | `https://get.docker.com/builds/Linux/x86_64/docker-latest.tgz` | -| Latest Linux 32-bit | `https://get.docker.com/builds/Linux/i386/docker-latest.tgz` | -| Specific version Linux 64-bit| `https://get.docker.com/builds/Linux/x86_64/docker-.tgz` | -| Specific version Linux 32-bit| `https://get.docker.com/builds/Linux/i386/docker-.tgz` | -| Latest Windows 64-bit | `https://get.docker.com/builds/Windows/x86_64/docker-latest.zip` | -| Latest Windows 32-bit | `https://get.docker.com/builds/Windows/i386/docker-latest.zip` | -| Specific version Windows 64-bit | `https://get.docker.com/builds/Windows/x86_64/docker-.zip` | -| Specific version Windows 32-bit | `https://get.docker.com/builds/Windows/i386/docker-.zip` | -| Latest MacOS 64-bit | `https://get.docker.com/builds/Darwin/x86_64/docker-latest.tgz` | -| Specific version MacOS 64-bit | `https://get.docker.com/builds/Darwin/x86_64/docker-.tgz` | + This command downloads a test image and runs it in a container. When the + container runs, it prints an informational message and exits. -For example, the stable URL for the Docker 1.11.0 64-bit static binary for Linux -is `https://get.docker.com/builds/Linux/x86_64/docker-1.11.0.tgz`. +### Next steps -> **Note** These instructions are for Docker Engine 1.11 and up. Engine 1.10 and -> under consists of a single binary, and instructions for those versions are -> different. To install version 1.10 or below, follow the instructions in the -> [1.10 documentation](/v1.10/engine/installation/binaries/){:target="_blank"}. +- Continue to [Post-installation steps for Linux](linux-postinstall.md) -#### Verify downloaded files +- Continue with the [User Guide](../../userguide/index.md). -To verify the integrity of downloaded files, you can get an MD5 or SHA256 -checksum by adding `.md5` or `.sha256` to the end of the URL. For instance, -to verify the `docker-1.11.0.tgz` link above, use the URL -`https://get.docker.com/builds/Linux/x86_64/docker-1.11.0.tgz.md5` or -`https://get.docker.com/builds/Linux/x86_64/docker-1.11.0.tgz.sha256`. +## Install client binaries on macOS -## Install the Linux binaries +The macOS binary includes the Docker client only. It does not include the +`dockerd` daemon. -After downloading, you extract the archive, which puts the binaries in a -directory named `docker` in your current location. +1. Download the static binary archive. You can download either the latest + release binaries or a specific version. To find the download link, see the + [release notes](https://github.com/docker/docker/releases) for the version + of Docker you want to install. You can choose a `tar.gz` archive or + `zip` archive. -```bash -$ tar -xvzf docker-latest.tgz +2. Extract the archive using `tar` or `unzip`, depending on the format you + downloaded. The `docker` binary is extracted. -docker/ -docker/docker -docker/docker-containerd -docker/docker-containerd-ctr -docker/docker-containerd-shim -docker/docker-proxy -docker/docker-runc -docker/dockerd -``` + ```bash + $ tar xzvf /path/to/.tar.gz + ``` -Engine requires these binaries to be installed in your host's `$PATH`. -For example, to install the binaries in `/usr/bin`: + ```bash + $ unzip /path/to/.zip + ``` +3. **Optional**: Move the binaries to a directory on your executable path, such + as `/usr/local/bin/`. If you skip this step, you must provide the path to the + executable when you invoke `docker` or `dockerd` commands. -```bash -$ mv docker/* /usr/bin/ -``` + ```bash + $ sudo cp docker/docker /usr/local/bin/ + ``` -> **Note**: If you already have Engine installed on your host, make sure you -> stop Engine before installing (`killall docker`), and install the binaries -> in the same location. You can find the location of the current installation -> with `dirname $(which docker)`. +4. Verify that Docker is installed correctly by running the `hello-world` + image. -### Run the Engine daemon on Linux + ```bash + $ sudo docker -H run hello-world + ``` -You can manually start the Engine in daemon mode using: + This command downloads a test image and runs it in a container. When the + container runs, it prints an informational message and exits. -```bash -$ sudo dockerd & -``` -The GitHub repository provides samples of init-scripts you can use to control -the daemon through a process manager, such as upstart or systemd. You can find -these scripts in the -contrib directory. +## Install server and binaries on Windows -For additional information about running the Engine in daemon mode, refer to -the [daemon command](../reference/commandline/dockerd.md) in the Engine command -line reference. +You can install Docker from binaries on Windows Server 2016 or Windows 10. -## Install the macOS binaries +- To install both client and server binaries, download the 64-bit binary. The + archive includes `x86.64` in the file name. -You can extract the downloaded archive either by double-clicking the downloaded -`.tgz` or on the command line, using `tar -xvzf docker-1.11.0.tgz`. You can run -the client binary from any location on your filesystem. +- To install the client only, download the 32-bit binary. The archive includes + `i386` in the file name. -## Install the Windows binary +1. Use the following PowerShell commands to install and start Docker: -You can extract the downloaded archive by double-clicking the downloaded -`.zip`. You can run the client binary from any location on your filesystem. + ```none + Invoke-WebRequest https://get.docker.com/builds/Windows/x86_64/docker-1.13.0.zip -UseBasicParsing -OutFile docker.zip + Expand-Archive docker.zip -DestinationPath $Env:ProgramFiles + Remove-Item -Force docker.zip -## Run client commands without root access + dockerd --register-service -On Linux, the `dockerd` daemon always runs as the root user and binds to a Unix -socket instead of a TCP port. By default that Unix socket is owned by the -`root` user. This means that by default, you need to use `sudo` to run `docker` -commands. + Start-Service docker + ``` -If you (or your Docker installer) create a Unix group called `docker` and add -users to it, the `dockerd` daemon will change the ownership of the Unix socket -to be readable and writable by members of the `docker` group when the daemon -starts. The `dockerd` daemon must always run as the root user, but you can run -`docker` client commands, such as `docker run`, as a non-privileged user. +2. Verify that Docker is installed correctly by running the `hello-world` + image. -> **Warning**: -> Membership in the *docker* group (or the group specified with `-G`) is equivalent -> to `root` access. See -> [*Docker Daemon Attack Surface*](../security/security.md#docker-daemon-attack-surface) details. -## Upgrade Docker Engine + ```none + docker run hello-world:nanoserver + ``` -Before you upgrade your manual installation of Docker Engine on Linux, first -stop the docker daemon: + This command downloads a test image and runs it in a container. When the + container runs, it prints an informational message and exits. -```bash -$ killall dockerd -``` +## Upgrade static binaries -After the Docker daemon stops, move the old binaries out of the way and follow -the [regular installation steps](binaries.md#get-the-linux-binaries). +To upgrade your manual installation of Docker Engine on Linux, first stop any +`dockerd` processes running locally, then follow the +[regular installation steps](#get-the-linux-binaries), overwriting any existing +`dockerd` or `docker` binaries with the newer versions. ## Next steps diff --git a/engine/installation/cloud/cloud-ex-aws.md b/engine/installation/cloud/cloud-ex-aws.md deleted file mode 100644 index f60c968ecd0..00000000000 --- a/engine/installation/cloud/cloud-ex-aws.md +++ /dev/null @@ -1,202 +0,0 @@ ---- -description: Example of a manual install of Docker Engine on a cloud provider, using Amazon Web Services (AWS) EC2. Shows how to create an EC2 instance, and install Docker Engine on it. -keywords: cloud, docker, machine, documentation, installation, AWS, EC2 -title: 'Example: Manual installation on a cloud provider' ---- - -You can install Docker Engine directly to servers you have on cloud providers. This example shows how to create an Amazon Web Services (AWS) EC2 instance, and install Docker Engine on it. - -You can use this same general approach to create Dockerized hosts on other cloud providers. - -### Step 1. Sign up for AWS - -1. If you are not already an AWS user, sign up for AWS to create an account and get root access to EC2 cloud computers. If you have an Amazon account, you can use it as your root user account. - -2. Create an IAM (Identity and Access Management) administrator user, an admin group, and a key pair associated with a region. - - From the AWS menus, select **Services** > **IAM** to get started. - - See the AWS documentation on Setting Up with Amazon EC2. Follow the steps for "Create an IAM User" and "Create a Key Pair". - - If you are just getting started with AWS and EC2, you do not need to create a virtual private cloud (VPC) or specify a subnet. The newer EC2-VPC platform (accounts created after 2013-12-04) comes with a default VPC and subnet in each availability zone. When you launch an instance, it automatically uses the default VPC. - -### Step 2. Configure and start an EC2 instance - -Launch an instance to create a virtual machine (VM) with a specified operating system (OS) as follows. - - 1. Log into AWS with your IAM credentials. - - On the AWS home page, click **EC2** to go to the dashboard, then click **Launch Instance**. - - ![EC2 dashboard](../images/ec2_launch_instance.png) - - AWS EC2 virtual servers are called *instances* in Amazon parlance. Once you set up an account, IAM user and key pair, you are ready to launch an instance. It is at this point that you select the OS for the VM. - - 2. Choose an Amazon Machine Image (AMI) with the OS and applications you want. For this example, we select an Ubuntu server. - - ![Launch Ubuntu](../images/ec2-ubuntu.png) - - 3. Choose an instance type. - - ![Choose a general purpose instance type](../images/ec2_instance_type.png) - - 4. Configure the instance. - - You can select the default network and subnet, which are inherently linked to a region and availability zone. - - ![Configure the instance](../images/ec2_instance_details.png) - - 5. Click **Review and Launch**. - - 6. Select a key pair to use for this instance. - - When you choose to launch, you need to select a key pair to use. Save the `.pem` file to use in the next steps. - -The instance is now up-and-running. The menu path to get back to your EC2 instance on AWS is: **EC2 (Virtual Servers in Cloud)** > **EC2 Dashboard** > **Resources** > **Running instances**. - -To get help with your private key file, instance IP address, and how to log into the instance via SSH, click the **Connect** button at the top of the AWS instance dashboard. - - -### Step 3. Log in from a terminal, configure apt, and get packages - -1. Log in to the EC2 instance from a command line terminal. - - Change directories into the directory containing the SSH key and run this command (or give the path to it as part of the command): - - $ ssh -i "YourKey" ubuntu@xx.xxx.xxx.xxx - - For our example: - - $ cd ~/Desktop/keys/amazon_ec2 - $ ssh -i "my-key-pair.pem" ubuntu@xx.xxx.xxx.xxx - - We'll follow the instructions for installing Docker on Ubuntu [the instructions for installing Docker on Ubuntu](/engine/installation/linux/ubuntulinux.md). The next few steps reflect those instructions. - -2. Check the kernel version to make sure it's 3.10 or higher. - - ubuntu@ip-xxx-xx-x-xxx:~$ uname -r - 3.13.0-48-generic - -3. Add the new `gpg` key. - - ubuntu@ip-xxx-xx-x-xxx:~$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D - Executing: gpg --ignore-time-conflict --no-options --no-default-keyring --homedir /tmp/tmp.jNZLKNnKte --no-auto-check-trustdb --trust-model always --keyring /etc/apt/trusted.gpg --primary-keyring /etc/apt/trusted.gpg --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D - gpg: requesting key 2C52609D from hkp server p80.pool.sks-keyservers.net - gpg: key 2C52609D: public key "Docker Release Tool (releasedocker) " imported - gpg: Total number processed: 1 - gpg: imported: 1 (RSA: 1) - -4. Create a `docker.list` file, and add an entry for our OS, Ubuntu Trusty 14.04 (LTS). - - ubuntu@ip-xxx-xx-x-xxx:~$ sudo vi /etc/apt/sources.list.d/docker.list - - If we were updating an existing file, we'd delete any existing entries. - -5. Update the `apt` package index. - - ubuntu@ip-xxx-xx-x-xxx:~$ sudo apt-get update - -6. Purge the old repo if it exists. - - In our case the repo doesn't because this is a new VM, but let's run it anyway just to be sure. - - ubuntu@ip-xxx-xx-x-xxx:~$ sudo apt-get purge lxc-docker - Reading package lists... Done - Building dependency tree - Reading state information... Done - Package 'lxc-docker' is not installed, so not removed - 0 upgraded, 0 newly installed, 0 to remove and 139 not upgraded. - -7. Verify that `apt` is pulling from the correct repository. - - ubuntu@ip-172-31-0-151:~$ sudo apt-cache policy docker-engine - docker-engine: - Installed: (none) - Candidate: 1.9.1-0~trusty - Version table: - 1.9.1-0~trusty 0 - 500 https://apt.dockerproject.org/repo/ ubuntu-trusty/main amd64 Packages - 1.9.0-0~trusty 0 - 500 https://apt.dockerproject.org/repo/ ubuntu-trusty/main amd64 Packages - . . . - - From now on when you run `apt-get upgrade`, `apt` pulls from the new repository. - -### Step 4. Install recommended prerequisites for the OS - -For Ubuntu Trusty (and some other versions), it’s recommended to install the `linux-image-extra` kernel package, which allows you use the `aufs` storage driver, so we'll do that now. - - ubuntu@ip-xxx-xx-x-xxx:~$ sudo apt-get update - ubuntu@ip-172-31-0-151:~$ sudo apt-get install linux-image-extra-$(uname -r) - -### Step 5. Install Docker Engine on the remote instance - -1. Update the apt package index. - - ubuntu@ip-xxx-xx-x-xxx:~$ sudo apt-get update - -2. Install Docker Engine. - - ubuntu@ip-xxx-xx-x-xxx:~$ sudo apt-get install docker-engine - Reading package lists... Done - Building dependency tree - Reading state information... Done - The following extra packages will be installed: - aufs-tools cgroup-lite git git-man liberror-perl - Suggested packages: - git-daemon-run git-daemon-sysvinit git-doc git-el git-email git-gui gitk - gitweb git-arch git-bzr git-cvs git-mediawiki git-svn - The following NEW packages will be installed: - aufs-tools cgroup-lite docker-engine git git-man liberror-perl - 0 upgraded, 6 newly installed, 0 to remove and 139 not upgraded. - Need to get 11.0 MB of archives. - After this operation, 60.3 MB of additional disk space will be used. - Do you want to continue? [Y/n] y - Get:1 http://us-west-1.ec2.archive.ubuntu.com/ubuntu/ trusty/universe aufs-tools amd64 1:3.2+20130722-1.1 [92.3 kB] - Get:2 http://us-west-1.ec2.archive.ubuntu.com/ubuntu/ trusty/main liberror-perl all 0.17-1.1 [21.1 kB] - . . . - -3. Start the Docker daemon. - - ubuntu@ip-xxx-xx-x-xxx:~$ sudo service docker start - -4. Verify Docker Engine is installed correctly by running `docker run hello-world`. - - ubuntu@ip-xxx-xx-x-xxx:~$ sudo docker run hello-world - ubuntu@ip-172-31-0-151:~$ sudo docker run hello-world - Unable to find image 'hello-world:latest' locally - latest: Pulling from library/hello-world - b901d36b6f2f: Pull complete - 0a6ba66e537a: Pull complete - Digest: sha256:8be990ef2aeb16dbcb9271ddfe2610fa6658d13f6dfb8bc72074cc1ca36966a7 - Status: Downloaded newer image for hello-world:latest - - Hello from Docker. - This message shows that your installation appears to be working correctly. - - To generate this message, Docker took the following steps: - 1. The Docker client contacted the Docker daemon. - 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. - 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. - 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. - - To try something more ambitious, you can run an Ubuntu container with: - $ docker run -it ubuntu bash - - Share images, automate workflows, and more with a free Docker Hub account: - https://hub.docker.com - - For more examples and ideas, visit: - https://docs.docker.com/userguide/ - -## Where to go next - -_Looking for a quicker way to do Docker cloud installs and provision multiple hosts?_ You can use [Docker Machine](/machine/overview/) to provision hosts. - - * [Use Docker Machine to provision hosts on cloud providers](/machine/get-started-cloud/) - - * [Docker Machine driver reference](/machine/drivers/) - -* [Install Docker Engine](../index.md) - -* [Docker User Guide](../../userguide/intro.md) diff --git a/engine/installation/cloud/cloud-ex-machine-ocean.md b/engine/installation/cloud/cloud-ex-machine-ocean.md deleted file mode 100644 index 232c1d1a3ca..00000000000 --- a/engine/installation/cloud/cloud-ex-machine-ocean.md +++ /dev/null @@ -1,211 +0,0 @@ ---- -description: Example of using Docker Machine to install Docker Engine on a cloud provider, using Digital Ocean. -keywords: cloud, docker, machine, documentation, installation, digitalocean -title: 'Example: Use Docker Machine to provision cloud hosts' ---- - -Docker Machine driver plugins are available for many cloud platforms, so you can use Machine to provision cloud hosts. When you use Docker Machine for provisioning, you create cloud hosts with Docker Engine installed on them. - -You'll need to install and run Docker Machine, and create an account with the cloud provider. - -Then you provide account verification, security credentials, and configuration options for the providers as flags to `docker-machine create`. The flags are unique for each cloud-specific driver. For instance, to pass a Digital Ocean access token, you use the `--digitalocean-access-token` flag. - -As an example, let's take a look at how to create a Dockerized Digital Ocean _Droplet_ (cloud server). - -### Step 1. Create a Digital Ocean account and log in - -If you have not done so already, go to Digital Ocean, create an account, and log in. - -### Step 2. Generate a personal access token - -To generate your access token: - -1. Go to the Digital Ocean administrator console and click **API** in the header. - - ![Click API in Digital Ocean console](../images/ocean_click_api.png) - -2. Click **Generate New Token** to get to the token generator. - - ![Generate token](../images/ocean_gen_token.png) - -3. Give the token a clever name (e.g. "machine"), make sure the **Write (Optional)** checkbox is checked, and click **Generate Token**. - - ![Name and generate token](../images/ocean_token_create.png) - -4. Grab (copy to clipboard) the generated big long hex string and store it somewhere safe. - - ![Copy and save personal access token](../images/ocean_save_token.png) - - This is the personal access token you'll use in the next step to create your cloud server. - -### Step 3. Install Docker Machine - -1. If you have not done so already, install Docker Machine on your local host. - - * How to install Docker Machine on macOS - - * How to install Docker Machine on Windows - - * Install Docker Machine directly (e.g., on Linux) - -2. At a command terminal, use `docker-machine ls` to get a list of Docker Machines and their status. - - ``` - $ docker-machine ls - NAME ACTIVE DRIVER STATE URL SWARM - default * virtualbox Running tcp:////xxx.xxx.xx.xxx:xxxx - ``` - -6. Run some Docker commands to make sure that Docker Engine is also up-and-running. - - We'll run `docker run hello-world` again, but you could try `docker ps`, `docker run docker/whalesay cowsay boo`, or another command to verify that Docker is running. - - ``` - $ docker run hello-world - - Hello from Docker. - This message shows that your installation appears to be working correctly. - ... - ``` - -### Step 4. Use Machine to Create the Droplet - -1. Run `docker-machine create` with the `digitalocean` driver and pass your key to the `--digitalocean-access-token` flag, along with a name for the new cloud server. - - For this example, we'll call our new Droplet "docker-sandbox". - - ``` - $ docker-machine create --driver digitalocean --digitalocean-access-token xxxxx docker-sandbox - Running pre-create checks... - Creating machine... - (docker-sandbox) OUT | Creating SSH key... - (docker-sandbox) OUT | Creating Digital Ocean droplet... - (docker-sandbox) OUT | Waiting for IP address to be assigned to the Droplet... - Waiting for machine to be running, this may take a few minutes... - Machine is running, waiting for SSH to be available... - Detecting operating system of created instance... - Detecting the provisioner... - Provisioning created instance... - Copying certs to the local machine directory... - Copying certs to the remote machine... - Setting Docker configuration on the remote daemon... - To see how to connect Docker to this machine, run: docker-machine env docker-sandbox - ``` - - When the Droplet is created, Docker generates a unique SSH key and stores it on your local system in `~/.docker/machines`. Initially, this is used to provision the host. Later, it's used under the hood to access the Droplet directly with the `docker-machine ssh` command. Docker Engine is installed on the cloud server and the daemon is configured to accept remote connections over TCP using TLS for authentication. - -2. Go to the Digital Ocean console to view the new Droplet. - - ![Droplet in Digital Ocean created with Machine](../images/ocean_droplet.png) - -3. At the command terminal, run `docker-machine ls`. - - ``` - $ docker-machine ls - NAME ACTIVE DRIVER STATE URL SWARM - default * virtualbox Running tcp://192.168.99.100:2376 - docker-sandbox - digitalocean Running tcp://45.55.139.48:2376 - ``` - - Notice that the new cloud server is running but is not the active host. Our command shell is still connected to the default machine, which is currently the active host as indicated by the asterisk (*). - -4. Run `docker-machine env docker-sandbox` to get the environment commands for the new remote host, then run `eval` as directed to re-configure the shell to connect to `docker-sandbox`. - - ``` - $ docker-machine env docker-sandbox - export DOCKER_TLS_VERIFY="1" - export DOCKER_HOST="tcp://45.55.222.72:2376" - export DOCKER_CERT_PATH="/Users/victoriabialas/.docker/machine/machines/docker-sandbox" - export DOCKER_MACHINE_NAME="docker-sandbox" - # Run this command to configure your shell: - # eval "$(docker-machine env docker-sandbox)" - - $ eval "$(docker-machine env docker-sandbox)" - ``` - -5. Re-run `docker-machine ls` to verify that our new server is the active machine, as indicated by the asterisk (*) in the ACTIVE column. - - ``` - $ docker-machine ls - NAME ACTIVE DRIVER STATE URL SWARM - default - virtualbox Running tcp://192.168.99.100:2376 - docker-sandbox * digitalocean Running tcp://45.55.222.72:2376 - ``` - -6. Run some `docker-machine` commands to inspect the remote host. For example, `docker-machine ip ` gets the host IP address and `docker-machine inspect ` lists all the details. - - ``` - $ docker-machine ip docker-sandbox - 104.131.43.236 - - $ docker-machine inspect docker-sandbox - { - "ConfigVersion": 3, - "Driver": { - "IPAddress": "104.131.43.236", - "MachineName": "docker-sandbox", - "SSHUser": "root", - "SSHPort": 22, - "SSHKeyPath": "/Users/samanthastevens/.docker/machine/machines/docker-sandbox/id_rsa", - "StorePath": "/Users/samanthastevens/.docker/machine", - "SwarmMaster": false, - "SwarmHost": "tcp://0.0.0.0:3376", - "SwarmDiscovery": "", - ... - ``` - -7. Verify Docker Engine is installed correctly by running `docker` commands. - - Start with something basic like `docker run hello-world`, or for a more interesting test, run a Dockerized webserver on your new remote machine. - - In this example, the `-p` option is used to expose port 80 from the `nginx` container and make it accessible on port `8000` of the `docker-sandbox` host. - - ``` - $ docker run -d -p 8000:80 --name webserver kitematic/hello-world-nginx - Unable to find image 'kitematic/hello-world-nginx:latest' locally - latest: Pulling from kitematic/hello-world-nginx - a285d7f063ea: Pull complete - 2d7baf27389b: Pull complete - ... - Digest: sha256:ec0ca6dcb034916784c988b4f2432716e2e92b995ac606e080c7a54b52b87066 - Status: Downloaded newer image for kitematic/hello-world-nginx:latest - 942dfb4a0eaae75bf26c9785ade4ff47ceb2ec2a152be82b9d7960e8b5777e65 - ``` - - In a web browser, go to `http://:8000` to bring up the webserver home page. You got the `` from the output of the `docker-machine ip ` command you ran in a previous step. Use the port you exposed in the `docker run` command. - - ![nginx webserver](../images/nginx-webserver.png) - -#### Understand the defaults and options on the create command - -For convenience, `docker-machine` will use sensible defaults for choosing settings such as the image that the server is based on, but you override the defaults using the respective flags (e.g. `--digitalocean-image`). This is useful if, for example, you want to create a cloud server with a lot of memory and CPUs (by default `docker-machine` creates a small server). For a full list of the flags/settings available and their defaults, see the output of `docker-machine create -h` at the command line. See also Driver options and operating system defaults and information about the create command in the Docker Machine documentation. - - -### Step 5. Use Machine to remove the Droplet - -To remove a host and all of its containers and images, first stop the machine, then use `docker-machine rm`: - - $ docker-machine stop docker-sandbox - $ docker-machine rm docker-sandbox - Do you really want to remove "docker-sandbox"? (y/n): y - Successfully removed docker-sandbox - - $ docker-machine ls - NAME ACTIVE DRIVER STATE URL SWARM - default * virtualbox Running tcp:////xxx.xxx.xx.xxx:xxxx - -If you monitor the Digital Ocean console while you run these commands, you will see it update first to reflect that the Droplet was stopped, and then removed. - -If you create a host with Docker Machine, but remove it through the cloud provider console, Machine will lose track of the server status. So please use the `docker-machine rm` command for hosts you create with `docker-machine --create`. - -## Where to go next - -* [Docker Machine driver reference](/machine/drivers/) - -* [Docker Machine Overview](/machine/overview/) - -* [Use Docker Machine to provision hosts on cloud providers](/machine/get-started-cloud/) - -* [Install Docker Engine](../../installation/index.md) - -* [Docker User Guide](../../userguide/intro.md) \ No newline at end of file diff --git a/engine/installation/cloud/index.md b/engine/installation/cloud/index.md deleted file mode 100644 index ec63cbab43b..00000000000 --- a/engine/installation/cloud/index.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -description: Cloud Installations -keywords: Docker install -redirect_from: -- /engine/installation/amazon/ -- /engine/installation/google/ -- /engine/installation/softlayer/ -- /engine/installation/azure/ -- /engine/installation/rackspace/ -- /engine/installation/joyent/ -title: Install Engine on cloud hosts ---- - -* [Understand cloud install options and choose one](overview.md) -* [Example: Use Machine to provision cloud hosts](cloud-ex-machine-ocean.md) -* [Example: Manual install on a cloud provider](cloud-ex-aws.md) \ No newline at end of file diff --git a/engine/installation/cloud/overview.md b/engine/installation/cloud/overview.md deleted file mode 100644 index a945240151c..00000000000 --- a/engine/installation/cloud/overview.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -description: Installation instructions for Docker on cloud. -keywords: cloud, docker, machine, documentation, installation -redirect_from: -- /engine/installation/cloud/cloud/ -title: Choose an installation method ---- - -You can install Docker Engine on any cloud platform that runs an operating system (OS) that Docker supports. This includes many flavors and versions of Linux, along with Mac and Windows. - -You have two options for installing: - -* Manually install on the cloud (create cloud hosts, then install Docker Engine on them) -* Use Docker Machine to provision cloud hosts - -## Manually install Docker Engine on a cloud host - -To install on a cloud provider: - -1. Create an account with the cloud provider, and read cloud provider documentation to understand their process for creating hosts. - -2. Decide which OS you want to run on the cloud host. - -3. Understand the Docker prerequisites and install process for the chosen OS. See [Install Docker Engine](../index.md) for a list of supported systems and links to the install guides. - -4. Create a host with a Docker supported OS, and install Docker per the instructions for that OS. - -[Example (AWS): Manual install on a cloud provider](cloud-ex-aws.md) shows how to create an Amazon Web Services (AWS) EC2 instance, and install Docker Engine on it. - - -## Use Docker Machine to provision cloud hosts - -Docker Machine driver plugins are available for several popular cloud platforms, so you can use Machine to provision one or more Dockerized hosts on those platforms. - -With Docker Machine, you can use the same interface to create cloud hosts with Docker Engine on them, each configured per the options you specify. - -To do this, you use the `docker-machine create` command with the driver for the cloud provider, and provider-specific flags for account verification, security credentials, and other configuration details. - -[Example: Use Docker Machine to provision cloud hosts](cloud-ex-machine-ocean.md) walks you through the steps to set up Docker Machine and provision a Dockerized host on Digital Ocean). - -## Where to go next -* [Example: Manual install on a cloud provider](cloud-ex-aws.md) (AWS EC2) - -* [Example: Use Docker Machine to provision cloud hosts](cloud-ex-machine-ocean.md) (Digital Ocean) - -* For supported platforms, see [Install Docker Engine](../index.md). - -* To get started with Docker post-install, see [Docker User Guide](../../userguide/intro.md). \ No newline at end of file diff --git a/engine/installation/index.md b/engine/installation/index.md index db927e9a3bd..848476d6c4d 100644 --- a/engine/installation/index.md +++ b/engine/installation/index.md @@ -8,37 +8,53 @@ redirect_from: title: Install Docker Engine --- -Docker Engine is supported on Linux, Cloud, Windows, and macOS. Installation instructions are available for the following: +Docker Engine is supported on Linux, Cloud, Windows, and macOS. Installation +instructions are available for the following: ## On Linux -* [Arch Linux](linux/archlinux.md) * [CentOS](linux/centos.md) -* [CRUX Linux](linux/cruxlinux.md) * [Debian](linux/debian.md) * [Fedora](linux/fedora.md) -* [Gentoo](linux/gentoolinux.md) * [Oracle Linux](linux/oracle.md) -* [Raspbian](linux/raspbian.md) * [Red Hat Enterprise Linux](linux/rhel.md) * [openSUSE and SUSE Linux Enterprise](linux/SUSE.md) * [Ubuntu](linux/ubuntulinux.md) +* [Other Linux distributions](linux/other.md) -If your linux distribution is not listed above, don't give up yet. To try out Docker on a distribution that is not listed above, go here: [Installation from binaries](binaries.md). +If your linux distribution is not listed above, don't give up yet. To try out +Docker on a different Linux distribution, consider +[installing from binaries](binaries.md). + +## On macOS and Windows + +* [Docker for Mac](/docker-for-mac/) +* [Docker for Windows](/docker-for-windows/) ## On Cloud -* [Choose how to Install](cloud/overview.md) -* [Example: Manual install on a cloud provider](cloud/cloud-ex-aws.md) -* [Example: Use Docker Machine to provision cloud hosts](cloud/cloud-ex-machine-ocean.md) -## On macOS and Windows -* [macOS](mac.md) -* [Windows](windows.md) +You can use Docker Cloud to automatically provision and manage your cloud +instances: + +* [Amazon Web Services setup guide](/docker-cloud/infrastructure/link-aws.md) +* [DigitalOcean setup guide](/docker-cloud/infrastructure/link-do.md) +* [Microsoft Azure setup guide](/docker-cloud/infrastructure/link-azure.md) +* [Packet setup guide](/docker-cloud/infrastructure/link-packet.md) +* [SoftLayer setup guide](/docker-cloud/infrastructure/link-softlayer.md) +* [Use the Docker Cloud Agent to Bring your Own Host](/docker-cloud/infrastructure/byoh.md) + +You can also use our official Docker Editions if you'd like to manually manage +your cloud instances: + +* [Docker for AWS](/docker-for-aws/) +* [Docker for Azure](/docker-for-azure/) + +## Prior releases + +Instructions for installing prior releases of Docker can be found in the +[Docker archives](/docsarchive/). -## The Docker Archives -Instructions for installing prior releases of Docker can be found in the following docker archives: -[Docker v1.7](/v1.7/), [Docker v1.6](/v1.6/), [Docker v1.5](/v1.5/), and [Docker v1.4](/v1.4/). +## Get started -## Where to go after installing -* [About Docker Engine](../index.md) -* [Support](https://www.docker.com/support/) -* [Training](https://training.docker.com//) \ No newline at end of file +After setting up Docker, try learning the basics over at +[Getting started with Docker](/engine/getstarted/), then learn how to deploy +full-blown applications in our [app tutorial](/engine/getstarted-voting-app/). diff --git a/engine/installation/linux/SUSE.md b/engine/installation/linux/SUSE.md index 4c362827032..5b8c3f94ec1 100644 --- a/engine/installation/linux/SUSE.md +++ b/engine/installation/linux/SUSE.md @@ -1,112 +1,289 @@ --- -description: Installation instructions for Docker on openSUSE and on SUSE Linux Enterprise. -keywords: openSUSE, SUSE Linux Enterprise, SUSE, SLE, docker, documentation, installation +description: Instructions for installing Docker on OpenSUSE and SLES +keywords: Docker, Docker documentation, requirements, apt, installation, suse, opensuse, sles, rpm, install, uninstall, upgrade, update redirect_from: - /engine/installation/SUSE/ -title: Install Docker on openSUSE and SUSE Linux Enterprise +title: Get Docker for OpenSUSE and SLES --- -This page provides instructions for installing and configuring the latest -Docker Engine software on openSUSE and SUSE systems. - ->**Note:** You can also find bleeding edge Docker versions inside of the repositories maintained by the [Virtualization:containers project](https://build.opensuse.org/project/show/Virtualization:containers) on the [Open Build Service](https://build.opensuse.org/). This project delivers also other packages that are related with the Docker ecosystem (for example, Docker Compose). +To get started with Docker on OpenSUSE or SLES, make sure you +[meet the prerequisites](#prerequisites), then +[install Docker](#install-docker). ## Prerequisites -You must be running a 64 bit architecture. +### OS requirements + +To install Docker, you need the 64-bit version one of the following: + +- OpenSuSE Leap 42.x +- SLES 12.x + +### Remove unofficial Docker packages + +OpenSUSE's operating system repositories contain an older version of Docker, +with the package name `docker` instead of `docker-engine`. If you installed this +version of Docker on OpenSUSE or on SLES by using the OpenSUSE repositories, +remove it using the following command: + +```bash +$ sudo zypper rm docker +``` + +The contents of `/var/lib/docker` are not removed, so any images, containers, +or volumes you created using the older version of Docker are preserved. + +## Install Docker + +You can install Docker in different ways, depending on your needs: + +- Most users + [set up Docker's repositories](#install-using-the-repository) and install + from them, for ease of installation and upgrade tasks. This is the + recommended approach. + +- Some users download the RPM package and install it manually and manage + upgrades completely manually. + +- Some users cannot use third-party repositories, and must rely on the version + of Docker in the OpenSUSE or SLES repositories. This version of Docker may be + out of date. Those users should consult the OpenSuSE or SLES documentation and + not follow these procedures. + +### Install using the repository + +Before you install Docker for the first time on a new host machine, you need to +set up the Docker repository. Afterward, you can install, update, or downgrade +Docker from the repository. + +#### Set up the repository + +1. Verify and import Docker's public key, which is used to sign packages in + Docker's repository. + + First, verify that the fingerprint is `58118E89F3A912897C070ADBF76221572C52609D`: + + ```bash + $ curl -s https://yum.dockerproject.org/gpg | gpg --quiet --with-fingerprint + + pub 4096R/2C52609D 2015-07-14 + Key fingerprint = 5811 8E89 F3A9 1289 7C07 0ADB F762 2157 2C52 609D + uid Docker Release Tool (releasedocker) + ``` + + If the fingerprint matches, import the key: + + ```bash + $ sudo rpm --import https://yum.dockerproject.org/gpg + ``` + +2. Use the following command to set up the **stable** repository: + + ```bash + $ sudo zypper addrepo \ + https://yum.dockerproject.org/repo/main/opensuse/13.2/ \ + docker-main + ``` + +3. **Optional**: Enable the **testing** repository. You can enable it alongside + the stable repository. Do not use unstable repositories on on production + systems or for non-testing workloads. + + > **Warning**: If you have both stable and unstable repositories enabled, + > updating without specifying a version in the `zypper install` or + > `zypper update` command will always install the highest possible version, + > which will almost certainly be an unstable one. + + + ```bash + $ sudo zypper addrepo \ + https://yum.dockerproject.org/repo/testing/opensuse/13.2/ \ + docker-testing + ``` + + You can disable a repository at any time by running the `zypper rmrepo` + command. The following command disables the `testing` repository. + + ```bash + $ sudo zypper removerepo docker-testing + ``` + +#### Install Docker + +1. Update the `zypper` package index. + + ```bash + $ sudo zypper refresh + ``` + +2. Install the latest version of Docker, or go to the next step to install a + specific version. + + ```bash + $ sudo zypper install docker-engine + ``` + + > **Warning**: If you have both stable and unstable repositories enabled, + > installing or updating Docker without specifying a version in the + > `zypper install` or `zypper update` command will always install the highest + > available version, which will almost certainly be an unstable one. + + The RPM will install, but you will receive the following error during the + post-installation procedure, because Docker cannot start the service + automatically: + + ```none + Additional rpm output: + /var/tmp/rpm-tmp.YGySzA: line 1: fg: no job control + ``` + + Start Docker: + + ```bash + $ sudo service docker start + ``` + +3. On production systems, you should install a specific version of Docker + instead of always using the latest. List the available versions. The + following example only lists binary packages and is truncated. To also list + source packages, omit the `-t package` flag from the command. + + ```bash + $ zypper search -s --match-exact -t package docker-engine + + Loading repository data... + Reading installed packages... -## openSUSE + S | Name | Type | Version | Arch | Repository + --+---------------+---------+---------------------------------------+--------+--------------- + | docker-engine | package | 1.13.0-1 | x86_64 | docker-main + | docker-engine | package | 1.12.6-1 | x86_64 | docker-main + | docker-engine | package | 1.12.5-1 | x86_64 | docker-main + ``` -Docker is part of the official openSUSE repositories starting from 13.2. No -additional repository is required on your system. + The contents of the list depend upon which repositories you have enabled. + Choose a specific version to + install. The third column is the version string. The fifth column is the + repository name, which indicates which repository the package is from and by + extension its stability level. To install a specific version, append the + version string to the package name and separate them by a hyphen (`-`): -## SUSE Linux Enterprise + ```bash + $ sudo zypper install docker-engine- + ``` -Docker is officially supported on SUSE Linux Enterprise 12 and later. You can find the latest supported Docker packages inside the `Container` module. To enable this module, do the following: + The RPM will install, but you will receive the following error during the + post-installation procedure, because Docker cannot start the service + automatically: -1. Start YaST, and select *Software > Software Repositories*. -2. Click *Add* to open the add-on dialog. -3. Select *Extensions and Module from Registration Server* and click *Next*. -4. From the list of available extensions and modules, select *Container Module* and click *Next*. - The containers module and its repositories are added to your system. -5. If you use Subscription Management Tool, update the list of repositories at the SMT server. + ```none + Additional rpm output: + /var/tmp/rpm-tmp.YGySzA: line 1: fg: no job control + ``` -Otherwise execute the following command: + Start Docker: - $ sudo SUSEConnect -p sle-module-containers/12/x86_64 -r '' + ```bash + $ sudo service docker start + ``` -> **Note:** currently the `-r ''` flag is required to avoid a known limitation of `SUSEConnect`. +4. Verify that `docker` is installed correctly by running the `hello-world` + image. -The [Virtualization:containers project](https://build.opensuse.org/project/show/Virtualization:containers) -on the [Open Build Service](https://build.opensuse.org/) contains also bleeding -edge Docker packages for SUSE Linux Enterprise. However these packages are -**not supported** by SUSE. + ```bash + $ sudo docker run hello-world + ``` -### Install Docker + This command downloads a test image and runs it in a container. When the + container runs, it prints an informational message and exits. -1. Install the Docker package: +Docker is installed and running. You need to use `sudo` to run Docker commands. +Continue to [Linux postinstall](linux-postinstall.md) to allow non-privileged +users to run Docker commands and for other optional configuration steps. - $ sudo zypper in docker +#### Upgrade Docker -2. Start the Docker daemon. +To upgrade Docker, first run `sudo zypper refresh`, then follow the +[installation instructions](#install-docker), choosing the new version you want +to install. - $ sudo systemctl start docker +### Install from a package -3. Test the Docker installation. +If you cannot use Docker's repository to install Docker, you can download the +`.rpm` file for your release and install it manually. You will need to download +a new file each time you want to upgrade Docker. - $ sudo docker run hello-world +1. Go to [https://yum.dockerproject.org/repo/main/opensuse/13.2/Packages/](https://yum.dockerproject.org/repo/main/opensuse/13.2/Packages/) + and download the `.rpm` file for the Docker version you want to install. -## Configure Docker boot options + > **Note**: To install a testing version, change the word `main` in the + > URL to `testing`. Do not use unstable versions of Docker in production + > or for non-testing workloads. -You can use these steps on openSUSE or SUSE Linux Enterprise. To start the `docker daemon` at boot, set the following: +2. Install Docker, changing the path below to the path where you downloaded + the Docker package. - $ sudo systemctl enable docker + ```bash + $ sudo yum -y install /path/to/package.rpm + ``` -The `docker` package creates a new group named `docker`. Users, other than -`root` user, must be part of this group to interact with the -Docker daemon. You can add users with this command syntax: + The RPM will install, but you will receive the following error during the + post-installation procedure, because Docker cannot start the service + automatically: - sudo /usr/sbin/usermod -a -G docker + ```none + Additional rpm output: + /var/tmp/rpm-tmp.YGySzA: line 1: fg: no job control + ``` -Once you add a user, make sure they relog to pick up these new permissions. + Start Docker: -## Enable external network access + ```bash + $ sudo service docker start + ``` -If you want your containers to be able to access the external network, you must -enable the `net.ipv4.ip_forward` rule. To do this, use YaST. +3. Verify that `docker` is installed correctly by running the `hello-world` + image. -For openSUSE Tumbleweed and later, browse to the **System -> Network Settings -> Routing** menu. For SUSE Linux Enterprise 12 and previous openSUSE versions, browse to **Network Devices -> Network Settings -> Routing** menu (f) and check the *Enable IPv4 Forwarding* box. + ```bash + $ sudo docker run hello-world + ``` -When networking is handled by the Network Manager, instead of YaST you must edit -the `/etc/sysconfig/SuSEfirewall2` file needs by hand to ensure the `FW_ROUTE` -flag is set to `yes` like so: + This command downloads a test image and runs it in a container. When the + container runs, it prints an informational message and exits. - FW_ROUTE="yes" +Docker is installed and running. You need to use `sudo` to run Docker commands. +Continue to [Post-installation steps for Linux](linux-postinstall.md) to allow +non-privileged users to run Docker commands and for other optional configuration +steps. -## Custom daemon options +#### Upgrade Docker -If you need to add an HTTP Proxy, set a different directory or partition for the -Docker runtime files, or make other customizations, read the systemd article to -learn how to [customize your systemd Docker daemon options](../../admin/systemd.md). +To upgrade Docker, download the newer package file and repeat the +[installation procedure](#install-from-a-package), using `zypper update` +instead of `zypper install`, and pointing to the new file. -## Uninstallation +## Uninstall Docker -To uninstall the Docker package: +1. Uninstallation using `zypper rm` fails. Uninstall the Docker package using + the following command: - $ sudo zypper rm docker + ```bash + $ sudo rpm -e --noscripts docker-engine + ``` -The above command does not remove images, containers, volumes, or user created -configuration files on your host. If you wish to delete all images, containers, -and volumes run the following command: +2. Images, containers, volumes, or customized configuration files on your host + are not automatically removed. To delete all images, containers, and + volumes: - $ rm -rf /var/lib/docker + ```bash + $ sudo rm -rf /var/lib/docker + ``` -You must delete the user created configuration files manually. +You must delete any edited configuration files manually. -## Where to go from here +## Next steps -You can find more details about Docker on openSUSE or SUSE Linux Enterprise in the -[Docker quick start guide](https://www.suse.com/documentation/sles-12/dockerquick/data/dockerquick.html) -on the SUSE website. The document targets SUSE Linux Enterprise, but its contents apply also to openSUSE. +- Continue to [Post-installation steps for Linux](linux-postinstall.md) -Continue to the [User Guide](../../userguide/index.md). +- Continue with the [User Guide](../../userguide/index.md). diff --git a/engine/installation/linux/archlinux.md b/engine/installation/linux/archlinux.md index 5c4ec8a7112..03c0d16152a 100644 --- a/engine/installation/linux/archlinux.md +++ b/engine/installation/linux/archlinux.md @@ -98,4 +98,4 @@ and volumes run the following command: $ rm -rf /var/lib/docker -You must delete the user created configuration files manually. \ No newline at end of file +You must delete the user created configuration files manually. diff --git a/engine/installation/linux/centos.md b/engine/installation/linux/centos.md index 11e8445d7b9..02829684dae 100644 --- a/engine/installation/linux/centos.md +++ b/engine/installation/linux/centos.md @@ -1,235 +1,226 @@ --- description: Instructions for installing Docker on CentOS -keywords: Docker, Docker documentation, requirements, linux, centos, epel, docker.io, docker-io +keywords: Docker, Docker documentation, requirements, apt, installation, centos, rpm, install, uninstall, upgrade, update redirect_from: - /engine/installation/centos/ -title: Install Docker on CentOS +title: Get Docker for CentOS --- -Docker runs on CentOS 7.X. An installation on other binary compatible EL7 -distributions such as Scientific Linux might succeed, but Docker does not test -or support Docker on these distributions. - -These instructions install Docker using release packages and installation -mechanisms managed by Docker, to be sure that you get the latest version -of Docker. If you wish to install using CentOS-managed packages, consult -your CentOS release documentation. +To get started with Docker on CentOS, make sure you +[meet the prerequisites](#prerequisites), then +[install Docker](#install-docker). ## Prerequisites -Docker requires a 64-bit OS and version 3.10 or higher of the Linux kernel. +### OS requirements + +To install Docker, you need the 64-bit version of CentOS 7. -To check your current kernel version, open a terminal and use `uname -r` to -display your kernel version: +### Remove unofficial Docker packages + +Red Hat's operating system repositories contain an older version of Docker, with +the package name `docker` instead of `docker-engine`. If you installed this +version of Docker, remove it using the following command: ```bash -$ uname -r -3.10.0-229.el7.x86_64 +$ sudo yum -y remove docker ``` -Finally, it is recommended that you fully update your system. Keep in mind -that your system should be fully patched to fix any potential kernel bugs. -Any reported kernel bugs may have already been fixed on the latest kernel -packages. +The contents of `/var/lib/docker` are not removed, so any images, containers, +or volumes you created using the older version of Docker are preserved. -## Install Docker Engine +## Install Docker -There are two ways to install Docker Engine. You can [install using the `yum` -package manager](centos.md#install-with-yum). Or you can use `curl` with the [`get.docker.com` -site](centos.md#install-with-the-script). This second method runs an installation script -which also installs via the `yum` package manager. +You can install Docker in different ways, depending on your needs: -### Install with yum +- Most users + [set up Docker's repositories](#install-using-the-repository) and install + from them, for ease of installation and upgrade tasks. This is the + recommended approach. -1. Log into your machine as a user with `sudo` or `root` privileges. +- Some users download the RPM package and install it manually and manage + upgrades completely manually. -2. Make sure your existing packages are up-to-date. +- Some users cannot use third-party repositories, and must rely on the version + of Docker in the CentOS repositories. This version of Docker may be out of + date. Those users should consult the CentOS documentation and not follow these + procedures. - ```bash - $ sudo yum update - ``` +### Install using the repository -3. Add the `yum` repo. +Before you install Docker for the first time on a new host machine, you need to +set up the Docker repository. Afterward, you can install, update, or downgrade +Docker from the repository. - ```bash - $ sudo tee /etc/yum.repos.d/docker.repo <<-'EOF' - [dockerrepo] - name=Docker Repository - baseurl=https://yum.dockerproject.org/repo/main/centos/7/ - enabled=1 - gpgcheck=1 - gpgkey=https://yum.dockerproject.org/gpg - EOF - ``` +#### Set up the repository -4. Install the Docker package. +1. Use the following command to set up the **stable** repository: ```bash - $ sudo yum install docker-engine + $ sudo yum-config-manager \ + --add-repo \ + https://docs.docker.com/engine/installation/linux/repo_files/centos/docker.repo ``` -5. Enable the service. +2. **Optional**: Enable the **testing** repository. This repository is included + in the `docker.repo` file above but is disabled by default. You can enable + it alongside the stable repository. Do not use unstable repositories on + on production systems or for non-testing workloads. + + > **Warning**: If you have both stable and unstable repositories enabled, + > installing or updating without specifying a version in the `yum install` + > or `yum update` command will always install the highest possible version, + > which will almost certainly be an unstable one. ```bash - $ sudo systemctl enable docker.service + $ sudo yum-config-manager --set-enabled docker-testing ``` -6. Start the Docker daemon. + You can disable the `testing` repository by running the `yum-config-manager` + command with the `--set-disabled` flag. To re-enable it, use the + `--set-enabled` flag. The following command disables the `testing` + repository. ```bash - $ sudo systemctl start docker + $ sudo yum-config-manager --set-disabled docker-testing ``` -7. Verify `docker` is installed correctly by running a test image in a container. - - $ sudo docker run --rm hello-world - - Unable to find image 'hello-world:latest' locally - latest: Pulling from library/hello-world - c04b14da8d14: Pull complete - Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9 - Status: Downloaded newer image for hello-world:latest - - Hello from Docker! - This message shows that your installation appears to be working correctly. - - To generate this message, Docker took the following steps: - 1. The Docker client contacted the Docker daemon. - 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. - 3. The Docker daemon created a new container from that image which runs the - executable that produces the output you are currently reading. - 4. The Docker daemon streamed that output to the Docker client, which sent it - to your terminal. - - To try something more ambitious, you can run an Ubuntu container with: - $ docker run -it ubuntu bash - - Share images, automate workflows, and more with a free Docker Hub account: - https://hub.docker.com - - For more examples and ideas, visit: - https://docs.docker.com/engine/userguide/ - -If you need to add an HTTP Proxy, set a different directory or partition for the -Docker runtime files, or make other customizations, read our Systemd article to -learn how to [customize your Systemd Docker daemon options](../../admin/systemd.md). +#### Install Docker -### Install with the script - -1. Log into your machine as a user with `sudo` or `root` privileges. - -2. Make sure your existing packages are up-to-date. +1. Update the `yum` package index. ```bash - $ sudo yum update + $ sudo yum -y check-update ``` -3. Run the Docker installation script. +2. Install the latest version of Docker, or go to the next step to install a + specific version. ```bash - $ curl -fsSL https://get.docker.com/ | sh + $ sudo yum -y install docker-engine ``` - This script adds the `docker.repo` repository and installs Docker. + > **Warning**: If you have both stable and unstable repositories enabled, + > installing or updating Docker without specifying a version in the + > `yum install` or `yum upgrade` command will always install the highest + > available version, which will almost certainly be an unstable one. -4. Enable the service. +3. On production systems, you should install a specific version of Docker + instead of always using the latest. List the available versions. This + example uses the `sort -r` command to sort the results by version number, + highest to lowest, and is truncated. + + > **Note**: This `yum list` command only shows binary packages. To show + > source packages as well, omit the `.x86_64` from the package name. ```bash - $ sudo systemctl enable docker.service + $ yum list docker-engine.x86_64 --showduplicates |sort -r + + docker-engine.x86_64 1.13.0-1.el7 docker-main + docker-engine.x86_64 1.12.5-1.el7 docker-main + docker-engine.x86_64 1.12.4-1.el7 docker-main + docker-engine.x86_64 1.12.3-1.el7 docker-main ``` -5. Start the Docker daemon. + The contents of the list depend upon which repositories are enabled, and + will be specific to your version of CentOS (indicated by the `.el7` suffix + on the version, in this example). Choose a specific version to install. The + second column is the version string. The third column is the repository + name, which indicates which repository the package is from and by extension + its stability level. To install a specific version, append the version + string to the package name and separate them by a hyphen (`-`): ```bash - $ sudo systemctl start docker + $ sudo yum -y install docker-engine- ``` -6. Verify `docker` is installed correctly by running a test image in a container. + The Docker daemon starts automatically. + +4. Verify that `docker` is installed correctly by running the `hello-world` + image. ```bash - $ sudo docker run --rm hello-world + $ sudo docker run hello-world ``` -If you need to add an HTTP Proxy, set a different directory or partition for the -Docker runtime files, or make other customizations, read our Systemd article to -learn how to [customize your Systemd Docker daemon options](../../admin/systemd.md). - -## Create a docker group + This command downloads a test image and runs it in a container. When the + container runs, it prints an informational message and exits. -The `docker` daemon binds to a Unix socket instead of a TCP port. By default -that Unix socket is owned by the user `root` and other users can access it with -`sudo`. For this reason, `docker` daemon always runs as the `root` user. +Docker is installed and running. You need to use `sudo` to run Docker commands. +Continue to [Linux postinstall](linux-postinstall.md) to allow non-privileged +users to run Docker commands and for other optional configuration steps. -To avoid having to use `sudo` when you use the `docker` command, create a Unix -group called `docker` and add users to it. When the `docker` daemon starts, it -makes the ownership of the Unix socket read/writable by the `docker` group. +#### Upgrade Docker ->**Warning**: The `docker` group is equivalent to the `root` user; For details ->on how this impacts security in your system, see [*Docker Daemon Attack ->Surface*](../../security/security.md#docker-daemon-attack-surface) for details. +To upgrade Docker, first run `sudo dnf check-update`, then follow the +[installation instructions](#install-docker), choosing the new version you want +to install. -To create the `docker` group and add your user: +### Install from a package -1. Log into your machine as a user with `sudo` or `root` privileges. +If you cannot use Docker's repository to install Docker, you can download the +`.rpm` file for your release and install it manually. You will need to download +a new file each time you want to upgrade Docker. -2. Create the `docker` group. +1. Go to [https://yum.dockerproject.org/repo/main/centos/](https://yum.dockerproject.org/repo/main/centos/) + and choose the subdirectory for your CentOS version. Download the `.rpm` file + for the Docker version you want to install. - ```bash - $ sudo groupadd docker - ``` + > **Note**: To install a testing version, change the word `stable` in the + > URL to `testing`. Do not use unstable versions of Docker in production + > or for non-testing workloads. -3. Add your user to `docker` group. +2. Install Docker, changing the path below to the path where you downloaded + the Docker package. ```bash - $ sudo usermod -aG docker your_username + $ sudo yum -y install /path/to/package.rpm ``` -4. Log out and log back in. + The Docker daemon starts automatically. - This ensures your user is running with the correct permissions. - -5. Verify that your user is in the docker group by running `docker` without `sudo`. +3. Verify that `docker` is installed correctly by running the `hello-world` + image. ```bash - $ docker run --rm hello-world + $ sudo docker run hello-world ``` -## Start the docker daemon at boot + This command downloads a test image and runs it in a container. When the + container runs, it prints an informational message and exits. -Configure the Docker daemon to start automatically when the host starts: +Docker is installed and running. You need to use `sudo` to run Docker commands. +Continue to [Post-installation steps for Linux](linux-postinstall.md) to allow +non-privileged users to run Docker commands and for other optional configuration +steps. -```bash -$ sudo systemctl enable docker -``` +#### Upgrade Docker -## Uninstall +To upgrade Docker, download the newer package file and repeat the +[installation procedure](#install-from-a-package), using `yum -y upgrade` +instead of `yum -y install`, and pointing to the new file. -You can uninstall the Docker software with `yum`. -1. List the installed Docker packages. +## Uninstall Docker - ```bash - $ yum list installed | grep docker +1. Uninstall the Docker package: - docker-engine.x86_64 1.12.3-1.el7.centos @dockerrepo - docker-engine-selinux.noarch 1.12.3-1.el7.centos @dockerrepo + ```bash + $ sudo yum -y remove docker-engine ``` -2. Remove the package. +2. Images, containers, volumes, or customized configuration files on your host + are not automatically removed. To delete all images, containers, and + volumes: ```bash - $ sudo yum -y remove docker-engine.x86_64 - $ sudo yum -y remove docker-engine-selinux.noarch + $ sudo rm -rf /var/lib/docker ``` - This command does not remove images, containers, volumes, or user-created - configuration files on your host. - -3. To delete all images, containers, and volumes, run the following command: +You must delete any edited configuration files manually. - ```bash - $ rm -rf /var/lib/docker - ``` +## Next steps -4. Locate and delete any user-created configuration files. +- Continue to [Post-installation steps for Linux](linux-postinstall.md) +- Continue with the [User Guide](../../userguide/index.md). diff --git a/engine/installation/linux/cruxlinux.md b/engine/installation/linux/cruxlinux.md index 85600d87fc6..26681c2c5fd 100644 --- a/engine/installation/linux/cruxlinux.md +++ b/engine/installation/linux/cruxlinux.md @@ -84,4 +84,4 @@ If you have any issues please file a bug with the For support contact the [CRUX Mailing List](http://crux.nu/Main/MailingLists) or join CRUX's [IRC Channels](http://crux.nu/Main/IrcChannels). on the -[FreeNode](http://freenode.net/) IRC Network. \ No newline at end of file +[FreeNode](http://freenode.net/) IRC Network. diff --git a/engine/installation/linux/debian.md b/engine/installation/linux/debian.md index acba6693fe6..1ac661178ee 100644 --- a/engine/installation/linux/debian.md +++ b/engine/installation/linux/debian.md @@ -1,200 +1,261 @@ --- -description: Instructions for installing Docker on Debian. -keywords: Docker, Docker documentation, installation, debian +description: Instructions for installing Docker on Debian +keywords: Docker, Docker documentation, requirements, apt, installation, debian, install, uninstall, upgrade, update redirect_from: - /engine/installation/debian/ -title: Install Docker on Debian +title: Get Docker for Debian --- -Docker is supported on the following versions of Debian: - - - Debian testing stretch - - Debian 8.0 Jessie - - Debian 7.7 Wheezy (backports required) - - >**Note**: If you previously installed Docker using `APT`, make sure you update - your `APT` sources to the new `APT` repository. +To get started with Docker on Debian, make sure you +[meet the prerequisites](#prerequisites), then +[install Docker](#install-docker). ## Prerequisites - Docker requires a 64-bit installation regardless of your Debian version. - Additionally, your kernel must be 3.10 at minimum. The latest 3.10 minor - version or a newer maintained version are also acceptable. +### OS requirements - Kernels older than 3.10 lack some of the features required to run Docker - containers. These older versions are known to have bugs which cause data loss - and frequently panic under certain conditions. +To install Docker, you need the 64-bit version of one of these Debian versions: - To check your current kernel version, open a terminal and use `uname -r` to - display your kernel version: +- Stretch (testing) +- Jessie 8.0 (LTS) +- Wheezy 7.7 (LTS) - $ uname -r +#### Extra steps for Wheezy 7.7 - Additionally, for users of Debian Wheezy, backports must be available. To enable backports in Wheezy: +- You need at least version 3.10 of the Linux kernel. Debian Wheezy ships with + version 3.2, so you may need to + [update the kernel](https://wiki.debian.org/HowToUpgradeKernel){: target="_blank" class="_" }. + To check your kernel version: - 1. Log into your machine and open a terminal with `sudo` or `root` privileges. + ```bash + $ uname -r + ``` - 2. Open the `/etc/apt/sources.list.d/backports.list` file in your favorite editor. +- Enable the `backports` repository. See the + [Debian documentation](https://backports.debian.org/Instructions/){: target="_blank" class"_"}. - If the file doesn't exist, create it. +### Recommended extra packages - 3. Remove any existing entries. +You need `curl` if you don't have it. Unless you have a strong reason not to, +install the `linux-image-extra-*` packages, which allow Docker to use the `aufs` +storage drivers. **This applies to all versions of Debian**. - 4. Add an entry for backports on Debian Wheezy. +```bash +$ sudo apt-get update - An example entry: +$ sudo apt-get install curl \ + linux-image-extra-$(uname -r) \ + linux-image-extra-virtual +``` - deb http://http.debian.net/debian wheezy-backports main +## Install Docker - 5. Update package information: +You can install Docker in different ways, depending on your needs: - $ apt-get update +- Most users + [set up Docker's repositories](#install-using-the-repository) and install + from them, for ease of installation and upgrade tasks. This is the + recommended approach. -### Update your apt repository +- Some users download the DEB package and install it manually and manage + upgrades completely manually. -Docker's `APT` repository contains Docker 1.7.1 and higher. To set `APT` to use -from the new repository: +- Some users cannot use the official Docker repositories, and must rely on + the version of Docker that comes with their operating system. This version of + Docker may be out of date. Those users should consult their operating system + documentation and not follow these procedures. - 1. If you haven't already done so, log into your machine as a user with `sudo` or `root` privileges. +### Install using the repository - 2. Open a terminal window. +Before you install Docker for the first time on a new host machine, you need to +set up the Docker repository. Afterward, you can install, update, or downgrade +Docker from the repository. - 3. Purge any older repositories. +#### Set up the repository - $ sudo apt-get purge "lxc-docker*" - $ sudo apt-get purge "docker.io*" +1. Install packages to allow `apt` to use a repository over HTTPS: - 4. Update package information, ensure that APT works with the `https` method, and that CA certificates are installed. + **Jessie or Stretch**: - $ sudo apt-get update - $ sudo apt-get install apt-transport-https ca-certificates gnupg2 + ```bash + $ sudo apt-get install apt-transport-https \ + ca-certificates \ + software-properties-common + ``` - 5. Add the new `GPG` key. + **Wheezy**: - $ sudo apt-key adv \ - --keyserver hkp://ha.pool.sks-keyservers.net:80 \ - --recv-keys 58118E89F3A912897C070ADBF76221572C52609D + ```bash + $ sudo apt-get install apt-transport-https \ + ca-certificates \ + python-software-properties + ``` - 6. Open the `/etc/apt/sources.list.d/docker.list` file in your favorite editor. +2. Add Docker's official GPG key: - If the file doesn't exist, create it. + ```bash + $ curl -s http://yum.dockerproject.org/gpg | sudo apt-key add + ``` - 7. Remove any existing entries. + > **Note**: The URL is correct, even for Linux distributions that use `APT`. - 8. Add an entry for your Debian operating system. + Verify that the key ID is `58118E89F3A912897C070ADBF76221572C52609D`. - The possible entries are: + ```bash + $ apt-key fingerprint 58118E89F3A912897C070ADBF76221572C52609D - - On Debian Wheezy + pub 4096R/2C52609D 2015-07-14 + Key fingerprint = 5811 8E89 F3A9 1289 7C07 0ADB F762 2157 2C52 609D + uid Docker Release Tool (releasedocker) + ``` - deb https://apt.dockerproject.org/repo debian-wheezy main +3. Use the following command to set up the **stable** repository. To also + enable the **testing** repository, add the words `testing` after `main` on + the last line. + **Do not use these unstable repositories on production systems or for non-testing workloads.** - - On Debian Jessie + ```bash + $ sudo add-apt-repository \ + "deb https://apt.dockerproject.org/repo/pool/ \ + $(lsb_release -cs) \ + main" + ``` - deb https://apt.dockerproject.org/repo debian-jessie main + To disable the `testing` repository, you can edit `/etc/apt/sources.list` + and remove the word `testing` from the appropriate line in the file. - - On Debian Stretch/Sid +#### Install Docker - deb https://apt.dockerproject.org/repo debian-stretch main +1. Update the `apt` package index. - > **Note**: Docker does not provide packages for all architectures. To install docker on - > a multi-architecture system, add an `[arch=...]` clause to the entry. Refer to the - > [Debian Multiarch wiki](https://wiki.debian.org/Multiarch/HOWTO#Setting_up_apt_sources) - > for details. + ```bash + $ sudo apt-get update + ``` - 9. Save and close the file. +2. Install the latest version of Docker, or go to the next step to install a + specific version. Any existing installation of Docker is replaced. - 10. Update the `APT` package index. + Use this command to install the latest version of Docker: - $ sudo apt-get update + ```bash + $ sudo apt-get -y install docker-engine + ``` - 11. Verify that `APT` is pulling from the right repository. + > **Warning**: If you have both stable and unstable repositories enabled, + > updating to the latest version of Docker by not specifying a version in + > the `apt-get install` or `apt-get update` command will always install the + > highest possible version, which will almost certainly be an unstable one. - $ apt-cache policy docker-engine +3. On production systems, you should install a specific version of Docker + instead of always using the latest. This output is truncated. List the + available versions: - From now on when you run `apt-get upgrade`, `APT` pulls from the new apt repository. + ```bash + $ apt-cache madison docker-engine + docker-engine | 1.13.0-0~stretch | https://apt.dockerproject.org/repo debian-stretch/main amd64 Packages + docker-engine | 1.12.3-0~stretch | https://apt.dockerproject.org/repo debian-stretch/main amd64 Packages + docker-engine | 1.12.2-0~stretch | https://apt.dockerproject.org/repo debian-stretch/main amd64 Packages + docker-engine | 1.12.1-0~stretch | https://apt.dockerproject.org/repo debian-stretch/main amd64 Packages + ``` -## Install Docker + The contents of the list depend upon which repositories are enabled, + and will be specific to your version of Debian (indicated by the `stretch` + suffix on the version, in this example). Choose a specific version to + install. The second column is the version string. The third column is the + repository name, which indicates which repository the package is from and + by extension its stability level. To install a specific version, append the + version string to the package name and separate them by an equals sign (`=`): -Before installing Docker, make sure you have set your `APT` repository correctly as described in the prerequisites. + ```bash + $ sudo apt-get -y install docker-engine= + ``` -1. Update the `APT` package index. + The Docker daemon starts automatically. - $ sudo apt-get update +4. Verify that `docker` is installed correctly by running the `hello-world` + image. -2. Install Docker. + ```bash + $ sudo docker run hello-world + ``` - $ sudo apt-get install docker-engine + This command downloads a test image and runs it in a container. When the + container runs, it prints an informational message and exits. -3. Start the `docker` daemon. +Docker is installed and running. You need to use `sudo` to run Docker commands. +Continue to [Linux postinstall](linux-postinstall.md) to allow +non-privileged users to run Docker commands and for other optional configuration +steps. - $ sudo service docker start +#### Upgrade Docker -4. Verify `docker` is installed correctly. +To upgrade Docker, first run `sudo apt-get update`, then follow the +[installation instructions](#install-docker), choosing the new version you want +to install. - $ sudo docker run hello-world +### Install from a package - This command downloads a test image and runs it in a container. When the - container runs, it prints an informational message. Then, it exits. +If you cannot use Docker's repository to install Docker, you can download the +`.deb` file for your release and install it manually. You will need to download +a new file each time you want to upgrade Docker. +1. Go to [https://apt.dockerproject.org/repo/pool/main/d/docker-engine/](https://apt.dockerproject.org/repo/pool/main/d/docker-engine/) + and download the `.deb` file for the Docker version you want to install and + for your version of Debian. -## Giving non-root access + > **Note**: To install a testing version, change the word `main` in the + > URL to `testing`. Do not use unstable versions of Docker in production + > or for non-testing workloads. -The `docker` daemon always runs as the `root` user and the `docker` -daemon binds to a Unix socket instead of a TCP port. By default that -Unix socket is owned by the user `root`, and so, by default, you can -access it with `sudo`. +2. Install Docker, changing the path below to the path where you downloaded + the Docker package. -If you (or your Docker installer) create a Unix group called `docker` -and add users to it, then the `docker` daemon will make the ownership of -the Unix socket read/writable by the `docker` group when the daemon -starts. The `docker` daemon must always run as the root user, but if you -run the `docker` client as a user in the `docker` group then you don't -need to add `sudo` to all the client commands. From Docker 0.9.0 you can -use the `-G` flag to specify an alternative group. + ```bash + $ sudo dpkg -i /path/to/package.deb + ``` -> **Warning**: -> The `docker` group (or the group specified with the `-G` flag) is -> `root`-equivalent; see [*Docker Daemon Attack Surface*](../../security/security.md#docker-daemon-attack-surface) details. + The Docker daemon starts automatically. -**Example:** +3. Verify that `docker` is installed correctly by running the `hello-world` + image. - # Add the docker group if it doesn't already exist. - $ sudo groupadd docker + ```bash + $ sudo docker run hello-world + ``` - # Add the connected user "${USER}" to the docker group. - # Change the user name to match your preferred user. - # You may have to logout and log back in again for - # this to take effect. - $ sudo gpasswd -a ${USER} docker - - # Restart the Docker daemon. - $ sudo service docker restart + This command downloads a test image and runs it in a container. When the + container runs, it prints an informational message and exits. -## Upgrade Docker +Docker is installed and running. You need to use `sudo` to run Docker commands. +Continue to [Post-installation steps for Linux](linux-postinstall.md) to allow +non-privileged users to run Docker commands and for other optional configuration +steps. -To install the latest version of Docker with `apt-get`: +#### Upgrade Docker - $ sudo apt-get upgrade docker-engine +To upgrade Docker, download the newer package file and repeat the +[installation procedure](#install-from-a-package), pointing to the new file. -## Uninstall +## Uninstall Docker -To uninstall the Docker package: +1. Uninstall the Docker package: + ```bash $ sudo apt-get purge docker-engine + ``` -To uninstall the Docker package and dependencies that are no longer needed: - - $ sudo apt-get autoremove --purge docker-engine - -The above commands will not remove images, containers, volumes, or user created -configuration files on your host. If you wish to delete all images, containers, -and volumes run the following command: +2. Images, containers, volumes, or customized configuration files on your host + are not automatically removed. To delete all images, containers, and + volumes: + ```bash $ sudo rm -rf /var/lib/docker + ``` + +You must delete any edited configuration files manually. -You must delete the user created configuration files manually. +## Next steps -## What next? +- Continue to [Post-installation steps for Linux](linux-postinstall.md) -Continue with the [User Guide](../../userguide/index.md). +- Continue with the [User Guide](../../userguide/index.md). diff --git a/engine/installation/linux/fedora.md b/engine/installation/linux/fedora.md index c7c39ccb099..b29994b7ea7 100644 --- a/engine/installation/linux/fedora.md +++ b/engine/installation/linux/fedora.md @@ -1,251 +1,235 @@ --- -description: Instructions for installing Docker on Fedora. -keywords: Docker, Docker documentation, Fedora, requirements, linux +description: Instructions for installing Docker on Fedora +keywords: Docker, Docker documentation, requirements, apt, installation, fedora, rpm, install, uninstall, upgrade, update redirect_from: - /engine/installation/fedora/ -title: Install Docker on Fedora +title: Get Docker for Fedora --- -Docker is supported on Fedora version 22, 23, and 24. These instructions install -Docker using release packages and installation mechanisms managed by Docker, to -be sure that you get the latest version of Docker. If you wish to install using -Fedora-managed packages, consult your Fedora release documentation. +To get started with Docker on Fedora, make sure you +[meet the prerequisites](#prerequisites), then +[install Docker](#install-docker). ## Prerequisites -Docker requires a 64-bit OS and version 3.10 or higher of the Linux kernel. +### OS requirements -To check your current kernel version, open a terminal and use `uname -r` to -display your kernel version: +To install Docker, you need the 64-bit version of one of these Fedora versions: + +- 24 +- 25 + +### Remove unofficial Docker packages + +Fedora's operating system repositories contain an older version of Docker, with +the package name `docker` instead of `docker-engine`. If you installed this version +of Docker, remove it using the following command: ```bash -$ uname -r -3.19.5-100.fc21.x86_64 +$ sudo dnf -y remove docker ``` -If your kernel is at an older version, you must update it. +The contents of `/var/lib/docker` are not removed, so any images, containers, +or volumes you created using the older version of Docker are preserved. -Finally, it is recommended that you fully update your system. Keep in mind -that your system should be fully patched to fix any potential kernel bugs. -Any reported kernel bugs may have already been fixed on the latest kernel -packages. +## Install Docker -## Install Docker Engine +You can install Docker in different ways, depending on your needs: -There are two ways to install Docker Engine. You can [install using the `dnf` -package manager](fedora.md#install-with-dnf). Or you can use `curl` [with the `get.docker.com` -site](fedora.md#install-with-the-script). This second method runs an installation script -which also installs via the `dnf` package manager. +- Most users + [set up Docker's repositories](#install-using-the-repository) and install + from them, for ease of installation and upgrade tasks. This is the + recommended approach. -### Install with DNF +- Some users download the RPM package and install it manually and manage + upgrades completely manually. -1. Log into your machine as a user with `sudo` or `root` privileges. +- Some users cannot use third-party repositories, and must rely on the version + of Docker in the Fedora repositories. This version of Docker may be out of + date. Those users should consult the Fedora documentation and not follow these + procedures. -2. Make sure your existing packages are up-to-date. +### Install using the repository - ```bash - $ sudo dnf update - ``` +Before you install Docker for the first time on a new host machine, you need to +set up the Docker repository. Afterward, you can install, update, or downgrade +Docker from the repository. -3. Add the `yum` repo. +#### Set up the repository + +1. Install the `dnf-plugins.core` package which provides the commands to manage + your DNF repositories from the command line. ```bash - $ sudo tee /etc/yum.repos.d/docker.repo <<-'EOF' - [dockerrepo] - name=Docker Repository - baseurl=https://yum.dockerproject.org/repo/main/fedora/$releasever/ - enabled=1 - gpgcheck=1 - gpgkey=https://yum.dockerproject.org/gpg - EOF + $ sudo dnf -y install dnf-plugins-core ``` -4. Install the Docker package. +2. Use the following command to set up the **stable** repository: ```bash - $ sudo dnf install docker-engine + $ sudo dnf config-manager \ + --add-repo \ + https://docs.docker.com/engine/installation/linux/repo_files/fedora/docker.repo ``` -5. Enable the service. +3. **Optional**: Enable the **testing** repository. This repository is included + in the `docker.repo` file above but is disabled by default. You can enable + it alongside the stable repository. Do not use unstable repositories on + on production systems or for non-testing workloads. + + > **Warning**: If you have both stable and unstable repositories enabled, + > updating without specifying a version in the `dnf install` or `dnf update` + > command will always install the highest possible version, which will + > almost certainly be an unstable one. ```bash - $ sudo systemctl enable docker.service + $ sudo dnf config-manager --set-enabled docker-testing ``` -6. Start the Docker daemon. + You can disable the `testing` repository by running the `dnf config-manager` + command with the `--set-disabled` flag. To re-enable it, use the + `--set-enabled` flag The following command disables the `testing` + repository. ```bash - $ sudo systemctl start docker + $ sudo dnf config-manager --set-disabled docker-testing ``` -7. Verify `docker` is installed correctly by running a test image in a container. - - $ sudo docker run --rm hello-world - - Unable to find image 'hello-world:latest' locally - latest: Pulling from library/hello-world - c04b14da8d14: Pull complete - Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9 - Status: Downloaded newer image for hello-world:latest - - Hello from Docker! - This message shows that your installation appears to be working correctly. +#### Install Docker - To generate this message, Docker took the following steps: - 1. The Docker client contacted the Docker daemon. - 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. - 3. The Docker daemon created a new container from that image which runs the - executable that produces the output you are currently reading. - 4. The Docker daemon streamed that output to the Docker client, which sent it - to your terminal. - - To try something more ambitious, you can run an Ubuntu container with: - $ docker run -it ubuntu bash - - Share images, automate workflows, and more with a free Docker Hub account: - https://hub.docker.com - - For more examples and ideas, visit: - https://docs.docker.com/engine/userguide/ - -If you need to add an HTTP Proxy, set a different directory or partition for the -Docker runtime files, or make other customizations, read our Systemd article to -learn how to [customize your Systemd Docker daemon options](../../admin/systemd.md). - -### Install with the script - -You use the same installation procedure for all versions of Fedora. - -1. Log into your machine as a user with `sudo` or `root` privileges. - -2. Make sure your existing packages are up-to-date. +1. Update the `dnf` package index. ```bash - $ sudo dnf update + $ sudo dnf -y check-update ``` - -3. Run the Docker installation script. +2. Install the latest version of Docker, or go to the next step to install a + specific version. ```bash - $ curl -fsSL https://get.docker.com/ | sh + $ sudo dnf -y install docker-engine ``` - This script adds the `docker.repo` repository and installs Docker. + > **Warning**: If you have both stable and unstable repositories enabled, + > installing or updating without specifying a version in the `dnf install` + > or `dnf update` command will always install the highest possible version, + > which will almost certainly be an unstable one. -4. Enable the service. +3. On production systems, you should install a specific version of Docker + instead of always using the latest. List the available versions. + This example uses the `sort -r` command to sort the results by version + number, highest to lowest, and is truncated. + + > **Note**: This `dnf list` command only shows binary packages. To show + > source packages as well, omit the `.x86_64` from the package name. ```bash - $ sudo systemctl enable docker.service + $ dnf list docker-engine.x86_64 --showduplicates |sort -r + + docker-engine.x86_64 1.13.0-1.fc24 docker-main + docker-engine.x86_64 1.12.5-1.fc24 docker-main + docker-engine.x86_64 1.12.4-1.fc24 docker-main + docker-engine.x86_64 1.12.3-1.fc24 docker-main ``` -5. Start the Docker daemon. + The contents of the list depend upon which repositories are enabled, and + will be specific to your version of Fedora (indicated by the `.fc24` suffix + on the version, in this example). Choose a specific version to install. The + second column is the version string. The third column is the repository + name, which indicates which repository the package is from and by extension + its stability level. To install a specific version, append the version + string to the package name and separate them by a hyphen (`-`): ```bash - $ sudo systemctl start docker + $ sudo dnf -y install docker-engine- ``` -6. Verify `docker` is installed correctly by running a test image in a container. + The Docker daemon starts automatically. + +4. Verify that `docker` is installed correctly by running the `hello-world` + image. ```bash $ sudo docker run hello-world ``` -If you need to add an HTTP Proxy, set a different directory or partition for the -Docker runtime files, or make other customizations, read our Systemd article to -learn how to [customize your Systemd Docker daemon options](../../admin/systemd.md). + This command downloads a test image and runs it in a container. When the + container runs, it prints an informational message and exits. -## Create a docker group +Docker is installed and running. You need to use `sudo` to run Docker commands. +Continue to [Linux postinstall](linux-postinstall.md) to allow non-privileged +users to run Docker commands and for other optional configuration steps. -The `docker` daemon binds to a Unix socket instead of a TCP port. By default -that Unix socket is owned by the user `root` and other users can access it with -`sudo`. For this reason, `docker` daemon always runs as the `root` user. +#### Upgrade Docker -To avoid having to use `sudo` when you use the `docker` command, create a Unix -group called `docker` and add users to it. When the `docker` daemon starts, it -makes the ownership of the Unix socket read/writable by the `docker` group. +To upgrade Docker, first run `sudo dnf check-update`, then follow the +[installation instructions](#install-docker), choosing the new version you want +to install. ->**Warning**: The `docker` group is equivalent to the `root` user; For details ->on how this impacts security in your system, see [*Docker Daemon Attack ->Surface*](../../security/security.md#docker-daemon-attack-surface) for details. +### Install from a package -To create the `docker` group and add your user: +If you cannot use Docker's repository to install Docker, you can download the +`.rpm` file for your release and install it manually. You will need to download +a new file each time you want to upgrade Docker. -1. Log into your machine as a user with `sudo` or `root` privileges. +1. Go to [https://yum.dockerproject.org/repo/main/fedora/](https://yum.dockerproject.org/repo/main/fedora/) + and choose the subdirectory for your Fedora version. Download the `.rpm` + file for the Docker version you want to install. -2. Create the `docker` group. - - ```bash - $ sudo groupadd docker - ``` + > **Note**: To install a testing version, change the word `main` in the + > URL to `testing`. Do not use unstable versions of Docker in production + > or for non-testing workloads. -3. Add your user to `docker` group. +2. Install Docker, changing the path below to the path where you downloaded + the Docker package. ```bash - $ sudo usermod -aG docker your_username` + $ sudo dnf -y install /path/to/package.rpm ``` -4. Log out and log back in. - - This ensures your user is running with the correct permissions. + The Docker daemon starts automatically. -5. Verify that your user is in the docker group by running `docker` without `sudo`. +3. Verify that `docker` is installed correctly by running the `hello-world` + image. ```bash - $ docker run hello-world + $ sudo docker run hello-world ``` -## Start the docker daemon at boot + This command downloads a test image and runs it in a container. When the + container runs, it prints an informational message and exits. -Configure the Docker daemon to start automatically when the host starts: +Docker is installed and running. You need to use `sudo` to run Docker commands. +Continue to [Post-installation steps for Linux](linux-postinstall.md) to allow +non-privileged users to run Docker commands and for other optional configuration +steps. -```bash -$ sudo systemctl enable docker -``` +#### Upgrade Docker -## Running Docker with a manually-defined network +To upgrade Docker, download the newer package file and repeat the +[installation procedure](#install-from-a-package), using `dnf -y upgrade` +instead of `dnf -y install`, and pointing to the new file. -If you manually configure your network using `systemd-network` with `systemd` version 219 or higher, containers you start with Docker may be unable to access your network. -Beginning with version 220, the forwarding setting for a given network (`net.ipv4.conf..forwarding`) defaults to *off*. This setting prevents IP forwarding. It also conflicts with Docker which enables the `net.ipv4.conf.all.forwarding` setting within a container. -To work around this, edit the `.network` file in -`/usr/lib/systemd/network/` on your Docker host (ex: `/usr/lib/systemd/network/80-container-host0.network`) add the following block: +## Uninstall Docker -``` -[Network] -... -IPForward=kernel -# OR -IPForward=true -... -``` - -This configuration allows IP forwarding from the container as expected. - -## Uninstall - -You can uninstall the Docker software with `dnf`. - -1. List the installed Docker packages. +1. Uninstall the Docker package: ```bash - $ dnf list installed | grep docker - - docker-engine.x86_64 1.7.1-0.1.fc21 @/docker-engine-1.7.1-0.1.fc21.el7.x86_64 + $ sudo dnf -y remove docker-engine ``` -2. Remove the package. +2. Images, containers, volumes, or customized configuration files on your host + are not automatically removed. To delete all images, containers, and + volumes: ```bash - $ sudo dnf -y remove docker-engine.x86_64 + $ sudo rm -rf /var/lib/docker ``` - This command does not remove images, containers, volumes, or user-created - configuration files on your host. +You must delete any edited configuration files manually. -3. To delete all images, containers, and volumes, run the following command: +## Next steps - ```bash - $ rm -rf /var/lib/docker - ``` +- Continue to [Post-installation steps for Linux](linux-postinstall.md) -4. Locate and delete any user-created configuration files. \ No newline at end of file +- Continue with the [User Guide](../../userguide/index.md). diff --git a/engine/installation/linux/gentoolinux.md b/engine/installation/linux/gentoolinux.md index 83b9fc462ea..277a4b341ff 100644 --- a/engine/installation/linux/gentoolinux.md +++ b/engine/installation/linux/gentoolinux.md @@ -114,4 +114,4 @@ and volumes run the following command: $ rm -rf /var/lib/docker -You must delete the user created configuration files manually. \ No newline at end of file +You must delete the user created configuration files manually. diff --git a/engine/installation/linux/linux-postinstall.md b/engine/installation/linux/linux-postinstall.md new file mode 100644 index 00000000000..c9806dfb888 --- /dev/null +++ b/engine/installation/linux/linux-postinstall.md @@ -0,0 +1,405 @@ +--- +description: Optional post-installation steps for Linux +keywords: Docker, Docker documentation, requirements, apt, installation, ubuntu, install, uninstall, upgrade, update +title: Post-installation steps for Linux +--- + + +This section contains optional procedures for configuring Linux hosts to work +better with Docker. + +* [Manage Docker as a non-root user](#manage-docker-as-a-non-root-user) +* [Configure Docker to start on boot](#configure-docker-to-start-on-boot) +* [Allow access to the remote API through a firewall](#allow-access-to-the-remote-api-through-a-firewall) +* [Troubleshooting](#troubleshooting) + +## Manage Docker as a non-root user + +The `docker` daemon binds to a Unix socket instead of a TCP port. By default +that Unix socket is owned by the user `root` and other users can only access it +using `sudo`. The `docker` daemon always runs as the `root` user. + +If you don't want to use `sudo` when you use the `docker` command, create a Unix +group called `docker` and add users to it. When the `docker` daemon starts, it +makes the ownership of the Unix socket read/writable by the `docker` group. + +> **Warning**: The `docker` group grants privileges equivalent to the `root` +> user. For details on how this impacts security in your system, see +> [*Docker Daemon Attack Surface*](../../security/security.md#docker-daemon-attack-surface). + +To create the `docker` group and add your user: + +1. Create the `docker` group. + ```bash + $ sudo groupadd docker + ``` + +2. Add your user to the `docker` group. + + ```bash + $ sudo usermod -aG docker $USER + ``` + +3. Log out and log back in so that your group membership is re-evaluated. + +4. Verify that you can `docker` commands without `sudo`. + + ```bash + $ docker run hello-world + ``` + + This command downloads a test image and runs it in a container. When the + container runs, it prints an informational message and exits. + +## Configure Docker to start on boot + +Most current Linux distributions (RHEL, CentOS, Fedora, Ubuntu 16.04 and higher) +use [`systemd`](#systemd) to manage which services start when the system boots. +Ubuntu 14.10 and below use [`upstart`](#upstart). Oracle Linux 6 uses +`chkconfig`. + +### `systemd` + +```bash +$ sudo systemctl enable docker +``` + +To disable this behavior, use `disable` instead. + +```bash +$ sudo systemctl disable docker +``` + +If you need to add an HTTP Proxy, set a different directory or partition for the +Docker runtime files, or make other customizations, see +[customize your systemd Docker daemon options](../../admin/systemd.md). + +### `upstart` + +Docker is automatically configured to start on boot using +`upstart`. To disable this behavior, use the following command: + +```bash +$ echo manual | sudo tee /etc/init/docker.override +``` + +### `chkconfig` + +```bash +$ sudo chkconfig docker on +``` + +## Use a different storage engine + +For information about the different storage engines, see +[Storage drivers](../userguide/storagedriver/index.md). The default storage +engine and the list of supported storage engines depend on your host's +Linux distribution and available kernel drivers. + +## Troubleshooting + +### `Cannot connect to the Docker daemon` + +If you see an error such as the following, your Docker client may be configured +to connect to a Docker daemon on a different host, and that host may not be +reachable. + +```none +Cannot connect to the Docker daemon. Is 'docker daemon' running on this host? +``` + +To see which host your client is configured to connect to, check the value of +the `DOCKER_HOST` variable in your environment. + + +```bash +$ env | grep DOCKER_HOST +``` + +If this command returns a value, the Docker client is set to connect to a +Docker daemon running on that host. If it is unset, the Docker client is set to +connect to the Docker daemon running on the local host. If it is set in error, +use the following command to unset it: + + +```bash +$ unset DOCKER_HOST +``` + +You may need to edit your environment in files such as `~/.bashrc` or +`~/.profile` to prevent the `DOCKER_HOST` variable from being set +erroneously. + +If `DOCKER_HOST` is set as intended, verify that the Docker daemon is running +on the remote host and that a firewall or network outage is not preventing you +from connecting. + +### IP forwarding problems + +If you manually configure your network using `systemd-network` with `systemd` +version 219 or higher, Docker containers may be unable to access your network. +Beginning with `systemd` version 220, the forwarding setting for a given network +(`net.ipv4.conf..forwarding`) defaults to *off*. This setting +prevents IP forwarding. It also conflicts with Docker's behavior of enabling +the `net.ipv4.conf.all.forwarding` setting within containers. + +To work around this on RHEL, CentOS, or Fedora, edit the `.network` +file in `/usr/lib/systemd/network/` on your Docker host +(ex: `/usr/lib/systemd/network/80-container-host0.network`) and add the +following block within the `[Network]` section. + +``` +[Network] +... +IPForward=kernel +# OR +IPForward=true +... +``` + +This configuration allows IP forwarding from the container as expected. + + +### `DNS resolver found in resolv.conf and containers can't use it` + +Linux systems which use a GUI often have a network manager running, which uses a +`dnsmasq` instance running on a loopback address such as `127.0.0.1` or +`127.0.1.1` to cache DNS requests, and adds this entry to +`/etc/resolv.conf`. The `dnsmasq` service speeds up +DNS look-ups and also provides DHCP services. This configuration will not work +within a Docker container which has its own network namespace, because +the Docker container resolves loopback addresses such as `127.0.0.1` to +**itself**, and it is very unlikely to be running a DNS server on its own +loopback address. + +If Docker detects that no DNS server referenced in `/etc/resolv.conf` is a fully +functional DNS server, the following warning occurs and Docker uses the public +DNS servers provided by Google at `8.8.8.8` and `8.8.4.4` for DNS resolution. + +```none +WARNING: Local (127.0.0.1) DNS resolver found in resolv.conf and containers +can't use it. Using default external servers : [8.8.8.8 8.8.4.4] +``` + +If you see this warning, first check to see if you use `dnsmasq`: + +```bash +$ ps aux |grep dnsmasq +``` + +If your container needs to resolve hosts which are internal to your network, the +public nameservers will not be adequate. You have two choices: + +- You can specify a DNS server for Docker to use, **or** +- You can disable `dnsmasq` in NetworkManager. If you do this, NetworkManager + will add your true DNS nameserver to `/etc/resolv.conf`, but you will lose the + possible benefits of `dnsmasq`. + +**You only need to use one of these methods.** + +### Specify DNS servers for Docker + +The default location of the configuration file is `/etc/docker/daemon.json`. You +can change the location of the configuration file using the `--config-file` +daemon flag. The documentation below assumes the configuration file is located +at `/etc/docker/daemon.json`. + +1. . Create or edit the Docker daemon configuration file, which defaults to + `/etc/docker/daemon.json` file, which controls the Docker daemon + configuration. + + ```bash + sudo nano /etc/docker/daemon.json + ``` + +2. Add a `dns` key with one or more IP addresses as values. If the file has + existing contents, you only need to add or edit the `dns` line. + ```json + { + "dns": ["8.8.8.8", "8.8.4.4"] + } + ``` + + If your internal DNS server cannot resolve public IP addresses, include at + least one DNS server which can, so that you can connect to Docker Hub and so + that your containers can resolve internet domain names. + + Save and close the file. + +3. Restart the Docker daemon. + + ```bash + $ sudo service docker restart + ``` + +4. Verify that Docker can resolve external IP addresses by trying to pull an + image: + + ```bash + $ docker pull hello-world + ``` + +5. If necessary, verify that Docker containers can resolve an internal hostname + by pinging it. + + ```bash + $ docker run --rm -it alpine ping -c4 + + PING google.com (192.168.1.2): 56 data bytes + 64 bytes from 192.168.1.2: seq=0 ttl=41 time=7.597 ms + 64 bytes from 192.168.1.2: seq=1 ttl=41 time=7.635 ms + 64 bytes from 192.168.1.2: seq=2 ttl=41 time=7.660 ms + 64 bytes from 192.168.1.2: seq=3 ttl=41 time=7.677 ms + ``` + +#### Disable `dnsmasq` + +##### Ubuntu + +If you prefer not to change the Docker daemon's configuration to use a specific +IP address, follow these instructions to disable `dnsmasq` in NetworkManager. + +1. Edit the `/etc/NetworkManager/NetworkManager.conf` file. + +2. Comment out the `dns=dnsmasq` line by adding a `#` character to the beginning + of the line. + + ```none + # dns=dnsmasq + ``` + + Save and close the file. + +4. Restart both NetworkManager and Docker. As an alternative, you can reboot + your system. + + ```bash + $ sudo restart network-manager + $ sudo restart docker + ``` + +##### RHEL, CentOS, or Fedora + +To disable `dnsmasq` on RHEL, CentOS, or Fedora: + +1. Disable the `dnsmasq` service: + + ```bash + $ sudo service dnsmasq stop + + $ sudo systemctl disable dnsmasq + ``` + +2. Configure the DNS servers manually using the + [Red Hat documentation](https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/s1-networkscripts-interfaces.html){ :target="_blank" class="_"}. + +### Allow access to the remote API through a firewall + +If you run a firewall on the same host as you run Docker and you want to access +the Docker Remote API from another host and remote access is enabled, you need +to configure your firewall to allow incoming connections on the Docker port, +which defaults to `2376` if TLS encrypted transport is enabled or `2375` +otherwise. + +#### Specific instructions for UFW + +[UFW (Uncomplicated Firewall)](https://help.ubuntu.com/community/UFW) drops all +forwarding traffic and all incoming traffic by default. If you want to access +the Docker Remote API from another host and you have enabled remote access, you +need to configure UFW to allow incoming connections on the Docker port, which +defaults to `2376` if TLS encrypted transport is enabled or `2375` otherwise. By +default, Docker runs **without** TLS enabled. If you do not use TLS, you are +strongly discouraged from allowing access to the Docker Remote API from remote +hosts, to prevent remote privilege-escalation attacks. + +To configure UFW and allow incoming connections on the Docker port: + +1. Verify that UFW is enabled. + + ```bash + $ sudo ufw status + ``` + + If `ufw` is not enabled, the remaining steps will not be helpful. + +2. Edit the UFW configuration file, which is usually `/etc/default/ufw` or +`/etc/sysconfig/ufw`. Set the `DEFAULT_FORWARD_POLICY` policy to `ACCEPT`. + + ```none + DEFAULT_FORWARD_POLICY="ACCEPT" + ``` + + Save and close the file. + +3. If you need to enable access to the Docker Remote API from external hosts + and understand the security implications (see the section before this + procedure), then configure UFW to allow incoming connections on the Docker port, + which is 2375 if you do not use TLS, and 2376 if you do. + + ```bash + $ sudo ufw allow 2376/tcp + ``` + +4. Reload UFW. + ```bash + $ sudo ufw reload + ``` + +### `Your kernel does not support cgroup swap limit capabilities` + +You may see messages similar to the following when working with an image: + +```none +WARNING: Your kernel does not support swap limit capabilities. Limitation discarded. +``` + +If you don't need these capabilities, you can ignore the warning. You can +enable these capabilities in your kernel by following these instructions. Memory +and swap accounting incur an overhead of about 1% of the total available +memory and a 10% overall performance degradation, even if Docker is not running. + +1. Log into Ubuntu as a user with `sudo` privileges. + +2. Edit the `/etc/default/grub` file. + +3. Add or edit the `GRUB_CMDLINE_LINUX` line to add the following two key-value + pairs: + + ```none + GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1" + ``` + + Save and close the file. + +4. Update GRUB. + + ```bash + $ sudo update-grub + ``` + + If your GRUB configuration file has incorrect syntax, an error will occur. + In this case, steps 3 and 4. + +6. Reboot your system. Memory and swap accounting are enabled and the warning + does not occur. + + +### Troubleshooting Oracle Linux + +#### Docker unmounts `btrfs` filesystem on shutdown + +If you're running Docker using the `btrfs` storage engine and you stop the Docker +service, it unmounts the `btrfs` filesystem during the shutdown process. Ensure +that the filesystem is mounted properly before restarting the Docker service. + +On Oracle Linux 7, you can use a `systemd.mount` definition and modify the +Docker `systemd.service` to depend on the `btrfs` mount defined in `systemd`. + +#### SElinux support on Oracle Linux 7 + +SElinux must be set to `Permissive` or `Disabled` in `/etc/sysconfig/selinux` to +use the `btrfs` storage engine on Oracle Linux 7. + +## Next steps + +- Continue with the [User Guide](../../userguide/index.md). diff --git a/engine/installation/linux/oracle.md b/engine/installation/linux/oracle.md index 7ff26e51752..15a86304485 100644 --- a/engine/installation/linux/oracle.md +++ b/engine/installation/linux/oracle.md @@ -1,204 +1,304 @@ --- -description: Installation instructions for Docker on Oracle Linux. -keywords: Docker, Docker documentation, requirements, linux, rhel, centos, oracle, ol +description: Instructions for installing Docker on Oracle Linux +keywords: Docker, Docker documentation, requirements, installation, oracle, ol, rpm, install, uninstall, upgrade, update redirect_from: - /engine/installation/oracle/ -title: Install Docker on Oracle Linux +title: Get Docker for Oracle Linux --- -Docker is supported on Oracle Linux 6 and 7. You do not require an Oracle Linux -Support subscription to install Docker on Oracle Linux. +To get started with Docker on Oracle Linux, make sure you +[meet the prerequisites](#prerequisites), then +[install Docker](#install-docker). ## Prerequisites -Due to current Docker limitations, Docker is only able to run only on the x86_64 -architecture. Docker requires the use of the Unbreakable Enterprise Kernel -Release 4 (4.1.12) or higher on Oracle Linux. This kernel supports the Docker -btrfs storage engine on both Oracle Linux 6 and 7. +### OS requirements -## Install +To install Docker, you need the 64-bit version of Oracle Linux 6 or 7. +To use `btrfs`, you need to install the Unbreakable Enterprise Kernel (UEK) +version 4.1.12 or higher. running the Unbreakable Enterprise Kernel Release 4 +(4.1.12) or higher. For Oracle Linux 6, you need to enable extra repositories +to install UEK4. See +[Obtaining and installing the UEK packages](https://docs.oracle.com/cd/E37670_01/E37355/html/ol_obtain_uek.html){: target="_blank" class="_" }. -> **Note**: The procedure below installs binaries built by Docker. These binaries -> are not covered by Oracle Linux support. To ensure Oracle Linux support, please -> follow the installation instructions provided in the -> [Oracle Linux documentation](https://docs.oracle.com/en/operating-systems/?tab=2). -> -> The installation instructions for Oracle Linux 6 and 7 can be found in [Chapter 2 of -> the Docker User's Guide](https://docs.oracle.com/cd/E52668_01/E75728/html/docker_install_upgrade.html) +### Remove unofficial Docker packages +Oracle's repositories contain an older version of Docker, with the package name +`docker` instead of `docker-engine`. If you installed this version of Docker, +remove it using the following command: -1. Log into your machine as a user with `sudo` or `root` privileges. +```bash +$ sudo yum -y remove docker +``` -2. Make sure your existing yum packages are up-to-date. +The contents of `/var/lib/docker` are not removed, so any images, containers, +or volumes you created using the older version of Docker are preserved. - $ sudo yum update +## Install Docker -3. Add the yum repo yourself. +You can install Docker in different ways, depending on your needs: - For version 6: +- Most users + [set up the official Docker repositories](#install-using-the-repository) and + install from them, for ease of installation and upgrade tasks. This is the + recommended approach. - $ sudo tee /etc/yum.repos.d/docker.repo <<-EOF - [dockerrepo] - name=Docker Repository - baseurl=https://yum.dockerproject.org/repo/main/oraclelinux/6 - enabled=1 - gpgcheck=1 - gpgkey=https://yum.dockerproject.org/gpg - EOF +- Some users download the RPM package and install it manually and manage + upgrades completely manually. - For version 7: +- Some users cannot use third-party repositories, and must rely on + the version of Docker in the Oracle repositories. This version of Docker may + be out of date. Those users should consult the Oracle documentation and not + follow these procedures. - $ cat >/etc/yum.repos.d/docker.repo <<-EOF - [dockerrepo] - name=Docker Repository - baseurl=https://yum.dockerproject.org/repo/main/oraclelinux/7 - enabled=1 - gpgcheck=1 - gpgkey=https://yum.dockerproject.org/gpg - EOF +### Install using the repository -4. Install the Docker package. +Before you install Docker for the first time on a new host machine, you need to +set up the Docker repository. Afterward, you can install, update, or downgrade +Docker from the repository. - $ sudo yum install docker-engine +#### Set up the repository -5. Start the Docker daemon. +1. Install the `yum-utils` plugin, which provides the `yum-config-manager` + plugin. - On Oracle Linux 6: + ```bash + $ sudo yum install -y yum-utils + ``` - $ sudo service docker start +2. Use one of the following commands to set up the **stable** repository, + depending on your version of Oracle Linux: - On Oracle Linux 7: + **Oracle Linux 7**: - $ sudo systemctl start docker.service + ```bash + $ sudo yum-config-manager \ + --add-repo \ + https://docs.docker.com/engine/installation/linux/repo_files/oracle/docker-ol7.repo + ``` -6. Verify `docker` is installed correctly by running a test image in a container. + **Oracle Linux 6**: - $ sudo docker run hello-world + ```bash + $ sudo yum-config-manager \ + --add-repo \ + https://docs.docker.com/engine/installation/linux/repo_files/oracle/docker-ol6.repo + ``` -## Optional configurations +3. **Optional**: Enable the **testing** repository. This repository is included + in the `docker.repo` file above but is disabled by default. You can enable + it alongside the stable repository. Do not use unstable repositories on + on production systems or for non-testing workloads. -This section contains optional procedures for configuring your Oracle Linux to work -better with Docker. + > **Warning**: If you have both stable and unstable repositories enabled, + > installing or updating without specifying a version in the `yum install` + > or `yum update` command will always install the highest possible version, + > which will almost certainly be an unstable one. -* [Create a docker group](oracle.md#create-a-docker-group) -* [Configure Docker to start on boot](oracle.md#configure-docker-to-start-on-boot) -* [Use the btrfs storage engine](oracle.md#use-the-btrfs-storage-engine) + ```bash + $ sudo yum-config-manager --enablerepo docker-testing + ``` -### Create a Docker group + You can disable the `testing` repository by running the `yum-config-manager` + command with the `--disablerepo` flag. To re-enable it, use the + `--set-enabled` flag. The following command disables the `testing` + repository. -The `docker` daemon binds to a Unix socket instead of a TCP port. By default -that Unix socket is owned by the user `root` and other users can access it with -`sudo`. For this reason, `docker` daemon always runs as the `root` user. + ```bash + $ sudo yum-config-manager --disablerepo docker-testing + ``` -To avoid having to use `sudo` when you use the `docker` command, create a Unix -group called `docker` and add users to it. When the `docker` daemon starts, it -makes the ownership of the Unix socket read/writable by the `docker` group. +#### Install Docker ->**Warning**: The `docker` group is equivalent to the `root` user; For details ->on how this impacts security in your system, see [*Docker Daemon Attack ->Surface*](../../security/security.md#docker-daemon-attack-surface) for details. +1. Update the `yum` package index. -To create the `docker` group and add your user: + ```bash + $ sudo yum -y check-update + ``` -1. Log into Oracle Linux as a user with `sudo` privileges. +2. Verify and import Docker's public key, which is used to sign packages in + Docker's repository. -2. Create the `docker` group. + First, verify that the fingerprint is `58118E89F3A912897C070ADBF76221572C52609D`: - $ sudo groupadd docker + ```bash + $ curl -s https://yum.dockerproject.org/gpg | gpg --quiet --with-fingerprint -3. Add your user to `docker` group. + pub 4096R/2C52609D 2015-07-14 + Key fingerprint = 5811 8E89 F3A9 1289 7C07 0ADB F762 2157 2C52 609D + uid Docker Release Tool (releasedocker) + ``` - $ sudo usermod -aG docker username + If the fingerprint matches, import the key: -4. Log out and log back in. + ```bash + $ sudo rpm --import https://yum.dockerproject.org/gpg + ``` - This ensures your user is running with the correct permissions. +3. Install the latest version of Docker, or go to the next step to install a + specific version. -5. Verify your work by running `docker` without `sudo`. + ```bash + $ sudo yum -y install docker-engine + ``` - $ docker run hello-world + > **Warning**: If you have both stable and unstable repositories enabled, + > installing or updating Docker without specifying a version in the + > `yum install` or `yum upgrade` command will always install the highest + > available version, which will almost certainly be an unstable one. - If this fails with a message similar to this: +4. On production systems, you should install a specific version of Docker + instead of always using the latest. List the available versions. + This example uses the `sort -r` command to sort the results by version + number, highest to lowest. The output is truncated. - Cannot connect to the Docker daemon. Is 'docker daemon' running on this host? + > **Note**: This `yum list` command only shows binary packages. To show + > source packages as well, omit the `.x86_64` from the package name. - Check that the `DOCKER_HOST` environment variable is not set for your shell. - If it is, unset it. + ```bash + $ yum list docker-engine.x86_64 --showduplicates |sort -nr -### Configure Docker to start on boot + docker-engine.x86_64 1.13.0-1.el6 docker-main + docker-engine.x86_64 1.12.3-1.el6 docker-main + docker-engine.x86_64 1.12.2-1.el6 docker-main + docker-engine.x86_64 1.12.1-1.el6 docker-main + ``` -You can configure the Docker daemon to start automatically at boot. + The contents of the list depend upon which repositories you have enabled, + and will be specific to your version of Oracle Linux (indicated by the + `.el7` suffix on the version, in this example). Choose a specific version to + install. The second column is the version string. The third column is the + repository name, which indicates which repository the package is from and by + extension extension its stability level. To install a specific version, + append the version string to the package name and separate them by a hyphen + (`-`): -On Oracle Linux 6: + ```bash + $ sudo yum -y install docker-engine- + ``` -``` -$ sudo chkconfig docker on -``` + The Docker daemon does not start automatically. -On Oracle Linux 7: +5. Start the Docker daemon. Use `systemctl` on Oracle Linux 7 or `service` on + Oracle Linux 6. -``` -$ sudo systemctl enable docker.service -``` + **Oracle Linux 7**: + + ```bash + $ sudo systemctl start docker + ``` + + **Oracle Linux 6**: + + ```bash + $ sudo service docker start + ``` + +6. Verify that `docker` is installed correctly by running the `hello-world` + image. + + ```bash + $ sudo docker run hello-world + ``` + + This command downloads a test image and runs it in a container. When the + container runs, it prints an informational message and exits. + +Docker is installed and running. You need to use `sudo` to run Docker commands. +Continue to [Linux postinstall](linux-postinstall.md) to allow non-privileged +users to run Docker commands and for other optional configuration steps. + +#### Upgrade Docker + +To upgrade Docker, first run `sudo yum check-update`, then follow the +[installation instructions](#install-docker), choosing the new version you want +to install. + +### Install from a package + +If you cannot use Docker's repository to install Docker, you can download the +`.rpm` file for your release and install it manually. You will need to download +a new file each time you want to upgrade Docker. + +1. Go to [https://yum.dockerproject.org/repo/main/oraclelinux/](https://yum.dockerproject.org/repo/main/oraclelinux/) + and choose the subdirectory for your Oracle Linux version. Download the + `.rpm` file for the Docker version you want to install. + + > **Note**: To install a testing version, change the word `main` in the + > URL to `testing`. Do not use unstable versions of Docker in production + > or for non-testing workloads. + +2. Install Docker, changing the path below to the path where you downloaded + the Docker package. + + ```bash + $ sudo yum install /path/to/package.rpm + ``` + + The Docker daemon does not start automatically. + +4. Start the Docker daemon. Use `systemctl` on Oracle Linux 7 or `service` on + Oracle Linux 6. -If you need to add an HTTP Proxy, set a different directory or partition for the -Docker runtime files, or make other customizations, read our systemd article to -learn how to [customize your systemd Docker daemon options](../../admin/systemd.md). + **Oracle Linux 7**: -### Use the btrfs storage engine + ```bash + $ sudo systemctl start docker + ``` -Docker on Oracle Linux 6 and 7 supports the use of the btrfs storage engine. -Before enabling btrfs support, ensure that `/var/lib/docker` is stored on a -btrfs-based filesystem. Review [Chapter -5](http://docs.oracle.com/cd/E37670_01/E37355/html/ol_btrfs.html) of the [Oracle -Linux Administrator's Solution -Guide](http://docs.oracle.com/cd/E37670_01/E37355/html/index.html) for details -on how to create and mount btrfs filesystems. + **Oracle Linux 6**: -To enable btrfs support on Oracle Linux: + ```bash + $ sudo service docker start + ``` -1. Ensure that `/var/lib/docker` is on a btrfs filesystem. +5. Verify that `docker` is installed correctly by running the `hello-world` + image. -2. Edit `/etc/sysconfig/docker` and add `-s btrfs` to the `OTHER_ARGS` field. + ```bash + $ sudo docker run hello-world + ``` -3. Restart the Docker daemon: + This command downloads a test image and runs it in a container. When the + container runs, it prints an informational message and exits. -## Uninstallation +Docker is installed and running. You need to use `sudo` to run Docker commands. +Continue to [Post-installation steps for Linux](linux-postinstall.md) to allow +non-privileged users to run Docker commands and for other optional configuration +steps. -To uninstall the Docker package: +#### Upgrade Docker - $ sudo yum -y remove docker-engine +To upgrade Docker, download the newer package file and repeat the +[installation procedure](#install-from-a-package), using `yum -y upgrade` +instead of `yum -y install`, and pointing to the new file. -The above command will not remove images, containers, volumes, or user created -configuration files on your host. If you wish to delete all images, containers, -and volumes run the following command: +## Uninstall Docker - $ rm -rf /var/lib/docker +1. Uninstall the Docker package: -You must delete the user created configuration files manually. + ```bash + $ sudo yum remove docker-engine + ``` -## Known issues +2. Images, containers, volumes, or customized configuration files on your host + are not automatically removed. To delete all images, containers, and + volumes: -### Docker unmounts btrfs filesystem on shutdown -If you're running Docker using the btrfs storage engine and you stop the Docker -service, it will unmount the btrfs filesystem during the shutdown process. You -should ensure the filesystem is mounted properly prior to restarting the Docker -service. + ```bash + $ sudo rm -rf /var/lib/docker + ``` -On Oracle Linux 7, you can use a `systemd.mount` definition and modify the -Docker `systemd.service` to depend on the btrfs mount defined in systemd. + > **Note**: This won't work when the `btrfs` graph driver has been used, + > because the `rm -rf` command cannot remove the subvolumes that Docker + > creates. See the output of `man btrfs-subvolume` for information on + > removing `btrfs` subvolumes. -### SElinux support on Oracle Linux 7 -SElinux must be set to `Permissive` or `Disabled` in `/etc/sysconfig/selinux` to -use the btrfs storage engine on Oracle Linux 7. +You must delete any edited configuration files manually. -## Further issues? +## Next steps -If you have a current Basic or Premier Support Subscription for Oracle Linux, -you can report any issues you have with the installation of Docker via a Service -Request at [My Oracle Support](https://support.oracle.com). +- Continue to [Post-installation steps for Linux](linux-postinstall.md) -If you do not have an Oracle Linux Support Subscription, you can use the [Oracle -Linux -Forum](https://community.oracle.com/community/server_%26_storage_systems/linux/oracle_linux) for community-based support. \ No newline at end of file +- Continue with the [User Guide](../../userguide/index.md). diff --git a/engine/installation/linux/other.md b/engine/installation/linux/other.md new file mode 100644 index 00000000000..cafba5da66e --- /dev/null +++ b/engine/installation/linux/other.md @@ -0,0 +1,18 @@ +--- +title: Installation on other Linux distributions +description: "Installing Docker on other Linux distributions" +--- + +This section lists installation instructions for community-maintained Docker +distributions. These instructions are not regularly tested. Consider +[installing from binaries](../binaries.md) instead. + +- [Installation on Arch Linux](/engine/installation/linux/archlinux.md) +- [Installation on CRUX Linux](/engine/installation/linux/cruxlinux.md) +- [Installation on Gentoo Linux](/engine/installation/linux/gentoolinux.md) +- [Installation on Raspbian Linux](/engine/installation/linux/raspbian.md) + +## Next steps + +- Continue to [Post-installation steps for Linux](linux-postinstall.md) +- Continue with the [User Guide](../../userguide/index.md). diff --git a/engine/installation/linux/raspbian.md b/engine/installation/linux/raspbian.md index 242128d3889..16efab7fd1f 100644 --- a/engine/installation/linux/raspbian.md +++ b/engine/installation/linux/raspbian.md @@ -148,6 +148,6 @@ and volumes run the following command: You must delete the user created configuration files manually. -## What next? +## Next steps Continue with the [User Guide](../../userguide/index.md). diff --git a/engine/installation/linux/repo_files/centos/docker.repo b/engine/installation/linux/repo_files/centos/docker.repo new file mode 100644 index 00000000000..abea668f22e --- /dev/null +++ b/engine/installation/linux/repo_files/centos/docker.repo @@ -0,0 +1,27 @@ +[docker-main] +name=Docker Repository +baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/ +enabled=1 +gpgcheck=1 +gpgkey=https://yum.dockerproject.org/gpg + +[docker-testing] +name=Docker Repository +baseurl=https://yum.dockerproject.org/repo/testing/centos/$releasever/ +enabled=1 +gpgcheck=1 +gpgkey=https://yum.dockerproject.org/gpg + +[docker-beta] +name=Docker Repository +baseurl=https://yum.dockerproject.org/repo/beta/centos/$releasever/ +enabled=0 +gpgcheck=1 +gpgkey=https://yum.dockerproject.org/gpg + +[docker-nightly] +name=Docker Repository +baseurl=https://yum.dockerproject.org/repo/nightly/centos/$releasever/ +enabled=0 +gpgcheck=1 +gpgkey=https://yum.dockerproject.org/gpg diff --git a/engine/installation/linux/repo_files/fedora/docker.repo b/engine/installation/linux/repo_files/fedora/docker.repo new file mode 100644 index 00000000000..77644ded98b --- /dev/null +++ b/engine/installation/linux/repo_files/fedora/docker.repo @@ -0,0 +1,27 @@ +[docker-main] +name=Docker Repository +baseurl=https://yum.dockerproject.org/repo/main/fedora/$releasever/ +enabled=1 +gpgcheck=1 +gpgkey=https://yum.dockerproject.org/gpg + +[docker-testing] +name=Docker Repository +baseurl=https://yum.dockerproject.org/repo/testing/fedora/$releasever/ +enabled=1 +gpgcheck=1 +gpgkey=https://yum.dockerproject.org/gpg + +[docker-beta] +name=Docker Repository +baseurl=https://yum.dockerproject.org/repo/beta/fedora/$releasever/ +enabled=0 +gpgcheck=1 +gpgkey=https://yum.dockerproject.org/gpg + +[docker-nightly] +name=Docker Repository +baseurl=https://yum.dockerproject.org/repo/nightly/fedora/$releasever/ +enabled=0 +gpgcheck=1 +gpgkey=https://yum.dockerproject.org/gpg diff --git a/engine/installation/linux/repo_files/oracle/docker-ol6.repo b/engine/installation/linux/repo_files/oracle/docker-ol6.repo new file mode 100644 index 00000000000..a1d23130f1e --- /dev/null +++ b/engine/installation/linux/repo_files/oracle/docker-ol6.repo @@ -0,0 +1,27 @@ +[docker-main] +name=Docker Repository +baseurl=https://yum.dockerproject.org/repo/main/oraclelinux/6/ +enabled=1 +gpgcheck=1 +gpgkey=https://yum.dockerproject.org/gpg + +[docker-testing] +name=Docker Repository +baseurl=https://yum.dockerproject.org/repo/testing/oraclelinux/6/ +enabled=1 +gpgcheck=1 +gpgkey=https://yum.dockerproject.org/gpg + +[docker-beta] +name=Docker Repository +baseurl=https://yum.dockerproject.org/repo/beta/oraclelinux/6/ +enabled=0 +gpgcheck=1 +gpgkey=https://yum.dockerproject.org/gpg + +[docker-nightly] +name=Docker Repository +baseurl=https://yum.dockerproject.org/repo/nightly/oraclelinux/6/ +enabled=0 +gpgcheck=1 +gpgkey=https://yum.dockerproject.org/gpg diff --git a/engine/installation/linux/repo_files/oracle/docker-ol7.repo b/engine/installation/linux/repo_files/oracle/docker-ol7.repo new file mode 100644 index 00000000000..b7d462d2d02 --- /dev/null +++ b/engine/installation/linux/repo_files/oracle/docker-ol7.repo @@ -0,0 +1,27 @@ +[docker-main] +name=Docker Repository +baseurl=https://yum.dockerproject.org/repo/main/oraclelinux/7/ +enabled=1 +gpgcheck=1 +gpgkey=https://yum.dockerproject.org/gpg + +[docker-testing] +name=Docker Repository +baseurl=https://yum.dockerproject.org/repo/testing/oraclelinux/7/ +enabled=1 +gpgcheck=1 +gpgkey=https://yum.dockerproject.org/gpg + +[docker-beta] +name=Docker Repository +baseurl=https://yum.dockerproject.org/repo/beta/oraclelinux/7/ +enabled=0 +gpgcheck=1 +gpgkey=https://yum.dockerproject.org/gpg + +[docker-nightly] +name=Docker Repository +baseurl=https://yum.dockerproject.org/repo/nightly/oraclelinux/7/ +enabled=0 +gpgcheck=1 +gpgkey=https://yum.dockerproject.org/gpg diff --git a/engine/installation/linux/rhel.md b/engine/installation/linux/rhel.md index c1ba3a9ae99..5acf558d5e5 100644 --- a/engine/installation/linux/rhel.md +++ b/engine/installation/linux/rhel.md @@ -1,229 +1,229 @@ --- -description: Instructions for installing Docker on Red Hat Enterprise Linux. -keywords: Docker, Docker documentation, requirements, linux, rhel +description: Instructions for installing Docker on RHEL +keywords: Docker, Docker documentation, requirements, installation, rhel, rpm, install, uninstall, upgrade, update redirect_from: - /engine/installation/rhel/ - /installation/rhel/ -title: Install Docker on Red Hat Enterprise Linux +title: Get Docker for Red Hat Enterprise Linux --- -Docker is supported on Red Hat Enterprise Linux 7. These instructions install -Docker using release packages and installation mechanisms managed by Docker, -to be sure that you get the latest version of Docker. If you wish to install -using Red Hat-managed packages, consult your Red Hat release documentation. +To get started with Docker on Red Hat Enterprise Linux (RHEL), make sure you +[meet the prerequisites](#prerequisites), then +[install Docker](#install-docker). ## Prerequisites -Docker requires a 64-bit OS and version 3.10 or higher of the Linux kernel. +### OS requirements -To check your current kernel version, open a terminal and use `uname -r` to -display your kernel version: +To install Docker, you need the 64-bit version of RHEL 7. + +### Remove unofficial Docker packages + +Red Hat's operating system repositories contain an older version of Docker, with +the package name `docker` instead of `docker-engine`. If you installed this +version of Docker, remove it using the following command: ```bash -$ uname -r -3.10.0-229.el7.x86_64 +$ sudo yum -y remove docker ``` -Finally, it is recommended that you fully update your system. Keep in mind -that your system should be fully patched to fix any potential kernel bugs. -Any reported kernel bugs may have already been fixed on the latest kernel -packages. +The contents of `/var/lib/docker` are not removed, so any images, containers, +or volumes you created using the older version of Docker are preserved. -## Install Docker Engine +## Install Docker -There are two ways to install Docker Engine. You can [install using the `yum` -package manager](rhel.md#install-with-yum). Or you can use `curl` with the [`get.docker.com` -site](rhel.md#install-with-the-script). This second method runs an installation script -which also installs via the `yum` package manager. +You can install Docker in different ways, depending on your needs: -### Install with yum +- Most users + [set up Docker's repositories](#install-using-the-repository) and install + from them, for ease of installation and upgrade tasks. This is the + recommended approach. -1. Log into your machine as a user with `sudo` or `root` privileges. +- Some users download the RPM package and install it manually and manage + upgrades completely manually. -2. Make sure your existing packages are up-to-date. +- Some users cannot use third-party repositories, and must rely on + the version of Docker in the Red Hat repositories. This version of Docker may + be out of date. Those users should consult the Red Hat documentation and not + follow these procedures. - ```bash - $ sudo yum update - ``` +### Install using the repository -3. Add the `yum` repo. +Before you install Docker for the first time on a new host machine, you need to +set up the Docker repository. Afterward, you can install, update, or downgrade +Docker from the repository. - ```bash - $ sudo tee /etc/yum.repos.d/docker.repo <<-'EOF' - [dockerrepo] - name=Docker Repository - baseurl=https://yum.dockerproject.org/repo/main/centos/7/ - enabled=1 - gpgcheck=1 - gpgkey=https://yum.dockerproject.org/gpg - EOF - ``` +#### Set up the repository -4. Install the Docker package. +1. Use the following command to set up the **stable** repository: ```bash - $ sudo yum install docker-engine + $ sudo yum-config-manager \ + --add-repo \ + https://docs.docker.com/engine/installation/linux/repo_files/centos/docker.repo ``` -5. Enable the service. + > **Note**: The link above is correct for RHEL as well as CentOS. - ```bash - $ sudo systemctl enable docker.service - ``` +2. **Optional**: Enable the **testing** repository. This repository is included + in the `docker.repo` file above but is disabled by default. You can enable + it alongside the stable repository. Do not use unstable repositories on + on production systems or for non-testing workloads. -6. Start the Docker daemon. + > **Warning**: If you have both stable and unstable repositories enabled, + > updating without specifying a version in the `yum install` or `yum update` + > command will always install the highest possible version, which will + > almost certainly be an unstable one. ```bash - $ sudo systemctl start docker + $ sudo yum-config-manager --set-enabled docker-testing ``` -7. Verify `docker` is installed correctly by running a test image in a container. - - $ sudo docker run --rm hello-world + You can disable the `testing` repository by running the `yum-config-manager` + command with the `--set-disabled` flag. To re-enable it, use the + `--set-enabled` flag. The following command disables the `testing` + repository. - Unable to find image 'hello-world:latest' locally - latest: Pulling from library/hello-world - c04b14da8d14: Pull complete - Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9 - Status: Downloaded newer image for hello-world:latest - - Hello from Docker! - This message shows that your installation appears to be working correctly. - - To generate this message, Docker took the following steps: - 1. The Docker client contacted the Docker daemon. - 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. - 3. The Docker daemon created a new container from that image which runs the - executable that produces the output you are currently reading. - 4. The Docker daemon streamed that output to the Docker client, which sent it - to your terminal. - - To try something more ambitious, you can run an Ubuntu container with: - $ docker run -it ubuntu bash - - Share images, automate workflows, and more with a free Docker Hub account: - https://hub.docker.com - - For more examples and ideas, visit: - https://docs.docker.com/engine/userguide/ - -If you need to add an HTTP Proxy, set a different directory or partition for the -Docker runtime files, or make other customizations, read our Systemd article to -learn how to [customize your Systemd Docker daemon options](../../admin/systemd.md). - -### Install with the script + ```bash + $ sudo yum-config-manager --set-disabled docker-testing + ``` -1. Log into your machine as a user with `sudo` or `root` privileges. +#### Install Docker -2. Make sure your existing packages are up-to-date. +1. Update the `yum` package index. ```bash - $ sudo yum update + $ sudo yum -y check-update ``` - -3. Run the Docker installation script. +2. Install the latest version of Docker, or go to the next step to install a + specific version. ```bash - $ curl -fsSL https://get.docker.com/ | sh + $ sudo yum -y install docker-engine ``` - This script adds the `docker.repo` repository and installs Docker. + > **Warning**: If you have both stable and unstable repositories enabled, + > installing or updating without specifying a version in the `yum install` + > or `yum update` command will always install the highest possible version, + > which will almost certainly be an unstable one. -4. Enable the service. +3. On production systems, you should install a specific version of Docker + instead of always using the latest. List the available versions. + This example uses the `sort -r` command to sort the results by version + number, highest to lowest, and is truncated. + + > **Note**: This `yum list` command only shows binary packages. To show + > source packages as well, omit the `.x86_64` from the package name. ```bash - $ sudo systemctl enable docker.service + $ yum list docker-engine.x86_64 --showduplicates |sort -r + + docker-engine.x86_64 1.13.0-1.el7 docker-main + docker-engine.x86_64 1.12.5-1.el7 docker-main + docker-engine.x86_64 1.12.4-1.el7 docker-main + docker-engine.x86_64 1.12.3-1.el7 docker-main ``` -5. Start the Docker daemon. + The contents of the list depend upon which repositories you have enabled, + and will be specific to your version of RHEL (indicated by the `.el7` suffix + on the version, in this example). Choose a specific version to install. The + second column is the version string. The third column is the repository + name, which indicates which repository the package is from and by extension + extension its stability level. To install a specific version, append the + version string to the package name and separate them by a hyphen (`-`): ```bash - $ sudo systemctl start docker + $ sudo yum -y install docker-engine- ``` -6. Verify `docker` is installed correctly by running a test image in a container. + The Docker daemon starts automatically. + +4. Verify that `docker` is installed correctly by running the `hello-world` + image. ```bash $ sudo docker run hello-world ``` -If you need to add an HTTP Proxy, set a different directory or partition for the -Docker runtime files, or make other customizations, read our Systemd article to -learn how to [customize your Systemd Docker daemon options](../../admin/systemd.md). - -## Create a docker group + This command downloads a test image and runs it in a container. When the + container runs, it prints an informational message and exits. -The `docker` daemon binds to a Unix socket instead of a TCP port. By default -that Unix socket is owned by the user `root` and other users can access it with -`sudo`. For this reason, `docker` daemon always runs as the `root` user. +Docker is installed and running. You need to use `sudo` to run Docker commands. +Continue to [Linux postinstall](linux-postinstall.md) to allow non-privileged +users to run Docker commands and for other optional configuration steps. -To avoid having to use `sudo` when you use the `docker` command, create a Unix -group called `docker` and add users to it. When the `docker` daemon starts, it -makes the ownership of the Unix socket read/writable by the `docker` group. +#### Upgrade Docker ->**Warning**: The `docker` group is equivalent to the `root` user; For details ->on how this impacts security in your system, see [*Docker Daemon Attack ->Surface*](../../security/security.md#docker-daemon-attack-surface) for details. +To upgrade Docker, first run `sudo yum check-update`, then follow the +[installation instructions](#install-docker), choosing the new version you want +to install. -To create the `docker` group and add your user: +### Install from a package -1. Log into your machine as a user with `sudo` or `root` privileges. +If you cannot use the official Docker repository to install Docker, you can +download the `.rpm` file for your release and install it manually. You will +need to download a new file each time you want to upgrade Docker. -2. Create the `docker` group. +1. Go to [https://yum.dockerproject.org/repo/main/centos/](https://yum.dockerproject.org/repo/main/centos/) + and choose the subdirectory for your RHEL version. The above URL is correct + for RHEL as well as CentOS. Download the `.rpm` file for the Docker version + you want to install. - ```bash - $ sudo groupadd docker - ``` + > **Note**: To install a testing version, change the word `main` in the + > URL to `testing`. Do not use unstable versions of Docker in production + > or for non-testing workloads. -3. Add your user to `docker` group. +2. Install Docker, changing the path below to the path where you downloaded + the Docker package. ```bash - $ sudo usermod -aG docker your_username` + $ sudo yum install /path/to/package.rpm ``` -4. Log out and log back in. + The Docker daemon starts automatically. - This ensures your user is running with the correct permissions. - -5. Verify that your user is in the docker group by running `docker` without `sudo`. +3. Verify that `docker` is installed correctly by running the `hello-world` + image. ```bash - $ docker run hello-world + $ sudo docker run hello-world ``` -## Start the docker daemon at boot + This command downloads a test image and runs it in a container. When the + container runs, it prints an informational message and exits. -Configure the Docker daemon to start automatically when the host starts: +Docker is installed and running. You need to use `sudo` to run Docker commands. +Continue to [Post-installation steps for Linux](linux-postinstall.md) to allow +non-privileged users to run Docker commands and for other optional configuration +steps. -```bash -$ sudo systemctl enable docker -``` +#### Upgrade Docker -## Uninstall +To upgrade Docker, download the newer package file and repeat the +[installation procedure](#install-from-a-package), using `yum -y upgrade` +instead of `yum -y install`, and pointing to the new file. -You can uninstall the Docker software with `yum`. -1. List the installed Docker packages. +## Uninstall Docker - ```bash - $ yum list installed | grep docker +1. Uninstall the Docker package: - docker-engine.x86_64 1.7.1-0.1.el7@/docker-engine-1.7.1-0.1.el7.x86_64 + ```bash + $ sudo yum -y remove docker-engine ``` -2. Remove the package. +2. Images, containers, volumes, or customized configuration files on your host + are not automatically removed. To delete all images, containers, and + volumes: ```bash - $ sudo yum -y remove docker-engine.x86_64 + $ sudo rm -rf /var/lib/docker ``` - This command does not remove images, containers, volumes, or user-created - configuration files on your host. +You must delete any edited configuration files manually. -3. To delete all images, containers, and volumes, run the following command: +## Next steps - ```bash - $ rm -rf /var/lib/docker - ``` +- Continue to [Post-installation steps for Linux](linux-postinstall.md) -4. Locate and delete any user-created configuration files. \ No newline at end of file +- Continue with the [User Guide](../../userguide/index.md). diff --git a/engine/installation/linux/ubuntu.md b/engine/installation/linux/ubuntu.md new file mode 100644 index 00000000000..d26a8a13cb6 --- /dev/null +++ b/engine/installation/linux/ubuntu.md @@ -0,0 +1,239 @@ +--- +description: Instructions for installing Docker on Ubuntu +keywords: Docker, Docker documentation, requirements, apt, installation, ubuntu, install, uninstall, upgrade, update +redirect_from: +- /engine/installation/ubuntulinux/ +- /installation/ubuntulinux/ +- /engine/installation/linux/ubuntulinux/ +title: Get Docker for Ubuntu +--- + +To get started with Docker on Ubuntu, make sure you +[meet the prerequisites](#prerequisites), then +[install Docker](#install-docker). + +## Prerequisites + +### OS requirements + +To install Docker, you need the 64-bit version of one of these Ubuntu versions: + +- Yakkety 16.10 +- Xenial 16.04 (LTS) +- Trusty 14.04 (LTS) + +### Recommended extra packages + +You need `curl` if you don't have it. Unless you have a strong reason not to, +install the `linux-image-extra-*` packages, which allow Docker to use the `aufs` +storage drivers. **This applies to all versions of Ubuntu**. + +```bash +$ sudo apt-get update + +$ sudo apt-get install curl \ + linux-image-extra-$(uname -r) \ + linux-image-extra-virtual +``` + +## Install Docker + +You can install Docker in different ways, depending on your needs: + +- Most users + [set up Docker's repositories](#install-using-the-repository) and install + from them, for ease of installation and upgrade tasks. This is the + recommended approach. + +- Some users download the DEB package and install it manually and manage + upgrades completely manually. + +- Some users cannot use the official Docker repositories, and must rely on + the version of Docker that comes with their operating system. This version of + Docker may be out of date. Those users should consult their operating system + documentation and not follow these procedures. + +### Install using the repository + +Before you install Docker for the first time on a new host machine, you need to +set up the Docker repository. Afterward, you can install, update, or downgrade +Docker from the repository. + +#### Set up the repository + +1. Install packages to allow `apt` to use a repository over HTTPS: + + ```bash + $ sudo apt-get install apt-transport-https \ + ca-certificates + ``` + +2. Add Docker's official GPG key: + + ```bash + $ curl -s http://yum.dockerproject.org/gpg | sudo apt-key add + ``` + + > **Note**: The URL is correct, even for Linux distributions that use `APT`. + + Verify that the key ID is `58118E89F3A912897C070ADBF76221572C52609D`. + + ```bash + $ apt-key fingerprint 58118E89F3A912897C070ADBF76221572C52609D + + pub 4096R/2C52609D 2015-07-14 + Key fingerprint = 5811 8E89 F3A9 1289 7C07 0ADB F762 2157 2C52 609D + uid Docker Release Tool (releasedocker) + ``` + +3. Use the following command to set up the **stable** repository. To also + enable the **testing** repository, add the words `testing` after `main` on + the last line. + **Do not use these unstable repositories on production systems or for non-testing workloads.** + + ```bash + $ sudo add-apt-repository \ + "deb https://apt.dockerproject.org/repo/pool/ \ + $(lsb_release -cs) \ + main" + ``` + + To disable the `testing` repository, you can edit `/etc/apt/sources.list` + and remove the word `testing` from the appropriate line in the file. + +#### Install Docker + +1. Update the `apt` package index. + + ```bash + $ sudo apt-get update + ``` + +2. Install the latest version of Docker, or go to the next step to install a + specific version. Any existing installation of Docker is replaced. + + Use this command to install the latest version of Docker: + + ```bash + $ sudo apt-get -y install docker-engine + ``` + + > **Warning**: If you have both stable and unstable repositories enabled, + > installing or updating without specifying a version in the + > `apt-get install` or `apt-get update` command will always install the + > highest possible version, which will almost certainly be an unstable one. + +3. On production systems, you should install a specific version of Docker + instead of always using the latest. This output is truncated. List the + available versions. + + ```bash + $ apt-cache madison docker-engine + + docker-engine | 1.13.0-0~xenial | https://apt.dockerproject.org/repo ubuntu-xenial/main amd64 Packages + docker-engine | 1.12.3-0~xenial | https://apt.dockerproject.org/repo ubuntu-xenial/main amd64 Packages + docker-engine | 1.12.2-0~xenial | https://apt.dockerproject.org/repo ubuntu-xenial/main amd64 Packages + docker-engine | 1.12.1-0~xenial | https://apt.dockerproject.org/repo ubuntu-xenial/main amd64 Packages + ``` + + The contents of the list depend upon which repositories are enabled, + and will be specific to your version of Ubuntu (indicated by the `xenial` + suffix on the version, in this example). Choose a specific version to + install. The second column is the version string. The third column is the + repository name, which indicates which repository the package is from and + by extension its stability level. To install a specific version, append the + version string to the package name and separate them by an equals sign (`=`): + + ```bash + $ sudo apt-get -y install docker-engine= + ``` + + The Docker daemon starts automatically. + +4. Verify that `docker` is installed correctly by running the `hello-world` + image. + + ```bash + $ sudo docker run hello-world + ``` + + This command downloads a test image and runs it in a container. When the + container runs, it prints an informational message and exits. + +Docker is installed and running. You need to use `sudo` to run Docker commands. +Continue to [Linux postinstall](linux-postinstall.md) to allow +non-privileged users to run Docker commands and for other optional configuration +steps. + +#### Upgrade Docker + +To upgrade Docker, first run `sudo apt-get update`, then follow the +[installation instructions](#install-docker), choosing the new version you want +to install. + +### Install from a package + +If you cannot use Docker's repository to install Docker, you can download the +`.deb` file for your release and install it manually. You will need to download +a new file each time you want to upgrade Docker. + +1. Go to [https://apt.dockerproject.org/repo/pool/main/d/docker-engine/](https://apt.dockerproject.org/repo/pool/main/d/docker-engine/) + and download the `.deb` file for the Docker version you want to install and + for your version of Ubuntu. + + > **Note**: To install a testing version, change the word `main` in the + > URL to `testing`. Do not use unstable versions of Docker in production + > or for non-testing workloads. + +2. Install Docker, changing the path below to the path where you downloaded + the Docker package. + + ```bash + $ sudo dpkg -i /path/to/package.deb + ``` + + The Docker daemon starts automatically. + +3. Verify that `docker` is installed correctly by running the `hello-world` + image. + + ```bash + $ sudo docker run hello-world + ``` + + This command downloads a test image and runs it in a container. When the + container runs, it prints an informational message and exits. + +Docker is installed and running. You need to use `sudo` to run Docker commands. +Continue to [Post-installation steps for Linux](linux-postinstall.md) to allow +non-privileged users to run Docker commands and for other optional configuration +steps. + +#### Upgrade Docker + +To upgrade Docker, download the newer package file and repeat the +[installation procedure](#install-from-a-package), pointing to the new file. + +## Uninstall Docker + +1. Uninstall the Docker package: + + ```bash + $ sudo apt-get purge docker-engine + ``` + +2. Images, containers, volumes, or customized configuration files on your host + are not automatically removed. To delete all images, containers, and + volumes: + + ```bash + $ sudo rm -rf /var/lib/docker + ``` + +You must delete any edited configuration files manually. + +## Next steps + +- Continue to [Post-installation steps for Linux](linux-postinstall.md) + +- Continue with the [User Guide](../../userguide/index.md). diff --git a/engine/installation/linux/ubuntulinux.md b/engine/installation/linux/ubuntulinux.md index 2d8dcef50d0..0642a4352cd 100644 --- a/engine/installation/linux/ubuntulinux.md +++ b/engine/installation/linux/ubuntulinux.md @@ -9,8 +9,8 @@ title: Install Docker on Ubuntu Docker is supported on these Ubuntu operating systems: +- Ubuntu Yakkety 16.10 - Ubuntu Xenial 16.04 (LTS) -- Ubuntu Wily 15.10 - Ubuntu Trusty 14.04 (LTS) - Ubuntu Precise 12.04 (LTS) @@ -20,8 +20,8 @@ release of Docker. If you are required to install using Ubuntu-managed packages, consult the Ubuntu documentation. Some files and commands may be different if you use Ubuntu-managed packages. ->**Note**: Ubuntu Utopic 14.10 and 15.04 exist in Docker's `APT` repository but -are no longer officially supported. +>**Note**: Ubuntu Utopic 14.10, 15.10, and 15.04 exist in Docker's `APT` +repository but are no longer officially supported. ## Prerequisites @@ -73,12 +73,12 @@ To set `APT` to use packages from the Docker repository: This determines where APT will search for Docker packages. When possible, run a long-term support (LTS) edition of Ubuntu. - | Ubuntu version | Repository | - | ------------------- | ----------------------------------------------------------- | - | Precise 12.04 (LTS) | `deb https://apt.dockerproject.org/repo ubuntu-precise main`| - | Trusty 14.04 (LTS) | `deb https://apt.dockerproject.org/repo ubuntu-trusty main` | - | Wily 15.10 | `deb https://apt.dockerproject.org/repo ubuntu-wily main` | - | Xenial 16.04 (LTS) | `deb https://apt.dockerproject.org/repo ubuntu-xenial main` | + | Ubuntu version | Repository | + | ------------------- | ------------------------------------------------------------ | + | Precise 12.04 (LTS) | `deb https://apt.dockerproject.org/repo ubuntu-precise main` | + | Trusty 14.04 (LTS) | `deb https://apt.dockerproject.org/repo ubuntu-trusty main` | + | Xenial 16.04 (LTS) | `deb https://apt.dockerproject.org/repo ubuntu-xenial main` | + | Yakkety 16.10 | `deb https://apt.dockerproject.org/repo ubuntu-yakkety main` | >**Note**: Docker does not provide packages for all architectures. Binary artifacts @@ -127,10 +127,13 @@ From now on when you run `apt-get upgrade`, `APT` pulls from the new repository. ### Prerequisites by Ubuntu Version -#### Ubuntu Xenial 16.04 (LTS), Wily 15.10, Trusty 14.04 (LTS) +- Ubuntu Yakkety 16.10 +- Ubuntu Xenial 16.04 (LTS) +- Ubuntu Trusty 14.04 (LTS) -For Ubuntu Trusty, Wily, and Xenial, install the `linux-image-extra-*` kernel -packages, which allows you use the `aufs` storage driver. +For Ubuntu Trusty, Yakkety, and Xenial, it's recommended to install the +`linux-image-extra-*` kernel packages. The `linux-image-extra-*` packages +allows you use the `aufs` storage driver. To install the `linux-image-extra-*` packages: diff --git a/engine/installation/mac.md b/engine/installation/mac.md deleted file mode 100644 index 1b678df444a..00000000000 --- a/engine/installation/mac.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -description: Docker installation on macOS -keywords: Docker, Docker documentation, requirements, boot2docker, VirtualBox, SSH, Linux, osx, os x, macOS, Mac -title: Install Docker on macOS ---- - -You have two options for installing Docker on Mac: - -- [Docker for Mac](mac.md#docker-for-mac) -- [Docker Toolbox](mac.md#docker-toolbox) - -## Docker for Mac - -Docker for Mac is our newest offering for the Mac. It runs as a native Mac application and uses xhyve to virtualize the Docker Engine environment and Linux kernel-specific features for the Docker daemon. - -Go to [Getting Started with Docker for Mac](/docker-for-mac/) for download and install instructions, and to learn all about Docker for Mac. - -**Requirements** - -- Mac must be a 2010 or newer model, with Intel's hardware support for memory management unit (MMU) virtualization; i.e., Extended Page Tables (EPT) - -- macOS 10.10.3 Yosemite or newer - -- At least 4GB of RAM - -- VirtualBox prior to version 4.3.30 must NOT be installed (it is incompatible with Docker for Mac). Docker for Mac will error out on install in this case. Uninstall the older version of VirtualBox and re-try the install. - -## Docker Toolbox - -If you have an earlier Mac that doesn't meet the Docker for Mac requirements, get Docker Toolbox for the Mac. - -See [Docker Toolbox Overview](/toolbox/overview.md) for help on installing Docker with Toolbox. - -The Docker Toolbox setup does not run Docker natively in macOS. Instead, it uses `docker-machine` to create and attach to a virtual machine (VM). This machine is a Linux VM that hosts Docker for you on your Mac. - -**Requirements** - -Your Mac must be running macOS 10.8 "Mountain Lion" or newer to install the Docker Toolbox. Full install instructions are at [Toolbox install instructions for Mac](/toolbox/toolbox_install_mac.md). - - -## Learning more - -* If you are new to Docker, try out the [Getting Started](../getstarted/index.md) tutorial for a hands-on tour, including using Docker commands, running containers, building images, and working with Docker Hub. - -* You can find more extensive examples in [Learn by example](../tutorials/index.md) and in the [Docker Engine User Guide](../userguide/index.md). - -* If you are interested in using the Kitematic GUI, see the [Kitematic user guide](/kitematic/userguide/). - -> **Note**: The Boot2Docker command line was deprecated several releases back in favor of Docker Machine, and now Docker for Mac. \ No newline at end of file diff --git a/engine/installation/windows.md b/engine/installation/windows.md deleted file mode 100644 index 5233859b589..00000000000 --- a/engine/installation/windows.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -description: Docker installation on Microsoft Windows -keywords: Docker, Docker documentation, Windows, requirements, virtualbox, boot2docker -title: Install Docker on Windows ---- - -You have two options for installing Docker on Windows: - -- [Docker for Windows](windows.md#docker-for-windows) -- [Docker Toolbox](windows.md#docker-toolbox) - -## Docker for Windows - -Docker for Windows is our newest offering for PCs. It runs as a native Windows application and uses Hyper-V to virtualize the Docker Engine environment and Linux kernel-specific features for the Docker daemon. - -Go to [Getting Started with Docker for Windows](/docker-for-windows/) for download and install instructions, and to learn all about Docker for Windows. - -**Requirements** - -* 64bit Windows 10 Pro, Enterprise and Education (1511 November update, Build 10586 or later). In the future we will support more versions of Windows 10. - -* The Hyper-V package must be enabled. The Docker for Windows installer will enable it for you, if needed. (This requires a reboot). - -## Docker Toolbox - -If you have an earlier Windows system that doesn't meet the Docker for Windows requirements, get Docker Toolbox. - -See [Docker Toolbox Overview](/toolbox/overview.md) for help on installing Docker with Toolbox. - -The Docker Toolbox setup does not run Docker natively on Windows. Instead, it uses `docker-machine` to create and attach to a virtual machine (VM). This machine is a Linux VM that hosts Docker for you on your Windows system. - -**Requirements** - -To run Docker, your machine must have a 64-bit operating system running Windows 7 or higher. Additionally, you must make sure that virtualization is enabled on your machine. For details, see the [Toolbox install instructions for Windows](/toolbox/toolbox_install_windows.md). - -## Learning more - -* If you are new to Docker, try out the [Getting Started](../getstarted/index.md) tutorial for a hands-on tour, including using Docker commands, running containers, building images, and working with Docker Hub. - -* You can find more extensive examples in [Learn by example](../tutorials/index.md) and in the [Docker Engine User Guide](../userguide/index.md). - -* If you are interested in using the Kitematic GUI, see the [Kitematic user guide](/kitematic/userguide/). - -> **Note**: The Boot2Docker command line was deprecated several releases > back in favor of Docker Machine, and now Docker for Windows. \ No newline at end of file diff --git a/engine/migration.md b/engine/migration.md index c46ea4591c4..291f6871e29 100644 --- a/engine/migration.md +++ b/engine/migration.md @@ -74,4 +74,4 @@ the default path then you would run: If you use the devicemapper storage driver, you also need to pass the flag `--privileged` to -give the tool access to your storage devices. \ No newline at end of file +give the tool access to your storage devices. diff --git a/engine/reference/commandline/attach.md b/engine/reference/commandline/attach.md new file mode 100644 index 00000000000..b4928706ffc --- /dev/null +++ b/engine/reference/commandline/attach.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_attach +title: docker attach +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/build.md b/engine/reference/commandline/build.md new file mode 100644 index 00000000000..dca7df8efb7 --- /dev/null +++ b/engine/reference/commandline/build.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_build +title: docker build +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/commit.md b/engine/reference/commandline/commit.md new file mode 100644 index 00000000000..8ff35ff7cd1 --- /dev/null +++ b/engine/reference/commandline/commit.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_commit +title: docker commit +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/container.md b/engine/reference/commandline/container.md new file mode 100644 index 00000000000..078cea1ad7c --- /dev/null +++ b/engine/reference/commandline/container.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_container +title: docker container +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/container_attach.md b/engine/reference/commandline/container_attach.md new file mode 100644 index 00000000000..bf65a526736 --- /dev/null +++ b/engine/reference/commandline/container_attach.md @@ -0,0 +1,46 @@ +--- +datafolder: engine-cli +datafile: docker_container_attach +title: docker container attach +--- + + + +{% include cli.md %} + +## Examples + +### Attaching to a container + +In this example the top command is run inside a container, from an image called +fedora, in detached mode. The ID from the container is passed into the **docker +attach** command: + +```bash +$ ID=$(sudo docker run -d fedora /usr/bin/top -b) + +$ sudo docker attach $ID +top - 02:05:52 up 3:05, 0 users, load average: 0.01, 0.02, 0.05 +Tasks: 1 total, 1 running, 0 sleeping, 0 stopped, 0 zombie +Cpu(s): 0.1%us, 0.2%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st +Mem: 373572k total, 355560k used, 18012k free, 27872k buffers +Swap: 786428k total, 0k used, 786428k free, 221740k cached + +PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND +1 root 20 0 17200 1116 912 R 0 0.3 0:00.03 top + +top - 02:05:55 up 3:05, 0 users, load average: 0.01, 0.02, 0.05 +Tasks: 1 total, 1 running, 0 sleeping, 0 stopped, 0 zombie +Cpu(s): 0.0%us, 0.2%sy, 0.0%ni, 99.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st +Mem: 373572k total, 355244k used, 18328k free, 27872k buffers +Swap: 786428k total, 0k used, 786428k free, 221776k cached + +PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND +1 root 20 0 17208 1144 932 R 0 0.3 0:00.03 top +``` diff --git a/engine/reference/commandline/container_commit.md b/engine/reference/commandline/container_commit.md new file mode 100644 index 00000000000..5cea5e22c3c --- /dev/null +++ b/engine/reference/commandline/container_commit.md @@ -0,0 +1,40 @@ +--- +datafolder: engine-cli +datafile: docker_container_commit +title: docker container commit +--- + + + +{% include cli.md %} + +## Examples + +### Creating a new image from an existing container +An existing Fedora based container has had Apache installed while running +in interactive mode with the bash shell. Apache is also running. To +create a new image run `docker ps` to find the container's ID and then run: + +```bash +$ docker commit -m="Added Apache to Fedora base image" \ + -a="A D Ministrator" 98bd7fc99854 fedora/fedora_httpd:20 +``` + +Note that only `a-z0-9-_.` are allowed when naming images from an +existing container. + +### Apply specified Dockerfile instructions while committing the image +If an existing container was created without the DEBUG environment +variable set to "true", you can create a new image based on that +container by first getting the container's ID with `docker ps` and +then running: + +```bash +$ docker container commit -c="ENV DEBUG true" 98bd7fc99854 debug-image +``` diff --git a/engine/reference/commandline/container_cp.md b/engine/reference/commandline/container_cp.md new file mode 100644 index 00000000000..adb1db7b02f --- /dev/null +++ b/engine/reference/commandline/container_cp.md @@ -0,0 +1,82 @@ +--- +datafolder: engine-cli +datafile: docker_container_cp +title: docker container cp +--- + + + +{% include cli.md %} + +## Examples + +Suppose a container has finished producing some output as a file it saves +to somewhere in its filesystem. This could be the output of a build job or +some other computation. You can copy these outputs from the container to a +location on your local host. + +If you want to copy the `/tmp/foo` directory from a container to the +existing `/tmp` directory on your host. If you run `docker container cp` in your `~` +(home) directory on the local host: + + $ docker container cp compassionate_darwin:tmp/foo /tmp + +Docker creates a `/tmp/foo` directory on your host. Alternatively, you can omit +the leading slash in the command. If you execute this command from your home +directory: + + $ docker container cp compassionate_darwin:tmp/foo tmp + +If `~/tmp` does not exist, Docker will create it and copy the contents of +`/tmp/foo` from the container into this new directory. If `~/tmp` already +exists as a directory, then Docker will copy the contents of `/tmp/foo` from +the container into a directory at `~/tmp/foo`. + +When copying a single file to an existing `LOCALPATH`, the `docker container cp` command +will either overwrite the contents of `LOCALPATH` if it is a file or place it +into `LOCALPATH` if it is a directory, overwriting an existing file of the same +name if one exists. For example, this command: + + $ docker container cp sharp_ptolemy:/tmp/foo/myfile.txt /test + +If `/test` does not exist on the local machine, it will be created as a file +with the contents of `/tmp/foo/myfile.txt` from the container. If `/test` +exists as a file, it will be overwritten. Lastly, if `/test` exists as a +directory, the file will be copied to `/test/myfile.txt`. + +Next, suppose you want to copy a file or folder into a container. For example, +this could be a configuration file or some other input to a long running +computation that you would like to place into a created container before it +starts. This is useful because it does not require the configuration file or +other input to exist in the container image. + +If you have a file, `config.yml`, in the current directory on your local host +and wish to copy it to an existing directory at `/etc/my-app.d` in a container, +this command can be used: + + $ docker container cp config.yml myappcontainer:/etc/my-app.d + +If you have several files in a local directory `/config` which you need to copy +to a directory `/etc/my-app.d` in a container: + + $ docker container cp /config/. myappcontainer:/etc/my-app.d + +The above command will copy the contents of the local `/config` directory into +the directory `/etc/my-app.d` in the container. + +Finally, if you want to copy a symbolic link into a container, you typically +want to copy the linked target and not the link itself. To copy the target, use +the `-L` option, for example: + + $ ln -s /tmp/somefile /tmp/somefile.ln + $ docker container cp -L /tmp/somefile.ln myappcontainer:/tmp/ + +This command copies content of the local `/tmp/somefile` into the file +`/tmp/somefile.ln` in the container. Without `-L` option, the `/tmp/somefile.ln` +preserves its symbolic link but not its content. diff --git a/engine/reference/commandline/container_create.md b/engine/reference/commandline/container_create.md new file mode 100644 index 00000000000..448c58677c6 --- /dev/null +++ b/engine/reference/commandline/container_create.md @@ -0,0 +1,30 @@ +--- +datafolder: engine-cli +datafile: docker_container_create +title: docker container create +--- + + + +{% include cli.md %} + +## Examples + +### Specify isolation technology for container (--isolation) + +This option is useful in situations where you are running Docker containers on +Windows. The `--isolation=` option sets a container's isolation +technology. On Linux, the only supported is the `default` option which uses +Linux namespaces. On Microsoft Windows, you can specify these values: + +* `default`: Use the value specified by the Docker daemon's `--exec-opt` . If the `daemon` does not specify an isolation technology, Microsoft Windows uses `process` as its default value. +* `process`: Namespace isolation only. +* `hyperv`: Hyper-V hypervisor partition-based isolation. + +Specifying the `--isolation` flag without a value is the same as setting `--isolation="default"`. diff --git a/engine/reference/commandline/container_diff.md b/engine/reference/commandline/container_diff.md new file mode 100644 index 00000000000..7cf5e730f95 --- /dev/null +++ b/engine/reference/commandline/container_diff.md @@ -0,0 +1,43 @@ +--- +datafolder: engine-cli +datafile: docker_container_diff +title: docker container diff +--- + + + +{% include cli.md %} + +## Examples + +Inspect the changes to an `nginx` container: + +```bash +$ docker diff 1fdfd1f54c1b + +C /dev +C /dev/console +C /dev/core +C /dev/stdout +C /dev/fd +C /dev/ptmx +C /dev/stderr +C /dev/stdin +C /run +A /run/nginx.pid +C /var/lib/nginx/tmp +A /var/lib/nginx/tmp/client_body +A /var/lib/nginx/tmp/fastcgi +A /var/lib/nginx/tmp/proxy +A /var/lib/nginx/tmp/scgi +A /var/lib/nginx/tmp/uwsgi +C /var/log/nginx +A /var/log/nginx/access.log +A /var/log/nginx/error.log +``` diff --git a/engine/reference/commandline/container_exec.md b/engine/reference/commandline/container_exec.md new file mode 100644 index 00000000000..e7cefba1bb4 --- /dev/null +++ b/engine/reference/commandline/container_exec.md @@ -0,0 +1,30 @@ +--- +datafolder: engine-cli +datafile: docker_container_exec +title: docker container exec +--- + + + +{% include cli.md %} + +## Examples + + $ docker run --name ubuntu_bash --rm -i -t ubuntu bash + +This will create a container named `ubuntu_bash` and start a Bash session. + + $ docker exec -d ubuntu_bash touch /tmp/execWorks + +This will create a new file `/tmp/execWorks` inside the running container +`ubuntu_bash`, in the background. + + $ docker exec -it ubuntu_bash bash + +This will create a new Bash session in the container `ubuntu_bash`. diff --git a/engine/reference/commandline/container_export.md b/engine/reference/commandline/container_export.md new file mode 100644 index 00000000000..220bf2f5446 --- /dev/null +++ b/engine/reference/commandline/container_export.md @@ -0,0 +1,34 @@ +--- +datafolder: engine-cli +datafile: docker_container_export +title: docker container export +--- + + + +{% include cli.md %} + +## Examples + +Export the contents of the container called angry_bell to a tar file +called angry_bell.tar: + +```bash +$ docker export angry_bell > angry_bell.tar + +$ docker export --output=angry_bell-latest.tar angry_bell + +$ ls -sh angry_bell.tar + +321M angry_bell.tar + +$ ls -sh angry_bell-latest.tar + +321M angry_bell-latest.tar +``` diff --git a/engine/reference/commandline/container_inspect.md b/engine/reference/commandline/container_inspect.md new file mode 100644 index 00000000000..ac2110e2390 --- /dev/null +++ b/engine/reference/commandline/container_inspect.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_container_inspect +title: docker container inspect +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/container_kill.md b/engine/reference/commandline/container_kill.md new file mode 100644 index 00000000000..d9bcd8c7a2b --- /dev/null +++ b/engine/reference/commandline/container_kill.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_container_kill +title: docker container kill +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/container_logs.md b/engine/reference/commandline/container_logs.md new file mode 100644 index 00000000000..40f1bcbd60c --- /dev/null +++ b/engine/reference/commandline/container_logs.md @@ -0,0 +1,111 @@ +--- +datafolder: engine-cli +datafile: docker_container_logs +title: docker container logs +--- + + + +{% include cli.md %} + +## Examples + +### Display all containers, including non-running + +```bash +$ docker container ls -a + +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +a87ecb4f327c fedora:20 /bin/sh -c #(nop) MA 20 minutes ago Exit 0 desperate_brattain +01946d9d34d8 vpavlin/rhel7:latest /bin/sh -c #(nop) MA 33 minutes ago Exit 0 thirsty_bell +c1d3b0166030 acffc0358b9e /bin/sh -c yum -y up 2 weeks ago Exit 1 determined_torvalds +41d50ecd2f57 fedora:20 /bin/sh -c #(nop) MA 2 weeks ago Exit 0 drunk_pike +``` + +### Display only IDs of all containers, including non-running + +```bash +$ docker container ls -a -q + +a87ecb4f327c +01946d9d34d8 +c1d3b0166030 +41d50ecd2f57 +``` + +# Display only IDs of all containers that have the name `determined_torvalds` + +```bash +$ docker container ls -a -q --filter=name=determined_torvalds + +c1d3b0166030 +``` + +### Display containers with their commands + +```bash +{% raw %} +$ docker container ls --format "{{.ID}}: {{.Command}}" + +a87ecb4f327c: /bin/sh -c #(nop) MA +01946d9d34d8: /bin/sh -c #(nop) MA +c1d3b0166030: /bin/sh -c yum -y up +41d50ecd2f57: /bin/sh -c #(nop) MA +{% endraw %} +``` + +### Display containers with their labels in a table + +```bash +{% raw %} +$ docker container ls --format "table {{.ID}}\t{{.Labels}}" + +CONTAINER ID LABELS +a87ecb4f327c com.docker.swarm.node=ubuntu,com.docker.swarm.storage=ssd +01946d9d34d8 +c1d3b0166030 com.docker.swarm.node=debian,com.docker.swarm.cpu=6 +41d50ecd2f57 com.docker.swarm.node=fedora,com.docker.swarm.cpu=3,com.docker.swarm.storage=ssd +{% endraw %} +``` + +### Display containers with their node label in a table + +```bash +{% raw %} +$ docker container ls --format 'table {{.ID}}\t{{(.Label "com.docker.swarm.node")}}' + +CONTAINER ID NODE +a87ecb4f327c ubuntu +01946d9d34d8 +c1d3b0166030 debian +41d50ecd2f57 fedora +{% endraw %} +``` + +### Display containers with `remote-volume` mounted + +```bash +{% raw %} +$ docker container ls --filter volume=remote-volume --format "table {{.ID}}\t{{.Mounts}}" + +CONTAINER ID MOUNTS +9c3527ed70ce remote-volume +{% endraw %} +``` + +### Display containers with a volume mounted in `/data` + +```bash +{% raw %} +$ docker container ls --filter volume=/data --format "table {{.ID}}\t{{.Mounts}}" + +CONTAINER ID MOUNTS +9c3527ed70ce remote-volume +{% endraw %} +``` diff --git a/engine/reference/commandline/container_ls.md b/engine/reference/commandline/container_ls.md new file mode 100644 index 00000000000..e7ae7a5d708 --- /dev/null +++ b/engine/reference/commandline/container_ls.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_container_ls +title: docker container ls +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/container_pause.md b/engine/reference/commandline/container_pause.md new file mode 100644 index 00000000000..6d8c7fc652e --- /dev/null +++ b/engine/reference/commandline/container_pause.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_container_pause +title: docker container pause +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/container_port.md b/engine/reference/commandline/container_port.md new file mode 100644 index 00000000000..36e349467f9 --- /dev/null +++ b/engine/reference/commandline/container_port.md @@ -0,0 +1,55 @@ +--- +datafolder: engine-cli +datafile: docker_container_port +title: docker container port +--- + + + +{% include cli.md %} + +## Examples + +```bash +$ docker ps + +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +b650456536c7 busybox:latest top 54 minutes ago Up 54 minutes 0.0.0.0:1234->9876/tcp, 0.0.0.0:4321->7890/tcp test +``` + +### Find out all the ports mapped + +```bash +$ docker container port test + +7890/tcp -> 0.0.0.0:4321 +9876/tcp -> 0.0.0.0:1234 +``` + +### Find out a specific mapping + +```bash +$ docker container port test 7890/tcp + +0.0.0.0:4321 +``` + +```bash +$ docker container port test 7890 + +0.0.0.0:4321 +``` + +### An example showing error for non-existent mapping + +```bash +$ docker container port test 7890/udp + +2014/06/24 11:53:36 Error: No public port '7890/udp' published for test +``` diff --git a/engine/reference/commandline/container_prune.md b/engine/reference/commandline/container_prune.md new file mode 100644 index 00000000000..fbb2c9031a9 --- /dev/null +++ b/engine/reference/commandline/container_prune.md @@ -0,0 +1,90 @@ +--- +datafolder: engine-cli +datafile: docker_container_prune +title: docker container prune +--- + + + +{% include cli.md %} + +## Examples + +```bash +$ docker container prune +WARNING! This will remove all stopped containers. +Are you sure you want to continue? [y/N] y +Deleted Containers: +4a7f7eebae0f63178aff7eb0aa39cd3f0627a203ab2df258c1a00b456cf20063 +f98f9c2aa1eaf727e4ec9c0283bc7d4aa4762fbdba7f26191f26c97f64090360 + +Total reclaimed space: 212 B +``` + +### Filtering + +The filtering flag (`-f` or `--filter`) format is of "key=value". If there is more +than one filter, then pass multiple flags (e.g., `--filter "foo=bar" --filter "bif=baz"`) + +The currently supported filters are: + +* until (``) - only remove containers created before given timestamp + +The `until` filter can be Unix timestamps, date formatted +timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed +relative to the daemon machine’s time. Supported formats for date +formatted time stamps include RFC3339Nano, RFC3339, `2006-01-02T15:04:05`, +`2006-01-02T15:04:05.999999999`, `2006-01-02Z07:00`, and `2006-01-02`. The local +timezone on the daemon will be used if you do not provide either a `Z` or a +`+-00:00` timezone offset at the end of the timestamp. When providing Unix +timestamps enter seconds[.nanoseconds], where seconds is the number of seconds +that have elapsed since January 1, 1970 (midnight UTC/GMT), not counting leap +seconds (aka Unix epoch or Unix time), and the optional .nanoseconds field is a +fraction of a second no more than nine digits long. + +The following removes containers created more than 5 minutes ago: +```bash +{% raw %} +$ docker ps -a --format 'table {{.ID}}\t{{.Image}}\t{{.Command}}\t{{.CreatedAt}}\t{{.Status}}' +CONTAINER ID IMAGE COMMAND CREATED AT STATUS +61b9efa71024 busybox "sh" 2017-01-04 13:23:33 -0800 PST Exited (0) 41 seconds ago +53a9bc23a516 busybox "sh" 2017-01-04 13:11:59 -0800 PST Exited (0) 12 minutes ago + +$ docker container prune --force --filter "until=5m" +Deleted Containers: +53a9bc23a5168b6caa2bfbefddf1b30f93c7ad57f3dec271fd32707497cb9369 + +Total reclaimed space: 25 B + +$ docker ps -a --format 'table {{.ID}}\t{{.Image}}\t{{.Command}}\t{{.CreatedAt}}\t{{.Status}}' +CONTAINER ID IMAGE COMMAND CREATED AT STATUS +61b9efa71024 busybox "sh" 2017-01-04 13:23:33 -0800 PST Exited (0) 44 seconds ago +{% endraw %} +``` + +The following removes containers created before `2017-01-04T13:10:00`: + +```bash +{% raw %} +$ docker ps -a --format 'table {{.ID}}\t{{.Image}}\t{{.Command}}\t{{.CreatedAt}}\t{{.Status}}' +CONTAINER ID IMAGE COMMAND CREATED AT STATUS +53a9bc23a516 busybox "sh" 2017-01-04 13:11:59 -0800 PST Exited (0) 7 minutes ago +4a75091a6d61 busybox "sh" 2017-01-04 13:09:53 -0800 PST Exited (0) 9 minutes ago + +$ docker container prune --force --filter "until=2017-01-04T13:10:00" +Deleted Containers: +4a75091a6d618526fcd8b33ccd6e5928ca2a64415466f768a6180004b0c72c6c + +Total reclaimed space: 27 B + +$ docker ps -a --format 'table {{.ID}}\t{{.Image}}\t{{.Command}}\t{{.CreatedAt}}\t{{.Status}}' +CONTAINER ID IMAGE COMMAND CREATED AT STATUS +53a9bc23a516 busybox "sh" 2017-01-04 13:11:59 -0800 PST Exited (0) 9 minutes ago +{% endraw %} +``` diff --git a/engine/reference/commandline/container_rename.md b/engine/reference/commandline/container_rename.md new file mode 100644 index 00000000000..629b10fa301 --- /dev/null +++ b/engine/reference/commandline/container_rename.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_container_rename +title: docker container rename +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/container_restart.md b/engine/reference/commandline/container_restart.md new file mode 100644 index 00000000000..d6fa3947134 --- /dev/null +++ b/engine/reference/commandline/container_restart.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_container_restart +title: docker container restart +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/container_rm.md b/engine/reference/commandline/container_rm.md new file mode 100644 index 00000000000..9686dd8b32a --- /dev/null +++ b/engine/reference/commandline/container_rm.md @@ -0,0 +1,50 @@ +--- +datafolder: engine-cli +datafile: docker_container_rm +title: docker container rm +--- + + + +{% include cli.md %} + +## Examples + +### Removing a container using its ID + +To remove a container using its ID, find either from a **docker ps -a** +command, or use the ID returned from the **docker run** command, or retrieve +it from a file used to store it using the **docker run --cidfile**: + + $ docker container rm abebf7571666 + +### Removing a container using the container name + +The name of the container can be found using the **docker ps -a** +command. The use that name as follows: + + $ docker container rm hopeful_morse + +### Removing a container and all associated volumes + + $ docker container rm -v redis + redis + +This command will remove the container and any volumes associated with it. +Note that if a volume was specified with a name, it will not be removed. + + $ docker create -v awesome:/foo -v /bar --name hello redis + + hello + + $ docker container rm -v hello + +In this example, the volume for `/foo` will remain in tact, but the volume for +`/bar` will be removed. The same behavior holds for volumes inherited with +`--volumes-from`. diff --git a/engine/reference/commandline/container_run.md b/engine/reference/commandline/container_run.md new file mode 100644 index 00000000000..78344e8285f --- /dev/null +++ b/engine/reference/commandline/container_run.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_container_run +title: docker container run +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/container_start.md b/engine/reference/commandline/container_start.md new file mode 100644 index 00000000000..ddcc2cec1fd --- /dev/null +++ b/engine/reference/commandline/container_start.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_container_start +title: docker container start +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/container_stats.md b/engine/reference/commandline/container_stats.md new file mode 100644 index 00000000000..9498f7bb173 --- /dev/null +++ b/engine/reference/commandline/container_stats.md @@ -0,0 +1,32 @@ +--- +datafolder: engine-cli +datafile: docker_container_stats +title: docker container stats +--- + + + +{% include cli.md %} + +## Examples + +Running `docker container stats` on all running containers + + $ docker container stats + CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O + 1285939c1fd3 0.07% 796 KiB / 64 MiB 1.21% 788 B / 648 B 3.568 MB / 512 KB + 9c76f7834ae2 0.07% 2.746 MiB / 64 MiB 4.29% 1.266 KB / 648 B 12.4 MB / 0 B + d1ea048f04e4 0.03% 4.583 MiB / 64 MiB 6.30% 2.854 KB / 648 B 27.7 MB / 0 B + +Running `docker container stats` on multiple containers by name and id. + + $ docker container stats fervent_panini 5acfcb1b4fd1 + CONTAINER CPU % MEM USAGE/LIMIT MEM % NET I/O + 5acfcb1b4fd1 0.00% 115.2 MiB/1.045 GiB 11.03% 1.422 kB/648 B + fervent_panini 0.02% 11.08 MiB/1.045 GiB 1.06% 648 B/648 B diff --git a/engine/reference/commandline/container_stop.md b/engine/reference/commandline/container_stop.md new file mode 100644 index 00000000000..79a187fd5bf --- /dev/null +++ b/engine/reference/commandline/container_stop.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_container_stop +title: docker container stop +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/container_top.md b/engine/reference/commandline/container_top.md new file mode 100644 index 00000000000..918115a9aaf --- /dev/null +++ b/engine/reference/commandline/container_top.md @@ -0,0 +1,23 @@ +--- +datafolder: engine-cli +datafile: docker_container_top +title: docker container top +--- + + + +{% include cli.md %} + +## Examples + +Run **docker container top** with the ps option of -x: + + $ docker container top 8601afda2b -x + PID TTY STAT TIME COMMAND + 16623 ? Ss 0:00 sleep 99999 diff --git a/engine/reference/commandline/container_unpause.md b/engine/reference/commandline/container_unpause.md new file mode 100644 index 00000000000..4d2a33dc0a4 --- /dev/null +++ b/engine/reference/commandline/container_unpause.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_container_unpause +title: docker container unpause +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/container_update.md b/engine/reference/commandline/container_update.md new file mode 100644 index 00000000000..fcaf7485c82 --- /dev/null +++ b/engine/reference/commandline/container_update.md @@ -0,0 +1,84 @@ +--- +datafolder: engine-cli +datafile: docker_container_update +title: docker container update +--- + + + +{% include cli.md %} + +## Examples + +### Update a container's cpu-shares + +To limit a container's cpu-shares to 512, first identify the container +name or ID. You can use **docker ps** to find these values. You can also +use the ID returned from the **docker run** command. Then, do the following: + +```bash +$ docker container update --cpu-shares 512 abebf7571666 +``` + +### Update a container with cpu-shares and memory + +To update multiple resource configurations for multiple containers: + +```bash +$ docker container update --cpu-shares 512 -m 300M abebf7571666 hopeful_morse +``` + +### Update a container's kernel memory constraints + +You can update a container's kernel memory limit using the **--kernel-memory** +option. On kernel version older than 4.6, this option can be updated on a +running container only if the container was started with **--kernel-memory**. +If the container was started *without* **--kernel-memory** you need to stop +the container before updating kernel memory. + +For example, if you started a container with this command: + +```bash +$ docker run -dit --name test --kernel-memory 50M ubuntu bash +``` + +You can update kernel memory while the container is running: + +```bash +$ docker container update --kernel-memory 80M test +``` + +If you started a container *without* kernel memory initialized: + +```bash +$ docker run -dit --name test2 --memory 300M ubuntu bash +``` + +Update kernel memory of running container `test2` will fail. You need to stop +the container before updating the **--kernel-memory** setting. The next time you +start it, the container uses the new value. + +Kernel version newer than (include) 4.6 does not have this limitation, you +can use `--kernel-memory` the same way as other options. + +### Update a container's restart policy + +You can change a container's restart policy on a running container. The new +restart policy takes effect instantly after you run `docker container update` on a +container. + +To update restart policy for one or more containers: + +```bash +$ docker container update --restart=on-failure:3 abebf7571666 hopeful_morse +``` + +Note that if the container is started with "--rm" flag, you cannot update the restart +policy for it. The `AutoRemove` and `RestartPolicy` are mutually exclusive for the +container. diff --git a/engine/reference/commandline/container_wait.md b/engine/reference/commandline/container_wait.md new file mode 100644 index 00000000000..b1f309f2d4a --- /dev/null +++ b/engine/reference/commandline/container_wait.md @@ -0,0 +1,29 @@ +--- +datafolder: engine-cli +datafile: docker_container_wait +title: docker container wait +--- + + + +{% include cli.md %} + +## Examples + +# EXAMPLES + +```bash +$ docker run -d fedora sleep 99 + +079b83f558a2bc52ecad6b2a5de13622d584e6bb1aea058c11b36511e85e7622 + +$ docker container wait 079b83f558a2bc + +0 +``` diff --git a/engine/reference/commandline/cp.md b/engine/reference/commandline/cp.md new file mode 100644 index 00000000000..8a984d9e994 --- /dev/null +++ b/engine/reference/commandline/cp.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_cp +title: docker cp +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/create.md b/engine/reference/commandline/create.md new file mode 100644 index 00000000000..d5c2cfd5ab0 --- /dev/null +++ b/engine/reference/commandline/create.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_create +title: docker create +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/deploy.md b/engine/reference/commandline/deploy.md new file mode 100644 index 00000000000..f371a91a62a --- /dev/null +++ b/engine/reference/commandline/deploy.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_deploy +title: docker deploy +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/diff.md b/engine/reference/commandline/diff.md new file mode 100644 index 00000000000..186b5b791f9 --- /dev/null +++ b/engine/reference/commandline/diff.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_diff +title: docker diff +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/docker.md b/engine/reference/commandline/docker.md new file mode 100644 index 00000000000..f22799439d9 --- /dev/null +++ b/engine/reference/commandline/docker.md @@ -0,0 +1,17 @@ +--- +datafolder: engine-cli +datafile: docker +title: docker +redirect_from: +- /engine/reference/commandline/ +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/dockerd.md b/engine/reference/commandline/dockerd.md new file mode 100644 index 00000000000..258c90f669b --- /dev/null +++ b/engine/reference/commandline/dockerd.md @@ -0,0 +1,22 @@ +--- +redirect_from: +- /reference/commandline/dockerd/ +- /reference/commandline/daemon/ +- /engine/reference/commandline/daemon/ +description: The daemon command description and usage +keywords: +- container, daemon, runtime +title: dockerd +datafolder: dockerd-cli +datafile: dockerd +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/events.md b/engine/reference/commandline/events.md new file mode 100644 index 00000000000..40cd17ff1a5 --- /dev/null +++ b/engine/reference/commandline/events.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_events +title: docker events +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/exec.md b/engine/reference/commandline/exec.md new file mode 100644 index 00000000000..397ee9aeed8 --- /dev/null +++ b/engine/reference/commandline/exec.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_exec +title: docker exec +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/export.md b/engine/reference/commandline/export.md new file mode 100644 index 00000000000..6fb2f79ee26 --- /dev/null +++ b/engine/reference/commandline/export.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_export +title: docker export +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/history.md b/engine/reference/commandline/history.md new file mode 100644 index 00000000000..c5491c4b276 --- /dev/null +++ b/engine/reference/commandline/history.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_history +title: docker history +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/image.md b/engine/reference/commandline/image.md new file mode 100644 index 00000000000..02136fb3b7d --- /dev/null +++ b/engine/reference/commandline/image.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_image +title: docker image +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/image_build.md b/engine/reference/commandline/image_build.md new file mode 100644 index 00000000000..71a7fc4e148 --- /dev/null +++ b/engine/reference/commandline/image_build.md @@ -0,0 +1,279 @@ +--- +datafolder: engine-cli +datafile: docker_image_build +title: docker image build +--- + + + +{% include cli.md %} + +## Examples + +### Build with PATH + +```bash +$ docker build . + +Uploading context 10240 bytes +Step 1/3 : FROM busybox +Pulling repository busybox + ---> e9aa60c60128MB/2.284 MB (100%) endpoint: https://cdn-registry-1.docker.io/v1/ +Step 2/3 : RUN ls -lh / + ---> Running in 9c9e81692ae9 +total 24 +drwxr-xr-x 2 root root 4.0K Mar 12 2013 bin +drwxr-xr-x 5 root root 4.0K Oct 19 00:19 dev +drwxr-xr-x 2 root root 4.0K Oct 19 00:19 etc +drwxr-xr-x 2 root root 4.0K Nov 15 23:34 lib +lrwxrwxrwx 1 root root 3 Mar 12 2013 lib64 -> lib +dr-xr-xr-x 116 root root 0 Nov 15 23:34 proc +lrwxrwxrwx 1 root root 3 Mar 12 2013 sbin -> bin +dr-xr-xr-x 13 root root 0 Nov 15 23:34 sys +drwxr-xr-x 2 root root 4.0K Mar 12 2013 tmp +drwxr-xr-x 2 root root 4.0K Nov 15 23:34 usr + ---> b35f4035db3f +Step 3/3 : CMD echo Hello world + ---> Running in 02071fceb21b + ---> f52f38b7823e +Successfully built f52f38b7823e +Removing intermediate container 9c9e81692ae9 +Removing intermediate container 02071fceb21b +``` + +This example specifies that the `PATH` is `.`, and so all the files in the +local directory get `tar`d and sent to the Docker daemon. The `PATH` specifies +where to find the files for the "context" of the build on the Docker daemon. +Remember that the daemon could be running on a remote machine and that no +parsing of the Dockerfile happens at the client side (where you're running +`docker build`). That means that *all* the files at `PATH` get sent, not just +the ones listed to [*ADD*](../builder.md#add) in the Dockerfile. + +The transfer of context from the local machine to the Docker daemon is what the +`docker` client means when you see the "Sending build context" message. + +If you wish to keep the intermediate containers after the build is complete, +you must use `--rm=false`. This does not affect the build cache. + +### Build with URL + +```bash +$ docker build github.com/creack/docker-firefox +``` + +This will clone the GitHub repository and use the cloned repository as context. +The Dockerfile at the root of the repository is used as Dockerfile. You can +specify an arbitrary Git repository by using the `git://` or `git@` scheme. + +```bash +$ docker build -f ctx/Dockerfile http://server/ctx.tar.gz + +Downloading context: http://server/ctx.tar.gz [===================>] 240 B/240 B +Step 1/3 : FROM busybox + ---> 8c2e06607696 +Step 2/3 : ADD ctx/container.cfg / + ---> e7829950cee3 +Removing intermediate container b35224abf821 +Step 3/3 : CMD /bin/ls + ---> Running in fbc63d321d73 + ---> 3286931702ad +Removing intermediate container fbc63d321d73 +Successfully built 377c409b35e4 +``` + +This sends the URL `http://server/ctx.tar.gz` to the Docker daemon, which +downloads and extracts the referenced tarball. The `-f ctx/Dockerfile` +parameter specifies a path inside `ctx.tar.gz` to the `Dockerfile` that is used +to build the image. Any `ADD` commands in that `Dockerfile` that refers to local +paths must be relative to the root of the contents inside `ctx.tar.gz`. In the +example above, the tarball contains a directory `ctx/`, so the `ADD +ctx/container.cfg /` operation works as expected. + +### Build with - + +```bash +$ docker build - < Dockerfile +``` + +This will read a Dockerfile from `STDIN` without context. Due to the lack of a +context, no contents of any local directory will be sent to the Docker daemon. +Since there is no context, a Dockerfile `ADD` only works if it refers to a +remote URL. + +```bash +$ docker build - < context.tar.gz +``` + +This will build an image for a compressed context read from `STDIN`. Supported +formats are: bzip2, gzip and xz. + +### Usage of .dockerignore + +```bash +$ docker build . + +Uploading context 18.829 MB +Uploading context +Step 1/2 : FROM busybox + ---> 769b9341d937 +Step 2/2 : CMD echo Hello world + ---> Using cache + ---> 99cc1ad10469 +Successfully built 99cc1ad10469 +$ echo ".git" > .dockerignore +$ docker build . +Uploading context 6.76 MB +Uploading context +Step 1/2 : FROM busybox + ---> 769b9341d937 +Step 2/2 : CMD echo Hello world + ---> Using cache + ---> 99cc1ad10469 +Successfully built 99cc1ad10469 +``` + +This example shows the use of the `.dockerignore` file to exclude the `.git` +directory from the context. Its effect can be seen in the changed size of the +uploaded context. The builder reference contains detailed information on +[creating a .dockerignore file](../builder.md#dockerignore-file) + +### Tag image (-t) + +```bash +$ docker build -t vieux/apache:2.0 . +``` + +This will build like the previous example, but it will then tag the resulting +image. The repository name will be `vieux/apache` and the tag will be `2.0`. +[Read more about valid tags](tag.md). + +You can apply multiple tags to an image. For example, you can apply the `latest` +tag to a newly built image and add another tag that references a specific +version. +For example, to tag an image both as `whenry/fedora-jboss:latest` and +`whenry/fedora-jboss:v2.1`, use the following: + +```bash +$ docker build -t whenry/fedora-jboss:latest -t whenry/fedora-jboss:v2.1 . +``` +### Specify Dockerfile (-f) + +```bash +$ docker build -f Dockerfile.debug . +``` + +This will use a file called `Dockerfile.debug` for the build instructions +instead of `Dockerfile`. + +```bash +$ docker build -f dockerfiles/Dockerfile.debug -t myapp_debug . +$ docker build -f dockerfiles/Dockerfile.prod -t myapp_prod . +``` + +The above commands will build the current build context (as specified by the +`.`) twice, once using a debug version of a `Dockerfile` and once using a +production version. + +```bash +$ cd /home/me/myapp/some/dir/really/deep +$ docker build -f /home/me/myapp/dockerfiles/debug /home/me/myapp +$ docker build -f ../../../../dockerfiles/debug /home/me/myapp +``` + +These two `docker build` commands do the exact same thing. They both use the +contents of the `debug` file instead of looking for a `Dockerfile` and will use +`/home/me/myapp` as the root of the build context. Note that `debug` is in the +directory structure of the build context, regardless of how you refer to it on +the command line. + +> **Note:** +> `docker build` will return a `no such file or directory` error if the +> file or directory does not exist in the uploaded context. This may +> happen if there is no context, or if you specify a file that is +> elsewhere on the Host system. The context is limited to the current +> directory (and its children) for security reasons, and to ensure +> repeatable builds on remote Docker hosts. This is also the reason why +> `ADD ../file` will not work. + +### Optional parent cgroup (--cgroup-parent) + +When `docker build` is run with the `--cgroup-parent` option the containers +used in the build will be run with the [corresponding `docker run` +flag](../run.md#specifying-custom-cgroups). + +### Set ulimits in container (--ulimit) + +Using the `--ulimit` option with `docker build` will cause each build step's +container to be started using those [`--ulimit` +flag values](./run.md#set-ulimits-in-container-ulimit). + +### Set build-time variables (--build-arg) + +You can use `ENV` instructions in a Dockerfile to define variable +values. These values persist in the built image. However, often +persistence is not what you want. Users want to specify variables differently +depending on which host they build an image on. + +A good example is `http_proxy` or source versions for pulling intermediate +files. The `ARG` instruction lets Dockerfile authors define values that users +can set at build-time using the `--build-arg` flag: + +```bash +$ docker build --build-arg HTTP_PROXY=http://10.20.30.2:1234 . +``` + +This flag allows you to pass the build-time variables that are +accessed like regular environment variables in the `RUN` instruction of the +Dockerfile. Also, these values don't persist in the intermediate or final images +like `ENV` values do. + +Using this flag will not alter the output you see when the `ARG` lines from the +Dockerfile are echoed during the build process. + +For detailed information on using `ARG` and `ENV` instructions, see the +[Dockerfile reference](../builder.md). + +### Optional security options (--security-opt) + +This flag is only supported on a daemon running on Windows, and only supports +the `credentialspec` option. The `credentialspec` must be in the format +`file://spec.txt` or `registry://keyname`. + +### Specify isolation technology for container (--isolation) + +This option is useful in situations where you are running Docker containers on +Windows. The `--isolation=` option sets a container's isolation +technology. On Linux, the only supported is the `default` option which uses +Linux namespaces. On Microsoft Windows, you can specify these values: + + +| Value | Description | +|-----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `default` | Use the value specified by the Docker daemon's `--exec-opt` . If the `daemon` does not specify an isolation technology, Microsoft Windows uses `process` as its default value. | +| `process` | Namespace isolation only. | +| `hyperv` | Hyper-V hypervisor partition-based isolation. | + +Specifying the `--isolation` flag without a value is the same as setting `--isolation="default"`. + + +### Squash an image's layers (--squash) **Experimental Only** + +Once the image is built, squash the new layers into a new image with a single +new layer. Squashing does not destroy any existing image, rather it creates a new +image with the content of the squashed layers. This effectively makes it look +like all `Dockerfile` commands were created with a single layer. The build +cache is preserved with this method. + +**Note**: using this option means the new image will not be able to take +advantage of layer sharing with other images and may use significantly more +space. + +**Note**: using this option you may see significantly more space used due to +storing two copies of the image, one for the build cache with all the cache +layers in tact, and one for the squashed version. diff --git a/engine/reference/commandline/image_history.md b/engine/reference/commandline/image_history.md new file mode 100644 index 00000000000..566a928e62f --- /dev/null +++ b/engine/reference/commandline/image_history.md @@ -0,0 +1,40 @@ +--- +datafolder: engine-cli +datafile: docker_image_history +title: docker image history +--- + + + +{% include cli.md %} + +## Examples + +```bash +$ docker history fedora + +IMAGE CREATED CREATED BY SIZE COMMENT +105182bb5e8b 5 days ago /bin/sh -c #(nop) ADD file:71356d2ad59aa3119d 372.7 MB +73bd853d2ea5 13 days ago /bin/sh -c #(nop) MAINTAINER Lokesh Mandvekar 0 B +511136ea3c5a 10 months ago 0 B Imported from - +``` + +### Display comments in the image history + +The `docker commit` command has a **-m** flag for adding comments to the image. These comments will be displayed in the image history. + +```bash +$ sudo docker history docker:scm + +IMAGE CREATED CREATED BY SIZE COMMENT +2ac9d1098bf1 3 months ago /bin/bash 241.4 MB Added Apache to Fedora base image +88b42ffd1f7c 5 months ago /bin/sh -c #(nop) ADD file:1fd8d7f9f6557cafc7 373.7 MB +c69cab00d6ef 5 months ago /bin/sh -c #(nop) MAINTAINER Lokesh Mandvekar 0 B +511136ea3c5a 19 months ago 0 B Imported from - +``` diff --git a/engine/reference/commandline/image_import.md b/engine/reference/commandline/image_import.md new file mode 100644 index 00000000000..ab4957a1b8b --- /dev/null +++ b/engine/reference/commandline/image_import.md @@ -0,0 +1,51 @@ +--- +datafolder: engine-cli +datafile: docker_image_import +title: docker image import +--- + + + +{% include cli.md %} + +## Examples + +### Import from a remote location + + # docker image import http://example.com/exampleimage.tgz example/imagerepo + +### Import from a local file + +Import to docker via pipe and stdin: + + # cat exampleimage.tgz | docker image import - example/imagelocal + +Import with a commit message. + + # cat exampleimage.tgz | docker image import --message "New image imported from tarball" - exampleimagelocal:new + +Import to a Docker image from a local file. + + # docker image import /path/to/exampleimage.tgz + + +### Import from a local file and tag + +Import to docker via pipe and stdin: + + # cat exampleimageV2.tgz | docker image import - example/imagelocal:V-2.0 + +### Import from a local directory + + # tar -c . | docker image import - exampleimagedir + +### Apply specified Dockerfile instructions while importing the image +This example sets the docker image ENV variable DEBUG to true by default. + + # tar -c . | docker image import -c="ENV DEBUG true" - exampleimagedir diff --git a/engine/reference/commandline/image_inspect.md b/engine/reference/commandline/image_inspect.md new file mode 100644 index 00000000000..9fab2e9b951 --- /dev/null +++ b/engine/reference/commandline/image_inspect.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_image_inspect +title: docker image inspect +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/image_load.md b/engine/reference/commandline/image_load.md new file mode 100644 index 00000000000..f0490bd15b2 --- /dev/null +++ b/engine/reference/commandline/image_load.md @@ -0,0 +1,45 @@ +--- +datafolder: engine-cli +datafile: docker_image_load +title: docker image load +--- + + + +{% include cli.md %} + +## Examples + +```bash +$ docker images + +REPOSITORY TAG IMAGE ID CREATED SIZE +busybox latest 769b9341d937 7 weeks ago 2.489 MB + +$ docker load --input fedora.tar + +# […] + +Loaded image: fedora:rawhide + +# […] + +Loaded image: fedora:20 + +# […] + +$ docker images + +REPOSITORY TAG IMAGE ID CREATED SIZE +busybox latest 769b9341d937 7 weeks ago 2.489 MB +fedora rawhide 0d20aec6529d 7 weeks ago 387 MB +fedora 20 58394af37342 7 weeks ago 385.5 MB +fedora heisenbug 58394af37342 7 weeks ago 385.5 MB +fedora latest 58394af37342 7 weeks ago 385.5 MB +``` diff --git a/engine/reference/commandline/image_ls.md b/engine/reference/commandline/image_ls.md new file mode 100644 index 00000000000..75b6a9be070 --- /dev/null +++ b/engine/reference/commandline/image_ls.md @@ -0,0 +1,107 @@ +--- +datafolder: engine-cli +datafile: docker_image_ls +title: docker image ls +--- + + + +{% include cli.md %} + +## Examples + +### Listing the images + +To list the images in a local repository (not the registry) run: + + $ docker image ls + +The list will contain the image repository name, a tag for the image, and an +image ID, when it was created and its virtual size. Columns: REPOSITORY, TAG, +IMAGE ID, CREATED, and SIZE. + +The `docker image ls` command takes an optional `[REPOSITORY[:TAG]]` argument +that restricts the list to images that match the argument. If you specify +`REPOSITORY`but no `TAG`, the `docker image ls` command lists all images in the +given repository. + + $ docker image ls java + +The `[REPOSITORY[:TAG]]` value must be an "exact match". This means that, for example, +`docker image ls jav` does not match the image `java`. + +If both `REPOSITORY` and `TAG` are provided, only images matching that +repository and tag are listed. To find all local images in the "java" +repository with tag "8" you can use: + + $ docker image ls java:8 + +To get a verbose list of images which contains all the intermediate images +used in builds use **-a**: + + $ docker image ls -a + +Previously, the docker image ls command supported the --tree and --dot arguments, +which displayed different visualizations of the image data. Docker core removed +this functionality in the 1.7 version. If you liked this functionality, you can +still find it in the third-party dockviz tool: https://github.com/justone/dockviz. + +### Listing images in a desired format + +When using the --format option, the image command will either output the data +exactly as the template declares or, when using the `table` directive, will +include column headers as well. You can use special characters like `\t` for +inserting tab spacing between columns. + +The following example uses a template without headers and outputs the ID and +Repository entries separated by a colon for all images: + +```bash +{% raw %} +$ docker images --format "{{.ID}}: {{.Repository}}" + +77af4d6b9913: +b6fa739cedf5: committ +78a85c484bad: ipbabble +30557a29d5ab: docker +5ed6274db6ce: +746b819f315e: postgres +746b819f315e: postgres +746b819f315e: postgres +746b819f315e: postgres +{% endraw %} +``` + +To list all images with their repository and tag in a table format you can use: + +```bash +{% raw %} +$ docker images --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}" + +IMAGE ID REPOSITORY TAG +77af4d6b9913 +b6fa739cedf5 committ latest +78a85c484bad ipbabble +30557a29d5ab docker latest +5ed6274db6ce +746b819f315e postgres 9 +746b819f315e postgres 9.3 +746b819f315e postgres 9.3.5 +746b819f315e postgres latest +{% endraw %} +``` + +Valid template placeholders are listed above. + +### Listing only the shortened image IDs + +Listing just the shortened image IDs. This can be useful for some automated +tools. + + $ docker image ls -q diff --git a/engine/reference/commandline/image_prune.md b/engine/reference/commandline/image_prune.md new file mode 100644 index 00000000000..651ed413f5a --- /dev/null +++ b/engine/reference/commandline/image_prune.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_image_prune +title: docker image prune +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/image_pull.md b/engine/reference/commandline/image_pull.md new file mode 100644 index 00000000000..12832e02872 --- /dev/null +++ b/engine/reference/commandline/image_pull.md @@ -0,0 +1,197 @@ +--- +datafolder: engine-cli +datafile: docker_image_pull +title: docker image pull +--- + + + +{% include cli.md %} + +## Examples + +### Pull an image from Docker Hub + +To download a particular image, or set of images (i.e., a repository), use +`docker image pull`. If no tag is provided, Docker Engine uses the `:latest` tag as a +default. This command pulls the `debian:latest` image: + + $ docker image pull debian + + Using default tag: latest + latest: Pulling from library/debian + fdd5d7827f33: Pull complete + a3ed95caeb02: Pull complete + Digest: sha256:e7d38b3517548a1c71e41bffe9c8ae6d6d29546ce46bf62159837aad072c90aa + Status: Downloaded newer image for debian:latest + +Docker images can consist of multiple layers. In the example above, the image +consists of two layers; `fdd5d7827f33` and `a3ed95caeb02`. + +Layers can be reused by images. For example, the `debian:jessie` image shares +both layers with `debian:latest`. Pulling the `debian:jessie` image therefore +only pulls its metadata, but not its layers, because all layers are already +present locally: + + $ docker image pull debian:jessie + + jessie: Pulling from library/debian + fdd5d7827f33: Already exists + a3ed95caeb02: Already exists + Digest: sha256:a9c958be96d7d40df920e7041608f2f017af81800ca5ad23e327bc402626b58e + Status: Downloaded newer image for debian:jessie + +To see which images are present locally, use the **docker-images(1)** +command: + + $ docker images + + REPOSITORY TAG IMAGE ID CREATED SIZE + debian jessie f50f9524513f 5 days ago 125.1 MB + debian latest f50f9524513f 5 days ago 125.1 MB + +Docker uses a content-addressable image store, and the image ID is a SHA256 +digest covering the image's configuration and layers. In the example above, +`debian:jessie` and `debian:latest` have the same image ID because they are +actually the *same* image tagged with different names. Because they are the +same image, their layers are stored only once and do not consume extra disk +space. + +For more information about images, layers, and the content-addressable store, +refer to [understand images, containers, and storage drivers](https://docs.docker.com/engine/userguide/storagedriver/imagesandcontainers/) +in the online documentation. + + +### Pull an image by digest (immutable identifier) + +So far, you've pulled images by their name (and "tag"). Using names and tags is +a convenient way to work with images. When using tags, you can `docker image pull` an +image again to make sure you have the most up-to-date version of that image. +For example, `docker image pull ubuntu:14.04` pulls the latest version of the Ubuntu +14.04 image. + +In some cases you don't want images to be updated to newer versions, but prefer +to use a fixed version of an image. Docker enables you to pull an image by its +*digest*. When pulling an image by digest, you specify *exactly* which version +of an image to pull. Doing so, allows you to "pin" an image to that version, +and guarantee that the image you're using is always the same. + +To know the digest of an image, pull the image first. Let's pull the latest +`ubuntu:14.04` image from Docker Hub: + + $ docker image pull ubuntu:14.04 + + 14.04: Pulling from library/ubuntu + 5a132a7e7af1: Pull complete + fd2731e4c50c: Pull complete + 28a2f68d1120: Pull complete + a3ed95caeb02: Pull complete + Digest: sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2 + Status: Downloaded newer image for ubuntu:14.04 + +Docker prints the digest of the image after the pull has finished. In the example +above, the digest of the image is: + + sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2 + +Docker also prints the digest of an image when *pushing* to a registry. This +may be useful if you want to pin to a version of the image you just pushed. + +A digest takes the place of the tag when pulling an image, for example, to +pull the above image by digest, run the following command: + + $ docker image pull ubuntu@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2 + + sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2: Pulling from library/ubuntu + 5a132a7e7af1: Already exists + fd2731e4c50c: Already exists + 28a2f68d1120: Already exists + a3ed95caeb02: Already exists + Digest: sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2 + Status: Downloaded newer image for ubuntu@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2 + +Digest can also be used in the `FROM` of a Dockerfile, for example: + + FROM ubuntu@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2 + MAINTAINER some maintainer + +> **Note**: Using this feature "pins" an image to a specific version in time. +> Docker will therefore not pull updated versions of an image, which may include +> security updates. If you want to pull an updated image, you need to change the +> digest accordingly. + +### Pulling from a different registry + +By default, `docker image pull` pulls images from Docker Hub. It is also possible to +manually specify the path of a registry to pull from. For example, if you have +set up a local registry, you can specify its path to pull from it. A registry +path is similar to a URL, but does not contain a protocol specifier (`https://`). + +The following command pulls the `testing/test-image` image from a local registry +listening on port 5000 (`myregistry.local:5000`): + + $ docker image pull myregistry.local:5000/testing/test-image + +Registry credentials are managed by **docker-login(1)**. + +Docker uses the `https://` protocol to communicate with a registry, unless the +registry is allowed to be accessed over an insecure connection. Refer to the +[insecure registries](https://docs.docker.com/engine/reference/commandline/daemon/#insecure-registries) +section in the online documentation for more information. + + +### Pull a repository with multiple images + +By default, `docker image pull` pulls a *single* image from the registry. A repository +can contain multiple images. To pull all images from a repository, provide the +`-a` (or `--all-tags`) option when using `docker image pull`. + +This command pulls all images from the `fedora` repository: + + $ docker image pull --all-tags fedora + + Pulling repository fedora + ad57ef8d78d7: Download complete + 105182bb5e8b: Download complete + 511136ea3c5a: Download complete + 73bd853d2ea5: Download complete + .... + + Status: Downloaded newer image for fedora + +After the pull has completed use the `docker images` command to see the +images that were pulled. The example below shows all the `fedora` images +that are present locally: + + $ docker images fedora + + REPOSITORY TAG IMAGE ID CREATED SIZE + fedora rawhide ad57ef8d78d7 5 days ago 359.3 MB + fedora 20 105182bb5e8b 5 days ago 372.7 MB + fedora heisenbug 105182bb5e8b 5 days ago 372.7 MB + fedora latest 105182bb5e8b 5 days ago 372.7 MB + + +### Canceling a pull + +Killing the `docker image pull` process, for example by pressing `CTRL-c` while it is +running in a terminal, will terminate the pull operation. + + $ docker image pull fedora + + Using default tag: latest + latest: Pulling from library/fedora + a3ed95caeb02: Pulling fs layer + 236608c7b546: Pulling fs layer + ^C + +> **Note**: Technically, the Engine terminates a pull operation when the +> connection between the Docker Engine daemon and the Docker Engine client +> initiating the pull is lost. If the connection with the Engine daemon is +> lost for other reasons than a manual interaction, the pull is also aborted. diff --git a/engine/reference/commandline/image_push.md b/engine/reference/commandline/image_push.md new file mode 100644 index 00000000000..b72e77cafdc --- /dev/null +++ b/engine/reference/commandline/image_push.md @@ -0,0 +1,40 @@ +--- +datafolder: engine-cli +datafile: docker_image_push +title: docker image push +--- + + + +{% include cli.md %} + +## Examples + +### Pushing a new image to a registry + +First save the new image by finding the container ID (using **docker container ls**) +and then committing it to a new image name. Note that only `a-z0-9-_.` are +allowed when naming images: + + $ docker container commit c16378f943fe rhel-httpd + +Now, push the image to the registry using the image ID. In this example the +registry is on host named `registry-host` and listening on port `5000`. To do +this, tag the image with the host name or IP address, and the port of the +registry: + + $ docker image tag rhel-httpd registry-host:5000/myadmin/rhel-httpd + $ docker image push registry-host:5000/myadmin/rhel-httpd + +Check that this worked by running: + + $ docker image ls + +You should see both `rhel-httpd` and `registry-host:5000/myadmin/rhel-httpd` +listed. diff --git a/engine/reference/commandline/image_rm.md b/engine/reference/commandline/image_rm.md new file mode 100644 index 00000000000..8879cfb99b8 --- /dev/null +++ b/engine/reference/commandline/image_rm.md @@ -0,0 +1,23 @@ +--- +datafolder: engine-cli +datafile: docker_image_rm +title: docker image rm +--- + + + +{% include cli.md %} + +## Examples + +### Removing an image + +Here is an example of removing an image: + + $ docker image rm fedora/httpd diff --git a/engine/reference/commandline/image_save.md b/engine/reference/commandline/image_save.md new file mode 100644 index 00000000000..d8dfae12950 --- /dev/null +++ b/engine/reference/commandline/image_save.md @@ -0,0 +1,32 @@ +--- +datafolder: engine-cli +datafile: docker_image_save +title: docker image save +--- + + + +{% include cli.md %} + +## Examples + +Save all fedora repository images to a fedora-all.tar and save the latest +fedora image to a fedora-latest.tar: + + $ docker image save fedora > fedora-all.tar + + $ docker image save --output=fedora-latest.tar fedora:latest + + $ ls -sh fedora-all.tar + + 721M fedora-all.tar + + $ ls -sh fedora-latest.tar + + 367M fedora-latest.tar diff --git a/engine/reference/commandline/image_tag.md b/engine/reference/commandline/image_tag.md new file mode 100644 index 00000000000..e24fbf0e86a --- /dev/null +++ b/engine/reference/commandline/image_tag.md @@ -0,0 +1,48 @@ +--- +datafolder: engine-cli +datafile: docker_image_tag +title: docker image tag +--- + + + +{% include cli.md %} + +## Examples + +### Tagging an image referenced by ID + +To tag a local image with ID "0e5574283393" into the "fedora" repository with +"version1.0": + + docker image tag 0e5574283393 fedora/httpd:version1.0 + +### Tagging an image referenced by Name + +To tag a local image with name "httpd" into the "fedora" repository with +"version1.0": + + docker image tag httpd fedora/httpd:version1.0 + +Note that since the tag name is not specified, the alias is created for an +existing local version `httpd:latest`. + +### Tagging an image referenced by Name and Tag + +To tag a local image with name "httpd" and tag "test" into the "fedora" +repository with "version1.0.test": + + docker image tag httpd:test fedora/httpd:version1.0.test + +### Tagging an image for a private repository + +To push an image to a private registry and not the central Docker +registry you must tag it with the registry hostname and port (if needed). + + docker image tag 0e5574283393 myregistryhost:5000/fedora/httpd:version1.0 diff --git a/engine/reference/commandline/images.md b/engine/reference/commandline/images.md new file mode 100644 index 00000000000..d05c07a83d1 --- /dev/null +++ b/engine/reference/commandline/images.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_images +title: docker images +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/import.md b/engine/reference/commandline/import.md new file mode 100644 index 00000000000..f111f1d955a --- /dev/null +++ b/engine/reference/commandline/import.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_import +title: docker import +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/info.md b/engine/reference/commandline/info.md new file mode 100644 index 00000000000..c8d8a018f93 --- /dev/null +++ b/engine/reference/commandline/info.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_info +title: docker info +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/inspect.md b/engine/reference/commandline/inspect.md new file mode 100644 index 00000000000..dcd311e62b6 --- /dev/null +++ b/engine/reference/commandline/inspect.md @@ -0,0 +1,312 @@ +--- +datafolder: engine-cli +datafile: docker_inspect +title: docker inspect +--- + +{% include cli.md %} + +## Examples + +Get information about an image when image name conflicts with the container name, +e.g. both image and container are named rhel7: + + $ docker inspect --type=image rhel7 + [ + { + "Id": "fe01a428b9d9de35d29531e9994157978e8c48fa693e1bf1d221dffbbb67b170", + "Parent": "10acc31def5d6f249b548e01e8ffbaccfd61af0240c17315a7ad393d022c5ca2", + .... + } + ] + +### Getting information on a container + +To get information on a container use its ID or instance name: + + $ docker inspect d2cc496561d6 + [{ + "Id": "d2cc496561d6d520cbc0236b4ba88c362c446a7619992123f11c809cded25b47", + "Created": "2015-06-08T16:18:02.505155285Z", + "Path": "bash", + "Args": [], + "State": { + "Running": false, + "Paused": false, + "Restarting": false, + "OOMKilled": false, + "Dead": false, + "Pid": 0, + "ExitCode": 0, + "Error": "", + "StartedAt": "2015-06-08T16:18:03.643865954Z", + "FinishedAt": "2015-06-08T16:57:06.448552862Z" + }, + "Image": "ded7cd95e059788f2586a51c275a4f151653779d6a7f4dad77c2bd34601d94e4", + "NetworkSettings": { + "Bridge": "", + "SandboxID": "6b4851d1903e16dd6a567bd526553a86664361f31036eaaa2f8454d6f4611f6f", + "HairpinMode": false, + "LinkLocalIPv6Address": "", + "LinkLocalIPv6PrefixLen": 0, + "Ports": {}, + "SandboxKey": "/var/run/docker/netns/6b4851d1903e", + "SecondaryIPAddresses": null, + "SecondaryIPv6Addresses": null, + "EndpointID": "7587b82f0dada3656fda26588aee72630c6fab1536d36e394b2bfbcf898c971d", + "Gateway": "172.17.0.1", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "IPAddress": "172.17.0.2", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "MacAddress": "02:42:ac:12:00:02", + "Networks": { + "bridge": { + "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", + "EndpointID": "7587b82f0dada3656fda26588aee72630c6fab1536d36e394b2bfbcf898c971d", + "Gateway": "172.17.0.1", + "IPAddress": "172.17.0.2", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "MacAddress": "02:42:ac:12:00:02" + } + } + + }, + "ResolvConfPath": "/var/lib/docker/containers/d2cc496561d6d520cbc0236b4ba88c362c446a7619992123f11c809cded25b47/resolv.conf", + "HostnamePath": "/var/lib/docker/containers/d2cc496561d6d520cbc0236b4ba88c362c446a7619992123f11c809cded25b47/hostname", + "HostsPath": "/var/lib/docker/containers/d2cc496561d6d520cbc0236b4ba88c362c446a7619992123f11c809cded25b47/hosts", + "LogPath": "/var/lib/docker/containers/d2cc496561d6d520cbc0236b4ba88c362c446a7619992123f11c809cded25b47/d2cc496561d6d520cbc0236b4ba88c362c446a7619992123f11c809cded25b47-json.log", + "Name": "/adoring_wozniak", + "RestartCount": 0, + "Driver": "devicemapper", + "MountLabel": "", + "ProcessLabel": "", + "Mounts": [ + { + "Source": "/data", + "Destination": "/data", + "Mode": "ro,Z", + "RW": false + "Propagation": "" + } + ], + "AppArmorProfile": "", + "ExecIDs": null, + "HostConfig": { + "Binds": null, + "ContainerIDFile": "", + "Memory": 0, + "MemorySwap": 0, + "CpuShares": 0, + "CpuPeriod": 0, + "CpusetCpus": "", + "CpusetMems": "", + "CpuQuota": 0, + "BlkioWeight": 0, + "OomKillDisable": false, + "Privileged": false, + "PortBindings": {}, + "Links": null, + "PublishAllPorts": false, + "Dns": null, + "DnsSearch": null, + "DnsOptions": null, + "ExtraHosts": null, + "VolumesFrom": null, + "Devices": [], + "NetworkMode": "bridge", + "IpcMode": "", + "PidMode": "", + "UTSMode": "", + "CapAdd": null, + "CapDrop": null, + "RestartPolicy": { + "Name": "no", + "MaximumRetryCount": 0 + }, + "SecurityOpt": null, + "ReadonlyRootfs": false, + "Ulimits": null, + "LogConfig": { + "Type": "json-file", + "Config": {} + }, + "CgroupParent": "" + }, + "GraphDriver": { + "Name": "devicemapper", + "Data": { + "DeviceId": "5", + "DeviceName": "docker-253:1-2763198-d2cc496561d6d520cbc0236b4ba88c362c446a7619992123f11c809cded25b47", + "DeviceSize": "171798691840" + } + }, + "Config": { + "Hostname": "d2cc496561d6", + "Domainname": "", + "User": "", + "AttachStdin": true, + "AttachStdout": true, + "AttachStderr": true, + "ExposedPorts": null, + "Tty": true, + "OpenStdin": true, + "StdinOnce": true, + "Env": null, + "Cmd": [ + "bash" + ], + "Image": "fedora", + "Volumes": null, + "VolumeDriver": "", + "WorkingDir": "", + "Entrypoint": null, + "NetworkDisabled": false, + "MacAddress": "", + "OnBuild": null, + "Labels": {}, + "Memory": 0, + "MemorySwap": 0, + "CpuShares": 0, + "Cpuset": "", + "StopSignal": "SIGTERM" + } + } + ] +### Getting the IP address of a container instance + +To get the IP address of a container use: + +```bash +{% raw %} +$ docker inspect \ + --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' \ + d2cc496561d6 + +172.17.0.2 +{% endraw %} +``` + +### Listing all port bindings + +One can loop over arrays and maps in the results to produce simple text +output: + +```bash +{% raw %} +$ docker inspect \ + --format='{{range $p, $conf := .NetworkSettings.Ports}} \ + {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' \ + d2cc496561d6 + + 80/tcp -> 80 +{% endraw %} +``` + +You can get more information about how to write a Go template from: +https://golang.org/pkg/text/template/. + +### Getting size information on a container + +```bash +$ docker inspect -s d2cc496561d6 + +[ +{ +.... +"SizeRw": 0, +"SizeRootFs": 972, +.... +} +] +``` +### Getting information on an image + +Use an image's ID or name (e.g., repository/name[:tag]) to get information +about the image: + +```bash +$ docker inspect ded7cd95e059 + +[{ +"Id": "ded7cd95e059788f2586a51c275a4f151653779d6a7f4dad77c2bd34601d94e4", +"Parent": "48ecf305d2cf7046c1f5f8fcbcd4994403173441d4a7f125b1bb0ceead9de731", +"Comment": "", +"Created": "2015-05-27T16:58:22.937503085Z", +"Container": "76cf7f67d83a7a047454b33007d03e32a8f474ad332c3a03c94537edd22b312b", +"ContainerConfig": { + "Hostname": "76cf7f67d83a", + "Domainname": "", + "User": "", + "AttachStdin": false, + "AttachStdout": false, + "AttachStderr": false, + "ExposedPorts": null, + "Tty": false, + "OpenStdin": false, + "StdinOnce": false, + "Env": null, + "Cmd": [ + "/bin/sh", + "-c", + "#(nop) ADD file:4be46382bcf2b095fcb9fe8334206b584eff60bb3fad8178cbd97697fcb2ea83 in /" + ], + "Image": "48ecf305d2cf7046c1f5f8fcbcd4994403173441d4a7f125b1bb0ceead9de731", + "Volumes": null, + "VolumeDriver": "", + "WorkingDir": "", + "Entrypoint": null, + "NetworkDisabled": false, + "MacAddress": "", + "OnBuild": null, + "Labels": {} +}, +"DockerVersion": "1.6.0", +"Author": "Lokesh Mandvekar \u003clsm5@fedoraproject.org\u003e", +"Config": { + "Hostname": "76cf7f67d83a", + "Domainname": "", + "User": "", + "AttachStdin": false, + "AttachStdout": false, + "AttachStderr": false, + "ExposedPorts": null, + "Tty": false, + "OpenStdin": false, + "StdinOnce": false, + "Env": null, + "Cmd": null, + "Image": "48ecf305d2cf7046c1f5f8fcbcd4994403173441d4a7f125b1bb0ceead9de731", + "Volumes": null, + "VolumeDriver": "", + "WorkingDir": "", + "Entrypoint": null, + "NetworkDisabled": false, + "MacAddress": "", + "OnBuild": null, + "Labels": {} +}, +"Architecture": "amd64", +"Os": "linux", +"Size": 186507296, +"VirtualSize": 186507296, +"GraphDriver": { + "Name": "devicemapper", + "Data": { + "DeviceId": "3", + "DeviceName": "docker-253:1-2763198-ded7cd95e059788f2586a51c275a4f151653779d6a7f4dad77c2bd34601d94e4", + "DeviceSize": "171798691840" + } +} +}] +``` diff --git a/engine/reference/commandline/kill.md b/engine/reference/commandline/kill.md new file mode 100644 index 00000000000..cef10a2f426 --- /dev/null +++ b/engine/reference/commandline/kill.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_kill +title: docker kill +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/load.md b/engine/reference/commandline/load.md new file mode 100644 index 00000000000..c617b1ad513 --- /dev/null +++ b/engine/reference/commandline/load.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_load +title: docker load +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/login.md b/engine/reference/commandline/login.md new file mode 100644 index 00000000000..22f9aa4ac0b --- /dev/null +++ b/engine/reference/commandline/login.md @@ -0,0 +1,21 @@ +--- +datafolder: engine-cli +datafile: docker_login +title: docker login +--- + +{% include cli.md %} + +## Examples + +### Login to a registry on your localhost + +```bash +$ docker login localhost:8080 +``` diff --git a/engine/reference/commandline/logout.md b/engine/reference/commandline/logout.md new file mode 100644 index 00000000000..d0c68286714 --- /dev/null +++ b/engine/reference/commandline/logout.md @@ -0,0 +1,21 @@ +--- +datafolder: engine-cli +datafile: docker_logout +title: docker logout +--- + +{% include cli.md %} + +## Examples + +### Log out from a registry on your localhost + +```bash +$ docker logout localhost:8080 +``` diff --git a/engine/reference/commandline/logs.md b/engine/reference/commandline/logs.md new file mode 100644 index 00000000000..0940c22b330 --- /dev/null +++ b/engine/reference/commandline/logs.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_logs +title: docker logs +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/network.md b/engine/reference/commandline/network.md new file mode 100644 index 00000000000..c3fe473a8b6 --- /dev/null +++ b/engine/reference/commandline/network.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_network +title: docker network +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/network_connect.md b/engine/reference/commandline/network_connect.md new file mode 100644 index 00000000000..2be307c2931 --- /dev/null +++ b/engine/reference/commandline/network_connect.md @@ -0,0 +1,52 @@ +--- +datafolder: engine-cli +datafile: docker_network_connect +title: docker network connect +--- + +{% include cli.md %} + +## Examples + + +```bash +$ docker network connect multi-host-network container1 +``` + +You can also use the `docker run --network=` option to start a container and immediately connect it to a network. + +```bash +$ docker run -itd --network=multi-host-network --ip 172.20.88.22 --ip6 2001:db8::8822 busybox +``` +You can pause, restart, and stop containers that are connected to a network. +A container connects to its configured networks when it runs. + +If specified, the container's IP address(es) is reapplied when a stopped +container is restarted. If the IP address is no longer available, the container +fails to start. One way to guarantee that the IP address is available is +to specify an `--ip-range` when creating the network, and choose the static IP +address(es) from outside that range. This ensures that the IP address is not +given to another container while this container is not on the network. + +```bash +$ docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 multi-host-network +``` + +```bash +$ docker network connect --ip 172.20.128.2 multi-host-network container2 +``` + +To verify the container is connected, use the `docker network inspect` command. Use `docker network disconnect` to remove a container from the network. + +Once connected in network, containers can communicate using only another +container's IP address or name. For `overlay` networks or custom plugins that +support multi-host connectivity, containers connected to the same multi-host +network but launched from different Engines can also communicate in this way. + +You can connect a container to one or more networks. The networks need not be the same type. For example, you can connect a single container bridge and overlay networks. diff --git a/engine/reference/commandline/network_create.md b/engine/reference/commandline/network_create.md new file mode 100644 index 00000000000..8399993f79e --- /dev/null +++ b/engine/reference/commandline/network_create.md @@ -0,0 +1,94 @@ +--- +datafolder: engine-cli +datafile: docker_network_create +title: docker network create +--- + +{% include cli.md %} + +## Examples + +```bash +$ docker network create -d overlay my-multihost-network +``` + +Network names must be unique. The Docker daemon attempts to identify naming +conflicts but this is not guaranteed. It is the user's responsibility to avoid +name conflicts. + +### Connect containers + +When you start a container use the `--network` flag to connect it to a network. +This adds the `busybox` container to the `mynet` network. + +```bash +$ docker run -itd --network=mynet busybox +``` + +If you want to add a container to a network after the container is already +running use the `docker network connect` subcommand. + +You can connect multiple containers to the same network. Once connected, the +containers can communicate using only another container's IP address or name. +For `overlay` networks or custom plugins that support multi-host connectivity, +containers connected to the same multi-host network but launched from different +Engines can also communicate in this way. + +You can disconnect a container from a network using the `docker network +disconnect` command. + +### Specifying advanced options + +When you create a network, Engine creates a non-overlapping subnetwork for the +network by default. This subnetwork is not a subdivision of an existing network. +It is purely for ip-addressing purposes. You can override this default and +specify subnetwork values directly using the `--subnet` option. On a +`bridge` network you can only create a single subnet: + +```bash +$ docker network create -d bridge --subnet=192.168.0.0/16 br0 +``` + +Additionally, you also specify the `--gateway` `--ip-range` and `--aux-address` +options. + +```bash +$ docker network create \ + --driver=bridge \ + --subnet=172.28.0.0/16 \ + --ip-range=172.28.5.0/24 \ + --gateway=172.28.5.254 \ + br0 +``` + +If you omit the `--gateway` flag the Engine selects one for you from inside a +preferred pool. For `overlay` networks and for network driver plugins that +support it you can create multiple subnetworks. + +```bash +$ docker network create -d overlay \ + --subnet=192.168.0.0/16 \ + --subnet=192.170.0.0/16 \ + --gateway=192.168.0.100 \ + --gateway=192.170.0.100 \ + --ip-range=192.168.1.0/24 \ + --aux-address="my-router=192.168.1.5" --aux-address="my-switch=192.168.1.6" \ + --aux-address="my-printer=192.170.1.5" --aux-address="my-nas=192.170.1.6" \ + my-multihost-network +``` + +Be sure that your subnetworks do not overlap. If they do, the network create +fails and Engine returns an error. + +#### Network internal mode + +By default, when you connect a container to an `overlay` network, Docker also +connects a bridge network to it to provide external connectivity. If you want +to create an externally isolated `overlay` network, you can specify the +`--internal` option. diff --git a/engine/reference/commandline/network_disconnect.md b/engine/reference/commandline/network_disconnect.md new file mode 100644 index 00000000000..2de6f02cccd --- /dev/null +++ b/engine/reference/commandline/network_disconnect.md @@ -0,0 +1,19 @@ +--- +datafolder: engine-cli +datafile: docker_network_disconnect +title: docker network disconnect +--- + +{% include cli.md %} + +## Examples + +```bash +$ docker network disconnect multi-host-network container1 +``` diff --git a/engine/reference/commandline/network_inspect.md b/engine/reference/commandline/network_inspect.md new file mode 100644 index 00000000000..71db125ab81 --- /dev/null +++ b/engine/reference/commandline/network_inspect.md @@ -0,0 +1,102 @@ +--- +datafolder: engine-cli +datafile: docker_network_inspect +title: docker network inspect +--- + +{% include cli.md %} + +## Exaples + +```bash +$ sudo docker run -itd --name=container1 busybox +f2870c98fd504370fb86e59f32cd0753b1ac9b69b7d80566ffc7192a82b3ed27 + +$ sudo docker run -itd --name=container2 busybox +bda12f8922785d1f160be70736f26c1e331ab8aaf8ed8d56728508f2e2fd4727 +``` + +The `network inspect` command shows the containers, by id, in its +results. You can specify an alternate format to execute a given +template for each result. Go's +[text/template](http://golang.org/pkg/text/template/) package +describes all the details of the format. + +```bash +$ sudo docker network inspect bridge +[ + { + "Name": "bridge", + "Id": "b2b1a2cba717161d984383fd68218cf70bbbd17d328496885f7c921333228b0f", + "Scope": "local", + "Driver": "bridge", + "IPAM": { + "Driver": "default", + "Config": [ + { + "Subnet": "172.17.42.1/16", + "Gateway": "172.17.42.1" + } + ] + }, + "Internal": false, + "Containers": { + "bda12f8922785d1f160be70736f26c1e331ab8aaf8ed8d56728508f2e2fd4727": { + "Name": "container2", + "EndpointID": "0aebb8fcd2b282abe1365979536f21ee4ceaf3ed56177c628eae9f706e00e019", + "MacAddress": "02:42:ac:11:00:02", + "IPv4Address": "172.17.0.2/16", + "IPv6Address": "" + }, + "f2870c98fd504370fb86e59f32cd0753b1ac9b69b7d80566ffc7192a82b3ed27": { + "Name": "container1", + "EndpointID": "a00676d9c91a96bbe5bcfb34f705387a33d7cc365bac1a29e4e9728df92d10ad", + "MacAddress": "02:42:ac:11:00:01", + "IPv4Address": "172.17.0.1/16", + "IPv6Address": "" + } + }, + "Options": { + "com.docker.network.bridge.default_bridge": "true", + "com.docker.network.bridge.enable_icc": "true", + "com.docker.network.bridge.enable_ip_masquerade": "true", + "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", + "com.docker.network.bridge.name": "docker0", + "com.docker.network.driver.mtu": "1500" + } + } +] +``` + +Returns the information about the user-defined network: + +```bash +$ docker network create simple-network +69568e6336d8c96bbf57869030919f7c69524f71183b44d80948bd3927c87f6a +$ docker network inspect simple-network +[ + { + "Name": "simple-network", + "Id": "69568e6336d8c96bbf57869030919f7c69524f71183b44d80948bd3927c87f6a", + "Scope": "local", + "Driver": "bridge", + "IPAM": { + "Driver": "default", + "Config": [ + { + "Subnet": "172.22.0.0/16", + "Gateway": "172.22.0.1" + } + ] + }, + "Containers": {}, + "Options": {} + } +] +``` diff --git a/engine/reference/commandline/network_ls.md b/engine/reference/commandline/network_ls.md new file mode 100644 index 00000000000..6142c10fba3 --- /dev/null +++ b/engine/reference/commandline/network_ls.md @@ -0,0 +1,170 @@ +--- +datafolder: engine-cli +datafile: docker_network_ls +title: docker network ls +--- + +{% include cli.md %} + +## Examples + +```bash + $ docker network ls + NETWORK ID NAME DRIVER SCOPE + 7fca4eb8c647 bridge bridge local + 9f904ee27bf5 none null local + cf03ee007fb4 host host local + 78b03ee04fc4 multi-host overlay swarm +``` + +Use the `--no-trunc` option to display the full network id: + +```bash +$ docker network ls --no-trunc +NETWORK ID NAME DRIVER +18a2866682b85619a026c81b98a5e375bd33e1b0936a26cc497c283d27bae9b3 none null +c288470c46f6c8949c5f7e5099b5b7947b07eabe8d9a27d79a9cbf111adcbf47 host host +7b369448dccbf865d397c8d2be0cda7cf7edc6b0945f77d2529912ae917a0185 bridge bridge +95e74588f40db048e86320c6526440c504650a1ff3e9f7d60a497c4d2163e5bd foo bridge +63d1ff1f77b07ca51070a8c227e962238358bd310bde1529cf62e6c307ade161 dev bridge +``` + +### Filtering + +The filtering flag (`-f` or `--filter`) format is a `key=value` pair. If there +is more than one filter, then pass multiple flags (e.g. `--filter "foo=bar" --filter "bif=baz"`). +Multiple filter flags are combined as an `OR` filter. For example, +`-f type=custom -f type=builtin` returns both `custom` and `builtin` networks. + +The currently supported filters are: + +* driver +* id (network's id) +* label (`label=` or `label==`) +* name (network's name) +* type (custom|builtin) + +#### Driver + +The `driver` filter matches networks based on their driver. + +The following example matches networks with the `bridge` driver: + +```bash +$ docker network ls --filter driver=bridge +NETWORK ID NAME DRIVER +db9db329f835 test1 bridge +f6e212da9dfd test2 bridge +``` + +#### ID + +The `id` filter matches on all or part of a network's ID. + +The following filter matches all networks with an ID containing the +`63d1ff1f77b0...` string. + +```bash +$ docker network ls --filter id=63d1ff1f77b07ca51070a8c227e962238358bd310bde1529cf62e6c307ade161 +NETWORK ID NAME DRIVER +63d1ff1f77b0 dev bridge +``` + +You can also filter for a substring in an ID as this shows: + +```bash +$ docker network ls --filter id=95e74588f40d +NETWORK ID NAME DRIVER +95e74588f40d foo bridge + +$ docker network ls --filter id=95e +NETWORK ID NAME DRIVER +95e74588f40d foo bridge +``` + +#### Label + +The `label` filter matches networks based on the presence of a `label` alone or a `label` and a +value. + +The following filter matches networks with the `usage` label regardless of its value. + +```bash +$ docker network ls -f "label=usage" +NETWORK ID NAME DRIVER +db9db329f835 test1 bridge +f6e212da9dfd test2 bridge +``` + +The following filter matches networks with the `usage` label with the `prod` value. + +```bash +$ docker network ls -f "label=usage=prod" +NETWORK ID NAME DRIVER +f6e212da9dfd test2 bridge +``` + +#### Name + +The `name` filter matches on all or part of a network's name. + +The following filter matches all networks with a name containing the `foobar` string. + +```bash +$ docker network ls --filter name=foobar +NETWORK ID NAME DRIVER +06e7eef0a170 foobar bridge +``` + +You can also filter for a substring in a name as this shows: + +```bash +$ docker network ls --filter name=foo +NETWORK ID NAME DRIVER +95e74588f40d foo bridge +06e7eef0a170 foobar bridge +``` + +#### Type + +The `type` filter supports two values; `builtin` displays predefined networks +(`bridge`, `none`, `host`), whereas `custom` displays user defined networks. + +The following filter matches all user defined networks: + +```bash +$ docker network ls --filter type=custom +NETWORK ID NAME DRIVER +95e74588f40d foo bridge +63d1ff1f77b0 dev bridge +``` + +By having this flag it allows for batch cleanup. For example, use this filter +to delete all user defined networks: + +```bash +$ docker network rm `docker network ls --filter type=custom -q` +``` + +A warning will be issued when trying to remove a network that has containers +attached. + +### Format + +Format uses a Go template to print the output. The following variables are +supported: + +* .ID - Network ID +* .Name - Network name +* .Driver - Network driver +* .Scope - Network scope (local, global) +* .IPv6 - Whether IPv6 is enabled on the network or not +* .Internal - Whether the network is internal or not +* .Labels - All labels assigned to the network +* .Label - Value of a specific label for this network. For example `{% raw %}{{.Label "project.version"}}{% endraw %}` diff --git a/engine/reference/commandline/network_prune.md b/engine/reference/commandline/network_prune.md new file mode 100644 index 00000000000..a0a88a5bbec --- /dev/null +++ b/engine/reference/commandline/network_prune.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_network_prune +title: docker network prune +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/network_rm.md b/engine/reference/commandline/network_rm.md new file mode 100644 index 00000000000..ce789e9a562 --- /dev/null +++ b/engine/reference/commandline/network_rm.md @@ -0,0 +1,32 @@ +--- +datafolder: engine-cli +datafile: docker_network_rm +title: docker network rm +--- + +{% include cli.md %} + +## Examples + +```bash + $ docker network rm my-network +``` + +To delete multiple networks in a single `docker network rm` command, provide +multiple network names or ids. The following example deletes a network with id +`3695c422697f` and a network named `my-network`: + +```bash + $ docker network rm 3695c422697f my-network +``` + +When you specify multiple networks, the command attempts to delete each in turn. +If the deletion of one network fails, the command continues to the next on the +list and tries to delete that. The command reports success or failure for each +deletion. diff --git a/engine/reference/commandline/node.md b/engine/reference/commandline/node.md new file mode 100644 index 00000000000..39a63b330fd --- /dev/null +++ b/engine/reference/commandline/node.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_node +title: docker node +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/node_demote.md b/engine/reference/commandline/node_demote.md new file mode 100644 index 00000000000..13f024b8678 --- /dev/null +++ b/engine/reference/commandline/node_demote.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_node_demote +title: docker node demote +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/node_inspect.md b/engine/reference/commandline/node_inspect.md new file mode 100644 index 00000000000..1335ea40a3d --- /dev/null +++ b/engine/reference/commandline/node_inspect.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_node_inspect +title: docker node inspect +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/node_ls.md b/engine/reference/commandline/node_ls.md new file mode 100644 index 00000000000..eb55fdd3ea1 --- /dev/null +++ b/engine/reference/commandline/node_ls.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_node_ls +title: docker node ls +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/node_promote.md b/engine/reference/commandline/node_promote.md new file mode 100644 index 00000000000..bbabeb81bcb --- /dev/null +++ b/engine/reference/commandline/node_promote.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_node_promote +title: docker node promote +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/node_ps.md b/engine/reference/commandline/node_ps.md new file mode 100644 index 00000000000..3e73e29f0a3 --- /dev/null +++ b/engine/reference/commandline/node_ps.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_node_ps +title: docker node ps +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/node_rm.md b/engine/reference/commandline/node_rm.md new file mode 100644 index 00000000000..a710b3813a5 --- /dev/null +++ b/engine/reference/commandline/node_rm.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_node_rm +title: docker node rm +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/node_update.md b/engine/reference/commandline/node_update.md new file mode 100644 index 00000000000..cc2b60b1058 --- /dev/null +++ b/engine/reference/commandline/node_update.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_node_update +title: docker node update +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/pause.md b/engine/reference/commandline/pause.md new file mode 100644 index 00000000000..cb9513becc4 --- /dev/null +++ b/engine/reference/commandline/pause.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_pause +title: docker pause +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/plugin.md b/engine/reference/commandline/plugin.md new file mode 100644 index 00000000000..4bac6e71be9 --- /dev/null +++ b/engine/reference/commandline/plugin.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_plugin +title: docker plugin +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/plugin_create.md b/engine/reference/commandline/plugin_create.md new file mode 100644 index 00000000000..befd581c53b --- /dev/null +++ b/engine/reference/commandline/plugin_create.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_plugin_create +title: docker plugin create +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/plugin_disable.md b/engine/reference/commandline/plugin_disable.md new file mode 100644 index 00000000000..c9a55617971 --- /dev/null +++ b/engine/reference/commandline/plugin_disable.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_plugin_disable +title: docker plugin disable +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/plugin_enable.md b/engine/reference/commandline/plugin_enable.md new file mode 100644 index 00000000000..79944722ed9 --- /dev/null +++ b/engine/reference/commandline/plugin_enable.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_plugin_enable +title: docker plugin enable +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/plugin_inspect.md b/engine/reference/commandline/plugin_inspect.md new file mode 100644 index 00000000000..891fe02bb78 --- /dev/null +++ b/engine/reference/commandline/plugin_inspect.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_plugin_inspect +title: docker plugin inspect +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/plugin_install.md b/engine/reference/commandline/plugin_install.md new file mode 100644 index 00000000000..fc8babfbb39 --- /dev/null +++ b/engine/reference/commandline/plugin_install.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_plugin_install +title: docker plugin install +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/plugin_ls.md b/engine/reference/commandline/plugin_ls.md new file mode 100644 index 00000000000..d4bc115e887 --- /dev/null +++ b/engine/reference/commandline/plugin_ls.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_plugin_ls +title: docker plugin ls +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/plugin_push.md b/engine/reference/commandline/plugin_push.md new file mode 100644 index 00000000000..87fb890bc13 --- /dev/null +++ b/engine/reference/commandline/plugin_push.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_plugin_push +title: docker plugin push +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/plugin_rm.md b/engine/reference/commandline/plugin_rm.md new file mode 100644 index 00000000000..72bf8c7a27d --- /dev/null +++ b/engine/reference/commandline/plugin_rm.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_plugin_rm +title: docker plugin rm +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/plugin_set.md b/engine/reference/commandline/plugin_set.md new file mode 100644 index 00000000000..b1ed6a964a5 --- /dev/null +++ b/engine/reference/commandline/plugin_set.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_plugin_set +title: docker plugin set +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/port.md b/engine/reference/commandline/port.md new file mode 100644 index 00000000000..48edce05fc7 --- /dev/null +++ b/engine/reference/commandline/port.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_port +title: docker port +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/ps.md b/engine/reference/commandline/ps.md new file mode 100644 index 00000000000..907ceeb7e32 --- /dev/null +++ b/engine/reference/commandline/ps.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_ps +title: docker ps +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/pull.md b/engine/reference/commandline/pull.md new file mode 100644 index 00000000000..c46c2eee0e5 --- /dev/null +++ b/engine/reference/commandline/pull.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_pull +title: docker pull +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/push.md b/engine/reference/commandline/push.md new file mode 100644 index 00000000000..8d043a853e5 --- /dev/null +++ b/engine/reference/commandline/push.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_push +title: docker push +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/rename.md b/engine/reference/commandline/rename.md new file mode 100644 index 00000000000..391344d8029 --- /dev/null +++ b/engine/reference/commandline/rename.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_rename +title: docker rename +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/restart.md b/engine/reference/commandline/restart.md new file mode 100644 index 00000000000..1337fc656de --- /dev/null +++ b/engine/reference/commandline/restart.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_restart +title: docker restart +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/rm.md b/engine/reference/commandline/rm.md new file mode 100644 index 00000000000..7003242c542 --- /dev/null +++ b/engine/reference/commandline/rm.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_rm +title: docker rm +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/rmi.md b/engine/reference/commandline/rmi.md new file mode 100644 index 00000000000..21948589355 --- /dev/null +++ b/engine/reference/commandline/rmi.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_rmi +title: docker rmi +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/run.md b/engine/reference/commandline/run.md new file mode 100644 index 00000000000..603892781e7 --- /dev/null +++ b/engine/reference/commandline/run.md @@ -0,0 +1,597 @@ +--- +datafolder: engine-cli +datafile: docker_run +title: docker run +--- + +{% include cli.md %} + +## Examples + +### Assign name and allocate pseudo-TTY (--name, -it) + + $ docker run --name test -it debian + root@d6c0fe130dba:/# exit 13 + $ echo $? + 13 + $ docker ps -a | grep test + d6c0fe130dba debian:7 "/bin/bash" 26 seconds ago Exited (13) 17 seconds ago test + +This example runs a container named `test` using the `debian:latest` +image. The `-it` instructs Docker to allocate a pseudo-TTY connected to +the container's stdin; creating an interactive `bash` shell in the container. +In the example, the `bash` shell is quit by entering +`exit 13`. This exit code is passed on to the caller of +`docker run`, and is recorded in the `test` container's metadata. + +### Capture container ID (--cidfile) + + $ docker run --cidfile /tmp/docker_test.cid ubuntu echo "test" + +This will create a container and print `test` to the console. The `cidfile` +flag makes Docker attempt to create a new file and write the container ID to it. +If the file exists already, Docker will return an error. Docker will close this +file when `docker run` exits. + +### Full container capabilities (--privileged) + + $ docker run -t -i --rm ubuntu bash + root@bc338942ef20:/# mount -t tmpfs none /mnt + mount: permission denied + +This will *not* work, because by default, most potentially dangerous kernel +capabilities are dropped; including `cap_sys_admin` (which is required to mount +filesystems). However, the `--privileged` flag will allow it to run: + + $ docker run -t -i --privileged ubuntu bash + root@50e3f57e16e6:/# mount -t tmpfs none /mnt + root@50e3f57e16e6:/# df -h + Filesystem Size Used Avail Use% Mounted on + none 1.9G 0 1.9G 0% /mnt + +The `--privileged` flag gives *all* capabilities to the container, and it also +lifts all the limitations enforced by the `device` cgroup controller. In other +words, the container can then do almost everything that the host can do. This +flag exists to allow special use-cases, like running Docker within Docker. + +### Set working directory (-w) + + $ docker run -w /path/to/dir/ -i -t ubuntu pwd + +The `-w` lets the command being executed inside directory given, here +`/path/to/dir/`. If the path does not exist it is created inside the container. + +### Set storage driver options per container + + $ docker run -it --storage-opt size=120G fedora /bin/bash + +This (size) will allow to set the container rootfs size to 120G at creation time. +This option is only available for the `devicemapper`, `btrfs`, `overlay2`, +`windowsfilter` and `zfs` graph drivers. +For the `devicemapper`, `btrfs`, `windowsfilter` and `zfs` graph drivers, +user cannot pass a size less than the Default BaseFS Size. +For the `overlay2` storage driver, the size option is only available if the +backing fs is `xfs` and mounted with the `pquota` mount option. +Under these conditions, user can pass any size less then the backing fs size. + +### Mount tmpfs (--tmpfs) + + $ docker run -d --tmpfs /run:rw,noexec,nosuid,size=65536k my_image + +The `--tmpfs` flag mounts an empty tmpfs into the container with the `rw`, +`noexec`, `nosuid`, `size=65536k` options. + +### Mount volume (-v, --read-only) + + $ docker run -v `pwd`:`pwd` -w `pwd` -i -t ubuntu pwd + +The `-v` flag mounts the current working directory into the container. The `-w` +lets the command being executed inside the current working directory, by +changing into the directory to the value returned by `pwd`. So this +combination executes the command using the container, but inside the +current working directory. + + $ docker run -v /doesnt/exist:/foo -w /foo -i -t ubuntu bash + +When the host directory of a bind-mounted volume doesn't exist, Docker +will automatically create this directory on the host for you. In the +example above, Docker will create the `/doesnt/exist` +folder before starting your container. + + $ docker run --read-only -v /icanwrite busybox touch /icanwrite/here + +Volumes can be used in combination with `--read-only` to control where +a container writes files. The `--read-only` flag mounts the container's root +filesystem as read only prohibiting writes to locations other than the +specified volumes for the container. + + $ docker run -t -i -v /var/run/docker.sock:/var/run/docker.sock -v /path/to/static-docker-binary:/usr/bin/docker busybox sh + +By bind-mounting the docker unix socket and statically linked docker +binary (refer to [get the linux binary]( +https://docs.docker.com/engine/installation/binaries/#/get-the-linux-binary)), +you give the container the full access to create and manipulate the host's +Docker daemon. + +On Windows, the paths must be specified using Windows-style semantics. + + PS C:\> docker run -v c:\foo:c:\dest microsoft/nanoserver cmd /s /c type c:\dest\somefile.txt + Contents of file + + PS C:\> docker run -v c:\foo:d: microsoft/nanoserver cmd /s /c type d:\somefile.txt + Contents of file + +The following examples will fail when using Windows-based containers, as the +destination of a volume or bind-mount inside the container must be one of: +a non-existing or empty directory; or a drive other than C:. Further, the source +of a bind mount must be a local directory, not a file. + + net use z: \\remotemachine\share + docker run -v z:\foo:c:\dest ... + docker run -v \\uncpath\to\directory:c:\dest ... + docker run -v c:\foo\somefile.txt:c:\dest ... + docker run -v c:\foo:c: ... + docker run -v c:\foo:c:\existing-directory-with-contents ... + +For in-depth information about volumes, refer to [manage data in containers](https://docs.docker.com/engine/tutorials/dockervolumes/) + +### Publish or expose port (-p, --expose) + + $ docker run -p 127.0.0.1:80:8080 ubuntu bash + +This binds port `8080` of the container to port `80` on `127.0.0.1` of the host +machine. The [Docker User +Guide](https://docs.docker.com/engine/userguide/networking/default_network/dockerlinks/) +explains in detail how to manipulate ports in Docker. + + $ docker run --expose 80 ubuntu bash + +This exposes port `80` of the container without publishing the port to the host +system's interfaces. + +### Set environment variables (-e, --env, --env-file) + + $ docker run -e MYVAR1 --env MYVAR2=foo --env-file ./env.list ubuntu bash + +This sets simple (non-array) environmental variables in the container. For +illustration all three +flags are shown here. Where `-e`, `--env` take an environment variable and +value, or if no `=` is provided, then that variable's current value, set via +`export`, is passed through (i.e. `$MYVAR1` from the host is set to `$MYVAR1` +in the container). When no `=` is provided and that variable is not defined +in the client's environment then that variable will be removed from the +container's list of environment variables. All three flags, `-e`, `--env` and +`--env-file` can be repeated. + +Regardless of the order of these three flags, the `--env-file` are processed +first, and then `-e`, `--env` flags. This way, the `-e` or `--env` will +override variables as needed. + + $ cat ./env.list + TEST_FOO=BAR + $ docker run --env TEST_FOO="This is a test" --env-file ./env.list busybox env | grep TEST_FOO + TEST_FOO=This is a test + +The `--env-file` flag takes a filename as an argument and expects each line +to be in the `VAR=VAL` format, mimicking the argument passed to `--env`. Comment +lines need only be prefixed with `#` + +An example of a file passed with `--env-file` + +```none +$ cat ./env.list +TEST_FOO=BAR + +# this is a comment +TEST_APP_DEST_HOST=10.10.0.127 +TEST_APP_DEST_PORT=8888 +_TEST_BAR=FOO +TEST_APP_42=magic +helloWorld=true +123qwe=bar +org.spring.config=something + +# pass through this variable from the caller +TEST_PASSTHROUGH +$ TEST_PASSTHROUGH=howdy docker run --env-file ./env.list busybox env +PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin +HOSTNAME=5198e0745561 +TEST_FOO=BAR +TEST_APP_DEST_HOST=10.10.0.127 +TEST_APP_DEST_PORT=8888 +_TEST_BAR=FOO +TEST_APP_42=magic +helloWorld=true +TEST_PASSTHROUGH=howdy +HOME=/root +123qwe=bar +org.spring.config=something + +$ docker run --env-file ./env.list busybox env +PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin +HOSTNAME=5198e0745561 +TEST_FOO=BAR +TEST_APP_DEST_HOST=10.10.0.127 +TEST_APP_DEST_PORT=8888 +_TEST_BAR=FOO +TEST_APP_42=magic +helloWorld=true +TEST_PASSTHROUGH= +HOME=/root +123qwe=bar +org.spring.config=something +``` + +### Set metadata on container (-l, --label, --label-file) + +A label is a `key=value` pair that applies metadata to a container. To label a container with two labels: + + $ docker run -l my-label --label com.example.foo=bar ubuntu bash + +The `my-label` key doesn't specify a value so the label defaults to an empty +string(`""`). To add multiple labels, repeat the label flag (`-l` or `--label`). + +The `key=value` must be unique to avoid overwriting the label value. If you +specify labels with identical keys but different values, each subsequent value +overwrites the previous. Docker uses the last `key=value` you supply. + +Use the `--label-file` flag to load multiple labels from a file. Delimit each +label in the file with an EOL mark. The example below loads labels from a +labels file in the current directory: + + $ docker run --label-file ./labels ubuntu bash + +The label-file format is similar to the format for loading environment +variables. (Unlike environment variables, labels are not visible to processes +running inside a container.) The following example illustrates a label-file +format: + + com.example.label1="a label" + + # this is a comment + com.example.label2=another\ label + com.example.label3 + +You can load multiple label-files by supplying multiple `--label-file` flags. + +For additional information on working with labels, see [*Labels - custom +metadata in Docker*](https://docs.docker.com/engine/userguide/labels-custom-metadata/) in the Docker User +Guide. + +### Connect a container to a network (--network) + +When you start a container use the `--network` flag to connect it to a network. +This adds the `busybox` container to the `my-net` network. + +```bash +$ docker run -itd --network=my-net busybox +``` + +You can also choose the IP addresses for the container with `--ip` and `--ip6` +flags when you start the container on a user-defined network. + +```bash +$ docker run -itd --network=my-net --ip=10.10.9.75 busybox +``` + +If you want to add a running container to a network use the `docker network connect` subcommand. + +You can connect multiple containers to the same network. Once connected, the +containers can communicate easily need only another container's IP address +or name. For `overlay` networks or custom plugins that support multi-host +connectivity, containers connected to the same multi-host network but launched +from different Engines can also communicate in this way. + +**Note**: Service discovery is unavailable on the default bridge network. +Containers can communicate via their IP addresses by default. To communicate +by name, they must be linked. + +You can disconnect a container from a network using the `docker network +disconnect` command. + +### Mount volumes from container (--volumes-from) + + $ docker run --volumes-from 777f7dc92da7 --volumes-from ba8c0c54f0f2:ro -i -t ubuntu pwd + +The `--volumes-from` flag mounts all the defined volumes from the referenced +containers. Containers can be specified by repetitions of the `--volumes-from` +argument. The container ID may be optionally suffixed with `:ro` or `:rw` to +mount the volumes in read-only or read-write mode, respectively. By default, +the volumes are mounted in the same mode (read write or read only) as +the reference container. + +Labeling systems like SELinux require that proper labels are placed on volume +content mounted into a container. Without a label, the security system might +prevent the processes running inside the container from using the content. By +default, Docker does not change the labels set by the OS. + +To change the label in the container context, you can add either of two suffixes +`:z` or `:Z` to the volume mount. These suffixes tell Docker to relabel file +objects on the shared volumes. The `z` option tells Docker that two containers +share the volume content. As a result, Docker labels the content with a shared +content label. Shared volume labels allow all containers to read/write content. +The `Z` option tells Docker to label the content with a private unshared label. +Only the current container can use a private volume. + +### Attach to STDIN/STDOUT/STDERR (-a) + +The `-a` flag tells `docker run` to bind to the container's `STDIN`, `STDOUT` +or `STDERR`. This makes it possible to manipulate the output and input as +needed. + + $ echo "test" | docker run -i -a stdin ubuntu cat - + +This pipes data into a container and prints the container's ID by attaching +only to the container's `STDIN`. + + $ docker run -a stderr ubuntu echo test + +This isn't going to print anything unless there's an error because we've +only attached to the `STDERR` of the container. The container's logs +still store what's been written to `STDERR` and `STDOUT`. + + $ cat somefile | docker run -i -a stdin mybuilder dobuild + +This is how piping a file into a container could be done for a build. +The container's ID will be printed after the build is done and the build +logs could be retrieved using `docker logs`. This is +useful if you need to pipe a file or something else into a container and +retrieve the container's ID once the container has finished running. + +### Add host device to container (--device) + + $ docker run --device=/dev/sdc:/dev/xvdc --device=/dev/sdd --device=/dev/zero:/dev/nulo -i -t ubuntu ls -l /dev/{xvdc,sdd,nulo} + brw-rw---- 1 root disk 8, 2 Feb 9 16:05 /dev/xvdc + brw-rw---- 1 root disk 8, 3 Feb 9 16:05 /dev/sdd + crw-rw-rw- 1 root root 1, 5 Feb 9 16:05 /dev/nulo + +It is often necessary to directly expose devices to a container. The `--device` +option enables that. For example, a specific block storage device or loop +device or audio device can be added to an otherwise unprivileged container +(without the `--privileged` flag) and have the application directly access it. + +By default, the container will be able to `read`, `write` and `mknod` these devices. +This can be overridden using a third `:rwm` set of options to each `--device` +flag: + + + $ docker run --device=/dev/sda:/dev/xvdc --rm -it ubuntu fdisk /dev/xvdc + + Command (m for help): q + $ docker run --device=/dev/sda:/dev/xvdc:r --rm -it ubuntu fdisk /dev/xvdc + You will not be able to write the partition table. + + Command (m for help): q + + $ docker run --device=/dev/sda:/dev/xvdc:rw --rm -it ubuntu fdisk /dev/xvdc + + Command (m for help): q + + $ docker run --device=/dev/sda:/dev/xvdc:m --rm -it ubuntu fdisk /dev/xvdc + fdisk: unable to open /dev/xvdc: Operation not permitted + +> **Note:** +> `--device` cannot be safely used with ephemeral devices. Block devices +> that may be removed should not be added to untrusted containers with +> `--device`. + +### Restart policies (--restart) + +Use Docker's `--restart` to specify a container's *restart policy*. A restart +policy controls whether the Docker daemon restarts a container after exit. +Docker supports the following restart policies: + + + + + + + + + + + + + + + + + + + + + + + + + + +
    PolicyResult
    no + Do not automatically restart the container when it exits. This is the + default. +
    + + on-failure[:max-retries] + + + Restart only if the container exits with a non-zero exit status. + Optionally, limit the number of restart retries the Docker + daemon attempts. +
    always + Always restart the container regardless of the exit status. + When you specify always, the Docker daemon will try to restart + the container indefinitely. The container will also always start + on daemon startup, regardless of the current state of the container. +
    unless-stopped + Always restart the container regardless of the exit status, but + do not start it on daemon startup if the container has been put + to a stopped state before. +
    + + $ docker run --restart=always redis + +This will run the `redis` container with a restart policy of **always** +so that if the container exits, Docker will restart it. + +More detailed information on restart policies can be found in the +[Restart Policies (--restart)](../run.md#restart-policies-restart) +section of the Docker run reference page. + +### Add entries to container hosts file (--add-host) + +You can add other hosts into a container's `/etc/hosts` file by using one or +more `--add-host` flags. This example adds a static address for a host named +`docker`: + + $ docker run --add-host=docker:10.180.0.1 --rm -it debian + root@f38c87f2a42d:/# ping docker + PING docker (10.180.0.1): 48 data bytes + 56 bytes from 10.180.0.1: icmp_seq=0 ttl=254 time=7.600 ms + 56 bytes from 10.180.0.1: icmp_seq=1 ttl=254 time=30.705 ms + ^C--- docker ping statistics --- + 2 packets transmitted, 2 packets received, 0% packet loss + round-trip min/avg/max/stddev = 7.600/19.152/30.705/11.553 ms + +Sometimes you need to connect to the Docker host from within your +container. To enable this, pass the Docker host's IP address to +the container using the `--add-host` flag. To find the host's address, +use the `ip addr show` command. + +The flags you pass to `ip addr show` depend on whether you are +using IPv4 or IPv6 networking in your containers. Use the following +flags for IPv4 address retrieval for a network device named `eth0`: + + $ HOSTIP=`ip -4 addr show scope global dev eth0 | grep inet | awk '{print \$2}' | cut -d / -f 1` + $ docker run --add-host=docker:${HOSTIP} --rm -it debian + +For IPv6 use the `-6` flag instead of the `-4` flag. For other network +devices, replace `eth0` with the correct device name (for example `docker0` +for the bridge device). + +### Set ulimits in container (--ulimit) + +Since setting `ulimit` settings in a container requires extra privileges not +available in the default container, you can set these using the `--ulimit` flag. +`--ulimit` is specified with a soft and hard limit as such: +`=[:]`, for example: + + $ docker run --ulimit nofile=1024:1024 --rm debian sh -c "ulimit -n" + 1024 + +> **Note:** +> If you do not provide a `hard limit`, the `soft limit` will be used +> for both values. If no `ulimits` are set, they will be inherited from +> the default `ulimits` set on the daemon. `as` option is disabled now. +> In other words, the following script is not supported: +> `$ docker run -it --ulimit as=1024 fedora /bin/bash` + +The values are sent to the appropriate `syscall` as they are set. +Docker doesn't perform any byte conversion. Take this into account when setting the values. + +#### For `nproc` usage + +Be careful setting `nproc` with the `ulimit` flag as `nproc` is designed by Linux to set the +maximum number of processes available to a user, not to a container. For example, start four +containers with `daemon` user: + + docker run -d -u daemon --ulimit nproc=3 busybox top + docker run -d -u daemon --ulimit nproc=3 busybox top + docker run -d -u daemon --ulimit nproc=3 busybox top + docker run -d -u daemon --ulimit nproc=3 busybox top + +The 4th container fails and reports "[8] System error: resource temporarily unavailable" error. +This fails because the caller set `nproc=3` resulting in the first three containers using up +the three processes quota set for the `daemon` user. + +### Stop container with signal (--stop-signal) + +The `--stop-signal` flag sets the system call signal that will be sent to the container to exit. +This signal can be a valid unsigned number that matches a position in the kernel's syscall table, for instance 9, +or a signal name in the format SIGNAME, for instance SIGKILL. + +### Optional security options (--security-opt) + +On Windows, this flag can be used to specify the `credentialspec` option. +The `credentialspec` must be in the format `file://spec.txt` or `registry://keyname`. + +### Stop container with timeout (--stop-timeout) + +The `--stop-timeout` flag sets the timeout (in seconds) that a pre-defined (see `--stop-signal`) system call +signal that will be sent to the container to exit. After timeout elapses the container will be killed with SIGKILL. + +### Specify isolation technology for container (--isolation) + +This option is useful in situations where you are running Docker containers on +Windows. The `--isolation ` option sets a container's isolation technology. +On Linux, the only supported is the `default` option which uses +Linux namespaces. These two commands are equivalent on Linux: + +```bash +$ docker run -d busybox top +$ docker run -d --isolation default busybox top +``` + +On Windows, `--isolation` can take one of these values: + + +| Value | Description | +|-----------|--------------------------------------------------------------------------------------------| +| `default` | Use the value specified by the Docker daemon's `--exec-opt` or system default (see below). | +| `process` | Shared-kernel namespace isolation (not supported on Windows client operating systems). | +| `hyperv` | Hyper-V hypervisor partition-based isolation. | + +The default isolation on Windows server operating systems is `process`. The default (and only supported) +isolation on Windows client operating systems is `hyperv`. An attempt to start a container on a client +operating system with `--isolation process` will fail. + +On Windows server, assuming the default configuration, these commands are equivalent +and result in `process` isolation: + +```PowerShell +PS C:\> docker run -d microsoft/nanoserver powershell echo process +PS C:\> docker run -d --isolation default microsoft/nanoserver powershell echo process +PS C:\> docker run -d --isolation process microsoft/nanoserver powershell echo process +``` + +If you have set the `--exec-opt isolation=hyperv` option on the Docker `daemon`, or +are running against a Windows client-based daemon, these commands are equivalent and +result in `hyperv` isolation: + +```PowerShell +PS C:\> docker run -d microsoft/nanoserver powershell echo hyperv +PS C:\> docker run -d --isolation default microsoft/nanoserver powershell echo hyperv +PS C:\> docker run -d --isolation hyperv microsoft/nanoserver powershell echo hyperv +``` + +### Configure namespaced kernel parameters (sysctls) at runtime + +The `--sysctl` sets namespaced kernel parameters (sysctls) in the +container. For example, to turn on IP forwarding in the containers +network namespace, run this command: + + $ docker run --sysctl net.ipv4.ip_forward=1 someimage + + +> **Note**: Not all sysctls are namespaced. Docker does not support changing sysctls +> inside of a container that also modify the host system. As the kernel +> evolves we expect to see more sysctls become namespaced. + +#### Currently supported sysctls + + `IPC Namespace`: + + kernel.msgmax, kernel.msgmnb, kernel.msgmni, kernel.sem, kernel.shmall, kernel.shmmax, kernel.shmmni, kernel.shm_rmid_forced + Sysctls beginning with fs.mqueue.* + + If you use the `--ipc=host` option these sysctls will not be allowed. + + `Network Namespace`: + Sysctls beginning with net.* + + If you use the `--network=host` option using these sysctls will not be allowed. diff --git a/engine/reference/commandline/save.md b/engine/reference/commandline/save.md new file mode 100644 index 00000000000..1542271585f --- /dev/null +++ b/engine/reference/commandline/save.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_save +title: docker save +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/search.md b/engine/reference/commandline/search.md new file mode 100644 index 00000000000..cabb489ec10 --- /dev/null +++ b/engine/reference/commandline/search.md @@ -0,0 +1,37 @@ +--- +datafolder: engine-cli +datafile: docker_search +title: docker search +--- + +{% include cli.md %} + +## Examples + +### Search Docker Hub for ranked images + +Search a registry for the term 'fedora' and only display those images +ranked 3 or higher: + + $ docker search --filter=stars=3 fedora + NAME DESCRIPTION STARS OFFICIAL AUTOMATED + mattdm/fedora A basic Fedora image corresponding roughly... 50 + fedora (Semi) Official Fedora base image. 38 + mattdm/fedora-small A small Fedora image on which to build. Co... 8 + goldmann/wildfly A WildFly application server running on a ... 3 [OK] + +### Search Docker Hub for automated images + +Search Docker Hub for the term 'fedora' and only display automated images +ranked 1 or higher: + + $ docker search --filter=is-automated=true --filter=stars=1 fedora + NAME DESCRIPTION STARS OFFICIAL AUTOMATED + goldmann/wildfly A WildFly application server running on a ... 3 [OK] + tutum/fedora-20 Fedora 20 image with SSH access. For the r... 1 [OK] diff --git a/engine/reference/commandline/secret.md b/engine/reference/commandline/secret.md new file mode 100644 index 00000000000..67ca42b5bdd --- /dev/null +++ b/engine/reference/commandline/secret.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_secret +title: docker secret +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/secret_create.md b/engine/reference/commandline/secret_create.md new file mode 100644 index 00000000000..a39cc58122a --- /dev/null +++ b/engine/reference/commandline/secret_create.md @@ -0,0 +1,67 @@ +--- +datafolder: engine-cli +datafile: docker_secret_create +title: docker secret create +--- + +{% include cli.md %} + +## Examples + +### Create a secret + +```bash +$ echo | docker secret create my_secret - +mhv17xfe3gh6xc4rij5orpfds + +$ docker secret ls +ID NAME CREATED UPDATED SIZE +mhv17xfe3gh6xc4rij5orpfds my_secret 2016-10-27 23:25:43.909181089 +0000 UTC 2016-10-27 23:25:43.909181089 +0000 UTC 1679 +``` + +### Create a secret with a file + +```bash +$ docker secret create my_secret ./secret.json +mhv17xfe3gh6xc4rij5orpfds + +$ docker secret ls +ID NAME CREATED UPDATED SIZE +mhv17xfe3gh6xc4rij5orpfds my_secret 2016-10-27 23:25:43.909181089 +0000 UTC 2016-10-27 23:25:43.909181089 +0000 UTC 1679 +``` + +### Create a secret with labels + +```bash +$ docker secret create --label env=dev --label rev=20161102 my_secret ./secret.json +jtn7g6aukl5ky7nr9gvwafoxh + +$ docker secret inspect my_secret +[ + { + "ID": "jtn7g6aukl5ky7nr9gvwafoxh", + "Version": { + "Index": 541 + }, + "CreatedAt": "2016-11-03T20:54:12.924766548Z", + "UpdatedAt": "2016-11-03T20:54:12.924766548Z", + "Spec": { + "Name": "my_secret", + "Labels": { + "env": "dev", + "rev": "20161102" + }, + "Data": null + }, + "Digest": "sha256:4212a44b14e94154359569333d3fc6a80f6b9959dfdaff26412f4b2796b1f387", + "SecretSize": 1679 + } +] + +``` diff --git a/engine/reference/commandline/secret_inspect.md b/engine/reference/commandline/secret_inspect.md new file mode 100644 index 00000000000..88f1e8aeeae --- /dev/null +++ b/engine/reference/commandline/secret_inspect.md @@ -0,0 +1,57 @@ +--- +datafolder: engine-cli +datafile: docker_secret_inspect +title: docker secret inspect +--- + +{% include cli.md %} + +## Examples + +### Inspecting a secret by name or ID + +You can inspect a secret, either by its *name*, or *ID* + +For example, given the following secret: + +```bash +$ docker secret ls +ID NAME CREATED UPDATED +mhv17xfe3gh6xc4rij5orpfds secret.json 2016-10-27 23:25:43.909181089 +0000 UTC 2016-10-27 23:25:43.909181089 +0000 UTC +``` + +```bash +$ docker secret inspect secret.json +[ + { + "ID": "mhv17xfe3gh6xc4rij5orpfds", + "Version": { + "Index": 1198 + }, + "CreatedAt": "2016-10-27T23:25:43.909181089Z", + "UpdatedAt": "2016-10-27T23:25:43.909181089Z", + "Spec": { + "Name": "secret.json" + } + } +] +``` + +### Formatting secret output + +You can use the --format option to obtain specific information about a +secret. The following example command outputs the creation time of the +secret. + +```bash +{% raw %} +$ docker secret inspect --format='{{.CreatedAt}}' mhv17xfe3gh6xc4rij5orpfds +2016-10-27 23:25:43.909181089 +0000 UTC +{% endraw %} +``` diff --git a/engine/reference/commandline/secret_ls.md b/engine/reference/commandline/secret_ls.md new file mode 100644 index 00000000000..872e7a47c30 --- /dev/null +++ b/engine/reference/commandline/secret_ls.md @@ -0,0 +1,21 @@ +--- +datafolder: engine-cli +datafile: docker_secret_ls +title: docker secret ls +--- + +{% include cli.md %} + +## Examples + +```bash +$ docker secret ls +ID NAME CREATED UPDATED +mhv17xfe3gh6xc4rij5orpfds secret.json 2016-10-27 23:25:43.909181089 +0000 UTC 2016-10-27 23:25:43.909181089 +0000 UTC +``` diff --git a/engine/reference/commandline/secret_rm.md b/engine/reference/commandline/secret_rm.md new file mode 100644 index 00000000000..eccc9f2f79a --- /dev/null +++ b/engine/reference/commandline/secret_rm.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_secret_rm +title: docker secret rm +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/service.md b/engine/reference/commandline/service.md new file mode 100644 index 00000000000..902f62f92d9 --- /dev/null +++ b/engine/reference/commandline/service.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_service +title: docker service +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/service_create.md b/engine/reference/commandline/service_create.md new file mode 100644 index 00000000000..af7dc79f033 --- /dev/null +++ b/engine/reference/commandline/service_create.md @@ -0,0 +1,518 @@ +--- +datafolder: engine-cli +datafile: docker_service_create +title: docker service create +--- + +{% include cli.md %} + +## Examples + +### Create a service + +```bash +$ docker service create --name redis redis:3.0.6 + +dmu1ept4cxcfe8k8lhtux3ro3 + +$ docker service create --mode global --name redis2 redis:3.0.6 + +a8q9dasaafudfs8q8w32udass + +$ docker service ls + +ID NAME MODE REPLICAS IMAGE +dmu1ept4cxcf redis replicated 1/1 redis:3.0.6 +a8q9dasaafud redis2 global 1/1 redis:3.0.6 +``` + +### Create a service with 5 replica tasks (--replicas) + +Use the `--replicas` flag to set the number of replica tasks for a replicated +service. The following command creates a `redis` service with `5` replica tasks: + +```bash +$ docker service create --name redis --replicas=5 redis:3.0.6 + +4cdgfyky7ozwh3htjfw0d12qv +``` + +The above command sets the *desired* number of tasks for the service. Even +though the command returns immediately, actual scaling of the service may take +some time. The `REPLICAS` column shows both the *actual* and *desired* number +of replica tasks for the service. + +In the following example the desired state is `5` replicas, but the current +number of `RUNNING` tasks is `3`: + +```bash +$ docker service ls + +ID NAME MODE REPLICAS IMAGE +4cdgfyky7ozw redis replicated 3/5 redis:3.0.7 +``` + +Once all the tasks are created and `RUNNING`, the actual number of tasks is +equal to the desired number: + +```bash +$ docker service ls + +ID NAME MODE REPLICAS IMAGE +4cdgfyky7ozw redis replicated 5/5 redis:3.0.7 +``` + +### Create a service with secrets +Use the `--secret` flag to give a container access to a +[secret](secret_create.md). + +Create a service specifying a secret: + +```bash +$ docker service create --name redis --secret secret.json redis:3.0.6 + +4cdgfyky7ozwh3htjfw0d12qv +``` + +Create a service specifying the secret, target, user/group ID and mode: + +```bash +$ docker service create --name redis \ + --secret source=ssh-key,target=ssh \ + --secret src=app-key,target=app,uid=1000,gid=1001,mode=0400 \ + redis:3.0.6 + +4cdgfyky7ozwh3htjfw0d12qv +``` + +Secrets are located in `/run/secrets` in the container. If no target is +specified, the name of the secret will be used as the in memory file in the +container. If a target is specified, that will be the filename. In the +example above, two files will be created: `/run/secrets/ssh` and +`/run/secrets/app` for each of the secret targets specified. + +### Create a service with a rolling update policy + +```bash +$ docker service create \ + --replicas 10 \ + --name redis \ + --update-delay 10s \ + --update-parallelism 2 \ + redis:3.0.6 +``` + +When you run a [service update](service_update.md), the scheduler updates a +maximum of 2 tasks at a time, with `10s` between updates. For more information, +refer to the [rolling updates +tutorial](https://docs.docker.com/engine/swarm/swarm-tutorial/rolling-update/). + +### Set environment variables (-e, --env) + +This sets environmental variables for all tasks in a service. For example: + +```bash +$ docker service create \ + --name redis_2 \ + --replicas 5 \ + --env MYVAR=foo \ + redis:3.0.6 +``` + +### Create a docker service with specific hostname (--hostname) + +This option sets the docker service containers hostname to a specific string. For example: +```bash +$ docker service create \ + --name redis \ + --hostname myredis \ + redis:3.0.6 +``` +### Set metadata on a service (-l, --label) + +A label is a `key=value` pair that applies metadata to a service. To label a +service with two labels: + +```bash +$ docker service create \ + --name redis_2 \ + --label com.example.foo="bar" + --label bar=baz \ + redis:3.0.6 +``` + +For more information about labels, refer to [apply custom +metadata](https://docs.docker.com/engine/userguide/labels-custom-metadata/). + +### Add bind-mounts or volumes + +Docker supports two different kinds of mounts, which allow containers to read to +or write from files or directories on other containers or the host operating +system. These types are _data volumes_ (often referred to simply as volumes) and +_bind-mounts_. + +Additionally, Docker also supports tmpfs mounts. + +A **bind-mount** makes a file or directory on the host available to the +container it is mounted within. A bind-mount may be either read-only or +read-write. For example, a container might share its host's DNS information by +means of a bind-mount of the host's `/etc/resolv.conf` or a container might +write logs to its host's `/var/log/myContainerLogs` directory. If you use +bind-mounts and your host and containers have different notions of permissions, +access controls, or other such details, you will run into portability issues. + +A **named volume** is a mechanism for decoupling persistent data needed by your +container from the image used to create the container and from the host machine. +Named volumes are created and managed by Docker, and a named volume persists +even when no container is currently using it. Data in named volumes can be +shared between a container and the host machine, as well as between multiple +containers. Docker uses a _volume driver_ to create, manage, and mount volumes. +You can back up or restore volumes using Docker commands. + +A **tmpfs** mounts a tmpfs inside a container for volatile data. + +Consider a situation where your image starts a lightweight web server. You could +use that image as a base image, copy in your website's HTML files, and package +that into another image. Each time your website changed, you'd need to update +the new image and redeploy all of the containers serving your website. A better +solution is to store the website in a named volume which is attached to each of +your web server containers when they start. To update the website, you just +update the named volume. + +For more information about named volumes, see +[Data Volumes](https://docs.docker.com/engine/tutorials/dockervolumes/). + +The following table describes options which apply to both bind-mounts and named +volumes in a service: + +| Option | Required | Description +|:-----------------------------------|:--------------------------|:----------------------------------------------------------------------------------------- +| `type` | | The type of mount, can be one of `volume`, `bind`, or `tmpfs`. Defaults to `volume` if no type is specified. `volume` mounts a [managed volume](volume_create.md) into the container. `bind` bind-mounts a directory or file from the host into the container. `tmpfs`: mount a tmpfs in the container. +| `src` or `source`vvvv | for `type=bind` only | `type=volume`: `src` is an optional way to specify the name of the volume (for example, `src=my-volume`). If the named volume does not exist, it is automatically created. If no `src` is specified, the volume is assigned a random name which is guaranteed to be unique on the host, but may not be unique cluster-wide. A randomly-named volume has the same lifecycle as its container and is destroyed when the *container* is destroyed (which is upon `service update`, or when scaling or re-balancing the service). `type=bind`: `src` is required, and specifies an absolute path to the file or directory to bind-mount (for example, `src=/path/on/host/`). An error is produced if the file or directory does not exist. `type=tmpfs`: `src` is not supported. +| `dst` or `destination` or `target` | yes | Mount path inside the container, for example `/some/path/in/container/`. If the path does not exist in the container's filesystem, the Engine creates a directory at the specified location before mounting the volume or bind-mount. +| *`readonly` or `ro` | | The Engine mounts binds and volumes `read-write` unless `readonly` option is given when mounting the bind or volume. When `true` or `1` or no value the bind or volume is mounted read-only. When `false` or `0` the bind or volume is mounted read-write. + +#### Bind Propagation + +Bind propagation refers to whether or not mounts created within a given +bind-mount or named volume can be propagated to replicas of that mount. Consider +a mount point `/mnt`, which is also mounted on `/tmp`. The propation settings +control whether a mount on `/tmp/a` would also be available on `/mnt/a`. Each +propagation setting has a recursive counterpoint. In the case of recursion, +consider that `/tmp/a` is also mounted as `/foo`. The propagation settings +control whether `/mnt/a` and/or `/tmp/a` would exist. + +The `bind-propagation` option defaults to `rprivate` for both bind-mounts and +volume mounts, and is only configurable for bind-mounts. In other words, named +volumes do not support bind propagation. + +- **`shared`**: Sub-mounts of the original mount are exposed to replica mounts, + and sub-mounts of replica mounts are also propagated to the + original mount. +- **`slave`**: similar to a shared mount, but only in one direction. If the + original mount exposes a sub-mount, the replica mount can see it. + However, if the replica mount exposes a sub-mount, the original + mount cannot see it. +- **`private`**: The mount is private. Sub-mounts within it are not exposed to + replica mounts, and sub-mounts of replica mounts are not + exposed to the original mount. +- **`rshared`**: The same as shared, but the propagation also extends to and from + mount points nested within any of the original or replica mount + points. +- **`rslave`**: The same as `slave`, but the propagation also extends to and from + mount points nested within any of the original or replica mount + points. +- **`rprivate`**: The default. The same as `private`, meaning that no mount points + anywhere within the original or replica mount points propagate + in either direction. + +For more information about bind propagation, see the +[Linux kernel documentation for shared subtree](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt). + +#### Options for Named Volumes +The following options can only be used for named volumes (`type=volume`); + +| Option | Description +|:----------------------|:-------------------------------------------------------------------------------------------------------------------- +| **volume-driver** | Name of the volume-driver plugin to use for the volume. Defaults to ``"local"``, to use the local volume driver to create the volume if the volume does not exist. +| **volume-label** | One or more custom metadata ("labels") to apply to the volume upon creation. For example, `volume-label=mylabel=hello-world,my-other-label=hello-mars`. For more information about labels, refer to [apply custom metadata](https://docs.docker.com/engine/userguide/labels-custom-metadata/). +| **volume-nocopy** | By default, if you attach an empty volume to a container, and files or directories already existed at the mount-path in the container (`dst`), the Engine copies those files and directories into the volume, allowing the host to access them. Set `volume-nocopy` to disables copying files from the container's filesystem to the volume and mount the empty volume. A value is optional. `true` or `1` is the default if you do not provide a value and disables copying. `false` or `0` enables copying. +| **volume-opt** | Options specific to a given volume driver, which will be passed to the driver when creating the volume. Options are provided as a comma-separated list of key/value pairs, for example, `volume-opt=some-option=some-value,some-other-option=some-other-value`. For available options for a given driver, refer to that driver's documentation. + +#### Options for tmpfs +The following options can only be used for tmpfs mounts (`type=tmpfs`); + +| Option | Description +|:----------------------|:-------------------------------------------------------------------------------------------------------------------- +| **tmpfs-size** | Size of the tmpfs mount in bytes. Unlimited by default in Linux. +| **tmpfs-mode** | File mode of the tmpfs in octal. (e.g. `"700"` or `"0700"`.) Defaults to ``"1777"`` in Linux. + +#### Differences between "--mount" and "--volume" + +The `--mount` flag supports most options that are supported by the `-v` +or `--volume` flag for `docker run`, with some important exceptions: + +- The `--mount` flag allows you to specify a volume driver and volume driver + options *per volume*, without creating the volumes in advance. In contrast, + `docker run` allows you to specify a single volume driver which is shared + by all volumes, using the `--volume-driver` flag. + +- The `--mount` flag allows you to specify custom metadata ("labels") for a volume, + before the volume is created. + +- When you use `--mount` with `type=bind`, the host-path must refer to an *existing* + path on the host. The path will not be created for you and the service will fail + with an error if the path does not exist. + +- The `--mount` flag does not allow you to relabel a volume with `Z` or `z` flags, + which are used for `selinux` labeling. + +#### Create a service using a named volume + +The following example creates a service that uses a named volume: + +```bash +$ docker service create \ + --name my-service \ + --replicas 3 \ + --mount type=volume,source=my-volume,destination=/path/in/container,volume-label="color=red",volume-label="shape=round" \ + nginx:alpine +``` + +For each replica of the service, the engine requests a volume named "my-volume" +from the default ("local") volume driver where the task is deployed. If the +volume does not exist, the engine creates a new volume and applies the "color" +and "shape" labels. + +When the task is started, the volume is mounted on `/path/in/container/` inside +the container. + +Be aware that the default ("local") volume is a locally scoped volume driver. +This means that depending on where a task is deployed, either that task gets a +*new* volume named "my-volume", or shares the same "my-volume" with other tasks +of the same service. Multiple containers writing to a single shared volume can +cause data corruption if the software running inside the container is not +designed to handle concurrent processes writing to the same location. Also take +into account that containers can be re-scheduled by the Swarm orchestrator and +be deployed on a different node. + +#### Create a service that uses an anonymous volume + +The following command creates a service with three replicas with an anonymous +volume on `/path/in/container`: + +```bash +$ docker service create \ + --name my-service \ + --replicas 3 \ + --mount type=volume,destination=/path/in/container \ + nginx:alpine +``` + +In this example, no name (`source`) is specified for the volume, so a new volume +is created for each task. This guarantees that each task gets its own volume, +and volumes are not shared between tasks. Anonymous volumes are removed after +the task using them is complete. + +#### Create a service that uses a bind-mounted host directory + +The following example bind-mounts a host directory at `/path/in/container` in +the containers backing the service: + +```bash +$ docker service create \ + --name my-service \ + --mount type=bind,source=/path/on/host,destination=/path/in/container \ + nginx:alpine +``` + +### Set service mode (--mode) + +The service mode determines whether this is a _replicated_ service or a _global_ +service. A replicated service runs as many tasks as specified, while a global +service runs on each active node in the swarm. + +The following command creates a global service: + +```bash +$ docker service create \ + --name redis_2 \ + --mode global \ + redis:3.0.6 +``` + +### Specify service constraints (--constraint) + +You can limit the set of nodes where a task can be scheduled by defining +constraint expressions. Multiple constraints find nodes that satisfy every +expression (AND match). Constraints can match node or Docker Engine labels as +follows: + +| node attribute | matches | example | +|:----------------|:--------------------------|:------------------------------------------------| +| node.id | node ID | `node.id == 2ivku8v2gvtg4` | +| node.hostname | node hostname | `node.hostname != node-2` | +| node.role | node role: manager | `node.role == manager` | +| node.labels | user defined node labels | `node.labels.security == high` | +| engine.labels | Docker Engine's labels | `engine.labels.operatingsystem == ubuntu 14.04` | + +`engine.labels` apply to Docker Engine labels like operating system, +drivers, etc. Swarm administrators add `node.labels` for operational purposes by +using the [`docker node update`](node_update.md) command. + +For example, the following limits tasks for the redis service to nodes where the +node type label equals queue: + +```bash +$ docker service create \ + --name redis_2 \ + --constraint 'node.labels.type == queue' \ + redis:3.0.6 +``` + +### Attach a service to an existing network (--network) + +You can use overlay networks to connect one or more services within the swarm. + +First, create an overlay network on a manager node the docker network create +command: + +```bash +$ docker network create \ + --driver overlay \ + my-network + +etjpu59cykrptrgw0z0hk5snf +``` + +After you create an overlay network in swarm mode, all manager nodes have +access to the network. + +When you create a service and pass the --network flag to attach the service to +the overlay network: + +```bash +$ docker service create \ + --replicas 3 \ + --network my-network \ + --name my-web \ + nginx + +716thylsndqma81j6kkkb5aus +``` + +The swarm extends my-network to each node running the service. + +Containers on the same network can access each other using +[service discovery](https://docs.docker.com/engine/swarm/networking/#use-swarm-mode-service-discovery). + +### Publish service ports externally to the swarm (-p, --publish) + +You can publish service ports to make them available externally to the swarm +using the `--publish` flag: + +```bash +$ docker service create \ + --publish : \ + nginx +``` + +For example: + +```bash +$ docker service create \ + --name my_web \ + --replicas 3 \ + --publish 8080:80 \ + nginx +``` + +When you publish a service port, the swarm routing mesh makes the service +accessible at the target port on every node regardless if there is a task for +the service running on the node. For more information refer to +[Use swarm mode routing mesh](https://docs.docker.com/engine/swarm/ingress/). + +### Publish a port for TCP only or UDP only + +By default, when you publish a port, it is a TCP port. You can +specifically publish a UDP port instead of or in addition to a TCP port. When +you publish both TCP and UDP ports, Docker 1.12.2 and earlier require you to +add the suffix `/tcp` for TCP ports. Otherwise it is optional. + +#### TCP only + +The following two commands are equivalent. + +```bash +$ docker service create --name dns-cache -p 53:53 dns-cache + +$ docker service create --name dns-cache -p 53:53/tcp dns-cache +``` + +#### TCP and UDP + +```bash +$ docker service create --name dns-cache -p 53:53/tcp -p 53:53/udp dns-cache +``` + +#### UDP only + +```bash +$ docker service create --name dns-cache -p 53:53/udp dns-cache +``` + +### Create services using templates + +You can use templates for some flags of `service create`, using the syntax +provided by the Go's [text/template](http://golange.org/pkg/text/template/) package. + +The supported flags are the following : + +- `--hostname` +- `--mount` +- `--env` + +Valid placeholders for the Go template are listed below: + +Placeholder | Description +----------------- | -------------------------------------------- +`.Service.ID` | Service ID +`.Service.Name` | Service name +`.Service.Labels` | Service labels +`.Node.ID` | Node ID +`.Task.ID` | Task ID +`.Task.Name` | Task name +`.Task.Slot` | Task slot + +#### Template example + +In this example, we are going to set the template of the created containers based on the +service's name and the node's ID where it sits. + +```bash +{% raw %} +$ docker service create \ + --name hosttempl \ + --hostname="{{.Node.ID}}-{{.Service.Name}}" \ + busybox top + +va8ew30grofhjoychbr6iot8c + +$ docker service ps va8ew30grofhjoychbr6iot8c + +ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS +wo41w8hg8qan hosttempl.1 busybox:latest@sha256:29f5d56d12684887bdfa50dcd29fc31eea4aaf4ad3bec43daf19026a7ce69912 2e7a8a9c4da2 Running Running about a minute ago + +$ docker inspect \ + --format="{{.Config.Hostname}}" \ + hosttempl.1.wo41w8hg8qanxwjwsg4kxpprj + +x3ti0erg11rjpg64m75kej2mz-hosttempl +{% endraw %} +``` diff --git a/engine/reference/commandline/service_inspect.md b/engine/reference/commandline/service_inspect.md new file mode 100644 index 00000000000..ce40a9e6293 --- /dev/null +++ b/engine/reference/commandline/service_inspect.md @@ -0,0 +1,129 @@ +--- +datafolder: engine-cli +datafile: docker_service_inspect +title: docker service inspect +--- + +{% include cli.md %} + +## Examples + +### Inspecting a service by name or ID + +You can inspect a service, either by its *name*, or *ID* + +For example, given the following service; + +```bash +$ docker service ls +ID NAME MODE REPLICAS IMAGE +dmu1ept4cxcf redis replicated 3/3 redis:3.0.6 +``` + +Both `docker service inspect redis`, and `docker service inspect dmu1ept4cxcf` +produce the same result: + +```bash +$ docker service inspect redis +[ + { + "ID": "dmu1ept4cxcfe8k8lhtux3ro3", + "Version": { + "Index": 12 + }, + "CreatedAt": "2016-06-17T18:44:02.558012087Z", + "UpdatedAt": "2016-06-17T18:44:02.558012087Z", + "Spec": { + "Name": "redis", + "TaskTemplate": { + "ContainerSpec": { + "Image": "redis:3.0.6" + }, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + }, + "Placement": {} + }, + "Mode": { + "Replicated": { + "Replicas": 1 + } + }, + "UpdateConfig": {}, + "EndpointSpec": { + "Mode": "vip" + } + }, + "Endpoint": { + "Spec": {} + } + } +] +``` + +```bash +$ docker service inspect dmu1ept4cxcf +[ + { + "ID": "dmu1ept4cxcfe8k8lhtux3ro3", + "Version": { + "Index": 12 + }, + ... + } +] +``` + +### Inspect a service using pretty-print + +You can print the inspect output in a human-readable format instead of the default +JSON output, by using the `--pretty` option: + +```bash +$ docker service inspect --pretty frontend +ID: c8wgl7q4ndfd52ni6qftkvnnp +Name: frontend +Labels: + - org.example.projectname=demo-app +Service Mode: REPLICATED + Replicas: 5 +Placement: +UpdateConfig: + Parallelism: 0 +ContainerSpec: + Image: nginx:alpine +Resources: +Endpoint Mode: vip +Ports: + Name = + Protocol = tcp + TargetPort = 443 + PublishedPort = 4443 +``` + +You can also use `--format pretty` for the same effect. + + +### Finding the number of tasks running as part of a service + +The `--format` option can be used to obtain specific information about a +service. For example, the following command outputs the number of replicas +of the "redis" service. + +```bash +{% raw %} +$ docker service inspect --format='{{.Spec.Mode.Replicated.Replicas}}' redis +10 +{% endraw %} +``` diff --git a/engine/reference/commandline/service_logs.md b/engine/reference/commandline/service_logs.md new file mode 100644 index 00000000000..81fc499a3ab --- /dev/null +++ b/engine/reference/commandline/service_logs.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_service_logs +title: docker service logs +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/service_ls.md b/engine/reference/commandline/service_ls.md new file mode 100644 index 00000000000..c7addac01db --- /dev/null +++ b/engine/reference/commandline/service_ls.md @@ -0,0 +1,13 @@ +--- +datafolder: engine-cli +datafile: docker_service_ls +title: docker service ls +--- + +{% include cli.md %} diff --git a/engine/reference/commandline/service_ps.md b/engine/reference/commandline/service_ps.md new file mode 100644 index 00000000000..39cb85920a8 --- /dev/null +++ b/engine/reference/commandline/service_ps.md @@ -0,0 +1,132 @@ +--- +datafolder: engine-cli +datafile: docker_service_ps +title: docker service ps +--- + + + +{% include cli.md %} + +## Examples + +### Listing the tasks that are part of a service + +The following command shows all the tasks that are part of the `redis` service: + +```bash +$ docker service ps redis + +ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS +0qihejybwf1x redis.1 redis:3.0.5 manager1 Running Running 8 seconds +bk658fpbex0d redis.2 redis:3.0.5 worker2 Running Running 9 seconds +5ls5s5fldaqg redis.3 redis:3.0.5 worker1 Running Running 9 seconds +8ryt076polmc redis.4 redis:3.0.5 worker1 Running Running 9 seconds +1x0v8yomsncd redis.5 redis:3.0.5 manager1 Running Running 8 seconds +71v7je3el7rr redis.6 redis:3.0.5 worker2 Running Running 9 seconds +4l3zm9b7tfr7 redis.7 redis:3.0.5 worker2 Running Running 9 seconds +9tfpyixiy2i7 redis.8 redis:3.0.5 worker1 Running Running 9 seconds +3w1wu13yupln redis.9 redis:3.0.5 manager1 Running Running 8 seconds +8eaxrb2fqpbn redis.10 redis:3.0.5 manager1 Running Running 8 seconds +``` + +In addition to _running_ tasks, the output also shows the task history. For +example, after updating the service to use the `redis:3.0.6` image, the output +may look like this: + +```bash +$ docker service ps redis + +ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS +50qe8lfnxaxk redis.1 redis:3.0.6 manager1 Running Running 6 seconds ago +ky2re9oz86r9 \_ redis.1 redis:3.0.5 manager1 Shutdown Shutdown 8 seconds ago +3s46te2nzl4i redis.2 redis:3.0.6 worker2 Running Running less than a second ago +nvjljf7rmor4 \_ redis.2 redis:3.0.6 worker2 Shutdown Rejected 23 seconds ago "No such image: redis@sha256:6…" +vtiuz2fpc0yb \_ redis.2 redis:3.0.5 worker2 Shutdown Shutdown 1 second ago +jnarweeha8x4 redis.3 redis:3.0.6 worker1 Running Running 3 seconds ago +vs448yca2nz4 \_ redis.3 redis:3.0.5 worker1 Shutdown Shutdown 4 seconds ago +jf1i992619ir redis.4 redis:3.0.6 worker1 Running Running 10 seconds ago +blkttv7zs8ee \_ redis.4 redis:3.0.5 worker1 Shutdown Shutdown 11 seconds ago +``` + +The number of items in the task history is determined by the +`--task-history-limit` option that was set when initializing the swarm. You can +change the task history retention limit using the +[`docker swarm update`](swarm_update.md) command. + +When deploying a service, docker resolves the digest for the service's +image, and pins the service to that digest. The digest is not shown by +default, but is printed if `--no-trunc` is used. The `--no-trunc` option +also shows the non-truncated task ID, and error-messages, as can be seen below; + +```bash +$ docker service ps --no-trunc redis + +ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS +50qe8lfnxaxksi9w2a704wkp7 redis.1 redis:3.0.6@sha256:6a692a76c2081888b589e26e6ec835743119fe453d67ecf03df7de5b73d69842 manager1 Running Running 5 minutes ago +ky2re9oz86r9556i2szb8a8af \_ redis.1 redis:3.0.5@sha256:f8829e00d95672c48c60f468329d6693c4bdd28d1f057e755f8ba8b40008682e worker2 Shutdown Shutdown 5 minutes ago +bk658fpbex0d57cqcwoe3jthu redis.2 redis:3.0.6@sha256:6a692a76c2081888b589e26e6ec835743119fe453d67ecf03df7de5b73d69842 worker2 Running Running 5 seconds +nvjljf7rmor4htv7l8rwcx7i7 \_ redis.2 redis:3.0.6@sha256:6a692a76c2081888b589e26e6ec835743119fe453d67ecf03df7de5b73d69842 worker2 Shutdown Rejected 5 minutes ago "No such image: redis@sha256:6a692a76c2081888b589e26e6ec835743119fe453d67ecf03df7de5b73d69842" +``` + +## Filtering + +The filtering flag (`-f` or `--filter`) format is a `key=value` pair. If there +is more than one filter, then pass multiple flags (e.g. `--filter "foo=bar" --filter "bif=baz"`). +Multiple filter flags are combined as an `OR` filter. For example, +`-f name=redis.1 -f name=redis.7` returns both `redis.1` and `redis.7` tasks. + +The currently supported filters are: + +* [id](#id) +* [name](#name) +* [node](#node) +* [desired-state](#desired-state) + + +#### ID + +The `id` filter matches on all or a prefix of a task's ID. + +```bash +$ docker service ps -f "id=8" redis + +ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS +8ryt076polmc redis.4 redis:3.0.6 worker1 Running Running 9 seconds +8eaxrb2fqpbn redis.10 redis:3.0.6 manager1 Running Running 8 seconds +``` + +#### Name + +The `name` filter matches on task names. + +```bash +$ docker service ps -f "name=redis.1" redis +ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS +qihejybwf1x5 redis.1 redis:3.0.6 manager1 Running Running 8 seconds +``` + + +#### Node + +The `node` filter matches on a node name or a node ID. + +```bash +$ docker service ps -f "node=manager1" redis +ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS +0qihejybwf1x redis.1 redis:3.0.6 manager1 Running Running 8 seconds +1x0v8yomsncd redis.5 redis:3.0.6 manager1 Running Running 8 seconds +3w1wu13yupln redis.9 redis:3.0.6 manager1 Running Running 8 seconds +8eaxrb2fqpbn redis.10 redis:3.0.6 manager1 Running Running 8 seconds +``` + + +#### desired-state + +The `desired-state` filter can take the values `running`, `shutdown`, and `accepted`. diff --git a/engine/reference/commandline/service_rm.md b/engine/reference/commandline/service_rm.md new file mode 100644 index 00000000000..96fc51d7f76 --- /dev/null +++ b/engine/reference/commandline/service_rm.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_service_rm +title: docker service rm +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/service_scale.md b/engine/reference/commandline/service_scale.md new file mode 100644 index 00000000000..133e6f595c2 --- /dev/null +++ b/engine/reference/commandline/service_scale.md @@ -0,0 +1,76 @@ +--- +datafolder: engine-cli +datafile: docker_service_scale +title: docker service scale +--- + + + +{% include cli.md %} + +## Examples + +### Scale a service + +The scale command enables you to scale one or more replicated services either up +or down to the desired number of replicas. This command cannot be applied on +services which are global mode. The command will return immediately, but the +actual scaling of the service may take some time. To stop all replicas of a +service while keeping the service active in the swarm you can set the scale to 0. + +For example, the following command scales the "frontend" service to 50 tasks. + +```bash +$ docker service scale frontend=50 +frontend scaled to 50 +``` + +The following command tries to scale a global service to 10 tasks and returns an error. + +``` +$ docker service create --mode global --name backend backend:latest +b4g08uwuairexjub6ome6usqh +$ docker service scale backend=10 +backend: scale can only be used with replicated mode +``` + +Directly afterwards, run `docker service ls`, to see the actual number of +replicas. + +```bash +$ docker service ls --filter name=frontend + +ID NAME MODE REPLICAS IMAGE +3pr5mlvu3fh9 frontend replicated 15/50 nginx:alpine +``` + +You can also scale a service using the [`docker service update`](service_update.md) +command. The following commands are equivalent: + +```bash +$ docker service scale frontend=50 +$ docker service update --replicas=50 frontend +``` + +### Scale multiple services + +The `docker service scale` command allows you to set the desired number of +tasks for multiple services at once. The following example scales both the +backend and frontend services: + +```bash +$ docker service scale backend=3 frontend=5 +backend scaled to 3 +frontend scaled to 5 + +$ docker service ls +ID NAME MODE REPLICAS IMAGE +3pr5mlvu3fh9 frontend replicated 5/5 nginx:alpine +74nzcxxjv6fq backend replicated 3/3 redis:3.0.6 +``` diff --git a/engine/reference/commandline/service_update.md b/engine/reference/commandline/service_update.md new file mode 100644 index 00000000000..1e0b545eeb4 --- /dev/null +++ b/engine/reference/commandline/service_update.md @@ -0,0 +1,95 @@ +--- +datafolder: engine-cli +datafile: docker_service_update +title: docker service update +--- + + + +{% include cli.md %} + +## Examples + +### Update a service + +```bash +$ docker service update --limit-cpu 2 redis +``` + +### Perform a rolling restart with no parameter changes + +```bash +$ docker service update --force --update-parallelism 1 --update-delay 30s redis +``` + +In this example, the `--force` flag causes the service's tasks to be shut down +and replaced with new ones even though none of the other parameters would +normally cause that to happen. The `--update-parallelism 1` setting ensures +that only one task is replaced at a time (this is the default behavior). The +`--update-delay 30s` setting introduces a 30 second delay between tasks, so +that the rolling restart happens gradually. + +### Adding and removing mounts + +Use the `--mount-add` or `--mount-rm` options add or remove a service's bind-mounts +or volumes. + +The following example creates a service which mounts the `test-data` volume to +`/somewhere`. The next step updates the service to also mount the `other-volume` +volume to `/somewhere-else`volume, The last step unmounts the `/somewhere` mount +point, effectively removing the `test-data` volume. Each command returns the +service name. + +- The `--mount-add` flag takes the same parameters as the `--mount` flag on + `service create`. Refer to the [volumes and + bind-mounts](service_create.md#volumes-and-bind-mounts-mount) section in the + `service create` reference for details. + +- The `--mount-rm` flag takes the `target` path of the mount. + +```bash +$ docker service create \ + --name=myservice \ + --mount \ + type=volume,source=test-data,target=/somewhere \ + nginx:alpine \ + myservice + +myservice + +$ docker service update \ + --mount-add \ + type=volume,source=other-volume,target=/somewhere-else \ + myservice + +myservice + +$ docker service update --mount-rm /somewhere myservice + +myservice +``` + +### Adding and removing secrets + +Use the `--secret-add` or `--secret-rm` options add or remove a service's +secrets. + +The following example adds a secret named `ssh-2` and removes `ssh-1`: + +```bash +$ docker service update \ + --secret-add source=ssh-2,target=ssh-2 \ + --secret-rm ssh-1 \ + myservice +``` + +### Update services using templates + +Some flags of `service update` support the use of templating. +See [`service create`](./service_create.md#templating) for the reference. diff --git a/engine/reference/commandline/stack.md b/engine/reference/commandline/stack.md new file mode 100644 index 00000000000..769c917d4d4 --- /dev/null +++ b/engine/reference/commandline/stack.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_stack +title: docker stack +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/stack_deploy.md b/engine/reference/commandline/stack_deploy.md new file mode 100644 index 00000000000..97070078a4e --- /dev/null +++ b/engine/reference/commandline/stack_deploy.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_stack_deploy +title: docker stack deploy +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/stack_ls.md b/engine/reference/commandline/stack_ls.md new file mode 100644 index 00000000000..d1ee2f00c29 --- /dev/null +++ b/engine/reference/commandline/stack_ls.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_stack_ls +title: docker stack ls +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/stack_ps.md b/engine/reference/commandline/stack_ps.md new file mode 100644 index 00000000000..55be606d4a0 --- /dev/null +++ b/engine/reference/commandline/stack_ps.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_stack_ps +title: docker stack ps +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/stack_rm.md b/engine/reference/commandline/stack_rm.md new file mode 100644 index 00000000000..cad70891529 --- /dev/null +++ b/engine/reference/commandline/stack_rm.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_stack_rm +title: docker stack rm +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/stack_services.md b/engine/reference/commandline/stack_services.md new file mode 100644 index 00000000000..5ef1d3f5f76 --- /dev/null +++ b/engine/reference/commandline/stack_services.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_stack_services +title: docker stack services +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/start.md b/engine/reference/commandline/start.md new file mode 100644 index 00000000000..99d2fa83551 --- /dev/null +++ b/engine/reference/commandline/start.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_start +title: docker start +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/stats.md b/engine/reference/commandline/stats.md new file mode 100644 index 00000000000..f6bd6234fdf --- /dev/null +++ b/engine/reference/commandline/stats.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_stats +title: docker stats +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/stop.md b/engine/reference/commandline/stop.md new file mode 100644 index 00000000000..18930aa4829 --- /dev/null +++ b/engine/reference/commandline/stop.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_stop +title: docker stop +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/swarm.md b/engine/reference/commandline/swarm.md new file mode 100644 index 00000000000..c011a37f838 --- /dev/null +++ b/engine/reference/commandline/swarm.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_swarm +title: docker swarm +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/swarm_init.md b/engine/reference/commandline/swarm_init.md new file mode 100644 index 00000000000..581fb44b4fb --- /dev/null +++ b/engine/reference/commandline/swarm_init.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_swarm_init +title: docker swarm init +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/swarm_join-token.md b/engine/reference/commandline/swarm_join-token.md new file mode 100644 index 00000000000..3cefaff2b6a --- /dev/null +++ b/engine/reference/commandline/swarm_join-token.md @@ -0,0 +1,17 @@ +--- +datafolder: engine-cli +datafile: docker_swarm_join-token +title: docker swarm join-token +redirect_from: +- /engine/reference/commandline/swarm_join_token/ +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/swarm_join.md b/engine/reference/commandline/swarm_join.md new file mode 100644 index 00000000000..23f189f751c --- /dev/null +++ b/engine/reference/commandline/swarm_join.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_swarm_join +title: docker swarm join +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/swarm_leave.md b/engine/reference/commandline/swarm_leave.md new file mode 100644 index 00000000000..2af6b1864de --- /dev/null +++ b/engine/reference/commandline/swarm_leave.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_swarm_leave +title: docker swarm leave +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/swarm_unlock-key.md b/engine/reference/commandline/swarm_unlock-key.md new file mode 100644 index 00000000000..3ebbcba89c7 --- /dev/null +++ b/engine/reference/commandline/swarm_unlock-key.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_swarm_unlock-key +title: docker swarm unlock-key +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/swarm_unlock.md b/engine/reference/commandline/swarm_unlock.md new file mode 100644 index 00000000000..7aba9c40fee --- /dev/null +++ b/engine/reference/commandline/swarm_unlock.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_swarm_unlock +title: docker swarm unlock +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/swarm_update.md b/engine/reference/commandline/swarm_update.md new file mode 100644 index 00000000000..239815838b8 --- /dev/null +++ b/engine/reference/commandline/swarm_update.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_swarm_update +title: docker swarm update +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/system.md b/engine/reference/commandline/system.md new file mode 100644 index 00000000000..10fc80614dd --- /dev/null +++ b/engine/reference/commandline/system.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_system +title: docker system +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/system_df.md b/engine/reference/commandline/system_df.md new file mode 100644 index 00000000000..4de1cdd5557 --- /dev/null +++ b/engine/reference/commandline/system_df.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_system_df +title: docker system df +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/system_events.md b/engine/reference/commandline/system_events.md new file mode 100644 index 00000000000..6ba3b245dde --- /dev/null +++ b/engine/reference/commandline/system_events.md @@ -0,0 +1,121 @@ +--- +datafolder: engine-cli +datafile: docker_system_events +title: docker system events +--- + + + +{% include cli.md %} + +## Examples + +### Listening for Docker events + +After running docker events a container 786d698004576 is started and stopped +(The container name has been shortened in the output below): + + $ docker events + + 2015-01-28T20:21:31.000000000-08:00 59211849bc10: (from whenry/testimage:latest) start + 2015-01-28T20:21:31.000000000-08:00 59211849bc10: (from whenry/testimage:latest) die + 2015-01-28T20:21:32.000000000-08:00 59211849bc10: (from whenry/testimage:latest) stop + +### Listening for events since a given date +Again the output container IDs have been shortened for the purposes of this document: + + $ docker events --since '2015-01-28' + + 2015-01-28T20:25:38.000000000-08:00 c21f6c22ba27: (from whenry/testimage:latest) create + 2015-01-28T20:25:38.000000000-08:00 c21f6c22ba27: (from whenry/testimage:latest) start + 2015-01-28T20:25:39.000000000-08:00 c21f6c22ba27: (from whenry/testimage:latest) create + 2015-01-28T20:25:39.000000000-08:00 c21f6c22ba27: (from whenry/testimage:latest) start + 2015-01-28T20:25:40.000000000-08:00 c21f6c22ba27: (from whenry/testimage:latest) die + 2015-01-28T20:25:42.000000000-08:00 c21f6c22ba27: (from whenry/testimage:latest) stop + 2015-01-28T20:25:45.000000000-08:00 c21f6c22ba27: (from whenry/testimage:latest) start + 2015-01-28T20:25:45.000000000-08:00 c21f6c22ba27: (from whenry/testimage:latest) die + 2015-01-28T20:25:46.000000000-08:00 c21f6c22ba27: (from whenry/testimage:latest) stop + +The following example outputs all events that were generated in the last 3 minutes, +relative to the current time on the client machine: + + # docker events --since '3m' + 2015-05-12T11:51:30.999999999Z07:00 4386fb97867d: (from ubuntu-1:14.04) die + 2015-05-12T15:52:12.999999999Z07:00 4386fb97867d: (from ubuntu-1:14.04) stop + 2015-05-12T15:53:45.999999999Z07:00 7805c1d35632: (from redis:2.8) die + 2015-05-12T15:54:03.999999999Z07:00 7805c1d35632: (from redis:2.8) stop + +If you do not provide the --since option, the command returns only new and/or +live events. + +### Format + +If a format (`--format`) is specified, the given template will be executed +instead of the default format. Go's **text/template** package describes all the +details of the format. + + {% raw %} + $ docker events --filter 'type=container' --format 'Type={{.Type}} Status={{.Status}} ID={{.ID}}' + Type=container Status=create ID=2ee349dac409e97974ce8d01b70d250b85e0ba8189299c126a87812311951e26 + Type=container Status=attach ID=2ee349dac409e97974ce8d01b70d250b85e0ba8189299c126a87812311951e26 + Type=container Status=start ID=2ee349dac409e97974ce8d01b70d250b85e0ba8189299c126a87812311951e26 + Type=container Status=resize ID=2ee349dac409e97974ce8d01b70d250b85e0ba8189299c126a87812311951e26 + Type=container Status=die ID=2ee349dac409e97974ce8d01b70d250b85e0ba8189299c126a87812311951e26 + Type=container Status=destroy ID=2ee349dac409e97974ce8d01b70d250b85e0ba8189299c126a87812311951e26 + {% endraw %} + +If a format is set to `{% raw %}{{json .}}{% endraw %}`, the events are streamed as valid JSON +Lines. For information about JSON Lines, please refer to http://jsonlines.org/ . + + {% raw %} + $ docker events --format '{{json .}}' + {"status":"create","id":"196016a57679bf42424484918746a9474cd905dd993c4d0f4.. + {"status":"attach","id":"196016a57679bf42424484918746a9474cd905dd993c4d0f4.. + {"Type":"network","Action":"connect","Actor":{"ID":"1b50a5bf755f6021dfa78e.. + {"status":"start","id":"196016a57679bf42424484918746a9474cd905dd993c4d0f42.. + {"status":"resize","id":"196016a57679bf42424484918746a9474cd905dd993c4d0f4.. + {% endraw %} + +### Filters + + $ docker events --filter 'event=stop' + 2014-05-10T17:42:14.999999999Z07:00 container stop 4386fb97867d (image=ubuntu-1:14.04) + 2014-09-03T17:42:14.999999999Z07:00 container stop 7805c1d35632 (image=redis:2.8) + + $ docker events --filter 'image=ubuntu-1:14.04' + 2014-05-10T17:42:14.999999999Z07:00 container start 4386fb97867d (image=ubuntu-1:14.04) + 2014-05-10T17:42:14.999999999Z07:00 container die 4386fb97867d (image=ubuntu-1:14.04) + 2014-05-10T17:42:14.999999999Z07:00 container stop 4386fb97867d (image=ubuntu-1:14.04) + + $ docker events --filter 'container=7805c1d35632' + 2014-05-10T17:42:14.999999999Z07:00 container die 7805c1d35632 (image=redis:2.8) + 2014-09-03T15:49:29.999999999Z07:00 container stop 7805c1d35632 (image= redis:2.8) + + $ docker events --filter 'container=7805c1d35632' --filter 'container=4386fb97867d' + 2014-09-03T15:49:29.999999999Z07:00 container die 4386fb97867d (image=ubuntu-1:14.04) + 2014-05-10T17:42:14.999999999Z07:00 container stop 4386fb97867d (image=ubuntu-1:14.04) + 2014-05-10T17:42:14.999999999Z07:00 container die 7805c1d35632 (image=redis:2.8) + 2014-09-03T15:49:29.999999999Z07:00 container stop 7805c1d35632 (image=redis:2.8) + + $ docker events --filter 'container=7805c1d35632' --filter 'event=stop' + 2014-09-03T15:49:29.999999999Z07:00 container stop 7805c1d35632 (image=redis:2.8) + + $ docker events --filter 'type=volume' + 2015-12-23T21:05:28.136212689Z volume create test-event-volume-local (driver=local) + 2015-12-23T21:05:28.383462717Z volume mount test-event-volume-local (read/write=true, container=562fe10671e9273da25eed36cdce26159085ac7ee6707105fd534866340a5025, destination=/foo, driver=local, propagation=rprivate) + 2015-12-23T21:05:28.650314265Z volume unmount test-event-volume-local (container=562fe10671e9273da25eed36cdce26159085ac7ee6707105fd534866340a5025, driver=local) + 2015-12-23T21:05:28.716218405Z volume destroy test-event-volume-local (driver=local) + + $ docker events --filter 'type=network' + 2015-12-23T21:38:24.705709133Z network create 8b111217944ba0ba844a65b13efcd57dc494932ee2527577758f939315ba2c5b (name=test-event-network-local, type=bridge) + 2015-12-23T21:38:25.119625123Z network connect 8b111217944ba0ba844a65b13efcd57dc494932ee2527577758f939315ba2c5b (name=test-event-network-local, container=b4be644031a3d90b400f88ab3d4bdf4dc23adb250e696b6328b85441abe2c54e, type=bridge) + + $ docker events --filter 'type=plugin' (experimental) + 2016-07-25T17:30:14.825557616Z plugin pull ec7b87f2ce84330fe076e666f17dfc049d2d7ae0b8190763de94e1f2d105993f (name=tiborvass/sample-volume-plugin:latest) + 2016-07-25T17:30:14.888127370Z plugin enable ec7b87f2ce84330fe076e666f17dfc049d2d7ae0b8190763de94e1f2d105993f (name=tiborvass/sample-volume-plugin:latest) diff --git a/engine/reference/commandline/system_info.md b/engine/reference/commandline/system_info.md new file mode 100644 index 00000000000..ff7fbbc14e6 --- /dev/null +++ b/engine/reference/commandline/system_info.md @@ -0,0 +1,164 @@ +--- +datafolder: engine-cli +datafile: docker_system_info +title: docker system info +--- + + + +{% include cli.md %} + +## Examples + +### Display Docker system information + +Here is a sample output for a daemon running on Ubuntu, using the overlay2 +storage driver: + + $ docker -D info + Containers: 14 + Running: 3 + Paused: 1 + Stopped: 10 + Images: 52 + Server Version: 1.13.0 + Storage Driver: overlay2 + Backing Filesystem: extfs + Supports d_type: true + Native Overlay Diff: false + Logging Driver: json-file + Cgroup Driver: cgroupfs + Plugins: + Volume: local + Network: bridge host macvlan null overlay + Swarm: active + NodeID: rdjq45w1op418waxlairloqbm + Is Manager: true + ClusterID: te8kdyw33n36fqiz74bfjeixd + Managers: 1 + Nodes: 2 + Orchestration: + Task History Retention Limit: 5 + Raft: + Snapshot Interval: 10000 + Number of Old Snapshots to Retain: 0 + Heartbeat Tick: 1 + Election Tick: 3 + Dispatcher: + Heartbeat Period: 5 seconds + CA Configuration: + Expiry Duration: 3 months + Node Address: 172.16.66.128 172.16.66.129 + Manager Addresses: + 172.16.66.128:2477 + Runtimes: runc + Default Runtime: runc + Init Binary: docker-init + containerd version: 8517738ba4b82aff5662c97ca4627e7e4d03b531 + runc version: ac031b5bf1cc92239461125f4c1ffb760522bbf2 + init version: N/A (expected: v0.13.0) + Security Options: + apparmor + seccomp + Profile: default + Kernel Version: 4.4.0-31-generic + Operating System: Ubuntu 16.04.1 LTS + OSType: linux + Architecture: x86_64 + CPUs: 2 + Total Memory: 1.937 GiB + Name: ubuntu + ID: H52R:7ZR6:EIIA:76JG:ORIY:BVKF:GSFU:HNPG:B5MK:APSC:SZ3Q:N326 + Docker Root Dir: /var/lib/docker + Debug Mode (client): true + Debug Mode (server): true + File Descriptors: 30 + Goroutines: 123 + System Time: 2016-11-12T17:24:37.955404361-08:00 + EventsListeners: 0 + Http Proxy: http://test:test@proxy.example.com:8080 + Https Proxy: https://test:test@proxy.example.com:8080 + No Proxy: localhost,127.0.0.1,docker-registry.somecorporation.com + Registry: https://index.docker.io/v1/ + WARNING: No swap limit support + Labels: + storage=ssd + staging=true + Experimental: false + Insecure Registries: + 127.0.0.0/8 + Registry Mirrors: + http://192.168.1.2/ + http://registry-mirror.example.com:5000/ + Live Restore Enabled: false + + + +The global `-D` option tells all `docker` commands to output debug information. + +The example below shows the output for a daemon running on Red Hat Enterprise Linux, +using the devicemapper storage driver. As can be seen in the output, additional +information about the devicemapper storage driver is shown: + + $ docker info + Containers: 14 + Running: 3 + Paused: 1 + Stopped: 10 + Untagged Images: 52 + Server Version: 1.10.3 + Storage Driver: devicemapper + Pool Name: docker-202:2-25583803-pool + Pool Blocksize: 65.54 kB + Base Device Size: 10.74 GB + Backing Filesystem: xfs + Data file: /dev/loop0 + Metadata file: /dev/loop1 + Data Space Used: 1.68 GB + Data Space Total: 107.4 GB + Data Space Available: 7.548 GB + Metadata Space Used: 2.322 MB + Metadata Space Total: 2.147 GB + Metadata Space Available: 2.145 GB + Udev Sync Supported: true + Deferred Removal Enabled: false + Deferred Deletion Enabled: false + Deferred Deleted Device Count: 0 + Data loop file: /var/lib/docker/devicemapper/devicemapper/data + Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata + Library Version: 1.02.107-RHEL7 (2015-12-01) + Execution Driver: native-0.2 + Logging Driver: json-file + Plugins: + Volume: local + Network: null host bridge + Kernel Version: 3.10.0-327.el7.x86_64 + Operating System: Red Hat Enterprise Linux Server 7.2 (Maipo) + OSType: linux + Architecture: x86_64 + CPUs: 1 + Total Memory: 991.7 MiB + Name: ip-172-30-0-91.ec2.internal + ID: I54V:OLXT:HVMM:TPKO:JPHQ:CQCD:JNLC:O3BZ:4ZVJ:43XJ:PFHZ:6N2S + Docker Root Dir: /var/lib/docker + Debug mode (client): false + Debug mode (server): false + Username: gordontheturtle + Registry: https://index.docker.io/v1/ + Insecure registries: + myinsecurehost:5000 + 127.0.0.0/8 + +You can also specify the output format: + + {% raw %} + $ docker info --format '{{json .}}' + + {"ID":"I54V:OLXT:HVMM:TPKO:JPHQ:CQCD:JNLC:O3BZ:4ZVJ:43XJ:PFHZ:6N2S","Containers":14, ...} + {% endraw %} diff --git a/engine/reference/commandline/system_prune.md b/engine/reference/commandline/system_prune.md new file mode 100644 index 00000000000..c4af2476d6d --- /dev/null +++ b/engine/reference/commandline/system_prune.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_system_prune +title: docker system prune +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/tag.md b/engine/reference/commandline/tag.md new file mode 100644 index 00000000000..cea0ad21a9c --- /dev/null +++ b/engine/reference/commandline/tag.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_tag +title: docker tag +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/top.md b/engine/reference/commandline/top.md new file mode 100644 index 00000000000..bcffc1b351d --- /dev/null +++ b/engine/reference/commandline/top.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_top +title: docker top +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/unpause.md b/engine/reference/commandline/unpause.md new file mode 100644 index 00000000000..dcdd7b6b3a6 --- /dev/null +++ b/engine/reference/commandline/unpause.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_unpause +title: docker unpause +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/update.md b/engine/reference/commandline/update.md new file mode 100644 index 00000000000..37d5b41f812 --- /dev/null +++ b/engine/reference/commandline/update.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_update +title: docker update +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/version.md b/engine/reference/commandline/version.md new file mode 100644 index 00000000000..70aa20027e6 --- /dev/null +++ b/engine/reference/commandline/version.md @@ -0,0 +1,62 @@ +--- +datafolder: engine-cli +datafile: docker_version +title: docker version +--- + + + +{% include cli.md %} + +## Examples + +### Display Docker version information + +The default output: + +```bash +$ docker version + Client: + Version: 1.8.0 + API version: 1.20 + Go version: go1.4.2 + Git commit: f5bae0a + Built: Tue Jun 23 17:56:00 UTC 2015 + OS/Arch: linux/amd64 + + Server: + Version: 1.8.0 + API version: 1.20 + Go version: go1.4.2 + Git commit: f5bae0a + Built: Tue Jun 23 17:56:00 UTC 2015 + OS/Arch: linux/amd64 +``` + +Get server version: + +```bash +{% raw %} +$ docker version --format '{{.Server.Version}}' + + 1.8.0 +{% endraw %} +``` + +Dump raw data: + +To view all available fields, you can use the format `{% raw %}{{json .}}{% endraw %}`. + +```bash +{% raw %} +$ docker version --format '{{json .}}' + +{"Client":{"Version":"1.8.0","ApiVersion":"1.20","GitCommit":"f5bae0a","GoVersion":"go1.4.2","Os":"linux","Arch":"amd64","BuildTime":"Tue Jun 23 17:56:00 UTC 2015"},"ServerOK":true,"Server":{"Version":"1.8.0","ApiVersion":"1.20","GitCommit":"f5bae0a","GoVersion":"go1.4.2","Os":"linux","Arch":"amd64","KernelVersion":"3.13.2-gentoo","BuildTime":"Tue Jun 23 17:56:00 UTC 2015"}} +{% endraw %} +``` diff --git a/engine/reference/commandline/volume.md b/engine/reference/commandline/volume.md new file mode 100644 index 00000000000..1175ff19f47 --- /dev/null +++ b/engine/reference/commandline/volume.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_volume +title: docker volume +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/volume_create.md b/engine/reference/commandline/volume_create.md new file mode 100644 index 00000000000..5fb2ee19c41 --- /dev/null +++ b/engine/reference/commandline/volume_create.md @@ -0,0 +1,49 @@ +--- +datafolder: engine-cli +datafile: docker_volume_create +title: docker volume create +--- + + + +{% include cli.md %} + +## Examples + +$ docker volume create hello +hello +$ docker run -d -v hello:/world busybox ls /world + +The mount is created inside the container's `/src` directory. Docker doesn't +not support relative paths for mount points inside the container. + +Multiple containers can use the same volume in the same time period. This is +useful if two containers need access to shared data. For example, if one +container writes and the other reads the data. + +### Driver specific options + +Some volume drivers may take options to customize the volume creation. Use the +`-o` or `--opt` flags to pass driver options: + +$ docker volume create --driver fake --opt tardis=blue --opt timey=wimey + +These options are passed directly to the volume driver. Options for different +volume drivers may do different things (or nothing at all). + +The built-in `local` driver on Windows does not support any options. + +The built-in `local` driver on Linux accepts options similar to the linux +`mount` command: + +$ docker volume create --driver local --opt type=tmpfs --opt device=tmpfs --opt o=size=100m,uid=1000 + +Another example: + +$ docker volume create --driver local --opt type=btrfs --opt device=/dev/sda2 diff --git a/engine/reference/commandline/volume_inspect.md b/engine/reference/commandline/volume_inspect.md new file mode 100644 index 00000000000..792249589cc --- /dev/null +++ b/engine/reference/commandline/volume_inspect.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_volume_inspect +title: docker volume inspect +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/volume_ls.md b/engine/reference/commandline/volume_ls.md new file mode 100644 index 00000000000..9cb0a60f530 --- /dev/null +++ b/engine/reference/commandline/volume_ls.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_volume_ls +title: docker volume ls +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/volume_prune.md b/engine/reference/commandline/volume_prune.md new file mode 100644 index 00000000000..7a13344a90e --- /dev/null +++ b/engine/reference/commandline/volume_prune.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_volume_prune +title: docker volume prune +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/volume_rm.md b/engine/reference/commandline/volume_rm.md new file mode 100644 index 00000000000..aed0fe4fcd6 --- /dev/null +++ b/engine/reference/commandline/volume_rm.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_volume_rm +title: docker volume rm +--- + + + +{% include cli.md %} diff --git a/engine/reference/commandline/wait.md b/engine/reference/commandline/wait.md new file mode 100644 index 00000000000..81c1cbb4249 --- /dev/null +++ b/engine/reference/commandline/wait.md @@ -0,0 +1,15 @@ +--- +datafolder: engine-cli +datafile: docker_wait +title: docker wait +--- + + + +{% include cli.md %} diff --git a/engine/security/apparmor.md b/engine/security/apparmor.md index e2f35d4edbe..202a7702ca2 100644 --- a/engine/security/apparmor.md +++ b/engine/security/apparmor.md @@ -9,9 +9,13 @@ operating system and its applications from security threats. To use it, a system administrator associates an AppArmor security profile with each program. Docker expects to find an AppArmor policy loaded and enforced. -Docker automatically loads container profiles. The Docker binary installs -a `docker-default` profile in the `/etc/apparmor.d/docker` file. This profile -is used on containers, _not_ on the Docker Daemon. +Docker automatically generates and loads a default profile for containers named +`docker-default`. On Docker versions `1.13.0` and later, the Docker binary generates +this profile in `tmpfs` and then loads it into the kernel. On Docker versions +earlier than `1.13.0`, this profile is generated in `/etc/apparmor.d/docker` +instead. + +> **Note:** This profile is used on containers, _not_ on the Docker Daemon. A profile for the Docker Engine daemon exists but it is not currently installed with the `deb` packages. If you are interested in the source for the daemon @@ -23,39 +27,8 @@ in the Docker Engine source repository. The `docker-default` profile is the default for running containers. It is moderately protective while providing wide application compatibility. The -profile is the following: - -``` -#include - - -profile docker-default flags=(attach_disconnected,mediate_deleted) { - - #include - - - network, - capability, - file, - umount, - - deny @{PROC}/{*,**^[0-9*],sys/kernel/shm*} wkx, - deny @{PROC}/sysrq-trigger rwklx, - deny @{PROC}/mem rwklx, - deny @{PROC}/kmem rwklx, - deny @{PROC}/kcore rwklx, - - deny mount, - - deny /sys/[^f]*/** wklx, - deny /sys/f[^s]*/** wklx, - deny /sys/fs/[^c]*/** wklx, - deny /sys/fs/c[^g]*/** wklx, - deny /sys/fs/cg[^r]*/** wklx, - deny /sys/firmware/efi/efivars/** rwklx, - deny /sys/kernel/security/** rwklx, -} -``` +profile is generated from the following +[template](https://github.com/docker/docker/blob/master/profiles/apparmor/template.go). When you run a container, it uses the `docker-default` policy unless you override it with the `security-opt` option. For example, the following @@ -157,18 +130,24 @@ profile docker-nginx flags=(attach_disconnected,mediate_deleted) { capability setgid, capability net_bind_service, - deny @{PROC}/{*,**^[0-9*],sys/kernel/shm*} wkx, + deny @{PROC}/* w, # deny write for all files directly in /proc (not in a subdir) + # deny write to files not in /proc//** or /proc/sys/** + deny @{PROC}/{[^1-9],[^1-9][^0-9],[^1-9s][^0-9y][^0-9s],[^1-9][^0-9][^0-9][^0-9]*}/** w, + deny @{PROC}/sys/[^k]** w, # deny /proc/sys except /proc/sys/k* (effectively /proc/sys/kernel) + deny @{PROC}/sys/kernel/{?,??,[^s][^h][^m]**} w, # deny everything except shm* in /proc/sys/kernel/ deny @{PROC}/sysrq-trigger rwklx, deny @{PROC}/mem rwklx, deny @{PROC}/kmem rwklx, deny @{PROC}/kcore rwklx, + deny mount, + deny /sys/[^f]*/** wklx, deny /sys/f[^s]*/** wklx, deny /sys/fs/[^c]*/** wklx, deny /sys/fs/c[^g]*/** wklx, deny /sys/fs/cg[^r]*/** wklx, - deny /sys/firmware/efi/efivars/** rwklx, + deny /sys/firmware/** rwklx, deny /sys/kernel/security/** rwklx, } ``` @@ -308,4 +287,4 @@ Advanced users and package managers can find a profile for `/usr/bin/docker` in the Docker Engine source repository. The `docker-default` profile for containers lives in -[profiles/apparmor](https://github.com/docker/docker/tree/master/profiles/apparmor). \ No newline at end of file +[profiles/apparmor](https://github.com/docker/docker/tree/master/profiles/apparmor). diff --git a/engine/security/certificates.md b/engine/security/certificates.md index 9004f335f39..0b3c87a5d43 100644 --- a/engine/security/certificates.md +++ b/engine/security/certificates.md @@ -22,8 +22,10 @@ A custom certificate is configured by creating a directory under `localhost`). All `*.crt` files are added to this directory as CA roots. > **Note:** -> In the absence of any root certificate authorities, Docker -> will use the system default (i.e., host's root CA set). +> As of docker 1.13, on Linux any root certificates authorities will be merged +> in with the system defaults (i.e., host's root CA set). Prior to 1.13 and on +> Windows, the system default certificates will only be used when there are no +> custom root certificates provided. The presence of one or more `.key/cert` pairs indicates to Docker that there are custom certificates required for access to the desired @@ -34,7 +36,7 @@ repository. > order. If there is an authentication error (e.g., 403, 404, 5xx, etc.), Docker > will continue to try with the next certificate. -The following illustrates a configuration with multiple certs: +The following illustrates a configuration with custom certificates: ``` /etc/docker/certs.d/ <-- Certificate directory @@ -53,7 +55,7 @@ creating an os-provided bundled certificate chain. ## Creating the client certificates You will use OpenSSL's `genrsa` and `req` commands to first generate an RSA -key and then use the key to create the certificate. +key and then use the key to create the certificate. $ openssl genrsa -out client.key 4096 $ openssl req -new -x509 -text -key client.key -out client.cert @@ -65,7 +67,7 @@ key and then use the key to create the certificate. ## Troubleshooting tips -The Docker daemon interprets `.crt` files as CA certificates and `.cert` files +The Docker daemon interprets ``.crt` files as CA certificates and `.cert` files as client certificates. If a CA certificate is accidentally given the extension `.cert` instead of the correct `.crt` extension, the Docker daemon logs the following error message: diff --git a/engine/security/https.md b/engine/security/https.md index ff3bf3c47cc..6216bb33a15 100644 --- a/engine/security/https.md +++ b/engine/security/https.md @@ -209,4 +209,4 @@ flags: ## Related information * [Using certificates for repository client verification](certificates.md) -* [Use trusted images](trust/index.md) \ No newline at end of file +* [Use trusted images](trust/index.md) diff --git a/engine/security/https/Dockerfile b/engine/security/https/Dockerfile index 0e7f88d4200..a3cc132c513 100644 --- a/engine/security/https/Dockerfile +++ b/engine/security/https/Dockerfile @@ -1,7 +1,3 @@ ---- -{} ---- - FROM debian RUN apt-get update && apt-get install -yq openssl diff --git a/engine/security/https/Makefile b/engine/security/https/Makefile index 8a58b66880b..a346a43e222 100644 --- a/engine/security/https/Makefile +++ b/engine/security/https/Makefile @@ -1,6 +1,3 @@ ---- -{} ---- HOST:=boot2docker diff --git a/engine/security/https/make_certs.sh b/engine/security/https/make_certs.sh old mode 100644 new mode 100755 index 1d7982bb94a..39001fdb506 --- a/engine/security/https/make_certs.sh +++ b/engine/security/https/make_certs.sh @@ -1,5 +1,3 @@ - - #!/bin/sh openssl genrsa -aes256 -out ca-key.pem 2048 openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem diff --git a/engine/security/https/parsedocs.sh b/engine/security/https/parsedocs.sh old mode 100644 new mode 100755 index ef3eef35b8c..f9df33c3374 --- a/engine/security/https/parsedocs.sh +++ b/engine/security/https/parsedocs.sh @@ -1,5 +1,3 @@ - - #!/bin/sh echo "#!/bin/sh" diff --git a/engine/security/index.md b/engine/security/index.md index 5097a6a4740..f9a4c58c168 100644 --- a/engine/security/index.md +++ b/engine/security/index.md @@ -14,4 +14,4 @@ This section discusses the security features you can configure and use within yo * You can configure secure computing mode (Seccomp) policies to secure system calls in a container. For more information, see [Seccomp security profiles for Docker](seccomp.md). -* An AppArmor profile for Docker is installed with the official *.deb* packages. For information about this profile and overriding it, see [AppArmor security profiles for Docker](apparmor.md). \ No newline at end of file +* An AppArmor profile for Docker is installed with the official *.deb* packages. For information about this profile and overriding it, see [AppArmor security profiles for Docker](apparmor.md). diff --git a/engine/security/seccomp.md b/engine/security/seccomp.md index 7344d085024..de41d3d28e5 100644 --- a/engine/security/seccomp.md +++ b/engine/security/seccomp.md @@ -19,7 +19,7 @@ CONFIG_SECCOMP=y ``` > **Note**: seccomp profiles require seccomp 2.2.1 and are only -> available starting with Debian 9 "Stretch", Ubuntu 15.10 "Wily", +> available starting with Debian 9 "Stretch", Ubuntu 16.04 "Xenial", > Fedora 22, CentOS 7 and Oracle Linux 7. To use this feature on Ubuntu 14.04, Debian Wheezy, or > Debian Jessie, you must download the [latest static Docker Linux binary](../installation/binaries.md). > This feature is currently *not* available on other distributions. @@ -33,24 +33,65 @@ compatibility. The default Docker profile (found [here](https://github.com/docke ```json { "defaultAction": "SCMP_ACT_ERRNO", - "architectures": [ - "SCMP_ARCH_X86_64", - "SCMP_ARCH_X86", - "SCMP_ARCH_X32" + "archMap": [ + { + "architecture": "SCMP_ARCH_X86_64", + "subArchitectures": [ + "SCMP_ARCH_X86", + "SCMP_ARCH_X32" + ] + }, + ... ], "syscalls": [ { - "name": "accept", + "names": [ + "accept", + "accept4", + "access", + "alarm", + "alarm", + "bind", + "brk", + ... + "waitid", + "waitpid", + "write", + "writev" + ], "action": "SCMP_ACT_ALLOW", - "args": [] + "args": [], + "comment": "", + "includes": {}, + "excludes": {} }, { - "name": "accept4", + "names": [ + "clone" + ], "action": "SCMP_ACT_ALLOW", - "args": [] + "args": [ + { + "index": 1, + "value": 2080505856, + "valueTwo": 0, + "op": "SCMP_CMP_MASKED_EQ" + } + ], + "comment": "s390 parameter ordering for clone is different", + "includes": { + "arches": [ + "s390", + "s390x" + ] + }, + "excludes": { + "caps": [ + "CAP_SYS_ADMIN" + ] + } }, ... - ] } ``` @@ -73,29 +114,29 @@ the reason each syscall is blocked rather than white-listed. |---------------------|---------------------------------------------------------------------------------------------------------------------------------------| | `acct` | Accounting syscall which could let containers disable their own resource limits or process accounting. Also gated by `CAP_SYS_PACCT`. | | `add_key` | Prevent containers from using the kernel keyring, which is not namespaced. | -| `adjtimex` | Similar to `clock_settime` and `settimeofday`, time/date is not namespaced. | +| `adjtimex` | Similar to `clock_settime` and `settimeofday`, time/date is not namespaced. Also gated by `CAP_SYS_TIME` | | `bpf` | Deny loading potentially persistent bpf programs into kernel, already gated by `CAP_SYS_ADMIN`. | -| `clock_adjtime` | Time/date is not namespaced. | -| `clock_settime` | Time/date is not namespaced. | +| `clock_adjtime` | Time/date is not namespaced. Also gated by `CAP_SYS_TIME`. | +| `clock_settime` | Time/date is not namespaced. Also gated by `CAP_SYS_TIME`. | | `clone` | Deny cloning new namespaces. Also gated by `CAP_SYS_ADMIN` for CLONE_* flags, except `CLONE_USERNS`. | -| `create_module` | Deny manipulation and functions on kernel modules. | +| `create_module` | Deny manipulation and functions on kernel modules. Obsolete. Also gated by `CAP_SYS_MODULE` | | `delete_module` | Deny manipulation and functions on kernel modules. Also gated by `CAP_SYS_MODULE`. | | `finit_module` | Deny manipulation and functions on kernel modules. Also gated by `CAP_SYS_MODULE`. | -| `get_kernel_syms` | Deny retrieval of exported kernel and module symbols. | +| `get_kernel_syms` | Deny retrieval of exported kernel and module symbols. Obsolete. | | `get_mempolicy` | Syscall that modifies kernel memory and NUMA settings. Already gated by `CAP_SYS_NICE`. | | `init_module` | Deny manipulation and functions on kernel modules. Also gated by `CAP_SYS_MODULE`. | | `ioperm` | Prevent containers from modifying kernel I/O privilege levels. Already gated by `CAP_SYS_RAWIO`. | | `iopl` | Prevent containers from modifying kernel I/O privilege levels. Already gated by `CAP_SYS_RAWIO`. | | `kcmp` | Restrict process inspection capabilities, already blocked by dropping `CAP_PTRACE`. | -| `kexec_file_load` | Sister syscall of `kexec_load` that does the same thing, slightly different arguments. | -| `kexec_load` | Deny loading a new kernel for later execution. | +| `kexec_file_load` | Sister syscall of `kexec_load` that does the same thing, slightly different arguments. Also gated by `CAP_SYS_BOOT`. | +| `kexec_load` | Deny loading a new kernel for later execution. Also gated by `CAP_SYS_BOOT`. | | `keyctl` | Prevent containers from using the kernel keyring, which is not namespaced. | -| `lookup_dcookie` | Tracing/profiling syscall, which could leak a lot of information on the host. | +| `lookup_dcookie` | Tracing/profiling syscall, which could leak a lot of information on the host. Also gated by `CAP_SYS_ADMIN`. | | `mbind` | Syscall that modifies kernel memory and NUMA settings. Already gated by `CAP_SYS_NICE`. | | `mount` | Deny mounting, already gated by `CAP_SYS_ADMIN`. | | `move_pages` | Syscall that modifies kernel memory and NUMA settings. | | `name_to_handle_at` | Sister syscall to `open_by_handle_at`. Already gated by `CAP_SYS_NICE`. | -| `nfsservctl` | Deny interaction with the kernel nfs daemon. | +| `nfsservctl` | Deny interaction with the kernel nfs daemon. Obsolete since Linux 3.1. | | `open_by_handle_at` | Cause of an old container breakout. Also gated by `CAP_DAC_READ_SEARCH`. | | `perf_event_open` | Tracing/profiling syscall, which could leak a lot of information on the host. | | `personality` | Prevent container from enabling BSD emulation. Not inherently dangerous, but poorly tested, potential for a lot of kernel vulns. | @@ -103,7 +144,7 @@ the reason each syscall is blocked rather than white-listed. | `process_vm_readv` | Restrict process inspection capabilities, already blocked by dropping `CAP_PTRACE`. | | `process_vm_writev` | Restrict process inspection capabilities, already blocked by dropping `CAP_PTRACE`. | | `ptrace` | Tracing/profiling syscall, which could leak a lot of information on the host. Already blocked by dropping `CAP_PTRACE`. | -| `query_module` | Deny manipulation and functions on kernel modules. | +| `query_module` | Deny manipulation and functions on kernel modules. Obsolete. | | `quotactl` | Quota syscall which could let containers disable their own resource limits or process accounting. Also gated by `CAP_SYS_ADMIN`. | | `reboot` | Don't let containers reboot the host. Also gated by `CAP_SYS_BOOT`. | | `request_key` | Prevent containers from using the kernel keyring, which is not namespaced. | @@ -116,7 +157,7 @@ the reason each syscall is blocked rather than white-listed. | `sysfs` | Obsolete syscall. | | `_sysctl` | Obsolete, replaced by /proc/sys. | | `umount` | Should be a privileged operation. Also gated by `CAP_SYS_ADMIN`. | -| `umount2` | Should be a privileged operation. | +| `umount2` | Should be a privileged operation. Also gated by `CAP_SYS_ADMIN`. | | `unshare` | Deny cloning new namespaces for processes. Also gated by `CAP_SYS_ADMIN`, with the exception of `unshare --user`. | | `uselib` | Older syscall related to shared libraries, unused for a long time. | | `userfaultfd` | Userspace page fault handling, largely needed for process migration. | @@ -132,4 +173,4 @@ profile. ``` $ docker run --rm -it --security-opt seccomp=unconfined debian:jessie \ unshare --map-root-user --user sh -c whoami -``` \ No newline at end of file +``` diff --git a/engine/security/trust/content_trust.md b/engine/security/trust/content_trust.md index d977ef3587b..8b09ffd5ffc 100644 --- a/engine/security/trust/content_trust.md +++ b/engine/security/trust/content_trust.md @@ -289,4 +289,4 @@ Because the tag `docker/trusttest:latest` is not trusted, the `pull` fails. * [Manage keys for content trust](trust_key_mng.md) * [Automation with content trust](trust_automation.md) * [Delegations for content trust](trust_delegation.md) -* [Play in a content trust sandbox](trust_sandbox.md) \ No newline at end of file +* [Play in a content trust sandbox](trust_sandbox.md) diff --git a/engine/security/trust/deploying_notary.md b/engine/security/trust/deploying_notary.md index 55e53260f81..8bedce0f8aa 100644 --- a/engine/security/trust/deploying_notary.md +++ b/engine/security/trust/deploying_notary.md @@ -25,4 +25,4 @@ for [Notary](https://github.com/docker/notary#using-notary) depending on which o Please check back here for instructions after Notary Server has an official stable release. To get a head start on deploying Notary in production see -https://github.com/docker/notary. \ No newline at end of file +https://github.com/docker/notary. diff --git a/engine/security/trust/index.md b/engine/security/trust/index.md index 801786a5a81..ef71d620229 100644 --- a/engine/security/trust/index.md +++ b/engine/security/trust/index.md @@ -10,4 +10,4 @@ The following topics are available: * [Manage keys for content trust](trust_key_mng.md) * [Automation with content trust](trust_automation.md) * [Delegations for content trust](trust_delegation.md) -* [Play in a content trust sandbox](trust_sandbox.md) \ No newline at end of file +* [Play in a content trust sandbox](trust_sandbox.md) diff --git a/engine/security/trust/trust_automation.md b/engine/security/trust/trust_automation.md index 013e69eaf17..f6e209e82b3 100644 --- a/engine/security/trust/trust_automation.md +++ b/engine/security/trust/trust_automation.md @@ -72,4 +72,4 @@ unable to process Dockerfile: No trust data for notrust * [Content trust in Docker](content_trust.md) * [Manage keys for content trust](trust_key_mng.md) * [Delegations for content trust](trust_delegation.md) -* [Play in a content trust sandbox](trust_sandbox.md) \ No newline at end of file +* [Play in a content trust sandbox](trust_sandbox.md) diff --git a/engine/security/trust/trust_delegation.md b/engine/security/trust/trust_delegation.md index b2ed2e8bee2..9f158e3eafb 100644 --- a/engine/security/trust/trust_delegation.md +++ b/engine/security/trust/trust_delegation.md @@ -96,7 +96,7 @@ to rotate the snapshot key specifically, and you want the server to manage it (` stands for "remote"). When adding a delegation, your must acquire -[the PEM-encoded x509 certificate with the public key](trust_delegation.md#generating-delegation-keys) +[the PEM-encoded x509 certificate with the public key](#generating-delegation-keys) of the collaborator you wish to delegate to. Assuming you have the certificate `delegation.crt`, you can add a delegation @@ -217,4 +217,4 @@ the legacy tags that were signed directly with the `targets` key. * [Content trust in Docker](content_trust.md) * [Manage keys for content trust](trust_key_mng.md) * [Automation with content trust](trust_automation.md) -* [Play in a content trust sandbox](trust_sandbox.md) \ No newline at end of file +* [Play in a content trust sandbox](trust_sandbox.md) diff --git a/engine/security/trust/trust_key_mng.md b/engine/security/trust/trust_key_mng.md index 43ab1d3355c..e6decbf8ad8 100644 --- a/engine/security/trust/trust_key_mng.md +++ b/engine/security/trust/trust_key_mng.md @@ -91,4 +91,4 @@ the new key. * [Content trust in Docker](content_trust.md) * [Automation with content trust](trust_automation.md) * [Delegations for content trust](trust_delegation.md) -* [Play in a content trust sandbox](trust_sandbox.md) \ No newline at end of file +* [Play in a content trust sandbox](trust_sandbox.md) diff --git a/engine/security/trust/trust_sandbox.md b/engine/security/trust/trust_sandbox.md index cacb3e2ea4f..d9ee878b8c5 100644 --- a/engine/security/trust/trust_sandbox.md +++ b/engine/security/trust/trust_sandbox.md @@ -284,4 +284,4 @@ When you are done, and want to clean up all the services you've started and any anonymous volumes that have been created, just run the following command in the directory where you've created your Docker Compose file: - $ docker-compose down -v \ No newline at end of file + $ docker-compose down -v diff --git a/engine/swarm/admin_guide.md b/engine/swarm/admin_guide.md index 21e064c5657..849968700b3 100644 --- a/engine/swarm/admin_guide.md +++ b/engine/swarm/admin_guide.md @@ -107,7 +107,7 @@ While it is possible to scale a swarm down to a single manager node, it is impossible to demote the last manager node. This ensures you maintain access to the swarm and that the swarm can still process requests. Scaling down to a single manager is an unsafe operation and is not recommended. If -the last node leaves the swarm unexpectedly during the demote operation, the +the last node leaves the swarm unexpetedly during the demote operation, the swarm will become unavailable until you reboot the node or restart with `--force-new-cluster`. @@ -176,17 +176,21 @@ for more information. From the command line, run `docker node inspect ` to query the nodes. For instance, to query the reachability of the node as a manager: -```bash{% raw %} +```bash +{% raw %} docker node inspect manager1 --format "{{ .ManagerStatus.Reachability }}" reachable -{% endraw %}``` +{% endraw %} +``` To query the status of the node as a worker that accept tasks: -```bash{% raw %} +```bash +{% raw %} docker node inspect manager1 --format "{{ .Status.State }}" ready -{% endraw %}``` +{% endraw %} +``` From those commands, we can see that `manager1` is both at the status `reachable` as a manager and `ready` as a worker. diff --git a/engine/swarm/how-swarm-mode-works/nodes.md b/engine/swarm/how-swarm-mode-works/nodes.md index fef3c965bd9..2ef020227b1 100644 --- a/engine/swarm/how-swarm-mode-works/nodes.md +++ b/engine/swarm/how-swarm-mode-works/nodes.md @@ -11,8 +11,8 @@ cluster of one or more Docker Engines called a swarm. A swarm consists of one or more nodes: physical or virtual machines running Docker Engine 1.12 or later in swarm mode. -There are two types of nodes: [**managers**](nodes.md#manager-nodes) and -[**workers**](nodes.md#worker-nodes). +There are two types of nodes: [**managers**](#manager-nodes) and +[**workers**](#worker-nodes). ![Swarm mode cluster](../images/swarm-diagram.png) @@ -80,4 +80,4 @@ You can also demote a manager node to a worker node. See ## Learn More * Read about how swarm mode [services](services.md) work. -* Learn how [PKI](pki.md) works in swarm mode \ No newline at end of file +* Learn how [PKI](pki.md) works in swarm mode diff --git a/engine/swarm/how-swarm-mode-works/services.md b/engine/swarm/how-swarm-mode-works/services.md index 5333aaf4bb3..da5b7cf27d3 100644 --- a/engine/swarm/how-swarm-mode-works/services.md +++ b/engine/swarm/how-swarm-mode-works/services.md @@ -53,7 +53,7 @@ that spawns a new container. A task is a one-directional mechanism. It progresses monotonically through a series of states: assigned, prepared, running, etc. If the task fails the -scheduler removes the task and its container and then creates a new task to +orchestrator removes the task and its container and then creates a new task to replace it according to the desired state specified by the service. The underlying logic of Docker swarm mode is a general purpose scheduler and diff --git a/engine/swarm/join-nodes.md b/engine/swarm/join-nodes.md index 1dc3ec98302..2750b8dc42c 100644 --- a/engine/swarm/join-nodes.md +++ b/engine/swarm/join-nodes.md @@ -10,7 +10,7 @@ swarm mode. To take full advantage of swarm mode you can add nodes to the swarm: * Adding worker nodes increases capacity. When you deploy a service to a swarm, the Engine schedules tasks on available nodes whether they are worker nodes or manager nodes. When you add workers to your swarm, you increase the scale of -the swarm to handle tasks without affecting the manager raft consensus. +the swarm to handle tasks without affecting the manager raft consenus. * Manager nodes increase fault-tolerance. Manager nodes perform the orchestration and cluster management functions for the swarm. Among manager nodes, a single leader node conducts orchestration tasks. If a leader node @@ -102,4 +102,4 @@ This node joined a swarm as a manager. ## Learn More * `swarm join`[command line reference](../reference/commandline/swarm_join.md) -* [Swarm mode tutorial](swarm-tutorial/index.md) \ No newline at end of file +* [Swarm mode tutorial](swarm-tutorial/index.md) diff --git a/engine/swarm/key-concepts.md b/engine/swarm/key-concepts.md index a697b1c0285..bd1eb53fa09 100644 --- a/engine/swarm/key-concepts.md +++ b/engine/swarm/key-concepts.md @@ -28,7 +28,7 @@ A **node** is an instance of the Docker engine participating in the swarm. You c To deploy your application to a swarm, you submit a service definition to a **manager node**. The manager node dispatches units of work called -[tasks](key-concepts.md#services-and-tasks) to worker nodes. +[tasks](#Services-and-tasks) to worker nodes. Manager nodes also perform the orchestration and cluster management functions required to maintain the desired state of the swarm. Manager nodes elect a diff --git a/engine/swarm/manage-nodes.md b/engine/swarm/manage-nodes.md index bc510563271..22f13c04a26 100644 --- a/engine/swarm/manage-nodes.md +++ b/engine/swarm/manage-nodes.md @@ -6,10 +6,10 @@ title: Manage nodes in a swarm As part of the swarm management lifecycle, you may need to view or update a node as follows: -* [list nodes in the swarm](manage-nodes.md#list-nodes) -* [inspect an individual node](manage-nodes.md#inspect-an-individual-node) -* [update a node](manage-nodes.md#update-a-node) -* [leave the swarm](manage-nodes.md#leave-the-swarm) +* [list nodes in the swarm](#list-nodes) +* [inspect an individual node](#inspect-an-individual-node) +* [update a node](#update-a-node) +* [leave the swarm](#leave-the-swarm) ## List nodes diff --git a/engine/swarm/networking.md b/engine/swarm/networking.md index 3ef4eb30477..e3c811f4b7d 100644 --- a/engine/swarm/networking.md +++ b/engine/swarm/networking.md @@ -45,7 +45,7 @@ different nodes. For more information, refer to [Docker swarm mode overlay netwo The `--subnet` flag specifies the subnet for use with the overlay network. When you don't specify a subnet, the swarm manager automatically chooses a subnet and assigns it to the network. On some older kernels, including kernel 3.10, -automatically assigned addresses may overlap with another subnet in your +automatically assigned adresses may overlap with another subnet in your infrastructure. Such overlaps can cause connectivity issues or failures with containers connected to the network. Before you attach a service to the network, the network only extends to manager @@ -92,10 +92,10 @@ tasks are running for the service: ```bash $ docker service ps my-web -ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR -63s86gf6a0ms34mvboniev7bs my-web.1 nginx node1 Running Running 58 seconds ago -6b3q2qbjveo4zauc6xig7au10 my-web.2 nginx node2 Running Running 58 seconds ago -66u2hcrz0miqpc8h0y0f3v7aw my-web.3 nginx node3 Running Running about a minute ago +NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR +my-web.1.63s86gf6a0ms34mvboniev7bs nginx node1 Running Running 58 seconds ago +my-web.2.6b3q2qbjveo4zauc6xig7au10 nginx node2 Running Running 58 seconds ago +my-web.3.66u2hcrz0miqpc8h0y0f3v7aw nginx node3 Running Running about a minute ago ``` ![service vip image](images/service-vip.png) @@ -164,7 +164,7 @@ active tasks. You can inspect the service to view the virtual IP. For example: -```liquid +```bash $ docker service inspect \ --format='{% raw %}{{json .Endpoint.VirtualIPs}}{% endraw %}' \ my-web @@ -192,8 +192,8 @@ using the DNS name `my-web`: ```bash $ docker service ps my-busybox - ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR - 1dok2cmx2mln5hbqve8ilnair my-busybox.1 busybox node1 Running Running 5 seconds ago + NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR + my-busybox.1.1dok2cmx2mln5hbqve8ilnair busybox node1 Running Running 5 seconds ago ``` 3. From the node where the busybox task is running, open an interactive shell to @@ -288,7 +288,7 @@ Address 3: 10.0.9.9 my-dnsrr-service.2.am6fx47p3bropyy2dy4f8hofb.my-network ## Confirm VIP connectivity -In general we recommend you use `dig`, `nslookup`, or another DNS query tool to +In genaral we recommend you use `dig`, `nslookup`, or another DNS query tool to test access to the service name via DNS. Because a VIP is a logical IP, `ping` is not the right tool to confirm VIP connectivity. diff --git a/engine/swarm/raft.md b/engine/swarm/raft.md index abcc8f9d379..8930de7b0fa 100644 --- a/engine/swarm/raft.md +++ b/engine/swarm/raft.md @@ -35,4 +35,4 @@ the properties inherent to distributed systems: and the [Raft Consensus Algorithm paper](https://www.usenix.org/system/files/conference/atc14/atc14-paper-ongaro.pdf)) - *mutual exclusion* through the leader election process - *cluster membership* management -- *globally consistent object sequencing* and CAS (compare-and-swap) primitives \ No newline at end of file +- *globally consistent object sequencing* and CAS (compare-and-swap) primitives diff --git a/engine/swarm/secrets.md b/engine/swarm/secrets.md new file mode 100644 index 00000000000..09089eeb43a --- /dev/null +++ b/engine/swarm/secrets.md @@ -0,0 +1,848 @@ +--- +title: Manage sensitive data with Docker secrets +description: How to securely store, retrieve, and use sensitive data with Docker services +keywords: swarm, secrets, credentials, sensitive strings, sensitive data, security, encryption, encryption at rest +--- + +## About secrets + +In terms of Docker Swarm services, a _secret_ is a blob of data, such as a +password, SSH private key, SSL certificate, or another piece of data that should +not be transmitted over a network or stored unencrypted in a Dockerfile or in +your application's source code. In Docker 1.13 and higher, you can use Docker +_secrets_ to centrally manage this data and securely transmit it to only those +containers that need access to it. Secrets are encrypted during transit and at +rest in a Docker swarm. A given secret is only accessible to those services +which have been granted explicit access to it, and only while those service +tasks are running. + +You can use secrets to manage any sensitive data which a container needs at +runtime but you don't want to store in the image or in source control, such as: + +- Usernames and passwords +- TLS certificates and keys +- SSH keys +- Other important data such as the name of a database or internal server +- Generic strings or binary content (up to 500 kb in size) + +> **Note**: Docker secrets are only available to swarm services, not to +> standalone containers. To use this feature, consider adapting your container to +> run as a service with a scale of 1. + +Another use case for using secrets is to provide a layer of abstraction between +the container and a set of credentials. Consider a scenario where you have +separate development, test, and production environments for your application. +Each of these environments can have different credentials, stored in the +development, test, and production swarms with the same secret name. Your +containers only need to know the name of the secret in order to function in all +three environments. + +## How Docker manages secrets + +When you add a secret to the swarm, Docker sends the secret to the swarm manager +over a mutual TLS connection. The secret is stored in the Raft log, which is +encrypted. The entire Raft log is replicated across the other managers, ensuring +the same high availability guarantees for secrets as for the rest of the swarm +management data. + +>**Warning**: Raft data is encrypted in Docker 1.13 and higher. If any of your +Swarm managers run an earlier version, and one of those managers becomes the +manager of the swarm, the secrets will be stored unencrypted in that node's Raft +logs. Before adding any secrets, update all of your manager nodes to Docker 1.13 +to prevent secrets from being written to plain-text Raft logs. + +When you grant a newly-created or running service access to a secret, the +decrypted secret is mounted into the container in an in-memory filesystem at +`/run/secrets/`. You can update a service to grant it access to +additional secrets or revoke its access to a given secret at any time. + +A node only has access to (encrypted) secrets if the node is a swarm manager or +if it is running service tasks which have been granted access to the secret. +When a container task stops running, the decrypted secrets shared to it are +unmounted from the in-memory filesystem for that container and flushed from the +node's memory. + +If a node loses connectivity to the swarm while it is running a task container +with access to a secret, the task container still has access to its secrets, but +cannot receive updates until the node reconnects to the swarm. + +You can add or inspect an individual secret at any time, or list all +secrets. You cannot remove a secret that a running service is +using. See [Rotate a secret](secrets.md#example-rotate-a-secret) for a way to +remove a secret without disrupting running services. + +In order to update or roll back secrets more easily, consider adding a version +number or date to the secret name. This is made easier by the ability to control +the mount point of the secret within a given container. + +## Read more about `docker secret` commands + +Use these links to read about specific commands, or continue to the +[example about using secrets with a service](secrets.md#example-use-secrets-with-a-service). + +- [`docker secret create`](../reference/commandline/secret_create.md) +- [`docker secret inspect`](../reference/commandline/secret_inspect.md) +- [`docker service ls`](../reference/commandline/secret_ls.md) +- [`docker secret rm`](../reference/commandline/secret_rm.md) +- [`--secret`](../reference/commandline/service_create.md#create-a-service-with-secrets) flag for `docker service create` +- [`--secret-add` and `--secret-rm`](../reference/commandline/service_update.md#adding-and-removing-secrets) flags for `docker service update` + +## Examples + +This section includes three graduated examples which illustrate how to use +Docker secrets. The images used in these examples have been updated to make it +easier to use Docker secrets. To find out how to modify your own images in +a similar way, see +[Build support for Docker Secrets into your images](#build-support-for-docker-secrets-into-your-images). + +> **Note**: These examples use a single-Engine swarm and unscaled services for +> simplicity. + +### Simple example: Get started with secrets + +This simple example shows how secrets work in just a few commands. For a +real-world example, continue to +[Intermediate example: Use secrets with a Nginx service](#intermediate-example-use-secrets-with-a-nginx-service). + +1. Add a secret to Docker. The `docker secret create` command reads standard + input because the last argument, which represents the file to read the + secret from, is set to `-`. + + ```bash + $ echo "This is a secret" | docker secret create my_secret_data - + ``` + +2. Create a `redis` service and grant it access to the secret. By default, + the container can access the secret at `/run/secrets/`, but + you can customize the file name on the container using the `target` option. + + ```bash + $ docker service create --name="redis" --secret="my_secret_data" redis:alpine + ``` + +3. Verify that the task is running without issues using `docker service ps`. If + everything is working, the output looks similar to this: + + ```bash + $ docker service ps redis + + ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS + bkna6bpn8r1a redis.1 redis:alpine ip-172-31-46-109 Running Running 8 seconds ago + ``` + + If there were an error, and the task were failing and repeatedly restarting, + you would see something like this: + + ```bash + $ docker service ps redis + + NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS + redis.1.siftice35gla redis:alpine moby Running Running 4 seconds ago + \_ redis.1.whum5b7gu13e redis:alpine moby Shutdown Failed 20 seconds ago "task: non-zero exit (1)" + \_ redis.1.2s6yorvd9zow redis:alpine moby Shutdown Failed 56 seconds ago "task: non-zero exit (1)" + \_ redis.1.ulfzrcyaf6pg redis:alpine moby Shutdown Failed about a minute ago "task: non-zero exit (1)" + \_ redis.1.wrny5v4xyps6 redis:alpine moby Shutdown Failed 2 minutes ago "task: non-zero exit (1)" + ``` + +4. Get the ID of the `redis` service task container using `docker ps` , so that + you can use `docker exec` to connect to the container and read the contents + of the secret data file, which defaults to being readable by all and has the + same name as the name of the secret. The first command below illustrates + how to find the container ID, and the second and third commands use shell + completion to do this automatically. + + ```bash + $ docker ps --filter name=redis -q + + 5cb1c2348a59 + + $ docker exec $(docker ps --filter name=redis -q) ls -l /run/secrets + + total 4 + -r--r--r-- 1 root root 17 Dec 13 22:48 my_secret_data + + $ docker exec $(docker ps --filter name=redis -q) cat /run/secrets/my_secret_data + + This is a secret + ``` + +5. Verify that the secret is **not** available if you commit the container. + + ```bash + $ docker commit $(docker ps --filter name=redis -q) committed_redis + + $ docker run --rm -it committed_redis cat /run/secrets/my_secret_data + + cat: can't open '/run/secrets/my_secret_data': No such file or directory + ``` + +6. Try removing the secret. The removal fails because the `redis` is running + and has access to the secret. + + ```bash + + $ docker secret ls + + ID NAME CREATED UPDATED + wwwrxza8sxy025bas86593fqs my_secret_data 4 hours ago 4 hours ago + + + $ docker secret rm my_secret_data + + Error response from daemon: rpc error: code = 3 desc = secret 'my_secret_data' is in use by the following service: redis + ``` + +7. Remove access to the secret from the running `redis` service by updating the + service. + + ```bash + $ docker service update --secret-rm="my_secret_data" redis + ``` + +8. Repeat steps 3 and 4 again, verifying that the service no longer has access + to the secret. The container ID will be different, because the + `service update` command redeploys the service. + + ```bash + $ docker exec -it $(docker ps --filter name=redis -q) cat /run/secrets/my_secret_data + + cat: can't open '/run/secrets/my_secret_data': No such file or directory + ``` + +7. Stop and remove the service, and remove the secret from Docker. + + ```bash + $ docker service rm redis + + $ docker secret rm my_secret_data + ``` + +### Intermediate example: Use secrets with a Nginx service + +This example is divided into two parts. +[The first part](#generate-the-site-certificate) is all about generating +the site certificate and does not directly involve Docker secrets at all, but +it sets up [the second part](#configure-the-nginx-container), where you store +and use the site certificate and Nginx configuration as secrets. + +#### Generate the site certificate + +Generate a root CA and TLS certificate and key for your site. For production +sites, you may want to use a service such as `Let’s Encrypt` to generate the +TLS certificate and key, but this example uses command-line tools. This step +is a little complicated, but is only a set-up step so that you have +something to store as a Docker secret. If you want to skip these sub-steps, +you can [use Let's Encrypt](https://letsencrypt.org/getting-started/) to +generate the site key and certificate, name the files `site.key` and +`site.crt`, and skip to +[Configure the Nginx container](#configure-the-nginx-container). + +1. Generate a root key. + + ```bash + $ openssl genrsa -out "root-ca.key" 4096 + ``` + +2. Generate a CSR using the root key. + + ```bash + $ openssl req \ + -new -key "root-ca.key" \ + -out "root-ca.csr" -sha256 \ + -subj '/C=US/ST=CA/L=San Francisco/O=Docker/CN=Swarm Secret Example CA' + ``` + +3. Configure the root CA. Edit a new file called `root-ca.cnf` and paste + the following contents into it. This constrains the root CA to only be + able to sign leaf certificates and not intermediate CAs. + + ```none + [root_ca] + basicConstraints = critical,CA:TRUE,pathlen:1 + keyUsage = critical, nonRepudiation, cRLSign, keyCertSign + subjectKeyIdentifier=hash + ``` + +4. Sign the certificate. + + ```bash + $ openssl x509 -req -days 3650 -in "root-ca.csr" \ + -signkey "root-ca.key" -sha256 -out "root-ca.crt" \ + -extfile "root-ca.cnf" -extensions \ + root_ca + ``` + +5. Generate the site key. + + ```bash + $ openssl genrsa -out "site.key" 4096 + ``` + +6. Generate the site certificate and sign it with the site key. + + ```bash + $ openssl req -new -key "site.key" -out "site.csr" -sha256 \ + -subj '/C=US/ST=CA/L=San Francisco/O=Docker/CN=localhost' + ``` + +7. Configure the site certificate. Edit a new file called `site.cnf` and + paste the following contents into it. This constrains the site + certificate so that it can only be used to authenticate a server and + can't be used to sign certificates. + + ```none + [server] + authorityKeyIdentifier=keyid,issuer + basicConstraints = critical,CA:FALSE + extendedKeyUsage=serverAuth + keyUsage = critical, digitalSignature, keyEncipherment + subjectAltName = DNS:localhost, IP:127.0.0.1 + subjectKeyIdentifier=hash + ``` + +8. Sign the site certificate. + + ```bash + $ openssl x509 -req -days 750 -in "site.csr" -sha256 \ + -CA "root-ca.crt" -CAkey "root-ca.key" -CAcreateserial \ + -out "site.crt" -extfile "site.cnf" -extensions server + ``` + +9. The `site.csr` and `site.cnf` files are not needed by the Nginx service, but + you will need them if you want to generate a new site certificate. Protect + the `root-ca.key` file. + +#### Configure the Nginx container + +1. Produce a very basic Nginx configuration that serves static files over HTTPS. + The TLS certificate and key will be stored as Docker secrets so that they + can be rotated easily. + + In the current directory, create a new file called `site.conf` with the + following contents: + + ```none + server { + listen 443 ssl; + server_name localhost; + ssl_certificate /run/secrets/site.crt; + ssl_certificate_key /run/secrets/site.key; + + location / { + root /usr/share/nginx/html; + index index.html index.htm; + } + } + ``` + +2. Create three secrets, representing the key, the certificate, and the + `site.conf`. You can store any file as a secret as long as it is smaller + than 500 KB. This allows you to decouple the key, certificate, and + configuration from the services that will use them. In each of these + commands, the last argument represents the path to the file to read the + secret from on the host machine's filesystem. In these examples, the secret + name and the file name are the same. + + ```bash + $ docker secret create site.key site.key + + $ docker secret create site.crt site.crt + + $ docker secret create site.conf site.conf + ``` + + ```bash + $ docker secret ls + + ID NAME CREATED UPDATED + 2hvoi9mnnaof7olr3z5g3g7fp site.key 58 seconds ago 58 seconds ago + aya1dh363719pkiuoldpter4b site.crt 24 seconds ago 24 seconds ago + zoa5df26f7vpcoz42qf2csth8 site.conf 11 seconds ago 11 seconds ago + ``` + +4. Create a service that runs Nginx and has access to the three secrets. The + last part of the `docker service create` command creates a symbolic link + from the location of the `site.conf` secret to `/etc/nginx.conf.d/`, where + Nginx looks for extra configuration files. This step happens before Nginx + actually starts, so you don't need to rebuild your image if you change the + Nginx configuration. + + > **Note**: Normally you would create a Dockerfile which copies the `site.conf` + > into place, build the image, and run a container using your custom image. + > This example does not require a custom image. It puts the `site.conf` + > into place and runs the container all in one step. + + ```bash + $ docker service create \ + --name nginx \ + --secret site.key \ + --secret site.crt \ + --secret site.conf \ + --publish 3000:443 \ + nginx:latest \ + sh -c "ln -s /run/secrets/site.conf /etc/nginx/conf.d/site.conf && exec nginx -g 'daemon off;'" + ``` + + This uses the short syntax for the `--secret` flag, which creates files in + `/run/secrets/` with the same name as the secret. Within the running + containers, the following three files now exist: + + - `/run/secrets/site.key` + - `/run/secrets/site.crt` + - `/run/secrets/site.conf` + +5. Verify that the Nginx service is running. + + ```bash + $ docker service ls + + ID NAME MODE REPLICAS IMAGE + zeskcec62q24 nginx replicated 1/1 nginx:latest + + $ docker service ps nginx + + NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS + nginx.1.9ls3yo9ugcls nginx:latest moby Running Running 3 minutes ago + ``` + +6. Verify that the service is operational: you can reach the Nginx + server, and that the correct TLS certificate is being used. + + ```bash + $ curl --cacert root-ca.crt https://0.0.0.0:3000 + + + + + Welcome to nginx! + + + +

    Welcome to nginx!

    +

    If you see this page, the nginx web server is successfully installed and + working. Further configuration is required.

    + +

    For online documentation and support please refer to + nginx.org.
    + Commercial support is available at + nginx.com.

    + +

    Thank you for using nginx.

    + + + ``` + + ```bash + $ openssl s_client -connect 0.0.0.0:3000 -CAfile root-ca.crt + + CONNECTED(00000003) + depth=1 /C=US/ST=CA/L=San Francisco/O=Docker/CN=Swarm Secret Example CA + verify return:1 + depth=0 /C=US/ST=CA/L=San Francisco/O=Docker/CN=localhost + verify return:1 + --- + Certificate chain + 0 s:/C=US/ST=CA/L=San Francisco/O=Docker/CN=localhost + i:/C=US/ST=CA/L=San Francisco/O=Docker/CN=Swarm Secret Example CA + --- + Server certificate + -----BEGIN CERTIFICATE----- + … + -----END CERTIFICATE----- + subject=/C=US/ST=CA/L=San Francisco/O=Docker/CN=localhost + issuer=/C=US/ST=CA/L=San Francisco/O=Docker/CN=Swarm Secret Example CA + --- + No client certificate CA names sent + --- + SSL handshake has read 1663 bytes and written 712 bytes + --- + New, TLSv1/SSLv3, Cipher is AES256-SHA + Server public key is 4096 bit + Secure Renegotiation IS supported + Compression: NONE + Expansion: NONE + SSL-Session: + Protocol : TLSv1 + Cipher : AES256-SHA + Session-ID: A1A8BF35549C5715648A12FD7B7E3D861539316B03440187D9DA6C2E48822853 + Session-ID-ctx: + Master-Key: F39D1B12274BA16D3A906F390A61438221E381952E9E1E05D3DD784F0135FB81353DA38C6D5C021CB926E844DFC49FC4 + Key-Arg : None + Start Time: 1481685096 + Timeout : 300 (sec) + Verify return code: 0 (ok) + ``` + +7. To clean up after running this example, remove the `nginx` service and the + stored secrets. + + ```bash + $ docker service rm nginx + + $ docker secret rm site.crt site.key nginx.conf + ``` + +### Advanced example: Use secrets with a WordPress service + +In this example, you create a single-node MySQL service with a custom root +password, add the credentials as secrets, and create a single-node WordPress +service which uses these credentials to connect to MySQL. The +[next example](#example-rotate-a-secret) builds on this one and shows you how to +rotate the MySQL password and update the services so that the WordPress service +can still connect to MySQL. + +This example illustrates some techniques to use Docker secrets to avoid saving +sensitive credentials within your image or passing them directly on the command +line. + +> **Note**: This example uses a single-Engine swarm for simplicity, and uses a +> single-node MySQL service because a single MySQL server instance cannot be +> scaled by simply using a replicated service, and setting up a MySQL cluster is +> beyond the scope of this example. +> +> Also, changing a MySQL root passphrase isn’t as simple as changing +> a file on disk. You must use a query or a `mysqladmin` command to change the +> password in MySQL. + +1. Generate a random alphanumeric password for MySQL and store it as a Docker + secret with the name `mysql_password` using the `docker secret create` + command. To make the password shorter or longer, adjust the last argument of + the `openssl` command. This is just one way to create a relatively random + password. You can use another command to generate the password if you + choose. + + > **Note**: After you create a secret, you cannot update it. You can only + > remove and re-create it, and you cannot remove a secret that a service is + > using. However, you can grant or revoke a running service's access to + > secrets using `docker service update`. If you need the ability to update a + > secret, consider adding a version component to the secret name, so that you + > can later add a new version, update the service to use it, then remove the + > old version. + + The last argument is set to `-`, which indicates that the input is read from + standard input. + + ```bash + $ openssl rand -base64 20 | docker secret create mysql_password - + + l1vinzevzhj4goakjap5ya409 + ``` + + The value returned is not the password, but the ID of the secret. In the + remainder of this tutorial, the ID output is omitted. + + Generate a second secret for the MySQL `root` user. This secret won't be + shared with the WordPress service created later. It's only needed to + bootstrap the `mysql` service. + + ```bash + $ openssl rand -base64 20 | docker secret create mysql_root_password - + ``` + + List the secrets managed by Docker using `docker secret ls`: + + ```bash + $ docker secret ls + + ID NAME CREATED UPDATED + l1vinzevzhj4goakjap5ya409 mysql_password 41 seconds ago 41 seconds ago + yvsczlx9votfw3l0nz5rlidig mysql_root_password 12 seconds ago 12 seconds ago + ``` + + The secrets are stored in the encrypted Raft logs for the swarm. + +2. Create a user-defined overlay network which will be used for communication + between the MySQL and WordPress services. There is no need to expose the + MySQL service to any external host or container. + + ```bash + $ docker network create -d overlay mysql_private + ``` + +3. Create the MySQL service. The MySQL service will have the following + characteristics: + + - Because the scale is set to `1`, only a single MySQL task runs. + Load-balancing MySQL is left as an exercise to the reader and involves + more than just scaling the service. + - Only reachable by other containers on the `mysql_private` network. + - Uses the volume `mydata` to store the MySQL data, so that it persists + across restarts to the `mysql` service. + - The secrets are each mounted in a `tmpfs` filesystem at + `/run/secrets/mysql_password` and `/run/secrets/mysql_root_password`. + They are never exposed as environment variables, nor can they be committed + to an image if the `docker commit` command is run. The `mysql_password` + secret is the one used the non-privileged WordPress container will use to + connect to MySQL. + - Sets the environment variables `MYSQL_PASSWORD_FILE` and + `MYSQL_ROOT_PASSWORD_FILE` to point to the + files `/run/secrets/mysql_password` and `/run/secrets/mysql_root_password`. + The `mysql` image reads the password strings from those files when + initializing the system database for the first time. Afterward, the + passwords are stored in the MySQL system database itself. + - Sets environment variables `MYSQL_USER` and `MYSQL_DATABASE`. A new + database called `wordpress` is created when the container starts, and the + `wordpress` user will have full permissions for this database only. This + user will not be able to create or drop databases or change the MySQL + configuration. + + ```bash + $ docker service create \ + --name mysql \ + --replicas 1 \ + --network mysql_private \ + --mount type=volume,source=mydata,destination=/var/lib/mysql \ + --secret source=mysql_root_password,target=mysql_root_password \ + --secret source=mysql_password,target=mysql_password \ + -e MYSQL_ROOT_PASSWORD_FILE="/run/secrets/mysql_root_password" \ + -e MYSQL_PASSWORD_FILE="/run/secrets/mysql_password" \ + -e MYSQL_USER="wordpress" \ + -e MYSQL_DATABASE="wordpress" \ + mysql:latest + ``` + +4. Verify that the `mysql` container is running using the `docker service ls` command. + + ```bash + $ docker service ls + + ID NAME MODE REPLICAS IMAGE + wvnh0siktqr3 mysql replicated 1/1 mysql:latest + ``` + + At this point, you could actually revoke the `mysql` service's access to the + `mysql_password` and `mysql_root_password` secrets because the passwords + have been saved in the MySQL system database. Don't do that for now, because + we will use them later to facilitate rotating the MySQL password. + +5. Now that MySQL is set up, create a WordPress service that connects to the + MySQL service. The WordPress service has the following characteristics: + + - Because the scale is set to `1`, only a single WordPress task runs. + Load-balancing WordPress is left as an exercise to the reader, because of + limitations with storing WordPress session data on the container + filesystem. + - Exposes WordPress on port 30000 of the host machine, so that you can access + it from external hosts. You can expose port 80 instead if you do not have + a web server running on port 80 of the host machine. + - Connects to the `mysql_private` network so it can communicate with the + `mysql` container, and also publishes port 80 to port 30000 on all swarm + nodes. + - Has access to the `mysql_password` secret, but specifies a different + target file name within the container. The WordPress container will use + the mount point `/run/secrets/wp_db_password`. Also specifies that the + secret is not group-or-world-readable, by setting the mode to + `0400`. + - Sets the environment variable `WORDPRESS_DB_PASSWORD_FILE` to the file + path where the secret is mounted. The WordPress service will read the + MySQL password string from that file and add it to the `wp-config.php` + configuration file. + - Connects to the MySQL container using the username `wordpress` and the + password in `/run/secrets/wp_db_password` and creates the `wordpress` + database if it does not yet exist. + - Stores its data, such as themes and plugins, in a volume called `wpdata` + so these files persist when the service restarts. + + ```bash + $ docker service create \ + --name wordpress \ + --replicas 1 \ + --network mysql_private \ + --publish 30000:80 \ + --mount type=volume,source=wpdata,destination=/var/www/html \ + --secret source=mysql_password,target=wp_db_password,mode=0400 \ + -e WORDPRESS_DB_USER="wordpress" \ + -e WORDPRESS_DB_PASSWORD_FILE="/run/secrets/wp_db_password" \ + -e WORDPRESS_DB_HOST="mysql:3306" \ + -e WORDPRESS_DB_NAME="wordpress" \ + wordpress:latest + ``` + +6. Verify the service is running using `docker service ls` and + `docker service ps` commands. + + ```bash + $ docker service ls + + ID NAME MODE REPLICAS IMAGE + wvnh0siktqr3 mysql replicated 1/1 mysql:latest + nzt5xzae4n62 wordpress replicated 1/1 wordpress:latest + ``` + + ```bash + $ docker service ps wordpress + + ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS + aukx6hgs9gwc wordpress.1 wordpress:latest moby Running Running 52 seconds ago + ``` + + At this point, you could actually revoke the WordPress service's access to + the `mysql_password` secret, because WordPress has copied the secret to its + configuration file `wp-config.php`. Don't do that for now, because we will + use it later to facilitate rotating the MySQL password. + +7. Access `http://localhost:30000/` from any swarm node and set up WordPress + using the web-based wizard. All of these settings are stored in the MySQL + `wordpress` database. WordPress automatically generates a password for your + WordPress user, which is completely different from the password WordPress + uses to access MySQL. Store this password securely, such as in a password + manager. You will need it to log into WordPress after + [rotating the secret](#example-rotate-a-secret). + + Go ahead and write a blog post or two and install a WordPress plugin or + theme to verify that WordPress is fully operational and its state is saved + across service restarts. + +8. Do not clean up any services or secrets if you intend to proceed to the next + example, which demonstrates how to rotate the MySQL root password. + + +### Example: Rotate a secret + +This example builds upon the previous one. In this scenario, you create a new +secret with a new MySQL password, update the `mysql` and `wordpress` services to +use it, then remove the old secret. + +**Note**: Changing the password on a MySQL database involves running extra +queries or commands, as opposed to just changing a single environment variable +or a file, since the image only sets the MySQL password if the database doesn’t +already exist, and MySQL stores the password within a MySQL database by default. +Rotating passwords or other secrets may involve additional steps outside of +Docker. + +1. Create the new password and store it as a secret named `mysql_password_v2`. + + ```bash + $ openssl rand -base64 20 | docker secret create mysql_password_v2 - + ``` + +2. Update the MySQL service to give it access to both the old and new secrets. + Remember that you cannot update or rename a secret, but you can revoke a + secret and grant access to it using a new target filename. + + ```bash + $ docker service update \ + --secret-rm mysql_password mysql + + $ docker service update \ + --secret-add source=mysql_password,target=old_mysql_password \ + --secret-add source=mysql_password_v2,target=mysql_password \ + mysql + ``` + + Updating a service causes it to restart, and when the MySQL service restarts + the second time, it has access to the old secret under + `/run/secrets/old_mysql_password` and the new secret under + `/run/secrets/mysql_password`. + + Even though the MySQL service has access to both the old and new secrets + now, the MySQL password for the WordPress user has not yet been changed. + + > **Note**: This example does not rottate the MySQL `root` password. + +3. Now, change the MySQL password for the `wordpress` user using the + `mysqladmin` CLI. This command reads the old and new password from the files + in `/run/secrets` but does not expose them on the command line or save them + in the shell history. + + Do this quickly and move on to the next step, because WordPress will lose + the ability to connect to MySQL. + + First, find the ID of the `mysql` container task. + + ```bash + $ docker ps --filter --name=mysql -q + + c7705cf6176f + ``` + + Substitute the ID in the command below, or use the second variant which + uses shell expansion to do it all in a single step. + + ```bash + $ docker exec \ + bash -c 'mysqladmin --user=wordpress --password="$(< /run/secrets/old_mysql_password)" password "$(< /run/secrets/mysql_password)"' + ``` + + **or**: + + ```bash + $ docker exec $(docker ps --filter --name=mysql -q) \ + bash -c 'mysqladmin --user=wordpress --password="$(< /run/secrets/old_mysql_password)" password "$(< /run/secrets/mysql_password)"' + ``` + +4. Update the `wordpress` service to use the new password, keeping the target + path at `/run/secrets/wp_db_secret` and keeping the file permissions at + `0400`. This will trigger a rolling restart of the WordPress service and + the new secret will be used. + + ```bash + $ docker service update \ + --secret-rm mysql_password \ + --secret-add source=mysql_password_v2,target=wp_db_password,mode=0400 \ + wordpress + ``` + +5. Verify that WordPress works by browsing to http://localhost:30000/ on any + swarm node again. You'll need to use the WordPress username and password + from when you ran through the WordPress wizard in the previous task. + + Verify that the blog post you wrote still exists, and if you changed any + configuration values, verify that they are still changed. + +6. Revoke access to the old secret from the MySQL service and + remove the old secret from Docker. + + ```bash + + $ docker service update \ + --secret-rm mysql_password \ + mysql + + $ docker secret rm mysql_password + ``` + + +7. If you want to try the running all of these examples again or just want to + clean up after running through them, use these commands to remove the + WordPress service, the MySQL container, the `mydata` and `wpdata` volumes, + and the Docker secrets. + + ```bash + $ docker service rm wordpress mysql + + $ docker volume rm mydata wpdata + + $ docker secret rm mysql_password_v2 mysql_root_password + ``` + +## Build support for Docker Secrets into your images + +If you develop a container that can be deployed as a service and requires +sensitive data, such as a credential, as an environment variable, consider +adapting your image to take advantage of Docker secrets. One way to do this is +to ensure that each parameter you pass to the image when creating the container +can also be read from a file. + +Many of the official images in the +[Docker library](https://github.com/docker-library/), such as the +[wordpress](https://github.com/docker-library/wordpress/) +image used in the above examples, have been updated in this way. + +When you start a WordPress container, you provide it with the parameters it +needs by setting them as environment variables. The WordPress image has been +updated so that the environment variables which contain important data for +WordPress, such as `WORDPRESS_DB_PASSWORD`, also have variants which can read +their values from a file (`WORDPRESS_DB_PASSWORD_FILE`). This strategy ensures +that backward compatibility is preserved, while allowing your container to read +the information from a Docker-managed secret instead of being passed directly. + +>**Note**: Docker secrets do not set environment variables directly. This was a +conscious decision, because environment variables can unintentionally be leaked +between containers (for instance, if you use `--link`). diff --git a/engine/swarm/services.md b/engine/swarm/services.md index 654f18945d5..44a8e9d2db6 100644 --- a/engine/swarm/services.md +++ b/engine/swarm/services.md @@ -49,8 +49,7 @@ anixjtol6wdf my_web 1/1 nginx ``` To make the web server accessible from outside the swarm, you need to -[publish the port](services.md#publish-ports-externally-to-the-swarm) where the swarm -listens for web requests. +[publish the port](#publish-ports) where the swarm listens for web requests. You can include a command to run inside containers after the image: @@ -66,7 +65,7 @@ $ docker service create --name helloworld alpine ping docker.com 9uk4639qpg7npwf3fn2aasksr ``` -## Configuring services +## Configure services When you create a service, you can specify many different configuration options and constraints. See the output of `docker service create --help` for a full @@ -99,6 +98,162 @@ $ docker service create --name helloworld \ 9uk4639qpg7npwf3fn2aasksr ``` +### Grant a service access to secrets + +To create a service with access to Docker-managed secrets, use the `--secret` +flag. For more information, see +[Manage sensitive strings (secrets) for Docker services](secrets.md) + +### Specify the image version the service should use + +When you create a service without specifying any details about the version of +the image to use, the service uses the version tagged with the `latest` tag. +You can force the service to use a specific version of the image in a few +different ways, depending on your desired outcome. + +An image version can be expressed in several different ways: + +- If you specify a tag, the manager (or the Docker client, if you use + [content trust](#image_resolution_with_trust)) resolves that tag to a digest. + When the request to create a container task is received on a worker node, the + worker node only sees the digest, not the tag. + + ```bash + $ docker service create --name="myservice" ubuntu:16.04 + ``` + + Some tags represent discrete releases, such as `ubuntu:16.04`. Tags like this + will almost always resolve to a stable digest over time. It is recommended + that you use this kind of tag when possible. + + Other types of tags, such as `latest` or `nightly`, may resolve to a new + digest often, depending on how often an image's author updates the tag. It is + not recommended to run services using a tag which is updated frequently, to + prevent different service replica tasks from using different image versions. + +- If you don't specify a version at all, by convention the image's `latest` tag + is resolved to a digest. Workers use the image at this digest when creating + the service task. + + Thus, the following two commands are equivalent: + + ```bash + $ docker service create --name="myservice" ubuntu + + $ docker service create --name="myservice" ubuntu:latest + ``` + +- If you specify a digest directly, that exact version of the image is always + used when creating service tasks. + + ```bash + $ docker service create \ + --name="myservice" \ + ubuntu:16.04@sha256:35bc48a1ca97c3971611dc4662d08d131869daa692acb281c7e9e052924e38b1 + ``` + +When you create a service, the image's tag is resolved to the specific digest +the tag points to **at the time of service creation**. Worker nodes for that +service will use that specific digest forever unless the service is explicitly +updated. This feature is particularly important if you do use often-changing tags +such as `latest`, because it ensures that all service tasks use the same version +of the image. + +> **Note**: If [content trust](security/trust/content_trust.md) is enabled, the +> client actually resolves the image's tag to a digest before contacting the +> swarm manager, in order to verify that the image is signed. Thus, if you use +> content trust, the swarm manager receives the request pre-resolved. In this +> case, if the client cannot resolve the image to a digest, the request fails. +{: id="image_resolution_with_trust" } + +If the manager is not able to resolve the tag to a digest, each worker +node is responsible for resolving the tag to a digest, and different nodes may +use different versions of the image. If this happens, a warning like the +following will be logged, substituting the placeholders for real information. + +```none +unable to pin image to digest: +``` + +To see an image's current digest, issue the command +`docker inspect :` and look for the `RepoDigests` line. The +following is the current digest for `ubuntu:latest` at the time this content +was written. The output is truncated for clarity. + +```bash +$ docker inspect ubuntu:latest +``` + +```json +"RepoDigests": [ + "ubuntu@sha256:35bc48a1ca97c3971611dc4662d08d131869daa692acb281c7e9e052924e38b1" +], +``` + +After you create a service, its image is never updated unless you explicitly run +`docker service update` with the `--image` flag as described below. Other update +operations such as scaling the service, adding or removing networks or volumes, +renaming the service, or any other type of update operation do not update the +service's image. + +### Update a service's image after creation + +Each tag represents a digest, similar to a Git hash. Some tags, such as +`latest`, are updated often to point to a new digest. Others, such as +`ubuntu:16.04`, represent a released software version and are not expected to +update to point to a new digest often if at all. In Docker 1.13 and higher, when +you create a service, it is constrained to create tasks using a specific digest\ +of an image until you update the service using `service update` with the +`--image` flag. If you use an older version of Docker Engine, you must remove +and re-create the service to update its image. + +When you run `service update` with the `--image` flag, the swarm manager queries +Docker Hub or your private Docker registry for the digest the tag currently +points to and updates the service tasks to use that digest. + +> **Note**: If you use [content trust](#image_resolution_with_trust), the Docker +> client resolves image and the swarm manager receives the image and digest, +> rather than a tag. + +Usually, the manager is able to resolve the tag to a new digest and the service +updates, redeploying each task to use the new image. If the manager is unable to +resolve the tag or some other problem occurs, the next two sections outline what +to expect. + +#### If the manager resolves the tag + +If the swarm manager can resolve the image tag to a digest, it instructs the +worker nodes to redeploy the tasks and use the image at that digest. + +- If a worker has cached the image at that digest, it uses it. + +- If not, it attempts to pull the image from Docker Hub or the private registry. + + - If it succeeds, the task is deployed using the new image. + + - If the worker fails to pull the image, the service fails to deploy on that + worker node. Docker tries again to deploy the task, possibly on a different + worker node. + +#### If the manager cannot resolve the tag + +If the swarm manager cannot resolve the image to a digest, all is not lost: + +- The manager instructs the worker nodes to redeploy the tasks using the image + at that tag. + +- If the worker has a locally cached image that resolves to that tag, it uses + that image. + +- If the worker does not have a locally cached image that resolves to the tag, + the worker tries to connect to Docker Hub or the private registry to pull the + image at that tag. + + - If this succeeds, the worker uses that image. + + - If this fails, the task fails to deploy and the manager tries again to deploy + the task, possibly on a different worker node. + ### Control service scale and placement Swarm mode has two types of services, replicated and global. For replicated @@ -112,7 +267,10 @@ the number of replica tasks you want to start using the `--replicas` flag. For example, to start a replicated nginx service with 3 replica tasks: ```bash -$ docker service create --name my_web --replicas 3 nginx +$ docker service create \ + --name my_web \ + --replicas 3 \ + nginx ``` To start a global service on each available node, pass `--mode global` to @@ -121,7 +279,10 @@ places a task for the global service on the new node. For example to start a service that runs alpine on every node in the swarm: ```bash -$ docker service create --name myservice --mode global alpine top +$ docker service create \ + --name myservice \ + --mode global \ + alpine top ``` Service constraints let you set criteria for a node to meet before the scheduler @@ -141,27 +302,57 @@ run its tasks. Swarm mode lets you network services in a couple of ways: -* publish ports externally to the swarm using ingress networking +* publish ports externally to the swarm using ingress networking or directly on + each swarm node * connect services and tasks within the swarm using overlay networks -#### Publish ports externally to the swarm +### Publish ports + +When you create a swarm service, you can publish that service's ports to hosts +outside the swarm in two ways: + +- [You can rely on the routing mesh](#publish-a services-ports-using-the-routing-mesh). + When you publish a service port, the swarm makes the service accessible at the + target port on every node, regardless of whether there is a task for the + service running on that node or not. This is less complex and is the right + choice for many types of services. + +- [You can publish a service task's port directly on the swarm node](#publish-a-services-ports-directly-on-the-swarm-node) + where that service is running. This feature is available in Docker 1.13 and + higher. This bypasses the routing mesh and provides the maximum flexibility, + including the ability for you to develop your own routing framework. However, + you are responsible for keeping track of where each task is running and + routing requests to the tasks, and load-balancing across the nodes. + +Keep reading for more information and use cases for each of these methods. -You publish service ports externally to the swarm using the `--publish:` -flag. When you publish a service port, the swarm -makes the service accessible at the target port on every node regardless if -there is a task for the service running on the node. +#### Publish a service's ports using the routing mesh -For example, imagine you want to deploy a 3-replica nginx service to a 10-node -swarm as follows: +To publish a service's ports externally to the swarm, use the `--publish +:` flag. The swarm +makes the service accessible at the target port **on every swarm node**. If an +external host connects to that port on any swarm node, the routing mesh routes +it to a task. The external host does not need to know the IP addresses or +internally-used ports of the service tasks to interact with the service. When +a user or process connects to a service, any worker node running a service task +may respond. + +##### Example: Run a three-task Nginx service on 10-node swarm + +Imagine that you have a 10-node swarm, and you deploy an Nginx service running +three tasks on a 10-node swarm: ```bash -docker service create --name my_web --replicas 3 --publish 8080:80 nginx +$ docker service create --name my_web \ + --replicas 3 \ + --publish 8080:80 \ + nginx ``` -The scheduler will deploy nginx tasks to a maximum of 3 nodes. However, the -swarm makes nginx port 80 from the task container accessible at port 8080 on any -node in the swarm. You can direct `curl` at port 8080 of any node in the swarm -to access the web server: +Three tasks will run on up to three nodes. You don't need to know which nodes +are running the tasks; connecting to port 8080 on **any** of the 10 nodes will +connect you to one of the three `nginx` tasks. You can test this using `curl` +(the HTML output is truncated): ```bash $ curl localhost:8080 @@ -170,30 +361,65 @@ $ curl localhost:8080 Welcome to nginx! - - - -

    Welcome to nginx!

    -

    If you see this page, the nginx web server is successfully installed and -working. Further configuration is required.

    - -

    For online documentation and support please refer to -nginx.org.
    -Commercial support is available at -nginx.com.

    - -

    Thank you for using nginx.

    - +...truncated... ``` -#### Add an overlay network +Subsequent connections may be routed to the same swarm node or a different one. + +#### Publish a service's ports directly on the swarm node + +Using the routing mesh may not be the right choice for your application if you +need to make routing decisions based on application state or you need total +control of the process for routing requests to your service's tasks. To publish +a service's port directly on the node where it is running, use the `mode=host` +option to the `--publish` flag. + +> **Note**: If you publish a service's ports directly on the swarm node using +> `mode=host` and also set `published=` this creates an implicit +> limitation that you can only run one task for that service on a given swarm +> node. In addition, if you use `mode=host` and you do not use the +> `--mode=global` flag on `docker service create`, it will be difficult to know +> which nodes are running the service in order to route work to them. + +##### Example: Run a `cadvisor` monitoring service on every swarm node + +[Google cAdvisor](https://hub.docker.com/r/google/cadvisor/) is a tool for +monitoring Linux hosts which run containers. Typically, cAdvisor is run as a +stand-alone container, because it is designed to monitor a given Docker Engine +instance. If you run cAdvisor as a service using the routing mesh, connecting +to the cAdvisor port on any swarm node will show you the statistics for +(effectively) **a random swarm node** running the service. This is probably not +what you want. + +The following example runs cAdvisor as a service on each node in your swarm and +exposes cAdvisor port locally on each swarm node. Connecting to the cAdvisor +port on a given node will show you **that node's** statistics. In practice, this +is similar to running a single stand-alone cAdvisor container on each node, but +without the need to manually administer those containers. + +```bash +$ docker service create \ + --mode global \ + --mount type=bind,source=/,destination=/rootfs,ro=1 \ + --mount type=bind,source=/var/run,destination=/var/run \ + --mount type=bind,source=/sys,destination=/sys,ro=1 \ + --mount type=bind,source=/var/lib/docker/,destination=/var/lib/docker,ro=1 \ + --publish mode=host,target=8080,published=8080 \ + --name=cadvisor \ + google/cadvisor:latest +``` + +You can reach cAdvisor on port 8080 of every swarm node. If you add a node to +the swarm, a cAdvisor task will be started on it. You cannot start another +service or container on any swarm node which binds to port 8080. + +> **Note**: This is a naive example that works well for system monitoring +> applications and similar types of software. Creating an application-layer +> routing framework for a multi-tiered service is complex and out of scope for +> this topic. + +### Add an overlay network Use overlay networks to connect one or more services within the swarm. @@ -266,7 +492,40 @@ $ docker service create \ 0u6a4s31ybk7yw2wyvtikmu50 ``` -### Configure mounts +The `--update-max-failure-ratio` flag controls what fraction of tasks can fail +during an update before the update as a whole is considered to have failed. For +example, with `--update-max-failure-ratio 0.1 --update-failure-action pause`, +after 10% of the tasks being updated fail, the update will be paused. + +An individual task update is considered to have failed if the task doesn't +start up, or if it stops running within the monitoring period specified with +the `--update-monitor` flag. The default value for `--update-monitor` is 30 +seconds, which means that a task failing in the first 30 seconds after its +started counts towards the service update failure threshold, and a failure +after that is not counted. + +## Roll back to the previous version of a service + +In case the updated version of a service doesn't function as expected, it's +possible to roll back to the previous version of the service using +`docker service update`'s `--rollback` flag. This will revert the service +to the configuration that was in place before the most recent +`docker service update` command. + +Other options can be combined with `--rollback`; for example, +`--update-delay 0s` to execute the rollback without a delay between tasks: + +```bash +$ docker service update \ + --rollback \ + --update-delay 0s + my_web + +my_web + +``` + +## Configure mounts You can create two types of mounts for services in a swarm, `volume` mounts or `bind` mounts. You pass the `--mount` flag when you create a service. The diff --git a/engine/swarm/stack-deploy.md b/engine/swarm/stack-deploy.md new file mode 100644 index 00000000000..66b42977262 --- /dev/null +++ b/engine/swarm/stack-deploy.md @@ -0,0 +1,296 @@ +--- +description: How to deploy a stack to a swarm +keywords: +- guide, swarm mode, composefile, stack, compose, deploy +title: Deploy a stack to a swarm +--- + +When running Docker Engine in swarm mode, you can use `docker stack deploy` to +deploy a complete application stack to the swarm. The `deploy` command accepts +a stack description in the form of a [Compose file](/compose/compose-file.md). + +The `docker stack deploy` command supports any Compose file of version "3.0" or +above. If you have an older version, see the [upgrade +guide](/compose/compose-file.md#upgrading). + +To run through this tutorial, you will need: + +1. A Docker Engine of version 1.13.0 or later, running in [swarm + mode](/engine/swarm/swarm-mode.md). If you're not familiar with swarm mode, + you might want to read [Swarm mode key concepts ](key-concepts.md) and + [How services work](how-swarm-mode- works/services.md). + + > **Note:** If you're trying things out on a local development environment, + > you can put your engine into swarm mode with `docker swarm init`. + > + > If you've already got a multi-node swarm running, keep in mind that all + > `docker stack` and `docker service` commands must be run from a manager + > node. + +2. [Docker Compose](/compose/install.md) version 1.10 or later. + + +## Set up a Docker registry + +Because a swarm consists of multiple Docker Engines, a registry is required to +distribute images to all of them. You can use the +[Docker Hub](https://hub.docker.com) or maintain your own. Here's how to create +a throwaway registry, which you can discard afterward. + +1. Start the registry as a service on your swarm: + + ```bash + $ docker service create --name registry --publish 5000:5000 registry:2 + ``` + +2. Check its status with `docker service ls`: + + ```bash + $ docker service ls + + ID NAME REPLICAS IMAGE COMMAND + l7791tpuwkco registry 1/1 registry:2@sha256:1152291c7f93a4ea2ddc95e46d142c31e743b6dd70e194af9e6ebe530f782c17 + ``` + + Once it reads `1/1` under `REPLICAS`, it's running. If it reads `0/1`, it's + probably still pulling the image. + +3. Check that it's working with `curl`: + + ```bash + $ curl http://localhost:5000/v2/ + + {} + ``` + +## Create the example application + +The app used in this guide is based on the hit counter app in the [Get started +with Docker Compose](/compose/gettingstarted.md) guide. It consists of a Python +app which maintains a counter in a Redis instance and increments the counter +whenever you visit it. + +1. Create a directory for the project: + + ```bash + $ mkdir stackdemo + $ cd stackdemo + ``` + +2. Create a file called `app.py` in the project directory and paste this in: + + ```python + from flask import Flask + from redis import Redis + + app = Flask(__name__) + redis = Redis(host='redis', port=6379) + + @app.route('/') + def hello(): + count = redis.incr('hits') + return 'Hello World! I have been seen {} times.\n'.format(count) + + if __name__ == "__main__": + app.run(host="0.0.0.0", port=8000, debug=True) + ``` + +3. Create a file called `requirements.txt` and paste these two lines in: + + ```none + flask + redis + ``` + +4. Create a file called `Dockerfile` and paste this in: + + ```Dockerfile + FROM python:3.4-alpine + ADD . /code + WORKDIR /code + RUN pip install -r requirements.txt + CMD ["python", "app.py"] + ``` + +5. Create a file called `docker-compose.yml` and paste this in: + + ```yaml + version: '3' + + services: + web: + image: 127.0.0.1:5000/stackdemo + build: . + ports: + - "8000:8000" + redis: + image: redis:alpine + ``` + + Note that the image for the web app is built using the Dockerfile defined + above. It's also tagged with `127.0.0.1:5000` - the address of the registry + created earlier. This will be important when distributing the app to the + swarm. + + +## Test the app with Compose + +1. Start the app with `docker-compose up`. This builds the web app image, + pull the Redis image if you don't already have it, and create two + containers. + + You will see a warning about the Engine being in swarm mode. This is because + Compose doesn't take advantage of swarm mode, and deploys everything to a + single node. You can safely ignore this. + + ```bash + $ docker-compose up -d + + WARNING: The Docker Engine you're using is running in swarm mode. + + Compose does not use swarm mode to deploy services to multiple nodes in + a swarm. All containers will be scheduled on the current node. + + To deploy your application across the swarm, use `docker stack deploy`. + + Creating network "stackdemo_default" with the default driver + Building web + ...(build output)... + Creating stackdemo_redis_1 + Creating stackdemo_web_1 + ``` + +2. Check that the app is running with `docker-compose ps`: + + ```bash + $ docker-compose ps + + Name Command State Ports + ----------------------------------------------------------------------------------- + stackdemo_redis_1 docker-entrypoint.sh redis ... Up 6379/tcp + stackdemo_web_1 python app.py Up 0.0.0.0:8000->8000/tcp + ``` + + You can test the app with `curl`: + + ```bash + $ curl http://localhost:8000 + Hello World! I have been seen 1 times. + + $ curl http://localhost:8000 + Hello World! I have been seen 2 times. + + $ curl http://localhost:8000 + Hello World! I have been seen 3 times. + ``` + +3. Bring the app down: + + ```bash + $ docker-compose down --volumes + + Stopping stackdemo_web_1 ... done + Stopping stackdemo_redis_1 ... done + Removing stackdemo_web_1 ... done + Removing stackdemo_redis_1 ... done + Removing network stackdemo_default + ``` + + +## Push the generated image to the registry + +To distribute the web app's image across the swarm, it needs to be pushed to the +registry you set up earlier. With Compose, this is very simple: + +```bash +$ docker-compose push + +Pushing web (127.0.0.1:5000/stackdemo:latest)... +The push refers to a repository [127.0.0.1:5000/stackdemo] +5b5a49501a76: Pushed +be44185ce609: Pushed +bd7330a79bcf: Pushed +c9fc143a069a: Pushed +011b303988d2: Pushed +latest: digest: sha256:a81840ebf5ac24b42c1c676cbda3b2cb144580ee347c07e1bc80e35e5ca76507 size: 1372 +``` + +The stack is now ready to be deployed. + + +## Deploy the stack to the swarm + +1. Create the stack with `docker stack deploy`: + + ```bash + $ docker stack deploy --compose-file docker-compose.yml stackdemo + + Ignoring unsupported options: build + + Creating network stackdemo_default + Creating service stackdemo_web + Creating service stackdemo_redis + ``` + + The last argument is a name for the stack. Each network, volume and service + name is prefixed with the stack name. + +2. Check that it's running with `docker stack services stackdemo`: + + ```bash + $ docker stack services stackdemo + + ID NAME MODE REPLICAS IMAGE + orvjk2263y1p stackdemo_redis replicated 1/1 redis:3.2-alpine@sha256:f1ed3708f538b537eb9c2a7dd50dc90a706f7debd7e1196c9264edeea521a86d + s1nf0xy8t1un stackdemo_web replicated 1/1 127.0.0.1:5000/stackdemo@sha256:adb070e0805d04ba2f92c724298370b7a4eb19860222120d43e0f6351ddbc26f + ``` + + Once it's running, you should see `1/1` under `REPLICAS` for both services. + This might take some time if you have a multi-node swarm, as images need to + be pulled. + + As before, you can test the app with `curl`: + + ```bash + $ curl http://localhost:8000 + Hello World! I have been seen 1 times. + + $ curl http://localhost:8000 + Hello World! I have been seen 2 times. + + $ curl http://localhost:8000 + Hello World! I have been seen 3 times. + ``` + + Thanks to Docker's built-in routing mesh, you can access any node in the + swarm on port 8000 and get routed to the app: + + ```bash + $ curl http://address-of-other-node:8000 + Hello World! I have been seen 4 times. + ``` + +3. Bring the stack down with `docker stack rm`: + + ```bash + $ docker stack rm stackdemo + + Removing service stackdemo_web + Removing service stackdemo_redis + Removing network stackdemo_default + ``` + +4. Bring the registry down with `docker service rm`: + + ```bash + $ docker service rm registry + ``` + +5. If you're just testing things out on a local machine and want to bring your + Docker Engine out of swarm mode, use `docker swarm leave`: + + ```bash + $ docker swarm leave --force + + Node left the swarm. + ``` diff --git a/engine/swarm/swarm-mode.md b/engine/swarm/swarm-mode.md index 32d0e8c6aad..695a5b72dc4 100644 --- a/engine/swarm/swarm-mode.md +++ b/engine/swarm/swarm-mode.md @@ -37,7 +37,7 @@ as follows: * designates the current node as a leader manager node for the swarm. * names the node with the machine hostname. * configures the manager to listen on an active network interface on port 2377. -* sets the current node to `Active` availability, meaning it can receive tasks +* sets the current node to `Active` availability, meanining it can receive tasks from the scheduler. * starts an internal distributed data store for Engines participating in the swarm to maintain a consistent view of the swarm and all services running on it. @@ -84,7 +84,7 @@ reach the first manager node is not the same address the manager sees as its own. For instance, in a cloud setup that spans different regions, hosts have both internal addresses for access within the region and external addresses that you use for access from outside that region. In this case, specify the external -address with `--advertise-addr` so that the node can propagate that information +address with `--advertise-addr` so that the node can propogate that information to other nodes that subsequently connect to it. Refer to the `docker swarm init` [CLI reference](../reference/commandline/swarm_init.md) diff --git a/engine/swarm/swarm-tutorial/add-nodes.md b/engine/swarm/swarm-tutorial/add-nodes.md index c6ddc247873..ba2226ec9d7 100644 --- a/engine/swarm/swarm-tutorial/add-nodes.md +++ b/engine/swarm/swarm-tutorial/add-nodes.md @@ -10,7 +10,7 @@ to add worker nodes. 1. Open a terminal and ssh into the machine where you want to run a worker node. This tutorial uses the name `worker1`. -2. Run the command produced by the `docker swarm init` output from the +2. Run the command produced by the `docker swarm init` output from the [Create a swarm](create-swarm.md) tutorial step to create a worker node joined to the existing swarm: ```bash @@ -37,7 +37,7 @@ This tutorial uses the name `worker1`. 3. Open a terminal and ssh into the machine where you want to run a second worker node. This tutorial uses the name `worker2`. -4. Run the command produced by the `docker swarm init` output from the +4. Run the command produced by the `docker swarm init` output from the [Create a swarm](create-swarm.md) tutorial step to create a second worker node joined to the existing swarm: @@ -49,7 +49,7 @@ joined to the existing swarm: This node joined a swarm as a worker. ``` -5. Open a terminal and ssh into the machine where the manager node runs and run +5. Open a terminal and ssh into the machine where the manager node runs and run the `docker node ls` command to see the worker nodes: ```bash @@ -68,4 +68,4 @@ the `docker node ls` command to see the worker nodes: ## What's next? Now your swarm consists of a manager and two worker nodes. In the next step of -the tutorial, you [deploy a service](deploy-service.md) to the swarm. \ No newline at end of file +the tutorial, you [deploy a service](deploy-service.md) to the swarm. diff --git a/engine/swarm/swarm-tutorial/create-swarm.md b/engine/swarm/swarm-tutorial/create-swarm.md index 53bd13d3779..ec53af8013a 100644 --- a/engine/swarm/swarm-tutorial/create-swarm.md +++ b/engine/swarm/swarm-tutorial/create-swarm.md @@ -16,17 +16,17 @@ machines. $ docker-machine ssh manager1 ``` -2. Run the following command to create a new swarm: +2. Run the following command to create a new swarm: ```bash docker swarm init --advertise-addr ``` >**Note:** If you are using Docker for Mac or Docker for Windows to test - single-node swarm, simply run `docker swarm init` with no arguments. There is no - need to specify `--advertise-addr` in this case. To learn more, see the topic - on how to [Use Docker for Mac or Docker for - Windows](index.md#use-docker-for-mac-or-docker-for-windows) with Swarm. +single-node swarm, simply run `docker swarm init` with no arguments. There is no +need to specify ` --advertise-addr` in this case. To learn more, see the topic +on how to [Use Docker for Mac or Docker for +Windows](index.md#use-docker-for-mac-or-docker-for-windows) with Swarm. In the tutorial, the following command creates a swarm on the `manager1` machine: @@ -52,7 +52,7 @@ machines. join as managers or workers depending on the value for the `--token` flag. -2. Run `docker info` to view the current state of the swarm: +2. Run `docker info` to view the current state of the swarm: ```bash $ docker info @@ -70,7 +70,7 @@ machines. ...snip... ``` -3. Run the `docker node ls` command to view information about nodes: +3. Run the `docker node ls` command to view information about nodes: ```bash $ docker node ls diff --git a/engine/swarm/swarm-tutorial/delete-service.md b/engine/swarm/swarm-tutorial/delete-service.md index 58e63fee314..32ca92970ad 100644 --- a/engine/swarm/swarm-tutorial/delete-service.md +++ b/engine/swarm/swarm-tutorial/delete-service.md @@ -11,7 +11,7 @@ you can delete the service from the swarm. run your manager node. For example, the tutorial uses a machine named `manager1`. -2. Run `docker service rm helloworld` to remove the `helloworld` service. +2. Run `docker service rm helloworld` to remove the `helloworld` service. ``` $ docker service rm helloworld @@ -19,7 +19,7 @@ run your manager node. For example, the tutorial uses a machine named helloworld ``` -3. Run `docker service inspect ` to verify that the swarm manager +3. Run `docker service inspect ` to verify that the swarm manager removed the service. The CLI returns a message that the service is not found: ``` diff --git a/engine/swarm/swarm-tutorial/deploy-service.md b/engine/swarm/swarm-tutorial/deploy-service.md index 46474d6db4b..a4c0d6ad2e1 100644 --- a/engine/swarm/swarm-tutorial/deploy-service.md +++ b/engine/swarm/swarm-tutorial/deploy-service.md @@ -25,7 +25,7 @@ example, the tutorial uses a machine named `manager1`. * The arguments `alpine ping docker.com` define the service as an Alpine Linux container that executes the command `ping docker.com`. -3. Run `docker service ls` to see the list of running services: +3. Run `docker service ls` to see the list of running services: ``` $ docker service ls diff --git a/engine/swarm/swarm-tutorial/drain-node.md b/engine/swarm/swarm-tutorial/drain-node.md index 921b5278faa..298efbd71b4 100644 --- a/engine/swarm/swarm-tutorial/drain-node.md +++ b/engine/swarm/swarm-tutorial/drain-node.md @@ -17,7 +17,7 @@ node and launches replica tasks on a node with `ACTIVE` availability. run your manager node. For example, the tutorial uses a machine named `manager1`. -2. Verify that all your nodes are actively available. +2. Verify that all your nodes are actively available. ```bash $ docker node ls @@ -28,7 +28,7 @@ run your manager node. For example, the tutorial uses a machine named e216jshn25ckzbvmwlnh5jr3g * manager1 Ready Active Leader ``` -3. If you aren't still running the `redis` service from the [rolling +3. If you aren't still running the `redis` service from the [rolling update](rolling-update.md) tutorial, start it now: ```bash @@ -37,22 +37,22 @@ update](rolling-update.md) tutorial, start it now: c5uo6kdmzpon37mgj9mwglcfw ``` -4. Run `docker service ps redis` to see how the swarm manager assigned the +4. Run `docker service ps redis` to see how the swarm manager assigned the tasks to different nodes: ```bash $ docker service ps redis - ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE - 7q92v0nr1hcgts2amcjyqg3pq redis.1 redis redis:3.0.6 Running 26 seconds Running manager1 - 7h2l8h3q3wqy5f66hlv9ddmi6 redis.2 redis redis:3.0.6 Running 26 seconds Running worker1 - 9bg7cezvedmkgg6c8yzvbhwsd redis.3 redis redis:3.0.6 Running 26 seconds Running worker2 + NAME IMAGE NODE DESIRED STATE CURRENT STATE + redis.1.7q92v0nr1hcgts2amcjyqg3pq redis:3.0.6 manager1 Running Running 26 seconds + redis.2.7h2l8h3q3wqy5f66hlv9ddmi6 redis:3.0.6 worker1 Running Running 26 seconds + redis.3.9bg7cezvedmkgg6c8yzvbhwsd redis:3.0.6 worker2 Running Running 26 seconds ``` In this case the swarm manager distributed one task to each node. You may see the tasks distributed differently among the nodes in your environment. -5. Run `docker node update --availability drain ` to drain a node that +5. Run `docker node update --availability drain ` to drain a node that had a task assigned to it: ```bash @@ -61,7 +61,7 @@ had a task assigned to it: worker1 ``` -6. Inspect the node to check its availability: +6. Inspect the node to check its availability: ```bash $ docker node inspect --pretty worker1 @@ -76,24 +76,24 @@ had a task assigned to it: The drained node shows `Drain` for `AVAILABILITY`. -7. Run `docker service ps redis` to see how the swarm manager updated the +7. Run `docker service ps redis` to see how the swarm manager updated the task assignments for the `redis` service: ```bash $ docker service ps redis - ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR - 7q92v0nr1hcgts2amcjyqg3pq redis.1 redis:3.0.6 manager1 Running Running 4 minutes - b4hovzed7id8irg1to42egue8 redis.2 redis:3.0.6 worker2 Running Running About a minute - 7h2l8h3q3wqy5f66hlv9ddmi6 \_ redis.2 redis:3.0.6 worker1 Shutdown Shutdown 2 minutes ago - 9bg7cezvedmkgg6c8yzvbhwsd redis.3 redis:3.0.6 worker2 Running Running 4 minutes + NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR + redis.1.7q92v0nr1hcgts2amcjyqg3pq redis:3.0.6 manager1 Running Running 4 minutes + redis.2.b4hovzed7id8irg1to42egue8 redis:3.0.6 worker2 Running Running About a minute + \_ redis.2.7h2l8h3q3wqy5f66hlv9ddmi6 redis:3.0.6 worker1 Shutdown Shutdown 2 minutes ago + redis.3.9bg7cezvedmkgg6c8yzvbhwsd redis:3.0.6 worker2 Running Running 4 minutes ``` The swarm manager maintains the desired state by ending the task on a node with `Drain` availability and creating a new task on a node with `Active` availability. -8. Run `docker node update --availability active ` to return the +8. Run `docker node update --availability active ` to return the drained node to an active state: ```bash @@ -102,22 +102,22 @@ drained node to an active state: worker1 ``` -9. Inspect the node to see the updated state: +9. Inspect the node to see the updated state: - ```bash - $ docker node inspect --pretty worker1 + ```bash + $ docker node inspect --pretty worker1 - ID: 38ciaotwjuritcdtn9npbnkuz - Hostname: worker1 - Status: + ID: 38ciaotwjuritcdtn9npbnkuz + Hostname: worker1 + Status: State: Ready Availability: Active - ...snip... - ``` + ...snip... + ``` When you set the node back to `Active` availability, it can receive new tasks: * during a service update to scale up * during a rolling update * when you set another node to `Drain` availability - * when a task fails on another active node \ No newline at end of file + * when a task fails on another active node diff --git a/engine/swarm/swarm-tutorial/index.md b/engine/swarm/swarm-tutorial/index.md index e96ec35090e..987376a4986 100644 --- a/engine/swarm/swarm-tutorial/index.md +++ b/engine/swarm/swarm-tutorial/index.md @@ -25,10 +25,10 @@ If you are brand new to Docker, see [About Docker Engine](../../index.md). To run this tutorial, you need the following: -* [three networked host machines](index.md#three-networked-host-machines) -* [Docker Engine 1.12 or later installed](index.md#docker-engine-1-12-or-newer) -* [the IP address of the manager machine](index.md#the-ip-address-of-the-manager-machine) -* [open ports between the hosts](index.md#open-ports-between-the-hosts) +* [three networked host machines](#three-networked-host-machines) +* [Docker Engine 1.12 or later installed](#docker-engine-1-12-or-newer) +* [the IP address of the manager machine](#the-ip-address-of-the-manager-machine) +* [open ports between the hosts](#open-ports-between-the-hosts) ### Three networked host machines @@ -51,9 +51,9 @@ Install Docker Engine and verify that the Docker Engine daemon is running on each of the machines. You can get the latest version of Docker Engine as follows: -* [install Docker Engine on Linux machines](index.md#install-docker-engine-on-linux-machines) +* [install Docker Engine on Linux machines](#install-docker-engine-on-linux-machines) -* [use Docker for Mac or Docker for Windows](index.md#use-docker-for-mac-or-docker-for-windows) +* [use Docker for Mac or Docker for Windows](#use-docker-for-mac-or-docker-for-windows) #### Install Docker Engine on Linux machines diff --git a/engine/swarm/swarm-tutorial/inspect-service.md b/engine/swarm/swarm-tutorial/inspect-service.md index 2847cbd6e2e..d834414f4c8 100644 --- a/engine/swarm/swarm-tutorial/inspect-service.md +++ b/engine/swarm/swarm-tutorial/inspect-service.md @@ -11,7 +11,7 @@ the Docker CLI to see details about the service running in the swarm. run your manager node. For example, the tutorial uses a machine named `manager1`. -2. Run `docker service inspect --pretty ` to display the details +2. Run `docker service inspect --pretty ` to display the details about a service in an easily readable format. To see the details on the `helloworld` service: @@ -21,7 +21,7 @@ about a service in an easily readable format. ID: 9uk4639qpg7npwf3fn2aasksr Name: helloworld - Mode: REPLICATED + Service Mode: REPLICATED Replicas: 1 Placement: UpdateConfig: @@ -29,12 +29,14 @@ about a service in an easily readable format. ContainerSpec: Image: alpine Args: ping docker.com + Resources: + Endpoint Mode: vip ``` >**Tip**: To return the service details in json format, run the same command without the `--pretty` flag. - ```json + ``` $ docker service inspect helloworld [ { @@ -83,14 +85,14 @@ about a service in an easily readable format. ] ``` -4. Run `docker service ps ` to see which nodes are running the +4. Run `docker service ps ` to see which nodes are running the service: ``` $ docker service ps helloworld - ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE - 8p1vev3fq5zm0mi8g0as41w35 helloworld.1 helloworld alpine Running 3 minutes Running worker2 + NAME IMAGE NODE DESIRED STATE LAST STATE + helloworld.1.8p1vev3fq5zm0mi8g0as41w35 alpine worker2 Running Running 3 minutes ``` In this case, the one instance of the `helloworld` service is running on the @@ -101,7 +103,7 @@ service: task so you can see if tasks are running according to the service definition. -4. Run `docker ps` on the node where the task is running to see details about +4. Run `docker ps` on the node where the task is running to see details about the container for the task. >**Tip**: If `helloworld` is running on a node other than your manager node, @@ -117,4 +119,4 @@ the container for the task. ## What's next? Next, you can [change the scale](scale-service.md) for the service running in -the swarm. \ No newline at end of file +the swarm. diff --git a/engine/swarm/swarm-tutorial/rolling-update.md b/engine/swarm/swarm-tutorial/rolling-update.md index 057abba136f..731048d8dc9 100644 --- a/engine/swarm/swarm-tutorial/rolling-update.md +++ b/engine/swarm/swarm-tutorial/rolling-update.md @@ -13,7 +13,7 @@ Redis 3.0.7 container image using rolling updates. run your manager node. For example, the tutorial uses a machine named `manager1`. -2. Deploy Redis 3.0.6 to the swarm and configure the swarm with a 10 second +2. Deploy Redis 3.0.6 to the swarm and configure the swarm with a 10 second update delay: ```bash @@ -44,14 +44,14 @@ update delay: `--update-failure-action` flag for `docker service create` or `docker service update`. -3. Inspect the `redis` service: +3. Inspect the `redis` service: ```bash $ docker service inspect --pretty redis ID: 0u6a4s31ybk7yw2wyvtikmu50 Name: redis - Mode: Replicated + Service Mode: Replicated Replicas: 3 Placement: Strategy: Spread @@ -61,9 +61,10 @@ update delay: ContainerSpec: Image: redis:3.0.6 Resources: + Endpoint Mode: vip ``` -4. Now you can update the container image for `redis`. The swarm manager +4. Now you can update the container image for `redis`. The swarm manager applies the update to nodes according to the `UpdateConfig` policy: ```bash @@ -81,7 +82,7 @@ applies the update to nodes according to the `UpdateConfig` policy: * If, at any time during the update, a task returns `FAILED`, pause the update. -5. Run `docker service inspect --pretty redis` to see the new image in the +5. Run `docker service inspect --pretty redis` to see the new image in the desired state: ```bash @@ -89,7 +90,7 @@ desired state: ID: 0u6a4s31ybk7yw2wyvtikmu50 Name: redis - Mode: Replicated + Service Mode: Replicated Replicas: 3 Placement: Strategy: Spread @@ -99,6 +100,7 @@ desired state: ContainerSpec: Image: redis:3.0.7 Resources: + Endpoint Mode: vip ``` The output of `service inspect` shows if your update paused due to failure: @@ -125,22 +127,22 @@ desired state: To avoid repeating certain update failures, you may need to reconfigure the service by passing flags to `docker service update`. -6. Run `docker service ps ` to watch the rolling update: +6. Run `docker service ps ` to watch the rolling update: ```bash $ docker service ps redis - ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR - dos1zffgeofhagnve8w864fco redis.1 redis:3.0.7 worker1 Running Running 37 seconds - 88rdo6pa52ki8oqx6dogf04fh \_ redis.1 redis:3.0.6 worker2 Shutdown Shutdown 56 seconds ago - 9l3i4j85517skba5o7tn5m8g0 redis.2 redis:3.0.7 worker2 Running Running About a minute - 66k185wilg8ele7ntu8f6nj6i \_ redis.2 redis:3.0.6 worker1 Shutdown Shutdown 2 minutes ago - egiuiqpzrdbxks3wxgn8qib1g redis.3 redis:3.0.7 worker1 Running Running 48 seconds - ctzktfddb2tepkr45qcmqln04 \_ redis.3 redis:3.0.6 mmanager1 Shutdown Shutdown 2 minutes ago + NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR + redis.1.dos1zffgeofhagnve8w864fco redis:3.0.7 worker1 Running Running 37 seconds + \_ redis.1.88rdo6pa52ki8oqx6dogf04fh redis:3.0.6 worker2 Shutdown Shutdown 56 seconds ago + redis.2.9l3i4j85517skba5o7tn5m8g0 redis:3.0.7 worker2 Running Running About a minute + \_ redis.2.66k185wilg8ele7ntu8f6nj6i redis:3.0.6 worker1 Shutdown Shutdown 2 minutes ago + redis.3.egiuiqpzrdbxks3wxgn8qib1g redis:3.0.7 worker1 Running Running 48 seconds + \_ redis.3.ctzktfddb2tepkr45qcmqln04 redis:3.0.6 mmanager1 Shutdown Shutdown 2 minutes ago ``` Before Swarm updates all of the tasks, you can see that some are running `redis:3.0.6` while others are running `redis:3.0.7`. The output above shows the state once the rolling updates are done. -Next, learn about how to [drain a node](drain-node.md) in the swarm. \ No newline at end of file +Next, learn about how to [drain a node](drain-node.md) in the swarm. diff --git a/engine/swarm/swarm-tutorial/scale-service.md b/engine/swarm/swarm-tutorial/scale-service.md index 63c63c57f6b..e8c0aec60b8 100644 --- a/engine/swarm/swarm-tutorial/scale-service.md +++ b/engine/swarm/swarm-tutorial/scale-service.md @@ -12,7 +12,7 @@ the swarm. run your manager node. For example, the tutorial uses a machine named `manager1`. -2. Run the following command to change the desired state of the +2. Run the following command to change the desired state of the service running in the swarm: ```bash @@ -27,24 +27,24 @@ service running in the swarm: helloworld scaled to 5 ``` -3. Run `docker service ps ` to see the updated task list: +3. Run `docker service ps ` to see the updated task list: ``` $ docker service ps helloworld - ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE - 8p1vev3fq5zm0mi8g0as41w35 helloworld.1 helloworld alpine Running 7 minutes Running worker2 - c7a7tcdq5s0uk3qr88mf8xco6 helloworld.2 helloworld alpine Running 24 seconds Running worker1 - 6crl09vdcalvtfehfh69ogfb1 helloworld.3 helloworld alpine Running 24 seconds Running worker1 - auky6trawmdlcne8ad8phb0f1 helloworld.4 helloworld alpine Running 24 seconds Accepted manager1 - ba19kca06l18zujfwxyc5lkyn helloworld.5 helloworld alpine Running 24 seconds Running worker2 + NAME IMAGE NODE DESIRED STATE CURRENT STATE + helloworld.1.8p1vev3fq5zm0mi8g0as41w35 alpine worker2 Running Running 7 minutes + helloworld.2.c7a7tcdq5s0uk3qr88mf8xco6 alpine worker1 Running Running 24 seconds + helloworld.3.6crl09vdcalvtfehfh69ogfb1 alpine worker1 Running Running 24 seconds + helloworld.4.auky6trawmdlcne8ad8phb0f1 alpine manager1 Running Running 24 seconds + helloworld.5.ba19kca06l18zujfwxyc5lkyn alpine worker2 Running Running 24 seconds ``` You can see that swarm has created 4 new tasks to scale to a total of 5 running instances of Alpine Linux. The tasks are distributed between the three nodes of the swarm. One is running on `manager1`. -4. Run `docker ps` to see the containers running on the node where you're +4. Run `docker ps` to see the containers running on the node where you're connected. The following example shows the tasks running on `manager1`: ``` @@ -60,4 +60,4 @@ connected. The following example shows the tasks running on `manager1`: ## What's next? At this point in the tutorial, you're finished with the `helloworld` service. -The next step shows how to [delete the service](delete-service.md). \ No newline at end of file +The next step shows how to [delete the service](delete-service.md). diff --git a/engine/tutorials/dockerimages.md b/engine/tutorials/dockerimages.md index 9833b05e039..08597e0eaf7 100644 --- a/engine/tutorials/dockerimages.md +++ b/engine/tutorials/dockerimages.md @@ -256,7 +256,6 @@ building your own Sinatra image for your fictitious development team. # This is a comment FROM ubuntu:14.04 - MAINTAINER Kate Smith RUN apt-get update && apt-get install -y ruby ruby-dev RUN gem install sinatra @@ -268,7 +267,7 @@ is capitalized. > **Note:** You use `#` to indicate a comment The first instruction `FROM` tells Docker what the source of our image is, in -this case you're basing our new image on an Ubuntu 14.04 image. The instruction uses the `MAINTAINER` instruction to specify who maintains the new image. +this case you're basing our new image on an Ubuntu 14.04 image. Lastly, you've specified two `RUN` instructions. A `RUN` instruction executes a command inside the image, for example installing a package. Here you're @@ -285,10 +284,7 @@ Now let's take our `Dockerfile` and use the `docker build` command to build an i Sending build context to Docker daemon Step 1 : FROM ubuntu:14.04 ---> e54ca5efa2e9 - Step 2 : MAINTAINER Kate Smith - ---> Using cache - ---> 851baf55332b - Step 3 : RUN apt-get update && apt-get install -y ruby ruby-dev + Step 2 : RUN apt-get update && apt-get install -y ruby ruby-dev ---> Running in 3a2558904e9b Selecting previously unselected package libasan0:amd64. (Reading database ... 11518 files and directories currently installed.) @@ -423,7 +419,7 @@ Now let's take our `Dockerfile` and use the `docker build` command to build an i Running hooks in /etc/ca-certificates/update.d....done. ---> c55c31703134 Removing intermediate container 3a2558904e9b - Step 4 : RUN gem install sinatra + Step 3 : RUN gem install sinatra ---> Running in 6b81cb6313e5 unable to convert "\xC3" to UTF-8 in conversion from ASCII-8BIT to UTF-8 to US-ASCII for README.rdoc, skipping unable to convert "\xC3" to UTF-8 in conversion from ASCII-8BIT to UTF-8 to US-ASCII for README.rdoc, skipping @@ -464,7 +460,7 @@ step-by-step. You can see that each step creates a new container, runs the instruction inside that container and then commits that change - just like the `docker commit` work flow you saw earlier. When all the instructions have executed you're left with the `97feabe5d2ed` image -(also helpfully tagged as `ouruser/sinatra:v2`) and all intermediate +(also helpfuly tagged as `ouruser/sinatra:v2`) and all intermediate containers will get removed to clean things up. > **Note:** diff --git a/engine/tutorials/dockerrepos.md b/engine/tutorials/dockerrepos.md index 5db79184836..f6da9f15e14 100644 --- a/engine/tutorials/dockerrepos.md +++ b/engine/tutorials/dockerrepos.md @@ -182,4 +182,4 @@ webhooks](/docker-hub/repos/#webhooks) ## Next steps -Go and use Docker! \ No newline at end of file +Go and use Docker! diff --git a/engine/tutorials/dockervolumes.md b/engine/tutorials/dockervolumes.md index eb90864030e..1318c7ebade 100644 --- a/engine/tutorials/dockervolumes.md +++ b/engine/tutorials/dockervolumes.md @@ -28,7 +28,7 @@ containers that bypasses the [*Union File System*](../reference/glossary.md#unio - Volumes are initialized when a container is created. If the container's base image contains data at the specified mount point, that existing data is copied into the new volume upon volume initialization. (Note that this does - not apply when [mounting a host directory](dockervolumes.md#mount-a-host-directory-as-a-data-volume).) + not apply when [mounting a host directory](#mount-a-host-directory-as-a-data-volume).) - Data volumes can be shared and reused among containers. - Changes to a data volume are made directly. - Changes to a data volume will not be included when you update an image. diff --git a/engine/tutorials/index.md b/engine/tutorials/index.md index 428a1141310..8c39811fe8c 100644 --- a/engine/tutorials/index.md +++ b/engine/tutorials/index.md @@ -13,4 +13,4 @@ title: Engine tutorials * [Build your own images](dockerimages.md) * [Network containers](networkingcontainers.md) * [Manage data in containers](dockervolumes.md) -* [Store images on Docker Hub](dockerrepos.md) \ No newline at end of file +* [Store images on Docker Hub](dockerrepos.md) diff --git a/engine/tutorials/networkingcontainers.md b/engine/tutorials/networkingcontainers.md index a3076fe6cfe..ecb176b1798 100644 --- a/engine/tutorials/networkingcontainers.md +++ b/engine/tutorials/networkingcontainers.md @@ -78,7 +78,8 @@ $ docker network inspect bridge "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", "com.docker.network.bridge.name": "docker0", "com.docker.network.driver.mtu": "9001" - } + }, + "Labels": {} } ] ``` @@ -120,12 +121,13 @@ If you inspect the network, you'll find that it has nothing in it. "Config": [ { "Subnet": "172.18.0.0/16", - "Gateway": "172.18.0.1/16" + "Gateway": "172.18.0.1" } ] }, "Containers": {}, - "Options": {} + "Options": {}, + "Labels": {} } ] diff --git a/engine/understanding-docker.md b/engine/understanding-docker.md index 984dc054cc2..176a4e5b362 100644 --- a/engine/understanding-docker.md +++ b/engine/understanding-docker.md @@ -121,7 +121,7 @@ Apache web server and your web application installed. You can build or update images from scratch or download and use images created by others. An image may be based on, or may extend, one or more other images. A docker image is described in text file called a _Dockerfile_, which has a simple, well-defined syntax. For more -details about images, see [How does a Docker image work?](understanding-docker.md#how-does-a-docker-image-work). +details about images, see [How does a Docker image work?](#how-does-a-docker-image-work). Docker images are the **build** component of Docker. @@ -132,7 +132,7 @@ a container, you can provide configuration metadata such as networking informati or environment variables. Each container is an isolated and secure application platform, but can be given access to resources running in a different host or container, as well as persistent storage or databases. For more details about -containers, see [How does a container work?](understanding-docker.md#how-does-a-container-work). +containers, see [How does a container work?](#how-does-a-container-work). Docker containers are the **run** component of Docker. @@ -140,7 +140,7 @@ Docker containers are the **run** component of Docker. A docker registry is a library of images. A registry can be public or private, and can be on the same server as the Docker daemon or Docker client, or on a totally separate server. For more details about registries, see -[How does a Docker registry work?](understanding-docker.md#how-does-a-docker-registry-work) +[How does a Docker registry work?](#how-does-a-docker-registry-work) Docker registries are the **distribution** component of Docker. diff --git a/engine/userguide/eng-image/dockerfile_best-practices.md b/engine/userguide/eng-image/dockerfile_best-practices.md index f56fcd41cb8..1c30ebd2c3a 100644 --- a/engine/userguide/eng-image/dockerfile_best-practices.md +++ b/engine/userguide/eng-image/dockerfile_best-practices.md @@ -527,4 +527,4 @@ These Official Repositories have exemplary `Dockerfile`s: * [More about Base Images](baseimages.md) * [More about Automated Builds](/docker-hub/builds/) * [Guidelines for Creating Official -Repositories](/docker-hub/official_repos/) \ No newline at end of file +Repositories](/docker-hub/official_repos/) diff --git a/engine/userguide/eng-image/index.md b/engine/userguide/eng-image/index.md index 901c48f922d..a77dfb0e27d 100644 --- a/engine/userguide/eng-image/index.md +++ b/engine/userguide/eng-image/index.md @@ -6,4 +6,4 @@ title: Work with images * [Create a base image](baseimages.md) * [Best practices for writing Dockerfiles](dockerfile_best-practices.md) -* [Image management](image_management.md) \ No newline at end of file +* [Image management](image_management.md) diff --git a/engine/userguide/index.md b/engine/userguide/index.md index 09286455c8e..105943d251c 100644 --- a/engine/userguide/index.md +++ b/engine/userguide/index.md @@ -52,4 +52,4 @@ This guide helps users learn how to use Docker Engine. ## Misc -- [Apply custom metadata](labels-custom-metadata.md) \ No newline at end of file +- [Apply custom metadata](labels-custom-metadata.md) diff --git a/engine/userguide/intro.md b/engine/userguide/intro.md index 83227894ec6..e0d21dc7269 100644 --- a/engine/userguide/intro.md +++ b/engine/userguide/intro.md @@ -131,4 +131,4 @@ Go to [Docker Swarm user guide](/swarm/). * Docker on IRC: irc.freenode.net and channel #docker * [Docker on Twitter](https://twitter.com/docker) * Get [Docker help](https://stackoverflow.com/search?q=docker) on - StackOverflow \ No newline at end of file + StackOverflow diff --git a/engine/userguide/labels-custom-metadata.md b/engine/userguide/labels-custom-metadata.md index 60e132fe87c..fc3ba226394 100644 --- a/engine/userguide/labels-custom-metadata.md +++ b/engine/userguide/labels-custom-metadata.md @@ -106,4 +106,4 @@ Labels on swarm nodes and services can be updated dynamically. - [Adding labels when creating a swarm service](../reference/commandline/service_create.md#set-metadata-on-a-service-l-label) - [Updating a swarm service's labels](../reference/commandline/service_update.md) - [Inspecting a swarm service's labels](../reference/commandline/service_inspect.md) - - [Filtering swarm services by label](../reference/commandline/service_ls.md#filtering) \ No newline at end of file + - [Filtering swarm services by label](../reference/commandline/service_ls.md#filtering) diff --git a/engine/userguide/networking/configure-dns.md b/engine/userguide/networking/configure-dns.md index 878d6d9ed33..2af81204e9c 100644 --- a/engine/userguide/networking/configure-dns.md +++ b/engine/userguide/networking/configure-dns.md @@ -24,14 +24,94 @@ the files alone and use the following Docker options instead. Various container options that affect container domain name services. -| Options | Description | -| ------- | ----------- | -| `--name=CONTAINER-NAME` | Container name configured using `--name` is used to discover a container within an user-defined docker network. The embedded DNS server maintains the mapping between the container name and its IP address (on the network the container is connected to). | -| `--network-alias=ALIAS` | In addition to `--name` as described above, a container is discovered by one or more of its configured `--network-alias` (or `--alias` in docker network connect command) within the user-defined network. The embedded DNS server maintains the mapping between all of the container aliases and its IP address on a specific user-defined network. A container can have different aliases in different networks by using the `--alias` option in docker network connect command. | -| `--link=CONTAINER_NAME:ALIAS` | Using this option as you run a container gives the embedded DNS an extra entry named ALIAS that points to the IP address of the container identified by CONTAINER_NAME. When using `--link` the embedded DNS will guarantee that localized lookup result only on that container where the `--link` is used. This lets processes inside the new container connect to container without having to know its name or IP. | -| `--dns=[IP_ADDRESS...]` | The IP addresses passed via the `--dns` option is used by the embedded DNS server to forward the DNS query if embedded DNS server is unable to resolve a name resolution request from the containers. These `--dns` IP addresses are managed by the embedded DNS server and will not be updated in the container's `/etc/resolv.conf` file.| -| `--dns-search=DOMAIN...` | Sets the domain names that are searched when a bare unqualified hostname isused inside of the container. These `--dns-search` options are managed by the embedded DNS server and will not be updated in the container's `/etc/resolv.conf` file. When a container process attempts to access host and the search domain `example.com` is set, for instance, the DNS logic will not only look up host but also `host.example.com`. | -| `--dns-opt=OPTION...` |Sets the options used by DNS resolvers. These options are managed by the embedded DNS server and will not be updated in the container's `/etc/resolv.conf` file. See documentation for resolv.conf for a list of valid options | + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    + --name=CONTAINER-NAME +

    +
    +

    + Container name configured using --name is used to discover a container within + an user-defined docker network. The embedded DNS server maintains the mapping between + the container name and its IP address (on the network the container is connected to). +

    +
    +

    + --network-alias=ALIAS +

    +
    +

    + In addition to --name as described above, a container is discovered by one or more + of its configured --network-alias (or --alias in docker network connect command) + within the user-defined network. The embedded DNS server maintains the mapping between + all of the container aliases and its IP address on a specific user-defined network. + A container can have different aliases in different networks by using the --alias + option in docker network connect command. +

    +
    +

    + --link=CONTAINER_NAME:ALIAS +

    +
    +

    + Using this option as you run a container gives the embedded DNS + an extra entry named ALIAS that points to the IP address + of the container identified by CONTAINER_NAME. When using --link + the embedded DNS will guarantee that localized lookup result only on that + container where the --link is used. This lets processes inside the new container + connect to container without having to know its name or IP. +

    +

    + --dns=[IP_ADDRESS...] +

    + The IP addresses passed via the --dns option is used by the embedded DNS + server to forward the DNS query if embedded DNS server is unable to resolve a name + resolution request from the containers. + These --dns IP addresses are managed by the embedded DNS server and + will not be updated in the container's /etc/resolv.conf file. +

    + --dns-search=DOMAIN... +

    + Sets the domain names that are searched when a bare unqualified hostname is + used inside of the container. These --dns-search options are managed by the + embedded DNS server and will not be updated in the container's /etc/resolv.conf file. + When a container process attempts to access host and the search + domain example.com is set, for instance, the DNS logic will not only + look up host but also host.example.com. +

    +

    + --dns-opt=OPTION... +

    + Sets the options used by DNS resolvers. These options are managed by the embedded + DNS server and will not be updated in the container's /etc/resolv.conf file. +

    +

    + See documentation for resolv.conf for a list of valid options +

    + In the absence of the `--dns=IP_ADDRESS...`, `--dns-search=DOMAIN...`, or `--dns-opt=OPTION...` options, Docker uses the `/etc/resolv.conf` of the @@ -49,4 +129,4 @@ IPv6 Google DNS nameservers will also be added (2001:4860:4860::8888 and > **Note**: If you need access to a host's localhost resolver, you must modify > your DNS service on the host to listen on a non-localhost address that is -> reachable from within the container. \ No newline at end of file +> reachable from within the container. diff --git a/engine/userguide/networking/default_network/binding.md b/engine/userguide/networking/default_network/binding.md index f7edb261f21..bf21390c573 100644 --- a/engine/userguide/networking/default_network/binding.md +++ b/engine/userguide/networking/default_network/binding.md @@ -96,4 +96,4 @@ address: this alternative is preferred for performance reasons. - [Understand Docker container networks](../index.md) - [Work with network commands](../work-with-networks.md) -- [Legacy container links](dockerlinks.md) \ No newline at end of file +- [Legacy container links](dockerlinks.md) diff --git a/engine/userguide/networking/default_network/build-bridges.md b/engine/userguide/networking/default_network/build-bridges.md index 3385110a22f..94dfc0ae66d 100644 --- a/engine/userguide/networking/default_network/build-bridges.md +++ b/engine/userguide/networking/default_network/build-bridges.md @@ -77,4 +77,4 @@ You can use the `brctl show` command to see Docker add and remove interfaces from the bridge as you start and stop containers, and can run `ip addr` and `ip route` inside a container to see that it has been given an address in the bridge's IP address range and has been told to use the Docker host's IP address -on the bridge as its default gateway to the rest of the Internet. \ No newline at end of file +on the bridge as its default gateway to the rest of the Internet. diff --git a/engine/userguide/networking/default_network/configure-dns.md b/engine/userguide/networking/default_network/configure-dns.md index b06f9699ad3..aab6d1345e0 100644 --- a/engine/userguide/networking/default_network/configure-dns.md +++ b/engine/userguide/networking/default_network/configure-dns.md @@ -98,13 +98,17 @@ Four different options affect container domain name services. --dns-opt=OPTION...

    - Sets the options used by DNS resolvers by writing an options - line into the container's /etc/resolv.conf. + Sets the options used by DNS resolvers by writing an options + line into the container's /etc/resolv.conf.

    - See documentation for resolv.conf for a list of valid options + See documentation for resolv.conf for a list of valid options

    + +

    +

    + @@ -120,4 +124,4 @@ You might wonder what happens when the host machine's `/etc/resolv.conf` file ch When the host file changes, all stopped containers which have a matching `resolv.conf` to the host will be updated immediately to this newest host configuration. Containers which are running when the host configuration changes will need to stop and start to pick up the host changes due to lack of a facility to ensure atomic writes of the `resolv.conf` file while the container is running. If the container's `resolv.conf` has been edited since it was started with the default configuration, no replacement will be attempted as it would overwrite the changes performed by the container. If the options (`--dns`, `--dns-search`, or `--dns-opt`) have been used to modify the default host configuration, then the replacement with an updated host's `/etc/resolv.conf` will not happen as well. -> **Note**: For containers which were created prior to the implementation of the `/etc/resolv.conf` update feature in Docker 1.5.0: those containers will **not** receive updates when the host `resolv.conf` file changes. Only containers created with Docker 1.5.0 and above will utilize this auto-update feature. \ No newline at end of file +> **Note**: For containers which were created prior to the implementation of the `/etc/resolv.conf` update feature in Docker 1.5.0: those containers will **not** receive updates when the host `resolv.conf` file changes. Only containers created with Docker 1.5.0 and above will utilize this auto-update feature. diff --git a/engine/userguide/networking/default_network/container-communication.md b/engine/userguide/networking/default_network/container-communication.md index f50936df7c4..0f2904b0ec1 100644 --- a/engine/userguide/networking/default_network/container-communication.md +++ b/engine/userguide/networking/default_network/container-communication.md @@ -126,4 +126,4 @@ ACCEPT tcp -- 172.17.0.3 172.17.0.2 tcp dpt:80 > **Note**: Docker is careful that its host-wide `iptables` rules fully expose containers to each other's raw IP addresses, so connections from one container to another should always appear to be originating from the first container's own -IP address. \ No newline at end of file +IP address. diff --git a/engine/userguide/networking/default_network/custom-docker0.md b/engine/userguide/networking/default_network/custom-docker0.md index 9f20957d953..7f045c6321e 100644 --- a/engine/userguide/networking/default_network/custom-docker0.md +++ b/engine/userguide/networking/default_network/custom-docker0.md @@ -56,4 +56,4 @@ default via 172.17.42.1 dev eth0 root@f38c87f2a42d:/# exit ``` -Remember that the Docker host will not be willing to forward container packets out on to the Internet unless its `ip_forward` system setting is `1` -- see the section on [Communicating to the outside world](container-communication.md#communicating-to-the-outside-world) for details. \ No newline at end of file +Remember that the Docker host will not be willing to forward container packets out on to the Internet unless its `ip_forward` system setting is `1` -- see the section on [Communicating to the outside world](container-communication.md#communicating-to-the-outside-world) for details. diff --git a/engine/userguide/networking/default_network/dockerlinks.md b/engine/userguide/networking/default_network/dockerlinks.md index 49259c853ab..1b2acd4ca4b 100644 --- a/engine/userguide/networking/default_network/dockerlinks.md +++ b/engine/userguide/networking/default_network/dockerlinks.md @@ -193,9 +193,9 @@ Next, inspect your linked containers with `docker inspect`: {% raw %} $ docker inspect -f "{{ .HostConfig.Links }}" web - {% endraw %} [/db:/web/db] + {% endraw %} You can see that the `web` container is now linked to the `db` container `web/db`. Which allows it to access information about the `db` container. @@ -303,7 +303,7 @@ linked `web` container will be able to talk to the `db` container. ### Important notes on Docker environment variables -Unlike host entries in the [`/etc/hosts` file](dockerlinks.md#updating-the-etchosts-file), +Unlike host entries in the [`/etc/hosts` file](#updating-the-etchosts-file), IP addresses stored in the environment variables are not automatically updated if the source container is restarted. We recommend using the host entries in `/etc/hosts` to resolve the IP address of linked containers. diff --git a/engine/userguide/networking/get-started-overlay.md b/engine/userguide/networking/get-started-overlay.md index b1fd04f9bae..6b8f3094802 100644 --- a/engine/userguide/networking/get-started-overlay.md +++ b/engine/userguide/networking/get-started-overlay.md @@ -9,11 +9,11 @@ network. Docker Engine supports multi-host networking out-of-the-box through the `overlay` network driver. Unlike `bridge` networks, overlay networks require some pre-existing conditions before you can create one: -* [Docker Engine running in swarm mode](get-started-overlay.md#overlay-networking-and-swarm-mode) +* [Docker Engine running in swarm mode](#overlay-networking-and-swarm-mode) OR -* [A cluster of hosts using a key value store](get-started-overlay.md#overlay-networking-with-an-external-key-value-store) +* [A cluster of hosts using a key value store](#overlay-networking-with-an-external-key-value-store) ## Overlay networking and swarm mode @@ -47,7 +47,7 @@ $ docker service create --replicas 2 --network my-multi-host-network --name my-w Overlay networks for a swarm are not available to unmanaged containers. For more information refer to [Docker swarm mode overlay network security model](overlay-security-model.md). -See also [Attach services to an overlay network](../../swarm/networking.md). +See also [Attach services to an overlay network](../../swarm/networking.md). ## Overlay networking with an external key-value store diff --git a/engine/userguide/networking/index.md b/engine/userguide/networking/index.md index 762a5ae642e..c039e16faa9 100644 --- a/engine/userguide/networking/index.md +++ b/engine/userguide/networking/index.md @@ -117,7 +117,8 @@ $ docker network inspect bridge "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", "com.docker.network.bridge.name": "docker0", "com.docker.network.driver.mtu": "9001" - } + }, + "Labels": {} } ] ``` @@ -175,7 +176,8 @@ $ docker network inspect bridge "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", "com.docker.network.bridge.name": "docker0", "com.docker.network.driver.mtu": "9001" - } + }, + "Labels": {} } ] ``` @@ -328,7 +330,8 @@ $ docker network inspect isolated_nw ] }, "Containers": {}, - "Options": {} + "Options": {}, + "Labels": {} } ] @@ -370,7 +373,8 @@ $ docker network inspect isolated_nw "IPv6Address": "" } }, - "Options": {} + "Options": {}, + "Labels": {} } ] ``` diff --git a/engine/userguide/networking/work-with-networks.md b/engine/userguide/networking/work-with-networks.md index 9c42be19bbc..dc35000cc14 100644 --- a/engine/userguide/networking/work-with-networks.md +++ b/engine/userguide/networking/work-with-networks.md @@ -50,12 +50,13 @@ $ docker network inspect simple-network "Config": [ { "Subnet": "172.22.0.0/16", - "Gateway": "172.22.0.1/16" + "Gateway": "172.22.0.1" } ] }, "Containers": {}, - "Options": {} + "Options": {}, + "Labels": {} } ] ``` @@ -145,14 +146,15 @@ $ docker network inspect my-network "Config": [ { "Subnet": "172.23.0.0/16", - "Gateway": "172.23.0.1/16" + "Gateway": "172.23.0.1" } ] }, "Containers": {}, "Options": { "com.docker.network.bridge.host_binding_ipv4": "172.23.0.1" - } + }, + "Labels": {} } ] @@ -191,7 +193,7 @@ needed. $ docker run -itd --name=container2 busybox 498eaaaf328e1018042c04b2de04036fc04719a6e39a097a4f4866043a2c2152 -``` + ``` 2. Create an isolated, `bridge` network to test with. @@ -202,7 +204,7 @@ needed. ``` 3. Connect `container2` to the network and then `inspect` the network to verify -the connection: + the connection: ```bash $ docker network connect isolated_nw container2 @@ -293,7 +295,7 @@ the connection: 6. Inspect the network resources used by `container2`. If you have Python installed, you can pretty print the output. - + ```bash $ docker inspect --format='{{json .NetworkSettings.Networks}}' container2 | python -m json.tool @@ -487,8 +489,8 @@ The following example briefly describes how to use `--link`. ``` This is a little tricky, because `container5` does not exist yet. When - `container5` is created, `container4` will be able to resolve the name `c5` to - `container5`'s IP address. + `container5` is created, `container4` will be able to resolve the name `c5` to + `container5`'s IP address. >**Note:** Any link between containers created with *legacy link* is static in nature and hard-binds the container with the alias. It does not tolerate @@ -637,7 +639,7 @@ The following example illustrates these points. 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 0.070/0.081/0.097 ms ``` - + Both pings succeed, but the subnets are different, which means that the networks are different. @@ -763,7 +765,7 @@ The following example illustrates this limitation. 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 0.070/0.081/0.097 ms ``` - + Detach from `container4` and leave it running using `CTRL-p CTRL-q`. ```bash @@ -1052,7 +1054,7 @@ remove a network. If a network has connected endpoints, an error occurs. } ] ``` - + 3. Remove the `isolated_nw` network. ```bash $ docker network rm isolated_nw diff --git a/engine/userguide/storagedriver/device-mapper-driver.md b/engine/userguide/storagedriver/device-mapper-driver.md index 5e01f231bc1..b7829ae7009 100644 --- a/engine/userguide/storagedriver/device-mapper-driver.md +++ b/engine/userguide/storagedriver/device-mapper-driver.md @@ -189,7 +189,7 @@ Storage Driver: devicemapper Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata Library Version: 1.02.93-RHEL7 (2015-01-28) [...] -``` + ``` The output above shows a Docker host running with the `devicemapper` storage driver operating in `loop-lvm` mode. This is indicated by the fact that the @@ -205,7 +205,7 @@ you how to configure a Docker host to use the `devicemapper` storage driver in a `direct-lvm` configuration. > **Caution:** If you have already run the Docker daemon on your Docker host -> and have images you want to keep, `push` them Docker Hub or your private +> and have images you want to keep, `push` them to Docker Hub or your private > Docker Trusted Registry before attempting this procedure. The procedure below will create a logical volume configured as a thin pool to @@ -227,79 +227,79 @@ assumes that the Docker daemon is in the `stopped` state. 3. Create a physical volume replacing `/dev/xvdf` with your block device. - ```bash - $ pvcreate /dev/xvdf - ``` + ```bash + $ pvcreate /dev/xvdf + ``` 4. Create a 'docker' volume group. - ```bash - $ vgcreate docker /dev/xvdf - ``` + ```bash + $ vgcreate docker /dev/xvdf + ``` 5. Create a thin pool named `thinpool`. - In this example, the data logical is 95% of the 'docker' volume group size. - Leaving this free space allows for auto expanding of either the data or - metadata if space runs low as a temporary stopgap. + In this example, the data logical is 95% of the 'docker' volume group size. + Leaving this free space allows for auto expanding of either the data or + metadata if space runs low as a temporary stopgap. - ```bash - $ lvcreate --wipesignatures y -n thinpool docker -l 95%VG - $ lvcreate --wipesignatures y -n thinpoolmeta docker -l 1%VG - ``` + ```bash + $ lvcreate --wipesignatures y -n thinpool docker -l 95%VG + $ lvcreate --wipesignatures y -n thinpoolmeta docker -l 1%VG + ``` 6. Convert the pool to a thin pool. - ```bash - $ lvconvert -y --zero n -c 512K --thinpool docker/thinpool --poolmetadata docker/thinpoolmeta - ``` + ```bash + $ lvconvert -y --zero n -c 512K --thinpool docker/thinpool --poolmetadata docker/thinpoolmeta + ``` 7. Configure autoextension of thin pools via an `lvm` profile. - ```bash - $ vi /etc/lvm/profile/docker-thinpool.profile - ``` + ```bash + $ vi /etc/lvm/profile/docker-thinpool.profile + ``` -8. Specify `thin_pool_autoextend_threshold` value. +8. Specify 'thin_pool_autoextend_threshold' value. - The value should be the percentage of space used before `lvm` attempts - to autoextend the available space (100 = disabled). + The value should be the percentage of space used before `lvm` attempts + to autoextend the available space (100 = disabled). - ``` - thin_pool_autoextend_threshold = 80 - ``` + ``` + thin_pool_autoextend_threshold = 80 + ``` 9. Modify the `thin_pool_autoextend_percent` for when thin pool autoextension occurs. - The value's setting is the percentage of space to increase the thin pool (100 = - disabled) + The value's setting is the perentage of space to increase the thin pool (100 = + disabled) - ``` - thin_pool_autoextend_percent = 20 - ``` + ``` + thin_pool_autoextend_percent = 20 + ``` 10. Check your work, your `docker-thinpool.profile` file should appear similar to the following: - An example `/etc/lvm/profile/docker-thinpool.profile` file: + An example `/etc/lvm/profile/docker-thinpool.profile` file: - ``` - activation { - thin_pool_autoextend_threshold=80 - thin_pool_autoextend_percent=20 - } - ``` + ``` + activation { + thin_pool_autoextend_threshold=80 + thin_pool_autoextend_percent=20 + } + ``` 11. Apply your new lvm profile - ```bash - $ lvchange --metadataprofile docker-thinpool docker/thinpool - ``` + ```bash + $ lvchange --metadataprofile docker-thinpool docker/thinpool + ``` 12. Verify the `lv` is monitored. - ```bash - $ lvs -o+seg_monitor - ``` + ```bash + $ lvs -o+seg_monitor + ``` 13. If the Docker daemon was previously started, move your existing graph driver directory out of the way. @@ -323,7 +323,7 @@ assumes that the Docker daemon is in the `stopped` state. --storage-driver=devicemapper --storage-opt=dm.thinpooldev=/dev/mapper/docker-thinpool --storage-opt=dm.use_deferred_removal=true --storage-opt=dm.use_deferred_deletion=true ``` - You can also set them for startup in the `daemon.json` configuration, for example: + You can also set them for startup in the `daemon.json` configuration, for example: ```json { @@ -340,15 +340,15 @@ assumes that the Docker daemon is in the `stopped` state. 15. If using systemd and modifying the daemon configuration via unit or drop-in file, reload systemd to scan for changes. - ```bash - $ systemctl daemon-reload - ``` + ```bash + $ systemctl daemon-reload + ``` 16. Start the Docker daemon. - ```bash - $ systemctl start docker - ``` + ```bash + $ systemctl start docker + ``` After you start the Docker daemon, ensure you monitor your thin pool and volume group free space. While the volume group will auto-extend, it can still fill @@ -467,79 +467,79 @@ The `Data Space` values show that the pool is 100GB total. This example extends 1. List the sizes of the devices. - ```bash - $ sudo ls -lh /var/lib/docker/devicemapper/devicemapper/ + ```bash + $ sudo ls -lh /var/lib/docker/devicemapper/devicemapper/ - total 1175492 - -rw------- 1 root root 100G Mar 30 05:22 data - -rw------- 1 root root 2.0G Mar 31 11:17 metadata - ``` + total 1175492 + -rw------- 1 root root 100G Mar 30 05:22 data + -rw------- 1 root root 2.0G Mar 31 11:17 metadata + ``` 2. Truncate `data` file to the size of the `metadata` file (approximately 200GB). - ```bash - $ sudo truncate -s 214748364800 /var/lib/docker/devicemapper/devicemapper/data - ``` + ```bash + $ sudo truncate -s 214748364800 /var/lib/docker/devicemapper/devicemapper/data + ``` 3. Verify the file size changed. - ```bash - $ sudo ls -lh /var/lib/docker/devicemapper/devicemapper/ + ```bash + $ sudo ls -lh /var/lib/docker/devicemapper/devicemapper/ - total 1.2G - -rw------- 1 root root 200G Apr 14 08:47 data - -rw------- 1 root root 2.0G Apr 19 13:27 metadata - ``` + total 1.2G + -rw------- 1 root root 200G Apr 14 08:47 data + -rw------- 1 root root 2.0G Apr 19 13:27 metadata + ``` 4. Reload data loop device - ```bash - $ sudo blockdev --getsize64 /dev/loop0 + ```bash + $ sudo blockdev --getsize64 /dev/loop0 - 107374182400 + 107374182400 - $ sudo losetup -c /dev/loop0 + $ sudo losetup -c /dev/loop0 - $ sudo blockdev --getsize64 /dev/loop0 + $ sudo blockdev --getsize64 /dev/loop0 - 214748364800 - ``` + 214748364800 + ``` 5. Reload devicemapper thin pool. - 1. Get the pool name first. + a. Get the pool name first. - ```bash - $ sudo dmsetup status | grep pool + ```bash + $ sudo dmsetup status | grep pool - docker-8:1-123141-pool: 0 209715200 thin-pool 91 - 422/524288 18338/1638400 - rw discard_passdown queue_if_no_space - - ``` + docker-8:1-123141-pool: 0 209715200 thin-pool 91 + 422/524288 18338/1638400 - rw discard_passdown queue_if_no_space - + ``` - The name is the string before the colon. + The name is the string before the colon. - 2. Dump the device mapper table first. + b. Dump the device mapper table first. - ```bash - $ sudo dmsetup table docker-8:1-123141-pool + ```bash + $ sudo dmsetup table docker-8:1-123141-pool - 0 209715200 thin-pool 7:1 7:0 128 32768 1 skip_block_zeroing - ``` + 0 209715200 thin-pool 7:1 7:0 128 32768 1 skip_block_zeroing + ``` - 3. Calculate the real total sectors of the thin pool now. + c. Calculate the real total sectors of the thin pool now. - Change the second number of the table info (i.e. the disk end sector) to - reflect the new number of 512 byte sectors in the disk. For example, as the - new loop size is 200GB, change the second number to 419430400. + Change the second number of the table info (i.e. the disk end sector) to + reflect the new number of 512 byte sectors in the disk. For example, as the + new loop size is 200GB, change the second number to 419430400. - 4. Reload the thin pool with the new sector number + d. Reload the thin pool with the new sector number - ```bash - $ sudo dmsetup suspend docker-8:1-123141-pool \ - && sudo dmsetup reload docker-8:1-123141-pool --table '0 419430400 thin-pool 7:1 7:0 128 32768 1 skip_block_zeroing' \ - && sudo dmsetup resume docker-8:1-123141-pool - ``` + ```bash + $ sudo dmsetup suspend docker-8:1-123141-pool \ + && sudo dmsetup reload docker-8:1-123141-pool --table '0 419430400 thin-pool 7:1 7:0 128 32768 1 skip_block_zeroing' \ + && sudo dmsetup resume docker-8:1-123141-pool + ``` #### The device_tool @@ -562,64 +562,63 @@ disk partition. 1. Extend the volume group (VG) `vg-docker`. - ```bash - $ sudo vgextend vg-docker /dev/sdh1 + ```bash + $ sudo vgextend vg-docker /dev/sdh1 - Volume group "vg-docker" successfully extended - ``` + Volume group "vg-docker" successfully extended + ``` - Your volume group may use a different name. + Your volume group may use a different name. 2. Extend the `data` logical volume(LV) `vg-docker/data` - ```bash - $ sudo lvextend -l+100%FREE -n vg-docker/data + ```bash + $ sudo lvextend -l+100%FREE -n vg-docker/data - Extending logical volume data to 200 GiB - Logical volume data successfully resized - ``` + Extending logical volume data to 200 GiB + Logical volume data successfully resized + ``` 3. Reload devicemapper thin pool. - 1. Get the pool name. + a. Get the pool name. - ```bash - $ sudo dmsetup status | grep pool + ```bash + $ sudo dmsetup status | grep pool - docker-253:17-1835016-pool: 0 96460800 thin-pool 51593 6270/1048576 701943/753600 - rw no_discard_passdown queue_if_no_space - ``` + docker-253:17-1835016-pool: 0 96460800 thin-pool 51593 6270/1048576 701943/753600 - rw no_discard_passdown queue_if_no_space + ``` - The name is the string before the colon. + The name is the string before the colon. - 2. Dump the device mapper table. + b. Dump the device mapper table. - ```bash - $ sudo dmsetup table docker-253:17-1835016-pool + ```bash + $ sudo dmsetup table docker-253:17-1835016-pool - 0 96460800 thin-pool 252:0 252:1 128 32768 1 skip_block_zeroing - ``` + 0 96460800 thin-pool 252:0 252:1 128 32768 1 skip_block_zeroing + ``` - 3. Calculate the real total sectors of the thin pool now. we can use `blockdev` to get the real size of data lv. + c. Calculate the real total sectors of the thin pool now. we can use `blockdev` to get the real size of data lv. - Change the second number of the table info (i.e. the number of sectors) to - reflect the new number of 512 byte sectors in the disk. For example, as the - new data `lv` size is `264132100096` bytes, change the second number to - `515883008`. + Change the second number of the table info (i.e. the number of sectors) to + reflect the new number of 512 byte sectors in the disk. For example, as the + new data `lv` size is `264132100096` bytes, change the second number to + `515883008`. - ```bash - $ sudo blockdev --getsize64 /dev/vg-docker/data + ```bash + $ sudo blockdev --getsize64 /dev/vg-docker/data - 264132100096 - ``` + 264132100096 + ``` - 4. Then reload the thin pool with the new sector number. + d. Then reload the thin pool with the new sector number. - ```bash - $ sudo dmsetup suspend docker-253:17-1835016-pool \ - && sudo dmsetup reload docker-253:17-1835016-pool \ - --table '0 515883008 thin-pool 252:0 252:1 128 32768 1 skip_block_zeroing' \ - && sudo dmsetup resume docker-253:17-1835016-pool - ``` + ```bash + $ sudo dmsetup suspend docker-253:17-1835016-pool \ + && sudo dmsetup reload docker-253:17-1835016-pool --table '0 515883008 thin-pool 252:0 252:1 128 32768 1 skip_block_zeroing' \ + && sudo dmsetup resume docker-253:17-1835016-pool + ``` ## Device Mapper and Docker performance diff --git a/engine/userguide/storagedriver/index.md b/engine/userguide/storagedriver/index.md index ad8fc8b4b53..4319cf8535d 100644 --- a/engine/userguide/storagedriver/index.md +++ b/engine/userguide/storagedriver/index.md @@ -26,4 +26,4 @@ videos](http://www.pluralsight.com/author/nigel-poulton), co-hosts the weekly on [Twitter](https://twitter.com/nigelpoulton). -  \ No newline at end of file +  diff --git a/engine/userguide/storagedriver/overlayfs-driver.md b/engine/userguide/storagedriver/overlayfs-driver.md index d91f88249a2..d567a1fbbff 100644 --- a/engine/userguide/storagedriver/overlayfs-driver.md +++ b/engine/userguide/storagedriver/overlayfs-driver.md @@ -428,4 +428,4 @@ before running `yum install`. - **rename(2)**. OverlayFS does not fully support the `rename(2)` system call. Your application needs to detect its failure and fall back to a "copy and -unlink" strategy. \ No newline at end of file +unlink" strategy. diff --git a/kitematic/faq.md b/kitematic/faq.md index 830d926c5b6..51b448f43ae 100644 --- a/kitematic/faq.md +++ b/kitematic/faq.md @@ -19,7 +19,7 @@ best way to start contributing to Kitematic is to review our doc on s"` to specify the interval, in seconds, between heartbeats the manager sends to the primary manager. These heartbeats indicate that the manager is healthy and reachable. By default, the interval is 60 seconds. -### `--api-enable-cors`, `--cors` — Enable CORS headers in the remote API +### `--api-enable-cors`, `--cors` — Enable CORS headers in the Engine API -Use `--api-enable-cors` or `--cors` to enable cross-origin resource sharing (CORS) headers in the remote API. +Use `--api-enable-cors` or `--cors` to enable cross-origin resource sharing (CORS) headers in the Engine API. ### `--cluster-driver`, `-c` — Cluster driver to use @@ -198,4 +198,4 @@ Use `--discovery-opt ` to discovery options, such as paths to the TLS fil --discovery-opt kv.certfile=/path/to/mycert.pem \ --discovery-opt kv.keyfile=/path/to/mykey.pem \ -For more information, see [Use TLS with distributed key/value discovery](../discovery.md) \ No newline at end of file +For more information, see [Use TLS with distributed key/value discovery](../discovery.md) diff --git a/swarm/secure-swarm-tls.md b/swarm/secure-swarm-tls.md index e17fdce9820..18f6f57d2dc 100644 --- a/swarm/secure-swarm-tls.md +++ b/swarm/secure-swarm-tls.md @@ -94,11 +94,11 @@ the Docker Engine daemon automatically trusts any certificates signed by the CA. certificate is in order (the certificate has not expired or been revoked etc.) the Docker Engine daemon accepts commands from this trusted Docker Engine CLI. -The Docker Engine CLI is simply a client that uses the Docker Engine Remote API to -communicate with the Docker Engine daemon. Any client that uses this Docker Engine Remote API can use +The Docker Engine CLI is simply a client that uses the Docker Engine API to +communicate with the Docker Engine daemon. Any client that uses this Docker Engine API can use TLS. For example, Docker Engine clients such as 'Docker Universal Control Plane' (UCP) have TLS support built-in. Other, third party products, that use Docker Engine -Remote API, can also be configured this way. +API, can also be configured this way. ## TLS modes with Docker and Swarm diff --git a/swarm/swarm-api.md b/swarm/swarm-api.md index 9c94e677b3b..f44cf5d230c 100644 --- a/swarm/swarm-api.md +++ b/swarm/swarm-api.md @@ -12,7 +12,7 @@ title: Docker Swarm API The Docker Swarm API is mostly compatible with the [Docker Remote API](/engine/reference/api/docker_remote_api/). This document is an overview of the differences between the Swarm API and the Docker -Remote API. +Engine API. ## Missing endpoints