diff --git a/.dockerignore b/.dockerignore index 85c355aab..99ef4637d 100644 --- a/.dockerignore +++ b/.dockerignore @@ -4,3 +4,4 @@ gocache-for-docker victoria-metrics-data vmstorage-data vmselect-cache +.vscode diff --git a/.gitignore b/.gitignore index 2009d0602..9aa07d068 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ *.pprof /bin .idea +.vscode *.test *.swp /gocache-for-docker diff --git a/LICENSE b/LICENSE index 84f8ad8b8..451f74941 100644 --- a/LICENSE +++ b/LICENSE @@ -175,7 +175,7 @@ END OF TERMS AND CONDITIONS - Copyright 2019-2021 VictoriaMetrics, Inc. + Copyright 2019-2022 VictoriaMetrics, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/README.md b/README.md index 8d7e7d558..4d873636c 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ Then read [Prometheus setup](#prometheus-setup) and [Grafana setup](#grafana-set Cluster version of VictoriaMetrics is available [here](https://docs.victoriametrics.com/Cluster-VictoriaMetrics.html). -[Contact us](mailto:info@victoriametrics.com) if you need enterprise support for VictoriaMetrics. See [features available in enterprise package](https://victoriametrics.com/enterprise.html). Enterprise binaries can be downloaded and evaluated for free from [the releases page](https://github.com/VictoriaMetrics/VictoriaMetrics/releases). +[Contact us](mailto:info@victoriametrics.com) if you need enterprise support for VictoriaMetrics. See [features available in enterprise package](https://victoriametrics.com/products/enterprise/). Enterprise binaries can be downloaded and evaluated for free from [the releases page](https://github.com/VictoriaMetrics/VictoriaMetrics/releases). ## Prominent features @@ -56,7 +56,7 @@ VictoriaMetrics has the following prominent features: * [Native binary format](#how-to-import-data-in-native-format). * It supports metrics' relabeling. See [these docs](#relabeling) for details. * It can deal with [high cardinality issues](https://docs.victoriametrics.com/FAQ.html#what-is-high-cardinality) and [high churn rate](https://docs.victoriametrics.com/FAQ.html#what-is-high-churn-rate) issues via [series limiter](#cardinality-limiter). -* It ideally works with big amounts of time series data from APM, Kubernetes, IoT sensors, connected cars, industrial telemetry, financial data and various [Enterprise workloads](https://victoriametrics.com/enterprise.html). +* It ideally works with big amounts of time series data from APM, Kubernetes, IoT sensors, connected cars, industrial telemetry, financial data and various [Enterprise workloads](https://victoriametrics.com/products/enterprise/). * It has open source [cluster version](https://github.com/VictoriaMetrics/VictoriaMetrics/tree/cluster). See also [various Articles about VictoriaMetrics](https://docs.victoriametrics.com/Articles.html). @@ -570,7 +570,7 @@ VictoriaMetrics supports `__graphite__` pseudo-label for filtering time series w ### Graphite Render API usage -[VictoriaMetrics Enterprise](https://victoriametrics.com/enterprise.html) supports [Graphite Render API](https://graphite.readthedocs.io/en/stable/render_api.html) subset +[VictoriaMetrics Enterprise](https://victoriametrics.com/products/enterprise/) supports [Graphite Render API](https://graphite.readthedocs.io/en/stable/render_api.html) subset at `/render` endpoint, which is used by [Graphite datasource in Grafana](https://grafana.com/docs/grafana/latest/datasources/graphite/). When configuring Graphite datasource in Grafana, the `Storage-Step` http request header must be set to a step between Graphite data points stored in VictoriaMetrics. For example, `Storage-Step: 10s` would mean 10 seconds distance between Graphite datapoints stored in VictoriaMetrics. Enterprise binaries can be downloaded and evaluated for free from [the releases page](https://github.com/VictoriaMetrics/VictoriaMetrics/releases). @@ -632,7 +632,7 @@ to your needs or when testing bugfixes. ### Development build -1. [Install Go](https://golang.org/doc/install). The minimum supported version is Go 1.16. +1. [Install Go](https://golang.org/doc/install). The minimum supported version is Go 1.17. 2. Run `make victoria-metrics` from the root folder of [the repository](https://github.com/VictoriaMetrics/VictoriaMetrics). It builds `victoria-metrics` binary and puts it into the `bin` folder. @@ -648,7 +648,7 @@ ARM build may run on Raspberry Pi or on [energy-efficient ARM servers](https://b ### Development ARM build -1. [Install Go](https://golang.org/doc/install). The minimum supported version is Go 1.16. +1. [Install Go](https://golang.org/doc/install). The minimum supported version is Go 1.17. 2. Run `make victoria-metrics-arm` or `make victoria-metrics-arm64` from the root folder of [the repository](https://github.com/VictoriaMetrics/VictoriaMetrics). It builds `victoria-metrics-arm` or `victoria-metrics-arm64` binary respectively and puts it into the `bin` folder. @@ -662,7 +662,7 @@ ARM build may run on Raspberry Pi or on [energy-efficient ARM servers](https://b `Pure Go` mode builds only Go code without [cgo](https://golang.org/cmd/cgo/) dependencies. -1. [Install Go](https://golang.org/doc/install). The minimum supported version is Go 1.16. +1. [Install Go](https://golang.org/doc/install). The minimum supported version is Go 1.17. 2. Run `make victoria-metrics-pure` from the root folder of [the repository](https://github.com/VictoriaMetrics/VictoriaMetrics). It builds `victoria-metrics-pure` binary and puts it into the `bin` folder. @@ -1171,13 +1171,13 @@ See [these docs](https://docs.victoriametrics.com/guides/guide-vmcluster-multipl ## Downsampling -[VictoriaMetrics Enterprise](https://victoriametrics.com/enterprise.html) supports multi-level downsampling with `-downsampling.period` command-line flag. For example: +[VictoriaMetrics Enterprise](https://victoriametrics.com/products/enterprise/) supports multi-level downsampling with `-downsampling.period` command-line flag. For example: * `-downsampling.period=30d:5m` instructs VictoriaMetrics to [deduplicate](#deduplication) samples older than 30 days with 5 minutes interval. * `-downsampling.period=30d:5m,180d:1h` instructs VictoriaMetrics to deduplicate samples older than 30 days with 5 minutes interval and to deduplicate samples older than 180 days with 1 hour interval. -Downsampling is applied independently per each time series. It can reduce disk space usage and improve query performance if it is applied to time series with big number of samples per each series. The downsampling doesn't improve query performance if the database contains big number of time series with small number of samples per each series (aka [high churn rate](https://docs.victoriametrics.com/FAQ.html#what-is-high-churn-rate)), since downsampling doesn't reduce the number of time series. So the majority of time is spent on searching for the matching time series. +Downsampling is applied independently per each time series. It can reduce disk space usage and improve query performance if it is applied to time series with big number of samples per each series. The downsampling doesn't improve query performance if the database contains big number of time series with small number of samples per each series (aka [high churn rate](https://docs.victoriametrics.com/FAQ.html#what-is-high-churn-rate)), since downsampling doesn't reduce the number of time series. So the majority of time is spent on searching for the matching time series. It is possible to use recording rules in [vmalert](https://docs.victoriametrics.com/vmalert.html) in order to reduce the number of time series. See [these docs](https://docs.victoriametrics.com/vmalert.html#downsampling-and-aggregation-via-vmalert). The downsampling can be evaluated for free by downloading and using enterprise binaries from [the releases page](https://github.com/VictoriaMetrics/VictoriaMetrics/releases). diff --git a/app/vmagent/README.md b/app/vmagent/README.md index 4185696df..64bd9d937 100644 --- a/app/vmagent/README.md +++ b/app/vmagent/README.md @@ -301,7 +301,6 @@ You can read more about relabeling in the following articles: * If the metric disappears from the list of scraped metrics, then stale marker is sent to this particular metric. * If the scrape target becomes temporarily unavailable, then stale markers are sent for all the metrics scraped from this target. * If the scrape target is removed from the list of targets, then stale markers are sent for all the metrics scraped from this target. -* Stale markers are sent for all the scraped metrics on graceful shutdown of `vmagent`. Prometheus staleness markers' tracking needs additional memory, since it must store the previous response body per each scrape target in order to compare it to the current response body. The memory usage may be reduced by passing `-promscrape.noStaleMarkers` command-line flag to `vmagent`. This disables staleness tracking. This also disables tracking the number of new time series per each scrape with the auto-generated `scrape_series_added` metric. See [these docs](https://prometheus.io/docs/concepts/jobs_instances/#automatically-generated-labels-and-time-series) for details. @@ -521,7 +520,7 @@ It may be useful to perform `vmagent` rolling update without any scrape loss. ## Kafka integration -[Enterprise version](https://victoriametrics.com/enterprise.html) of `vmagent` can read and write metrics from / to Kafka: +[Enterprise version](https://victoriametrics.com/products/enterprise/) of `vmagent` can read and write metrics from / to Kafka: * [Reading metrics from Kafka](#reading-metrics-from-kafka) * [Writing metrics to Kafka](#writing-metrics-to-kafka) @@ -531,7 +530,7 @@ The enterprise version of vmagent is available for evaluation at [releases](http ### Reading metrics from Kafka -[Enterprise version](https://victoriametrics.com/enterprise.html) of `vmagent` can read metrics in various formats from Kafka messages. These formats can be configured with `-kafka.consumer.topic.defaultFormat` or `-kafka.consumer.topic.format` command-line options. The following formats are supported: +[Enterprise version](https://victoriametrics.com/products/enterprise/) of `vmagent` can read metrics in various formats from Kafka messages. These formats can be configured with `-kafka.consumer.topic.defaultFormat` or `-kafka.consumer.topic.format` command-line options. The following formats are supported: * `promremotewrite` - [Prometheus remote_write](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#remote_write). Messages in this format can be sent by vmagent - see [these docs](#writing-metrics-to-kafka). * `influx` - [InfluxDB line protocol format](https://docs.influxdata.com/influxdb/v1.7/write_protocols/line_protocol_tutorial/). @@ -567,7 +566,7 @@ data_format = "influx" #### Command-line flags for Kafka consumer -These command-line flags are available only in [enterprise](https://victoriametrics.com/enterprise.html) version of `vmagent`, which can be downloaded for evaluation from [releases](https://github.com/VictoriaMetrics/VictoriaMetrics/releases) page (see `vmutils-*-enteprise.tar.gz` archives) and from [docker images](https://hub.docker.com/r/victoriametrics/vmagent/tags) with tags containing `enterprise` suffix. +These command-line flags are available only in [enterprise](https://victoriametrics.com/products/enterprise/) version of `vmagent`, which can be downloaded for evaluation from [releases](https://github.com/VictoriaMetrics/VictoriaMetrics/releases) page (see `vmutils-*-enteprise.tar.gz` archives) and from [docker images](https://hub.docker.com/r/victoriametrics/vmagent/tags) with tags containing `enterprise` suffix. ``` -kafka.consumer.topic array @@ -600,7 +599,7 @@ These command-line flags are available only in [enterprise](https://victoriametr ### Writing metrics to Kafka -[Enterprise version](https://victoriametrics.com/enterprise.html) of `vmagent` writes data to Kafka with `at-least-once` semantics if `-remoteWrite.url` contains e.g. Kafka url. For example, if `vmagent` is started with `-remoteWrite.url=kafka://localhost:9092/?topic=prom-rw`, then it would send Prometheus remote_write messages to Kafka bootstrap server at `localhost:9092` with the topic `prom-rw`. These messages can be read later from Kafka by another `vmagent` - see [these docs](#reading-metrics-from-kafka) for details. +[Enterprise version](https://victoriametrics.com/products/enterprise/) of `vmagent` writes data to Kafka with `at-least-once` semantics if `-remoteWrite.url` contains e.g. Kafka url. For example, if `vmagent` is started with `-remoteWrite.url=kafka://localhost:9092/?topic=prom-rw`, then it would send Prometheus remote_write messages to Kafka bootstrap server at `localhost:9092` with the topic `prom-rw`. These messages can be read later from Kafka by another `vmagent` - see [these docs](#reading-metrics-from-kafka) for details. Additional Kafka options can be passed as query params to `-remoteWrite.url`. For instance, `kafka://localhost:9092/?topic=prom-rw&client.id=my-favorite-id` sets `client.id` Kafka option to `my-favorite-id`. The full list of Kafka options is available [here](https://github.com/edenhill/librdkafka/blob/master/CONFIGURATION.md). @@ -629,7 +628,7 @@ We recommend using [binary releases](https://github.com/VictoriaMetrics/Victoria ### Development build -1. [Install Go](https://golang.org/doc/install). The minimum supported version is Go 1.16. +1. [Install Go](https://golang.org/doc/install). The minimum supported version is Go 1.17. 2. Run `make vmagent` from the root folder of [the repository](https://github.com/VictoriaMetrics/VictoriaMetrics). It builds the `vmagent` binary and puts it into the `bin` folder. @@ -658,7 +657,7 @@ ARM build may run on Raspberry Pi or on [energy-efficient ARM servers](https://b ### Development ARM build -1. [Install Go](https://golang.org/doc/install). The minimum supported version is Go 1.16. +1. [Install Go](https://golang.org/doc/install). The minimum supported version is Go 1.17. 2. Run `make vmagent-arm` or `make vmagent-arm64` from the root folder of [the repository](https://github.com/VictoriaMetrics/VictoriaMetrics) It builds `vmagent-arm` or `vmagent-arm64` binary respectively and puts it into the `bin` folder. diff --git a/app/vmagent/remotewrite/client.go b/app/vmagent/remotewrite/client.go index 5a4f5ea53..0493758b8 100644 --- a/app/vmagent/remotewrite/client.go +++ b/app/vmagent/remotewrite/client.go @@ -295,6 +295,17 @@ again: } metrics.GetOrCreateCounter(fmt.Sprintf(`vmagent_remotewrite_requests_total{url=%q, status_code="%d"}`, c.sanitizedURL, statusCode)).Inc() if statusCode == 409 || statusCode == 400 { + body, err := ioutil.ReadAll(resp.Body) + _ = resp.Body.Close() + l := logger.WithThrottler("remoteWriteRejected", 5*time.Second) + if err != nil { + l.Errorf("sending a block with size %d bytes to %q was rejected (skipping the block): status code %d; "+ + "failed to read response body: %s", + len(block), c.sanitizedURL, statusCode, err) + } else { + l.Errorf("sending a block with size %d bytes to %q was rejected (skipping the block): status code %d; response body: %s", + len(block), c.sanitizedURL, statusCode, string(body)) + } // Just drop block on 409 and 400 status codes like Prometheus does. // See https://github.com/VictoriaMetrics/VictoriaMetrics/issues/873 // and https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1149 diff --git a/app/vmagent/remotewrite/remotewrite.go b/app/vmagent/remotewrite/remotewrite.go index f8d1805db..b5e57377e 100644 --- a/app/vmagent/remotewrite/remotewrite.go +++ b/app/vmagent/remotewrite/remotewrite.go @@ -390,6 +390,8 @@ var labelsHashBufPool bytesutil.ByteBufferPool func logSkippedSeries(labels []prompbmarshal.Label, flagName string, flagValue int) { select { case <-logSkippedSeriesTicker.C: + // Do not use logger.WithThrottler() here, since this will increase CPU usage + // because every call to logSkippedSeries will result to a call to labelsToString. logger.Warnf("skip series %s because %s=%d reached", labelsToString(labels), flagName, flagValue) default: } diff --git a/app/vmalert/README.md b/app/vmalert/README.md index 38f73f7bf..26a703019 100644 --- a/app/vmalert/README.md +++ b/app/vmalert/README.md @@ -229,7 +229,7 @@ There are the following approaches exist for alerting and recording rules across rules to `AccountID=123`. * To specify `tenant` parameter per each alerting and recording group if - [enterprise version of vmalert](https://victoriametrics.com/enterprise.html) is used + [enterprise version of vmalert](https://victoriametrics.com/products/enterprise/) is used with `-clusterMode` command-line flag. For example: ```yaml diff --git a/app/vmalert/main.go b/app/vmalert/main.go index 540ff27ff..5fdeb811d 100644 --- a/app/vmalert/main.go +++ b/app/vmalert/main.go @@ -97,6 +97,9 @@ func main() { if err != nil { logger.Fatalf("failed to init remoteWrite: %s", err) } + if rw == nil { + logger.Fatalf("remoteWrite.url can't be empty in replay mode") + } notifier.InitTemplateFunc(eu) groupsCfg, err := config.Parse(*rulePath, *validateTemplates, *validateExpressions) if err != nil { diff --git a/app/vmauth/README.md b/app/vmauth/README.md index 0e6911362..c5c8d3054 100644 --- a/app/vmauth/README.md +++ b/app/vmauth/README.md @@ -159,7 +159,7 @@ It is recommended using [binary releases](https://github.com/VictoriaMetrics/Vic ### Development build -1. [Install Go](https://golang.org/doc/install). The minimum supported version is Go 1.16. +1. [Install Go](https://golang.org/doc/install). The minimum supported version is Go 1.17. 2. Run `make vmauth` from the root folder of [the repository](https://github.com/VictoriaMetrics/VictoriaMetrics). It builds `vmauth` binary and puts it into the `bin` folder. diff --git a/app/vmbackup/README.md b/app/vmbackup/README.md index d725278e1..b376243b0 100644 --- a/app/vmbackup/README.md +++ b/app/vmbackup/README.md @@ -267,7 +267,7 @@ It is recommended using [binary releases](https://github.com/VictoriaMetrics/Vic ### Development build -1. [Install Go](https://golang.org/doc/install). The minimum supported version is Go 1.16. +1. [Install Go](https://golang.org/doc/install). The minimum supported version is Go 1.17. 2. Run `make vmbackup` from the root folder of [the repository](https://github.com/VictoriaMetrics/VictoriaMetrics). It builds `vmbackup` binary and puts it into the `bin` folder. diff --git a/app/vmbackupmanager/README.md b/app/vmbackupmanager/README.md index c6c31de38..dc056fa9c 100644 --- a/app/vmbackupmanager/README.md +++ b/app/vmbackupmanager/README.md @@ -1,6 +1,6 @@ ## vmbackupmanager -***vmbackupmanager is a part of [enterprise package](https://victoriametrics.com/enterprise.html). It is available for download and evaluation at [releases page](https://github.com/VictoriaMetrics/VictoriaMetrics/releases)*** +***vmbackupmanager is a part of [enterprise package](https://victoriametrics.com/products/enterprise/). It is available for download and evaluation at [releases page](https://github.com/VictoriaMetrics/VictoriaMetrics/releases)*** The VictoriaMetrics backup manager automates regular backup procedures. It supports the following backup intervals: **hourly**, **daily**, **weekly** and **monthly**. Multiple backup intervals may be configured simultaneously. I.e. the backup manager creates hourly backups every hour, while it creates daily backups every day, etc. Backup manager must have read access to the storage data, so best practice is to install it on the same machine (or as a sidecar) where the storage node is installed. The backup service makes a backup every hour and puts it to the latest folder and then copies data to the folders which represent the backup intervals (hourly, daily, weekly and monthly) diff --git a/app/vmctl/README.md b/app/vmctl/README.md index 5f8ed187e..30a394d29 100644 --- a/app/vmctl/README.md +++ b/app/vmctl/README.md @@ -560,6 +560,15 @@ results such as `average`, `rate`, etc. If multiple labels needs to be added, set flag for each label, for example, `--vm-extra-label label1=value1 --vm-extra-label label2=value2`. If timeseries already have label, that must be added with `--vm-extra-label` flag, flag has priority and will override label value from timeseries. +### Rate limiting + +Limiting the rate of data transfer could help to reduce pressure on disk or on destination database. +The rate limit may be set in bytes-per-second via `--vm-rate-limit` flag. + +Please note, you can also use [vmagent](https://docs.victoriametrics.com/vmagent.html) +as a proxy between `vmctl` and destination with `-remoteWrite.rateLimit` flag enabled. + + ## How to build It is recommended using [binary releases](https://github.com/VictoriaMetrics/VictoriaMetrics/releases) - `vmctl` is located in `vmutils-*` archives there. @@ -567,7 +576,7 @@ It is recommended using [binary releases](https://github.com/VictoriaMetrics/Vic ### Development build -1. [Install Go](https://golang.org/doc/install). The minimum supported version is Go 1.16. +1. [Install Go](https://golang.org/doc/install). The minimum supported version is Go 1.17. 2. Run `make vmctl` from the root folder of [the repository](https://github.com/VictoriaMetrics/VictoriaMetrics). It builds `vmctl` binary and puts it into the `bin` folder. @@ -596,7 +605,7 @@ ARM build may run on Raspberry Pi or on [energy-efficient ARM servers](https://b #### Development ARM build -1. [Install Go](https://golang.org/doc/install). The minimum supported version is Go 1.16. +1. [Install Go](https://golang.org/doc/install). The minimum supported version is Go 1.17. 2. Run `make vmctl-arm` or `make vmctl-arm64` from the root folder of [the repository](https://github.com/VictoriaMetrics/VictoriaMetrics). It builds `vmctl-arm` or `vmctl-arm64` binary respectively and puts it into the `bin` folder. diff --git a/app/vmctl/flags.go b/app/vmctl/flags.go index eae82bdcb..97765314a 100644 --- a/app/vmctl/flags.go +++ b/app/vmctl/flags.go @@ -7,7 +7,8 @@ import ( ) const ( - globalSilent = "s" + globalSilent = "s" + globalVerbose = "verbose" ) var ( @@ -17,6 +18,11 @@ var ( Value: false, Usage: "Whether to run in silent mode. If set to true no confirmation prompts will appear.", }, + &cli.BoolFlag{ + Name: globalVerbose, + Value: false, + Usage: "Whether to enable verbosity in logs output.", + }, } ) @@ -30,7 +36,10 @@ const ( vmBatchSize = "vm-batch-size" vmSignificantFigures = "vm-significant-figures" vmRoundDigits = "vm-round-digits" - vmExtraLabel = "vm-extra-label" + + // also used in vm-native + vmExtraLabel = "vm-extra-label" + vmRateLimit = "vm-rate-limit" ) var ( @@ -95,6 +104,11 @@ var ( Usage: "Extra labels, that will be added to imported timeseries. In case of collision, label value defined by flag" + "will have priority. Flag can be set multiple times, to add few additional labels.", }, + &cli.Int64Flag{ + Name: vmRateLimit, + Usage: "Optional data transfer rate limit in bytes per second.\n" + + "By default the rate limit is disabled. It can be useful for limiting load on configured via '--vmAddr' destination.", + }, } ) @@ -354,6 +368,11 @@ var ( Usage: "Extra labels, that will be added to imported timeseries. In case of collision, label value defined by flag" + "will have priority. Flag can be set multiple times, to add few additional labels.", }, + &cli.Int64Flag{ + Name: vmRateLimit, + Usage: "Optional data transfer rate limit in bytes per second.\n" + + "By default the rate limit is disabled. It can be useful for limiting load on source or destination databases.", + }, } ) diff --git a/app/vmctl/influx.go b/app/vmctl/influx.go index ececc59c6..1118ba606 100644 --- a/app/vmctl/influx.go +++ b/app/vmctl/influx.go @@ -30,7 +30,7 @@ func newInfluxProcessor(ic *influx.Client, im *vm.Importer, cc int, separator st } } -func (ip *influxProcessor) run(silent bool) error { +func (ip *influxProcessor) run(silent, verbose bool) error { series, err := ip.ic.Explore() if err != nil { return fmt.Errorf("explore query failed: %s", err) @@ -70,7 +70,7 @@ func (ip *influxProcessor) run(silent bool) error { case infErr := <-errCh: return fmt.Errorf("influx error: %s", infErr) case vmErr := <-ip.im.Errors(): - return fmt.Errorf("Import process failed: \n%s", wrapErr(vmErr)) + return fmt.Errorf("import process failed: %s", wrapErr(vmErr, verbose)) case seriesCh <- s: } } @@ -80,7 +80,9 @@ func (ip *influxProcessor) run(silent bool) error { ip.im.Close() // drain import errors channel for vmErr := range ip.im.Errors() { - return fmt.Errorf("Import process failed: \n%s", wrapErr(vmErr)) + if vmErr.Err != nil { + return fmt.Errorf("import process failed: %s", wrapErr(vmErr, verbose)) + } } bar.Finish() log.Println("Import finished!") diff --git a/app/vmctl/limiter/limiter.go b/app/vmctl/limiter/limiter.go new file mode 100644 index 000000000..ace01f715 --- /dev/null +++ b/app/vmctl/limiter/limiter.go @@ -0,0 +1,53 @@ +package limiter + +import ( + "sync" + "time" + + "github.com/VictoriaMetrics/VictoriaMetrics/lib/timerpool" +) + +// NewLimiter creates a Limiter object +// for the given perSecondLimit +func NewLimiter(perSecondLimit int64) *Limiter { + return &Limiter{perSecondLimit: perSecondLimit} +} + +// Limiter controls the amount of budget +// that can be spent according to configured perSecondLimit +type Limiter struct { + perSecondLimit int64 + + // mu protects budget and deadline from concurrent access. + mu sync.Mutex + + // The current budget. It is increased by perSecondLimit every second. + budget int64 + + // The next deadline for increasing the budget by perSecondLimit + deadline time.Time +} + +// Register blocks for amount of time +// needed to process the given dataLen according +// to the configured perSecondLimit. +func (l *Limiter) Register(dataLen int) { + limit := l.perSecondLimit + if limit <= 0 { + return + } + + l.mu.Lock() + defer l.mu.Unlock() + + for l.budget <= 0 { + if d := time.Until(l.deadline); d > 0 { + t := timerpool.Get(d) + <-t.C + timerpool.Put(t) + } + l.budget += limit + l.deadline = time.Now().Add(time.Second) + } + l.budget -= int64(dataLen) +} diff --git a/app/vmctl/limiter/writer.go b/app/vmctl/limiter/writer.go new file mode 100644 index 000000000..134a8208e --- /dev/null +++ b/app/vmctl/limiter/writer.go @@ -0,0 +1,37 @@ +package limiter + +import ( + "io" +) + +// NewWriteLimiter creates a new WriteLimiter object +// for the give writer and Limiter. +func NewWriteLimiter(w io.Writer, limiter *Limiter) *WriteLimiter { + return &WriteLimiter{ + writer: w, + limiter: limiter, + } +} + +// WriteLimiter limits the amount of bytes written +// per second via Write() method. +// Must be created via NewWriteLimiter. +type WriteLimiter struct { + writer io.Writer + limiter *Limiter +} + +// Close implements io.Closer +// also calls Close for wrapped io.WriteCloser +func (wl *WriteLimiter) Close() error { + if c, ok := wl.writer.(io.Closer); ok { + return c.Close() + } + return nil +} + +// Write implements io.Writer +func (wl *WriteLimiter) Write(p []byte) (n int, err error) { + wl.limiter.Register(len(p)) + return wl.writer.Write(p) +} diff --git a/app/vmctl/main.go b/app/vmctl/main.go index de146e3db..223da90f7 100644 --- a/app/vmctl/main.go +++ b/app/vmctl/main.go @@ -18,6 +18,11 @@ import ( ) func main() { + var ( + err error + importer *vm.Importer + ) + start := time.Now() app := &cli.App{ Name: "vmctl", @@ -53,7 +58,7 @@ func main() { } otsdbProcessor := newOtsdbProcessor(otsdbClient, importer, c.Int(otsdbConcurrency)) - return otsdbProcessor.run(c.Bool(globalSilent)) + return otsdbProcessor.run(c.Bool(globalSilent), c.Bool(globalVerbose)) }, }, { @@ -82,14 +87,14 @@ func main() { } vmCfg := initConfigVM(c) - importer, err := vm.NewImporter(vmCfg) + importer, err = vm.NewImporter(vmCfg) if err != nil { return fmt.Errorf("failed to create VM importer: %s", err) } processor := newInfluxProcessor(influxClient, importer, c.Int(influxConcurrency), c.String(influxMeasurementFieldSeparator)) - return processor.run(c.Bool(globalSilent)) + return processor.run(c.Bool(globalSilent), c.Bool(globalVerbose)) }, }, { @@ -100,7 +105,7 @@ func main() { fmt.Println("Prometheus import mode") vmCfg := initConfigVM(c) - importer, err := vm.NewImporter(vmCfg) + importer, err = vm.NewImporter(vmCfg) if err != nil { return fmt.Errorf("failed to create VM importer: %s", err) } @@ -123,7 +128,7 @@ func main() { im: importer, cc: c.Int(promConcurrency), } - return pp.run(c.Bool(globalSilent)) + return pp.run(c.Bool(globalSilent), c.Bool(globalVerbose)) }, }, { @@ -138,6 +143,7 @@ func main() { } p := vmNativeProcessor{ + rateLimit: c.Int64(vmRateLimit), filter: filter{ match: c.String(vmNativeFilterMatch), timeStart: c.String(vmNativeFilterTimeStart), @@ -166,12 +172,14 @@ func main() { go func() { <-c fmt.Println("\r- Execution cancelled") - os.Exit(0) + if importer != nil { + importer.Close() + } }() - err := app.Run(os.Args) + err = app.Run(os.Args) if err != nil { - log.Fatal(err) + log.Println(err) } log.Printf("Total time: %v", time.Since(start)) } @@ -188,5 +196,6 @@ func initConfigVM(c *cli.Context) vm.Config { SignificantFigures: c.Int(vmSignificantFigures), RoundDigits: c.Int(vmRoundDigits), ExtraLabels: c.StringSlice(vmExtraLabel), + RateLimit: c.Int64(vmRateLimit), } } diff --git a/app/vmctl/opentsdb.go b/app/vmctl/opentsdb.go index 95faa490d..f3532a4ca 100644 --- a/app/vmctl/opentsdb.go +++ b/app/vmctl/opentsdb.go @@ -35,7 +35,7 @@ func newOtsdbProcessor(oc *opentsdb.Client, im *vm.Importer, otsdbcc int) *otsdb } } -func (op *otsdbProcessor) run(silent bool) error { +func (op *otsdbProcessor) run(silent, verbose bool) error { log.Println("Loading all metrics from OpenTSDB for filters: ", op.oc.Filters) var metrics []string for _, filter := range op.oc.Filters { @@ -111,7 +111,7 @@ func (op *otsdbProcessor) run(silent bool) error { case otsdbErr := <-errCh: return fmt.Errorf("opentsdb error: %s", otsdbErr) case vmErr := <-op.im.Errors(): - return fmt.Errorf("Import process failed: \n%s", wrapErr(vmErr)) + return fmt.Errorf("import process failed: %s", wrapErr(vmErr, verbose)) case seriesCh <- queryObj{ Tr: tr, StartTime: startTime, Series: series, Rt: opentsdb.RetentionMeta{ @@ -133,7 +133,9 @@ func (op *otsdbProcessor) run(silent bool) error { } op.im.Close() for vmErr := range op.im.Errors() { - return fmt.Errorf("Import process failed: \n%s", wrapErr(vmErr)) + if vmErr.Err != nil { + return fmt.Errorf("import process failed: %s", wrapErr(vmErr, verbose)) + } } log.Println("Import finished!") log.Print(op.im.Stats()) @@ -143,7 +145,7 @@ func (op *otsdbProcessor) run(silent bool) error { func (op *otsdbProcessor) do(s queryObj) error { start := s.StartTime - s.Tr.Start end := s.StartTime - s.Tr.End - data, err := op.oc.GetData(s.Series, s.Rt, start, end) + data, err := op.oc.GetData(s.Series, s.Rt, start, end, op.oc.MsecsTime) if err != nil { return fmt.Errorf("failed to collect data for %v in %v:%v :: %v", s.Series, s.Rt, s.Tr, err) } diff --git a/app/vmctl/opentsdb/opentsdb.go b/app/vmctl/opentsdb/opentsdb.go index 06684f039..df446fc43 100644 --- a/app/vmctl/opentsdb/opentsdb.go +++ b/app/vmctl/opentsdb/opentsdb.go @@ -46,6 +46,7 @@ type Client struct { Filters []string Normalize bool HardTS int64 + MsecsTime bool } // Config contains fields required @@ -82,9 +83,9 @@ type MetaResults struct { // Meta A meta object about a metric // only contain the tags/etc. and no data type Meta struct { - //tsuid string Metric string `json:"metric"` Tags map[string]string `json:"tags"` + //tsuid string } // OtsdbMetric is a single series in OpenTSDB's returned format @@ -152,7 +153,7 @@ func (c Client) FindSeries(metric string) ([]Meta, error) { // GetData actually retrieves data for a series at a specified time range // e.g. /api/query?start=1&end=200&m=sum:1m-avg-none:system.load5{host=host1} -func (c Client) GetData(series Meta, rt RetentionMeta, start int64, end int64) (Metric, error) { +func (c Client) GetData(series Meta, rt RetentionMeta, start int64, end int64, mSecs bool) (Metric, error) { /* First, build our tag string. It's literally just key=value,key=value,... @@ -195,7 +196,7 @@ func (c Client) GetData(series Meta, rt RetentionMeta, start int64, end int64) ( 3. bad format of response body */ if resp.StatusCode != 200 { - log.Println(fmt.Sprintf("bad response code from OpenTSDB query %v...skipping", resp.StatusCode)) + log.Println(fmt.Sprintf("bad response code from OpenTSDB query %v for %q...skipping", resp.StatusCode, q)) return Metric{}, nil } defer func() { _ = resp.Body.Close() }() @@ -272,7 +273,11 @@ func (c Client) GetData(series Meta, rt RetentionMeta, start int64, end int64) ( then convert the timestamp back to something reasonable. */ for ts, val := range output[0].Dps { - data.Timestamps = append(data.Timestamps, ts) + if !mSecs { + data.Timestamps = append(data.Timestamps, ts*1000) + } else { + data.Timestamps = append(data.Timestamps, ts) + } data.Values = append(data.Values, val) } return data, nil @@ -283,6 +288,7 @@ func (c Client) GetData(series Meta, rt RetentionMeta, start int64, end int64) ( func NewClient(cfg Config) (*Client, error) { var retentions []Retention offsetPrint := int64(time.Now().Unix()) + // convert a number of days to seconds offsetSecs := cfg.Offset * 24 * 60 * 60 if cfg.MsecsTime { // 1000000 == Nanoseconds -> Milliseconds difference @@ -318,6 +324,7 @@ func NewClient(cfg Config) (*Client, error) { Filters: cfg.Filters, Normalize: cfg.Normalize, HardTS: cfg.HardTS, + MsecsTime: cfg.MsecsTime, } return client, nil } diff --git a/app/vmctl/opentsdb/parser.go b/app/vmctl/opentsdb/parser.go index a46312920..6a1fa8baf 100644 --- a/app/vmctl/opentsdb/parser.go +++ b/app/vmctl/opentsdb/parser.go @@ -87,6 +87,34 @@ func convertRetention(retention string, offset int64, msecTime bool) (Retention, if len(chunks) != 3 { return Retention{}, fmt.Errorf("invalid retention string: %q", retention) } + queryLengthDuration, err := convertDuration(chunks[2]) + if err != nil { + return Retention{}, fmt.Errorf("invalid ttl (second order) duration string: %q: %s", chunks[2], err) + } + // set ttl in milliseconds, unless we aren't using millisecond time in OpenTSDB...then use seconds + queryLength := queryLengthDuration.Milliseconds() + if !msecTime { + queryLength = queryLength / 1000 + } + queryRange := queryLength + // bump by the offset so we don't look at empty ranges any time offset > ttl + queryLength += offset + + // first/second order aggregations for queries defined in chunk 0... + aggregates := strings.Split(chunks[0], "-") + if len(aggregates) != 3 { + return Retention{}, fmt.Errorf("invalid aggregation string: %q", chunks[0]) + } + + aggTimeDuration, err := convertDuration(aggregates[1]) + if err != nil { + return Retention{}, fmt.Errorf("invalid aggregation time duration string: %q: %s", aggregates[1], err) + } + aggTime := aggTimeDuration.Milliseconds() + if !msecTime { + aggTime = aggTime / 1000 + } + rowLengthDuration, err := convertDuration(chunks[1]) if err != nil { return Retention{}, fmt.Errorf("invalid row length (first order) duration string: %q: %s", chunks[1], err) @@ -96,27 +124,35 @@ func convertRetention(retention string, offset int64, msecTime bool) (Retention, if !msecTime { rowLength = rowLength / 1000 } - ttlDuration, err := convertDuration(chunks[2]) - if err != nil { - return Retention{}, fmt.Errorf("invalid ttl (second order) duration string: %q: %s", chunks[2], err) + + var querySize int64 + /* + The idea here is to ensure each individual query sent to OpenTSDB is *at least* + large enough to ensure no single query requests essentially 0 data. + */ + if rowLength > aggTime { + /* + We'll look at 2x the row size for each query we perform + This is a strange function, but the logic works like this: + 1. we discover the "number" of ranges we should split the time range into + This is found with queryRange / (rowLength * 4)...kind of a percentage query + 2. we discover the actual size of each "chunk" + This is second division step + */ + querySize = int64(queryRange / (queryRange / (rowLength * 4))) + } else { + /* + Unless the aggTime (how long a range of data we're requesting per individual point) + is greater than the row size. Then we'll need to use that to determine + how big each individual query should be + */ + querySize = int64(queryRange / (queryRange / (aggTime * 4))) } - // set ttl in milliseconds, unless we aren't using millisecond time in OpenTSDB...then use seconds - ttl := ttlDuration.Milliseconds() - if !msecTime { - ttl = ttl / 1000 - } - // bump by the offset so we don't look at empty ranges any time offset > ttl - ttl += offset var timeChunks []TimeRange var i int64 - for i = offset; i <= ttl; i = i + rowLength { - timeChunks = append(timeChunks, TimeRange{Start: i + rowLength, End: i}) - } - // first/second order aggregations for queries defined in chunk 0... - aggregates := strings.Split(chunks[0], "-") - if len(aggregates) != 3 { - return Retention{}, fmt.Errorf("invalid aggregation string: %q", chunks[0]) + for i = offset; i <= queryLength; i = i + querySize { + timeChunks = append(timeChunks, TimeRange{Start: i + querySize, End: i}) } ret := Retention{FirstOrder: aggregates[0], diff --git a/app/vmctl/opentsdb/parser_test.go b/app/vmctl/opentsdb/parser_test.go index 0aa93b7cd..a5adec540 100644 --- a/app/vmctl/opentsdb/parser_test.go +++ b/app/vmctl/opentsdb/parser_test.go @@ -8,7 +8,7 @@ func TestConvertRetention(t *testing.T) { /* 2592000 seconds in 30 days 3600 in one hour - 2592000 / 3600 = 720 individual query "ranges" should exist, plus one because time ranges can be weird + 2592000 / 14400 = 180 individual query "ranges" should exist, plus one because time ranges can be weird First order should == "sum" Second order should == "avg" AggTime should == "1m" @@ -17,8 +17,8 @@ func TestConvertRetention(t *testing.T) { if err != nil { t.Fatalf("Error parsing valid retention string: %v", err) } - if len(res.QueryRanges) != 721 { - t.Fatalf("Found %v query ranges. Should have found 720", len(res.QueryRanges)) + if len(res.QueryRanges) != 181 { + t.Fatalf("Found %v query ranges. Should have found 181", len(res.QueryRanges)) } if res.FirstOrder != "sum" { t.Fatalf("Incorrect first order aggregation %q. Should have been 'sum'", res.FirstOrder) diff --git a/app/vmctl/prometheus.go b/app/vmctl/prometheus.go index cb0c02b82..c417204e5 100644 --- a/app/vmctl/prometheus.go +++ b/app/vmctl/prometheus.go @@ -25,7 +25,7 @@ type prometheusProcessor struct { cc int } -func (pp *prometheusProcessor) run(silent bool) error { +func (pp *prometheusProcessor) run(silent, verbose bool) error { blocks, err := pp.cl.Explore() if err != nil { return fmt.Errorf("explore failed: %s", err) @@ -66,7 +66,7 @@ func (pp *prometheusProcessor) run(silent bool) error { return fmt.Errorf("prometheus error: %s", promErr) case vmErr := <-pp.im.Errors(): close(blockReadersCh) - return fmt.Errorf("Import process failed: \n%s", wrapErr(vmErr)) + return fmt.Errorf("import process failed: %s", wrapErr(vmErr, verbose)) case blockReadersCh <- br: } } @@ -77,7 +77,9 @@ func (pp *prometheusProcessor) run(silent bool) error { pp.im.Close() // drain import errors channel for vmErr := range pp.im.Errors() { - return fmt.Errorf("Import process failed: \n%s", wrapErr(vmErr)) + if vmErr.Err != nil { + return fmt.Errorf("import process failed: %s", wrapErr(vmErr, verbose)) + } } bar.Finish() log.Println("Import finished!") diff --git a/app/vmctl/utils.go b/app/vmctl/utils.go index 678e70635..522169227 100644 --- a/app/vmctl/utils.go +++ b/app/vmctl/utils.go @@ -23,11 +23,29 @@ func prompt(question string) bool { return false } -func wrapErr(vmErr *vm.ImportError) error { +func wrapErr(vmErr *vm.ImportError, verbose bool) error { var errTS string + var maxTS, minTS int64 for _, ts := range vmErr.Batch { - errTS += fmt.Sprintf("%s for timestamps range %d - %d\n", - ts.String(), ts.Timestamps[0], ts.Timestamps[len(ts.Timestamps)-1]) + if minTS < ts.Timestamps[0] || minTS == 0 { + minTS = ts.Timestamps[0] + } + if maxTS < ts.Timestamps[len(ts.Timestamps)-1] { + maxTS = ts.Timestamps[len(ts.Timestamps)-1] + } + if verbose { + errTS += fmt.Sprintf("%s for timestamps range %d - %d\n", + ts.String(), ts.Timestamps[0], ts.Timestamps[len(ts.Timestamps)-1]) + } } - return fmt.Errorf("%s with error: %s", errTS, vmErr.Err) + var verboseMsg string + if !verbose { + verboseMsg = "(enable `--verbose` output to get more details)" + } + if vmErr.Err == nil { + return fmt.Errorf("%s\n\tLatest delivered batch for timestamps range %d - %d %s\n%s", + vmErr.Err, minTS, maxTS, verboseMsg, errTS) + } + return fmt.Errorf("%s\n\tImporting batch failed for timestamps range %d - %d %s\n%s", + vmErr.Err, minTS, maxTS, verboseMsg, errTS) } diff --git a/app/vmctl/vm/vm.go b/app/vmctl/vm/vm.go index 90ec23697..d37b040ff 100644 --- a/app/vmctl/vm/vm.go +++ b/app/vmctl/vm/vm.go @@ -13,6 +13,7 @@ import ( "sync" "time" + "github.com/VictoriaMetrics/VictoriaMetrics/app/vmctl/limiter" "github.com/VictoriaMetrics/VictoriaMetrics/lib/decimal" ) @@ -47,6 +48,9 @@ type Config struct { RoundDigits int // ExtraLabels that will be added to all imported series. Must be in label=value format. ExtraLabels []string + // RateLimit defines a data transfer speed in bytes per second. + // Is applied to each worker (see Concurrency) independently. + RateLimit int64 } // Importer performs insertion of timeseries @@ -63,6 +67,8 @@ type Importer struct { input chan *TimeSeries errors chan *ImportError + rl *limiter.Limiter + wg sync.WaitGroup once sync.Once @@ -123,6 +129,7 @@ func NewImporter(cfg Config) (*Importer, error) { compress: cfg.Compress, user: cfg.User, password: cfg.Password, + rl: limiter.NewLimiter(cfg.RateLimit), close: make(chan struct{}), input: make(chan *TimeSeries, cfg.Concurrency*4), errors: make(chan *ImportError, cfg.Concurrency), @@ -149,9 +156,11 @@ func NewImporter(cfg Config) (*Importer, error) { // ImportError is type of error generated // in case of unsuccessful import request type ImportError struct { - // The batch of timeseries that failed + // The batch of timeseries processed by importer at the moment Batch []*TimeSeries // The error that appeared during insert + // If err is nil - no error happened and Batch + // Is the latest delivered Batch. Err error } @@ -180,12 +189,13 @@ func (im *Importer) startWorker(batchSize, significantFigures, roundDigits int) for { select { case <-im.close: - if err := im.Import(batch); err != nil { - im.errors <- &ImportError{ - Batch: batch, - Err: err, - } + exitErr := &ImportError{ + Batch: batch, } + if err := im.Import(batch); err != nil { + exitErr.Err = err + } + im.errors <- exitErr return case ts := <-im.input: // init waitForBatch when first @@ -301,12 +311,13 @@ func (im *Importer) Import(tsBatch []*TimeSeries) error { w := io.Writer(pw) if im.compress { - zw, err := gzip.NewWriterLevel(pw, 1) + zw, err := gzip.NewWriterLevel(w, 1) if err != nil { return fmt.Errorf("unexpected error when creating gzip writer: %s", err) } w = zw } + w = limiter.NewWriteLimiter(w, im.rl) bw := bufio.NewWriterSize(w, 16*1024) var totalSamples, totalBytes int @@ -321,8 +332,8 @@ func (im *Importer) Import(tsBatch []*TimeSeries) error { if err := bw.Flush(); err != nil { return err } - if im.compress { - err := w.(*gzip.Writer).Close() + if closer, ok := w.(io.Closer); ok { + err := closer.Close() if err != nil { return err } diff --git a/app/vmctl/vm_native.go b/app/vmctl/vm_native.go index 02a9ffd0d..60cec652f 100644 --- a/app/vmctl/vm_native.go +++ b/app/vmctl/vm_native.go @@ -7,12 +7,15 @@ import ( "log" "net/http" - "github.com/VictoriaMetrics/VictoriaMetrics/app/vmctl/vm" "github.com/cheggaaa/pb/v3" + + "github.com/VictoriaMetrics/VictoriaMetrics/app/vmctl/limiter" + "github.com/VictoriaMetrics/VictoriaMetrics/app/vmctl/vm" ) type vmNativeProcessor struct { - filter filter + filter filter + rateLimit int64 dst *vmNativeClient src *vmNativeClient @@ -84,7 +87,12 @@ func (p *vmNativeProcessor) run() error { bar := pb.ProgressBarTemplate(barTpl).Start64(0) barReader := bar.NewProxyReader(exportReader) - _, err = io.Copy(pw, barReader) + w := io.Writer(pw) + if p.rateLimit > 0 { + rl := limiter.NewLimiter(p.rateLimit) + w = limiter.NewWriteLimiter(pw, rl) + } + _, err = io.Copy(w, barReader) if err != nil { return fmt.Errorf("failed to write into %q: %s", p.dst.addr, err) } diff --git a/app/vmgateway/README.md b/app/vmgateway/README.md index 17cf2e611..cd309eaab 100644 --- a/app/vmgateway/README.md +++ b/app/vmgateway/README.md @@ -1,6 +1,6 @@ # vmgateway -***vmgateway is a part of [enterprise package](https://victoriametrics.com/enterprise.html). It is available for download and evaluation at [releases page](https://github.com/VictoriaMetrics/VictoriaMetrics/releases)*** +***vmgateway is a part of [enterprise package](https://victoriametrics.com/products/enterprise/). It is available for download and evaluation at [releases page](https://github.com/VictoriaMetrics/VictoriaMetrics/releases)*** vmgateway @@ -14,7 +14,7 @@ * Provides access by tenantID in the Cluster version * Allows for separate write/read/admin access to data -`vmgateway` is included in our [enterprise packages](https://victoriametrics.com/enterprise.html). +`vmgateway` is included in our [enterprise packages](https://victoriametrics.com/products/enterprise/). ## Access Control diff --git a/app/vmrestore/README.md b/app/vmrestore/README.md index 7b3486cfd..d970d4c87 100644 --- a/app/vmrestore/README.md +++ b/app/vmrestore/README.md @@ -163,7 +163,7 @@ It is recommended using [binary releases](https://github.com/VictoriaMetrics/Vic ### Development build -1. [Install Go](https://golang.org/doc/install). The minimum supported version is Go 1.16. +1. [Install Go](https://golang.org/doc/install). The minimum supported version is Go 1.17. 2. Run `make vmrestore` from the root folder of [the repository](https://github.com/VictoriaMetrics/VictoriaMetrics). It builds `vmrestore` binary and puts it into the `bin` folder. diff --git a/app/vmselect/main.go b/app/vmselect/main.go index 406ee198a..366e1e9e7 100644 --- a/app/vmselect/main.go +++ b/app/vmselect/main.go @@ -423,7 +423,7 @@ func RequestHandler(w http.ResponseWriter, r *http.Request) bool { // Return dumb placeholder for https://prometheus.io/docs/prometheus/latest/querying/api/#querying-exemplars queryExemplarsRequests.Inc() w.Header().Set("Content-Type", "application/json") - fmt.Fprintf(w, "%s", `{"status":"success","data":null}`) + fmt.Fprintf(w, "%s", `{"status":"success","data":[]}`) return true case "/api/v1/admin/tsdb/delete_series": deleteRequests.Inc() diff --git a/app/vmselect/vmui/asset-manifest.json b/app/vmselect/vmui/asset-manifest.json index eafbcb81d..14eff4127 100644 --- a/app/vmselect/vmui/asset-manifest.json +++ b/app/vmselect/vmui/asset-manifest.json @@ -1,12 +1,12 @@ { "files": { - "main.css": "./static/css/main.a33903a8.css", - "main.js": "./static/js/main.23f635e5.js", + "main.css": "./static/css/main.79ff1ad2.css", + "main.js": "./static/js/main.22df0342.js", "static/js/27.85f0e2b0.chunk.js": "./static/js/27.85f0e2b0.chunk.js", "index.html": "./index.html" }, "entrypoints": [ - "static/css/main.a33903a8.css", - "static/js/main.23f635e5.js" + "static/css/main.79ff1ad2.css", + "static/js/main.22df0342.js" ] } \ No newline at end of file diff --git a/app/vmselect/vmui/index.html b/app/vmselect/vmui/index.html index 2fac696d8..31c924f98 100644 --- a/app/vmselect/vmui/index.html +++ b/app/vmselect/vmui/index.html @@ -1 +1 @@ -VM UI
\ No newline at end of file +VM UI
\ No newline at end of file diff --git a/app/vmselect/vmui/static/css/main.79ff1ad2.css b/app/vmselect/vmui/static/css/main.79ff1ad2.css new file mode 100644 index 000000000..391807b41 --- /dev/null +++ b/app/vmselect/vmui/static/css/main.79ff1ad2.css @@ -0,0 +1 @@ +body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}.MuiAccordionSummary-content{margin:0!important}.uplot,.uplot *,.uplot :after,.uplot :before{box-sizing:border-box}.uplot{font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5;width:-webkit-min-content;width:min-content}.u-title{font-size:18px;font-weight:700;text-align:center}.u-wrap{position:relative;-webkit-user-select:none;-ms-user-select:none;user-select:none}.u-over,.u-under{position:absolute}.u-under{overflow:hidden}.uplot canvas{display:block;height:100%;position:relative;width:100%}.u-axis{position:absolute}.u-legend{font-size:14px;margin:auto;text-align:center}.u-inline{display:block}.u-inline *{display:inline-block}.u-inline tr{margin-right:16px}.u-legend th{font-weight:600}.u-legend th>*{display:inline-block;vertical-align:middle}.u-legend .u-marker{background-clip:padding-box!important;height:1em;margin-right:4px;width:1em}.u-inline.u-live th:after{content:":";vertical-align:middle}.u-inline:not(.u-live) .u-value{display:none}.u-series>*{padding:4px}.u-series th{cursor:pointer}.u-legend .u-off>*{opacity:.3}.u-select{background:rgba(0,0,0,.07)}.u-cursor-x,.u-cursor-y,.u-select{pointer-events:none;position:absolute}.u-cursor-x,.u-cursor-y{left:0;top:0;will-change:transform;z-index:100}.u-hz .u-cursor-x,.u-vt .u-cursor-y{border-right:1px dashed #607d8b;height:100%}.u-hz .u-cursor-y,.u-vt .u-cursor-x{border-bottom:1px dashed #607d8b;width:100%}.u-cursor-pt{background-clip:padding-box!important;border:0 solid;border-radius:50%;left:0;pointer-events:none;position:absolute;top:0;will-change:transform;z-index:100}.u-axis.u-off,.u-cursor-pt.u-off,.u-cursor-x.u-off,.u-cursor-y.u-off,.u-select.u-off,.u-tooltip{display:none}.u-tooltip{grid-gap:12px;word-wrap:break-word;background:rgba(57,57,57,.9);border-radius:4px;color:#fff;font-family:monospace;font-size:10px;font-weight:500;line-height:1.4em;max-width:300px;padding:8px;pointer-events:none;position:absolute;z-index:100}.u-tooltip-data{align-items:center;display:flex;flex-wrap:wrap;font-size:11px;line-height:150%}.u-tooltip-data__value{font-weight:700;padding:4px}.u-tooltip__info{grid-gap:4px;display:grid}.u-tooltip__marker{height:12px;margin-right:4px;width:12px}.legendWrapper{grid-gap:20px;cursor:default;display:grid;grid-template-columns:repeat(auto-fit,minmax(400px,1fr));margin-top:20px;position:relative}.legendGroup{margin-bottom:24px}.legendGroupTitle{align-items:center;display:grid;font-size:11px;grid-template-columns:43px auto;padding:10px}.legendGroupQuery{grid-column:1/3;opacity:.6}.legendGroupLine{margin-right:10px}.legendItem{grid-gap:6px;align-items:start;background-color:#fff;cursor:pointer;display:inline-grid;grid-template-columns:auto auto;justify-content:start;padding:5px 10px;transition:.2s ease}.legendItemHide{opacity:.5;text-decoration:line-through}.legendItem:hover{background-color:rgba(0,0,0,.1)}.legendMarker{border-style:solid;border-width:2px;box-sizing:border-box;height:12px;margin:3px 0;transition:.2s ease;width:12px}.legendLabel{font-size:11px;font-weight:400}.legendWrapperHotkey{align-items:center;display:flex;font-size:11px}.legendWrapperHotkey p{margin-right:20px}.legendWrapperHotkey code{word-wrap:break-word;background-color:#f2f2f2;border:1px solid #dedede;border-radius:2px;color:#0a0a0a;display:inline;font-size:10px;font-weight:400;max-width:100%;padding:4px 6px} \ No newline at end of file diff --git a/app/vmselect/vmui/static/css/main.a33903a8.css b/app/vmselect/vmui/static/css/main.a33903a8.css deleted file mode 100644 index 14815b97a..000000000 --- a/app/vmselect/vmui/static/css/main.a33903a8.css +++ /dev/null @@ -1 +0,0 @@ -body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}.MuiAccordionSummary-content{margin:0!important}.cm-activeLine{background-color:inherit!important}.cm-editor{border:none;border-radius:4px;font-size:10px}.cm-gutters{border:none!important;border-radius:4px 0 0 4px;height:100%;overflow:hidden}.cm-activeLineGutter,.cm-gutters{background-color:#fff!important}.query-editor .cm-scroller{align-items:center!important}.query-editor .cm-editor.cm-focused{outline:none}.query-editor-container{border:1px solid #b9b9b9;border-radius:4px;padding:12px;position:relative}.query-editor-container_focus{border:1px solid #3f51b5}.query-editor-container_error{border-color:#ff4141}.query-editor-container-one-line .query-editor .cm-editor{height:22px}.query-editor-container-one-line{padding:6px}.query-editor-label{background-color:#fff;color:rgba(0,0,0,.6);font-size:12px;font-weight:400;left:4px;letter-spacing:normal;line-height:1;max-width:calc(133% - 24px);overflow:hidden;padding:0 5px;position:absolute;text-overflow:ellipsis;top:-.71875em;-webkit-transform:scale(.75);transform:scale(.75);white-space:nowrap;z-index:1}.query-editor-container_error .query-editor-label{color:#ff4141}.uplot,.uplot *,.uplot :after,.uplot :before{box-sizing:border-box}.uplot{font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5;width:-webkit-min-content;width:min-content}.u-title{font-size:18px;font-weight:700;text-align:center}.u-wrap{position:relative;-webkit-user-select:none;-ms-user-select:none;user-select:none}.u-over,.u-under{position:absolute}.u-under{overflow:hidden}.uplot canvas{display:block;height:100%;position:relative;width:100%}.u-axis{position:absolute}.u-legend{font-size:14px;margin:auto;text-align:center}.u-inline{display:block}.u-inline *{display:inline-block}.u-inline tr{margin-right:16px}.u-legend th{font-weight:600}.u-legend th>*{display:inline-block;vertical-align:middle}.u-legend .u-marker{background-clip:padding-box!important;height:1em;margin-right:4px;width:1em}.u-inline.u-live th:after{content:":";vertical-align:middle}.u-inline:not(.u-live) .u-value{display:none}.u-series>*{padding:4px}.u-series th{cursor:pointer}.u-legend .u-off>*{opacity:.3}.u-select{background:rgba(0,0,0,.07)}.u-cursor-x,.u-cursor-y,.u-select{pointer-events:none;position:absolute}.u-cursor-x,.u-cursor-y{left:0;top:0;will-change:transform;z-index:100}.u-hz .u-cursor-x,.u-vt .u-cursor-y{border-right:1px dashed #607d8b;height:100%}.u-hz .u-cursor-y,.u-vt .u-cursor-x{border-bottom:1px dashed #607d8b;width:100%}.u-cursor-pt{background-clip:padding-box!important;border:0 solid;border-radius:50%;left:0;pointer-events:none;position:absolute;top:0;will-change:transform;z-index:100}.u-axis.u-off,.u-cursor-pt.u-off,.u-cursor-x.u-off,.u-cursor-y.u-off,.u-select.u-off,.u-tooltip{display:none}.u-tooltip{grid-gap:12px;word-wrap:break-word;background:rgba(57,57,57,.9);border-radius:4px;color:#fff;font-family:monospace;font-size:10px;font-weight:500;line-height:1.4em;max-width:300px;padding:8px;pointer-events:none;position:absolute;z-index:100}.u-tooltip-data{align-items:center;display:flex;flex-wrap:wrap;font-size:11px;line-height:150%}.u-tooltip-data__value{font-weight:700;padding:4px}.u-tooltip__info{grid-gap:4px;display:grid}.u-tooltip__marker{height:12px;margin-right:4px;width:12px}.legendWrapper{grid-gap:20px;cursor:default;display:grid;grid-template-columns:repeat(auto-fit,minmax(400px,1fr));margin-top:20px}.legendGroup{margin-bottom:24px}.legendGroupTitle{align-items:center;display:flex;font-size:11px;padding:10px 0 5px}.legendGroupLine{margin:0 10px}.legendItem{grid-gap:6px;align-items:start;background-color:#fff;cursor:pointer;display:inline-grid;grid-template-columns:auto auto;justify-content:start;padding:5px 10px;transition:.2s ease}.legendItemHide{opacity:.5;text-decoration:line-through}.legendItem:hover{background-color:rgba(0,0,0,.1)}.legendMarker{border-style:solid;border-width:2px;box-sizing:border-box;height:12px;margin:3px 0;transition:.2s ease;width:12px}.legendLabel{font-size:11px;font-weight:400} \ No newline at end of file diff --git a/app/vmselect/vmui/static/js/main.22df0342.js b/app/vmselect/vmui/static/js/main.22df0342.js new file mode 100644 index 000000000..bcaa5b4b2 --- /dev/null +++ b/app/vmselect/vmui/static/js/main.22df0342.js @@ -0,0 +1,2 @@ +/*! For license information please see main.22df0342.js.LICENSE.txt */ +!function(){var e={5318:function(e){e.exports=function(e){return e&&e.__esModule?e:{default:e}},e.exports.default=e.exports,e.exports.__esModule=!0},7757:function(e,t,n){e.exports=n(8937)},8508:function(e,t,n){"use strict";n.d(t,{Z:function(){return oe}});var r=n(3324),o=Math.abs,i=String.fromCharCode,a=Object.assign;function l(e){return e.trim()}function s(e,t,n){return e.replace(t,n)}function u(e,t){return e.indexOf(t)}function c(e,t){return 0|e.charCodeAt(t)}function d(e,t,n){return e.slice(t,n)}function f(e){return e.length}function p(e){return e.length}function h(e,t){return t.push(e),e}var m=1,v=1,g=0,y=0,b=0,x="";function w(e,t,n,r,o,i,a){return{value:e,root:t,parent:n,type:r,props:o,children:i,line:m,column:v,length:a,return:""}}function S(e,t){return a(w("",null,null,"",null,null,0),e,{length:-e.length},t)}function k(){return b=y>0?c(x,--y):0,v--,10===b&&(v=1,m--),b}function Z(){return b=y2||M(b)>3?"":" "}function D(e,t){for(;--t&&Z()&&!(b<48||b>102||b>57&&b<65||b>70&&b<97););return E(e,P()+(t<6&&32==C()&&32==Z()))}function A(e){for(;Z();)switch(b){case e:return y;case 34:case 39:34!==e&&39!==e&&A(b);break;case 40:41===e&&A(e);break;case 92:Z()}return y}function N(e,t){for(;Z()&&e+b!==57&&(e+b!==84||47!==C()););return"/*"+E(t,y-1)+"*"+i(47===e?e:Z())}function _(e){for(;!M(C());)Z();return E(e,y)}var I="-ms-",L="-moz-",z="-webkit-",F="comm",B="rule",W="decl",H="@keyframes";function V(e,t){for(var n="",r=p(e),o=0;o6)switch(c(e,t+1)){case 109:if(45!==c(e,t+4))break;case 102:return s(e,/(.+:)(.+)-([^]+)/,"$1-webkit-$2-$3$1"+L+(108==c(e,t+3)?"$3":"$2-$3"))+e;case 115:return~u(e,"stretch")?U(s(e,"stretch","fill-available"),t)+e:e}break;case 4949:if(115!==c(e,t+1))break;case 6444:switch(c(e,f(e)-3-(~u(e,"!important")&&10))){case 107:return s(e,":",":"+z)+e;case 101:return s(e,/(.+:)([^;!]+)(;|!.+)?/,"$1"+z+(45===c(e,14)?"inline-":"")+"box$3$1"+z+"$2$3$1"+I+"$2box$3")+e}break;case 5936:switch(c(e,t+11)){case 114:return z+e+I+s(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return z+e+I+s(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return z+e+I+s(e,/[svh]\w+-[tblr]{2}/,"lr")+e}return z+e+I+e+e}return e}function Y(e){return O(q("",null,null,null,[""],e=T(e),0,[0],e))}function q(e,t,n,r,o,a,l,c,d){for(var p=0,m=0,v=l,g=0,y=0,b=0,x=1,w=1,S=1,E=0,M="",T=o,O=a,A=r,I=M;w;)switch(b=E,E=Z()){case 40:if(108!=b&&58==I.charCodeAt(v-1)){-1!=u(I+=s(R(E),"&","&\f"),"&\f")&&(S=-1);break}case 34:case 39:case 91:I+=R(E);break;case 9:case 10:case 13:case 32:I+=j(b);break;case 92:I+=D(P()-1,7);continue;case 47:switch(C()){case 42:case 47:h(K(N(Z(),P()),t,n),d);break;default:I+="/"}break;case 123*x:c[p++]=f(I)*S;case 125*x:case 59:case 0:switch(E){case 0:case 125:w=0;case 59+m:y>0&&f(I)-v&&h(y>32?X(I+";",r,n,v-1):X(s(I," ","")+";",r,n,v-2),d);break;case 59:I+=";";default:if(h(A=G(I,t,n,p,m,o,c,M,T=[],O=[],v),a),123===E)if(0===m)q(I,t,A,A,T,a,v,c,O);else switch(g){case 100:case 109:case 115:q(e,A,A,r&&h(G(e,A,A,0,0,o,c,M,o,T=[],v),O),o,O,v,c,r?T:O);break;default:q(I,A,A,A,[""],O,0,c,O)}}p=m=y=0,x=S=1,M=I="",v=l;break;case 58:v=1+f(I),y=b;default:if(x<1)if(123==E)--x;else if(125==E&&0==x++&&125==k())continue;switch(I+=i(E),E*x){case 38:S=m>0?1:(I+="\f",-1);break;case 44:c[p++]=(f(I)-1)*S,S=1;break;case 64:45===C()&&(I+=R(Z())),g=C(),m=v=f(M=I+=_(P())),E++;break;case 45:45===b&&2==f(I)&&(x=0)}}return a}function G(e,t,n,r,i,a,u,c,f,h,m){for(var v=i-1,g=0===i?a:[""],y=p(g),b=0,x=0,S=0;b0?g[k]+" "+Z:s(Z,/&\f/g,g[k])))&&(f[S++]=C);return w(e,t,n,0===i?B:c,f,h,m)}function K(e,t,n){return w(e,t,n,F,i(b),d(e,2,-2),0)}function X(e,t,n,r){return w(e,t,n,W,d(e,0,r),d(e,r+1,-1),r)}var Q=function(e,t,n){for(var r=0,o=0;r=o,o=C(),38===r&&12===o&&(t[n]=1),!M(o);)Z();return E(e,y)},J=function(e,t){return O(function(e,t){var n=-1,r=44;do{switch(M(r)){case 0:38===r&&12===C()&&(t[n]=1),e[n]+=Q(y-1,t,n);break;case 2:e[n]+=R(r);break;case 4:if(44===r){e[++n]=58===C()?"&\f":"",t[n]=e[n].length;break}default:e[n]+=i(r)}}while(r=Z());return e}(T(e),t))},ee=new WeakMap,te=function(e){if("rule"===e.type&&e.parent&&!(e.length<1)){for(var t=e.value,n=e.parent,r=e.column===n.column&&e.line===n.line;"rule"!==n.type;)if(!(n=n.parent))return;if((1!==e.props.length||58===t.charCodeAt(0)||ee.get(n))&&!r){ee.set(e,!0);for(var o=[],i=J(t,o),a=n.props,l=0,s=0;l-1&&!e.return)switch(e.type){case W:e.return=U(e.value,e.length);break;case H:return V([S(e,{value:s(e.value,"@","@"+z)})],r);case B:if(e.length)return function(e,t){return e.map(t).join("")}(e.props,(function(t){switch(function(e,t){return(e=t.exec(e))?e[0]:e}(t,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return V([S(e,{props:[s(t,/:(read-\w+)/,":-moz-$1")]})],r);case"::placeholder":return V([S(e,{props:[s(t,/:(plac\w+)/,":-webkit-input-$1")]}),S(e,{props:[s(t,/:(plac\w+)/,":-moz-$1")]}),S(e,{props:[s(t,/:(plac\w+)/,I+"input-$1")]})],r)}return""}))}}],oe=function(e){var t=e.key;if("css"===t){var n=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(n,(function(e){-1!==e.getAttribute("data-emotion").indexOf(" ")&&(document.head.appendChild(e),e.setAttribute("data-s",""))}))}var o=e.stylisPlugins||re;var i,a,l={},s=[];i=e.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+t+' "]'),(function(e){for(var t=e.getAttribute("data-emotion").split(" "),n=1;n=4;++r,o-=4)t=1540483477*(65535&(t=255&e.charCodeAt(r)|(255&e.charCodeAt(++r))<<8|(255&e.charCodeAt(++r))<<16|(255&e.charCodeAt(++r))<<24))+(59797*(t>>>16)<<16),n=1540483477*(65535&(t^=t>>>24))+(59797*(t>>>16)<<16)^1540483477*(65535&n)+(59797*(n>>>16)<<16);switch(o){case 3:n^=(255&e.charCodeAt(r+2))<<16;case 2:n^=(255&e.charCodeAt(r+1))<<8;case 1:n=1540483477*(65535&(n^=255&e.charCodeAt(r)))+(59797*(n>>>16)<<16)}return(((n=1540483477*(65535&(n^=n>>>13))+(59797*(n>>>16)<<16))^n>>>15)>>>0).toString(36)},o={animationIterationCount:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},i=n(3390),a=/[A-Z]|^ms/g,l=/_EMO_([^_]+?)_([^]*?)_EMO_/g,s=function(e){return 45===e.charCodeAt(1)},u=function(e){return null!=e&&"boolean"!==typeof e},c=(0,i.Z)((function(e){return s(e)?e:e.replace(a,"-$&").toLowerCase()})),d=function(e,t){switch(e){case"animation":case"animationName":if("string"===typeof t)return t.replace(l,(function(e,t,n){return p={name:t,styles:n,next:p},t}))}return 1===o[e]||s(e)||"number"!==typeof t||0===t?t:t+"px"};function f(e,t,n){if(null==n)return"";if(void 0!==n.__emotion_styles)return n;switch(typeof n){case"boolean":return"";case"object":if(1===n.anim)return p={name:n.name,styles:n.styles,next:p},n.name;if(void 0!==n.styles){var r=n.next;if(void 0!==r)for(;void 0!==r;)p={name:r.name,styles:r.styles,next:p},r=r.next;return n.styles+";"}return function(e,t,n){var r="";if(Array.isArray(n))for(var o=0;o0&&void 0!==arguments[0]?arguments[0]:"light")?{main:v[200],light:v[50],dark:v[400]}:{main:v[700],light:v[400],dark:v[800]}}(n),P=e.secondary||function(){return"dark"===(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"light")?{main:p[200],light:p[50],dark:p[400]}:{main:p[500],light:p[300],dark:p[700]}}(n),E=e.error||function(){return"dark"===(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"light")?{main:h[500],light:h[300],dark:h[700]}:{main:h[700],light:h[400],dark:h[800]}}(n),M=e.info||function(){return"dark"===(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"light")?{main:g[400],light:g[300],dark:g[700]}:{main:g[700],light:g[500],dark:g[900]}}(n),T=e.success||function(){return"dark"===(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"light")?{main:y[400],light:y[300],dark:y[700]}:{main:y[800],light:y[500],dark:y[900]}}(n),O=e.warning||function(){return"dark"===(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"light")?{main:m[400],light:m[300],dark:m[700]}:{main:"#ed6c02",light:m[500],dark:m[900]}}(n);function R(e){return(0,c.mi)(e,w.text.primary)>=l?w.text.primary:x.text.primary}var j=function(e){var t=e.color,n=e.name,o=e.mainShade,i=void 0===o?500:o,a=e.lightShade,l=void 0===a?300:a,s=e.darkShade,c=void 0===s?700:s;if(!(t=(0,r.Z)({},t)).main&&t[i]&&(t.main=t[i]),!t.hasOwnProperty("main"))throw new Error((0,u.Z)(11,n?" (".concat(n,")"):"",i));if("string"!==typeof t.main)throw new Error((0,u.Z)(12,n?" (".concat(n,")"):"",JSON.stringify(t.main)));return S(t,"light",l,k),S(t,"dark",c,k),t.contrastText||(t.contrastText=R(t.main)),t},D={dark:w,light:x};return(0,i.Z)((0,r.Z)({common:d,mode:n,primary:j({color:C,name:"primary"}),secondary:j({color:P,name:"secondary",mainShade:"A400",lightShade:"A200",darkShade:"A700"}),error:j({color:E,name:"error"}),warning:j({color:O,name:"warning"}),info:j({color:M,name:"info"}),success:j({color:T,name:"success"}),grey:f,contrastThreshold:l,getContrastText:R,augmentColor:j,tonalOffset:k},D[n]),Z)}var Z=["fontFamily","fontSize","fontWeightLight","fontWeightRegular","fontWeightMedium","fontWeightBold","htmlFontSize","allVariants","pxToRem"];var C={textTransform:"uppercase"},P='"Roboto", "Helvetica", "Arial", sans-serif';function E(e,t){var n="function"===typeof t?t(e):t,a=n.fontFamily,l=void 0===a?P:a,s=n.fontSize,u=void 0===s?14:s,c=n.fontWeightLight,d=void 0===c?300:c,f=n.fontWeightRegular,p=void 0===f?400:f,h=n.fontWeightMedium,m=void 0===h?500:h,v=n.fontWeightBold,g=void 0===v?700:v,y=n.htmlFontSize,b=void 0===y?16:y,x=n.allVariants,w=n.pxToRem,S=(0,o.Z)(n,Z);var k=u/14,E=w||function(e){return"".concat(e/b*k,"rem")},M=function(e,t,n,o,i){return(0,r.Z)({fontFamily:l,fontWeight:e,fontSize:E(t),lineHeight:n},l===P?{letterSpacing:"".concat((a=o/t,Math.round(1e5*a)/1e5),"em")}:{},i,x);var a},T={h1:M(d,96,1.167,-1.5),h2:M(d,60,1.2,-.5),h3:M(p,48,1.167,0),h4:M(p,34,1.235,.25),h5:M(p,24,1.334,0),h6:M(m,20,1.6,.15),subtitle1:M(p,16,1.75,.15),subtitle2:M(m,14,1.57,.1),body1:M(p,16,1.5,.15),body2:M(p,14,1.43,.15),button:M(m,14,1.75,.4,C),caption:M(p,12,1.66,.4),overline:M(p,12,2.66,1,C)};return(0,i.Z)((0,r.Z)({htmlFontSize:b,pxToRem:E,fontFamily:l,fontSize:u,fontWeightLight:d,fontWeightRegular:p,fontWeightMedium:m,fontWeightBold:g},T),S,{clone:!1})}function M(){return["".concat(arguments.length<=0?void 0:arguments[0],"px ").concat(arguments.length<=1?void 0:arguments[1],"px ").concat(arguments.length<=2?void 0:arguments[2],"px ").concat(arguments.length<=3?void 0:arguments[3],"px rgba(0,0,0,").concat(.2,")"),"".concat(arguments.length<=4?void 0:arguments[4],"px ").concat(arguments.length<=5?void 0:arguments[5],"px ").concat(arguments.length<=6?void 0:arguments[6],"px ").concat(arguments.length<=7?void 0:arguments[7],"px rgba(0,0,0,").concat(.14,")"),"".concat(arguments.length<=8?void 0:arguments[8],"px ").concat(arguments.length<=9?void 0:arguments[9],"px ").concat(arguments.length<=10?void 0:arguments[10],"px ").concat(arguments.length<=11?void 0:arguments[11],"px rgba(0,0,0,").concat(.12,")")].join(",")}var T=["none",M(0,2,1,-1,0,1,1,0,0,1,3,0),M(0,3,1,-2,0,2,2,0,0,1,5,0),M(0,3,3,-2,0,3,4,0,0,1,8,0),M(0,2,4,-1,0,4,5,0,0,1,10,0),M(0,3,5,-1,0,5,8,0,0,1,14,0),M(0,3,5,-1,0,6,10,0,0,1,18,0),M(0,4,5,-2,0,7,10,1,0,2,16,1),M(0,5,5,-3,0,8,10,1,0,3,14,2),M(0,5,6,-3,0,9,12,1,0,3,16,2),M(0,6,6,-3,0,10,14,1,0,4,18,3),M(0,6,7,-4,0,11,15,1,0,4,20,3),M(0,7,8,-4,0,12,17,2,0,5,22,4),M(0,7,8,-4,0,13,19,2,0,5,24,4),M(0,7,9,-4,0,14,21,2,0,5,26,4),M(0,8,9,-5,0,15,22,2,0,6,28,5),M(0,8,10,-5,0,16,24,2,0,6,30,5),M(0,8,11,-5,0,17,26,2,0,6,32,5),M(0,9,11,-5,0,18,28,2,0,7,34,6),M(0,9,12,-6,0,19,29,2,0,7,36,6),M(0,10,13,-6,0,20,31,3,0,8,38,7),M(0,10,13,-6,0,21,33,3,0,8,40,7),M(0,10,14,-6,0,22,35,3,0,8,42,7),M(0,11,14,-7,0,23,36,3,0,9,44,8),M(0,11,15,-7,0,24,38,3,0,9,46,8)],O=n(5829),R={mobileStepper:1e3,speedDial:1050,appBar:1100,drawer:1200,modal:1300,snackbar:1400,tooltip:1500},j=["breakpoints","mixins","spacing","palette","transitions","typography","shape"];function D(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.mixins,n=void 0===t?{}:t,l=e.palette,u=void 0===l?{}:l,c=e.transitions,d=void 0===c?{}:c,f=e.typography,p=void 0===f?{}:f,h=(0,o.Z)(e,j),m=k(u),v=(0,a.Z)(e),g=(0,i.Z)(v,{mixins:s(v.breakpoints,v.spacing,n),palette:m,shadows:T.slice(),typography:E(m,p),transitions:(0,O.ZP)(d),zIndex:(0,r.Z)({},R)});g=(0,i.Z)(g,h);for(var y=arguments.length,b=new Array(y>1?y-1:0),x=1;x0&&void 0!==arguments[0]?arguments[0]:["all"],o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=o.duration,l=void 0===a?n.standard:a,u=o.easing,c=void 0===u?t.easeInOut:u,d=o.delay,f=void 0===d?0:d;(0,r.Z)(o,i);return(Array.isArray(e)?e:[e]).map((function(e){return"".concat(e," ").concat("string"===typeof l?l:s(l)," ").concat(c," ").concat("string"===typeof f?f:s(f))})).join(",")}},e,{easing:t,duration:n})}},2248:function(e,t,n){"use strict";var r=(0,n(7458).Z)();t.Z=r},8564:function(e,t,n){"use strict";n.d(t,{ZP:function(){return P},FO:function(){return k},Dz:function(){return Z}});var r=n(3433),o=n(7462),i=n(3366),a=n(297),l=n(9456),s=n(3649),u=n(114),c=["variant"];function d(e){return 0===e.length}function f(e){var t=e.variant,n=(0,i.Z)(e,c),r=t||"";return Object.keys(n).sort().forEach((function(t){r+="color"===t?d(r)?e[t]:(0,u.Z)(e[t]):"".concat(d(r)?t:(0,u.Z)(t)).concat((0,u.Z)(e[t].toString()))})),r}var p=["name","slot","skipVariantsResolver","skipSx","overridesResolver"],h=["theme"],m=["theme"];function v(e){return 0===Object.keys(e).length}var g=function(e,t){return t.components&&t.components[e]&&t.components[e].styleOverrides?t.components[e].styleOverrides:null},y=function(e,t){var n=[];t&&t.components&&t.components[e]&&t.components[e].variants&&(n=t.components[e].variants);var r={};return n.forEach((function(e){var t=f(e.props);r[t]=e.style})),r},b=function(e,t,n,r){var o,i,a=e.ownerState,l=void 0===a?{}:a,s=[],u=null==n||null==(o=n.components)||null==(i=o[r])?void 0:i.variants;return u&&u.forEach((function(n){var r=!0;Object.keys(n.props).forEach((function(t){l[t]!==n.props[t]&&e[t]!==n.props[t]&&(r=!1)})),r&&s.push(t[f(n.props)])})),s};function x(e){return"ownerState"!==e&&"theme"!==e&&"sx"!==e&&"as"!==e}var w=(0,l.Z)();var S=n(2248),k=function(e){return x(e)&&"classes"!==e},Z=x,C=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.defaultTheme,n=void 0===t?w:t,l=e.rootShouldForwardProp,u=void 0===l?x:l,c=e.slotShouldForwardProp,d=void 0===c?x:c;return function(e){var t,l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},c=l.name,f=l.slot,w=l.skipVariantsResolver,S=l.skipSx,k=l.overridesResolver,Z=(0,i.Z)(l,p),C=void 0!==w?w:f&&"Root"!==f||!1,P=S||!1;var E=x;"Root"===f?E=u:f&&(E=d);var M=(0,a.ZP)(e,(0,o.Z)({shouldForwardProp:E,label:t},Z)),T=function(e){for(var t=arguments.length,a=new Array(t>1?t-1:0),l=1;l0){var p=new Array(f).fill("");(d=[].concat((0,r.Z)(e),(0,r.Z)(p))).raw=[].concat((0,r.Z)(e.raw),(0,r.Z)(p))}else"function"===typeof e&&(d=function(t){var r=t.theme,a=(0,i.Z)(t,m);return e((0,o.Z)({theme:v(r)?n:r},a))});var x=M.apply(void 0,[d].concat((0,r.Z)(u)));return x};return T}}({defaultTheme:S.Z,rootShouldForwardProp:k}),P=C},5469:function(e,t,n){"use strict";n.d(t,{Z:function(){return a}});var r=n(4290),o=n(6728);var i=n(2248);function a(e){return function(e){var t=e.props,n=e.name,i=e.defaultTheme,a=(0,o.Z)(i);return(0,r.Z)({theme:a,name:n,props:t})}({props:e.props,name:e.name,defaultTheme:i.Z})}},1615:function(e,t,n){"use strict";var r=n(114);t.Z=r.Z},4750:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(7462),o=n(7313),i=n(210),a=n(6417);function l(e,t){var n=function(n,o){return(0,a.jsx)(i.Z,(0,r.Z)({"data-testid":"".concat(t,"Icon"),ref:o},n,{children:e}))};return n.muiName=i.Z.muiName,o.memo(o.forwardRef(n))}},8706:function(e,t,n){"use strict";var r=n(4312);t.Z=r.Z},6415:function(e,t,n){"use strict";n.r(t),n.d(t,{capitalize:function(){return r.Z},createChainedFunction:function(){return o},createSvgIcon:function(){return i.Z},debounce:function(){return a.Z},deprecatedPropType:function(){return l},isMuiElement:function(){return s.Z},ownerDocument:function(){return u.Z},ownerWindow:function(){return c.Z},requirePropFactory:function(){return d},setRef:function(){return f},unstable_ClassNameGenerator:function(){return x.Z},unstable_useEnhancedEffect:function(){return p.Z},unstable_useId:function(){return h.Z},unsupportedProp:function(){return m},useControlled:function(){return v.Z},useEventCallback:function(){return g.Z},useForkRef:function(){return y.Z},useIsFocusVisible:function(){return b.Z}});var r=n(1615),o=n(4246).Z,i=n(4750),a=n(8706);var l=function(e,t){return function(){return null}},s=n(7816),u=n(6106),c=n(3533);n(7462);var d=function(e,t){return function(){return null}},f=n(9265).Z,p=n(4993),h=n(7677);var m=function(e,t,n,r,o){return null},v=n(3800),g=n(3236),y=n(6983),b=n(9127),x=n(672)},7816:function(e,t,n){"use strict";n.d(t,{Z:function(){return o}});var r=n(7313);var o=function(e,t){return r.isValidElement(e)&&-1!==t.indexOf(e.type.muiName)}},6106:function(e,t,n){"use strict";var r=n(9081);t.Z=r.Z},3533:function(e,t,n){"use strict";var r=n(3282);t.Z=r.Z},3800:function(e,t,n){"use strict";var r=n(782);t.Z=r.Z},4993:function(e,t,n){"use strict";var r=n(2678);t.Z=r.Z},3236:function(e,t,n){"use strict";var r=n(2780);t.Z=r.Z},6983:function(e,t,n){"use strict";var r=n(7472);t.Z=r.Z},7677:function(e,t,n){"use strict";var r=n(3362);t.Z=r.Z},9127:function(e,t,n){"use strict";n.d(t,{Z:function(){return f}});var r,o=n(7313),i=!0,a=!1,l={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function s(e){e.metaKey||e.altKey||e.ctrlKey||(i=!0)}function u(){i=!1}function c(){"hidden"===this.visibilityState&&a&&(i=!0)}function d(e){var t=e.target;try{return t.matches(":focus-visible")}catch(n){}return i||function(e){var t=e.type,n=e.tagName;return!("INPUT"!==n||!l[t]||e.readOnly)||"TEXTAREA"===n&&!e.readOnly||!!e.isContentEditable}(t)}var f=function(){var e=o.useCallback((function(e){var t;null!=e&&((t=e.ownerDocument).addEventListener("keydown",s,!0),t.addEventListener("mousedown",u,!0),t.addEventListener("pointerdown",u,!0),t.addEventListener("touchstart",u,!0),t.addEventListener("visibilitychange",c,!0))}),[]),t=o.useRef(!1);return{isFocusVisibleRef:t,onFocus:function(e){return!!d(e)&&(t.current=!0,!0)},onBlur:function(){return!!t.current&&(a=!0,window.clearTimeout(r),r=window.setTimeout((function(){a=!1}),100),t.current=!1,!0)},ref:e}}},5693:function(e,t,n){"use strict";var r=n(7313).createContext(null);t.Z=r},201:function(e,t,n){"use strict";n.d(t,{Z:function(){return i}});var r=n(7313),o=n(5693);function i(){return r.useContext(o.Z)}},297:function(e,t,n){"use strict";n.d(t,{ZP:function(){return b}});var r=n(7313),o=n(7462),i=n(3390),a=/^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/,l=(0,i.Z)((function(e){return a.test(e)||111===e.charCodeAt(0)&&110===e.charCodeAt(1)&&e.charCodeAt(2)<91})),s=n(1639),u=n(4911),c=n(4544),d=l,f=function(e){return"theme"!==e},p=function(e){return"string"===typeof e&&e.charCodeAt(0)>96?d:f},h=function(e,t,n){var r;if(t){var o=t.shouldForwardProp;r=e.__emotion_forwardProp&&o?function(t){return e.__emotion_forwardProp(t)&&o(t)}:o}return"function"!==typeof r&&n&&(r=e.__emotion_forwardProp),r},m=function(){return null},v=function e(t,n){var i,a,l=t.__emotion_real===t,d=l&&t.__emotion_base||t;void 0!==n&&(i=n.label,a=n.target);var f=h(t,n,l),v=f||p(d),g=!v("as");return function(){var y=arguments,b=l&&void 0!==t.__emotion_styles?t.__emotion_styles.slice(0):[];if(void 0!==i&&b.push("label:"+i+";"),null==y[0]||void 0===y[0].raw)b.push.apply(b,y);else{0,b.push(y[0][0]);for(var x=y.length,w=1;w0&&void 0!==arguments[0]?arguments[0]:{},n=null==t||null==(e=t.keys)?void 0:e.reduce((function(e,n){return e[t.up(n)]={},e}),{});return n||{}}function l(e,t){return e.reduce((function(e,t){var n=e[t];return(!n||0===Object.keys(n).length)&&delete e[t],e}),t)}function s(e){var t,n=e.values,r=e.breakpoints,o=e.base||function(e,t){if("object"!==typeof e)return{};var n={},r=Object.keys(t);return Array.isArray(e)?r.forEach((function(t,r){r1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;return Math.min(Math.max(t,e),n)}function i(e){if(e.type)return e;if("#"===e.charAt(0))return i(function(e){e=e.substr(1);var t=new RegExp(".{1,".concat(e.length>=6?2:1,"}"),"g"),n=e.match(t);return n&&1===n[0].length&&(n=n.map((function(e){return e+e}))),n?"rgb".concat(4===n.length?"a":"","(").concat(n.map((function(e,t){return t<3?parseInt(e,16):Math.round(parseInt(e,16)/255*1e3)/1e3})).join(", "),")"):""}(e));var t=e.indexOf("("),n=e.substring(0,t);if(-1===["rgb","rgba","hsl","hsla","color"].indexOf(n))throw new Error((0,r.Z)(9,e));var o,a=e.substring(t+1,e.length-1);if("color"===n){if(o=(a=a.split(" ")).shift(),4===a.length&&"/"===a[3].charAt(0)&&(a[3]=a[3].substr(1)),-1===["srgb","display-p3","a98-rgb","prophoto-rgb","rec-2020"].indexOf(o))throw new Error((0,r.Z)(10,o))}else a=a.split(",");return{type:n,values:a=a.map((function(e){return parseFloat(e)})),colorSpace:o}}function a(e){var t=e.type,n=e.colorSpace,r=e.values;return-1!==t.indexOf("rgb")?r=r.map((function(e,t){return t<3?parseInt(e,10):e})):-1!==t.indexOf("hsl")&&(r[1]="".concat(r[1],"%"),r[2]="".concat(r[2],"%")),r=-1!==t.indexOf("color")?"".concat(n," ").concat(r.join(" ")):"".concat(r.join(", ")),"".concat(t,"(").concat(r,")")}function l(e){var t="hsl"===(e=i(e)).type?i(function(e){var t=(e=i(e)).values,n=t[0],r=t[1]/100,o=t[2]/100,l=r*Math.min(o,1-o),s=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:(e+n/30)%12;return o-l*Math.max(Math.min(t-3,9-t,1),-1)},u="rgb",c=[Math.round(255*s(0)),Math.round(255*s(8)),Math.round(255*s(4))];return"hsla"===e.type&&(u+="a",c.push(t[3])),a({type:u,values:c})}(e)).values:e.values;return t=t.map((function(t){return"color"!==e.type&&(t/=255),t<=.03928?t/12.92:Math.pow((t+.055)/1.055,2.4)})),Number((.2126*t[0]+.7152*t[1]+.0722*t[2]).toFixed(3))}function s(e,t){var n=l(e),r=l(t);return(Math.max(n,r)+.05)/(Math.min(n,r)+.05)}function u(e,t){return e=i(e),t=o(t),"rgb"!==e.type&&"hsl"!==e.type||(e.type+="a"),"color"===e.type?e.values[3]="/".concat(t):e.values[3]=t,a(e)}function c(e,t){if(e=i(e),t=o(t),-1!==e.type.indexOf("hsl"))e.values[2]*=1-t;else if(-1!==e.type.indexOf("rgb")||-1!==e.type.indexOf("color"))for(var n=0;n<3;n+=1)e.values[n]*=1-t;return a(e)}function d(e,t){if(e=i(e),t=o(t),-1!==e.type.indexOf("hsl"))e.values[2]+=(100-e.values[2])*t;else if(-1!==e.type.indexOf("rgb"))for(var n=0;n<3;n+=1)e.values[n]+=(255-e.values[n])*t;else if(-1!==e.type.indexOf("color"))for(var r=0;r<3;r+=1)e.values[r]+=(1-e.values[r])*t;return a(e)}function f(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:.15;return l(e)>.5?c(e,t):d(e,t)}},9456:function(e,t,n){"use strict";n.d(t,{Z:function(){return f}});var r=n(7462),o=n(3366),i=n(3019),a=["values","unit","step"];function l(e){var t=e.values,n=void 0===t?{xs:0,sm:600,md:900,lg:1200,xl:1536}:t,i=e.unit,l=void 0===i?"px":i,s=e.step,u=void 0===s?5:s,c=(0,o.Z)(e,a),d=Object.keys(n);function f(e){var t="number"===typeof n[e]?n[e]:e;return"@media (min-width:".concat(t).concat(l,")")}function p(e){var t="number"===typeof n[e]?n[e]:e;return"@media (max-width:".concat(t-u/100).concat(l,")")}function h(e,t){var r=d.indexOf(t);return"@media (min-width:".concat("number"===typeof n[e]?n[e]:e).concat(l,") and ")+"(max-width:".concat((-1!==r&&"number"===typeof n[d[r]]?n[d[r]]:t)-u/100).concat(l,")")}return(0,r.Z)({keys:d,values:n,up:f,down:p,between:h,only:function(e){return d.indexOf(e)+10&&void 0!==arguments[0]?arguments[0]:8;if(e.mui)return e;var t=(0,u.hB)({spacing:e}),n=function(){for(var e=arguments.length,n=new Array(e),r=0;r0&&void 0!==arguments[0]?arguments[0]:{},t=e.breakpoints,n=void 0===t?{}:t,a=e.palette,u=void 0===a?{}:a,f=e.spacing,p=e.shape,h=void 0===p?{}:p,m=(0,o.Z)(e,d),v=l(n),g=c(f),y=(0,i.Z)({breakpoints:v,direction:"ltr",components:{},palette:(0,r.Z)({mode:"light"},u),spacing:g,shape:(0,r.Z)({},s,h)},m),b=arguments.length,x=new Array(b>1?b-1:0),w=1;w2){if(!u[e])return[e];e=u[e]}var t=e.split(""),n=(0,r.Z)(t,2),o=n[0],i=n[1],a=l[o],c=s[i]||"";return Array.isArray(c)?c.map((function(e){return a+e})):[a+c]})),d=["m","mt","mr","mb","ml","mx","my","margin","marginTop","marginRight","marginBottom","marginLeft","marginX","marginY","marginInline","marginInlineStart","marginInlineEnd","marginBlock","marginBlockStart","marginBlockEnd"],f=["p","pt","pr","pb","pl","px","py","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","paddingX","paddingY","paddingInline","paddingInlineStart","paddingInlineEnd","paddingBlock","paddingBlockStart","paddingBlockEnd"],p=[].concat(d,f);function h(e,t,n,r){var o=(0,i.D)(e,t)||n;return"number"===typeof o?function(e){return"string"===typeof e?e:o*e}:Array.isArray(o)?function(e){return"string"===typeof e?e:o[e]}:"function"===typeof o?o:function(){}}function m(e){return h(e,"spacing",8)}function v(e,t){if("string"===typeof t||null==t)return t;var n=e(Math.abs(t));return t>=0?n:"number"===typeof n?-n:"-".concat(n)}function g(e,t,n,r){if(-1===t.indexOf(n))return null;var i=function(e,t){return function(n){return e.reduce((function(e,r){return e[r]=v(t,n),e}),{})}}(c(n),r),a=e[n];return(0,o.k9)(e,a,i)}function y(e,t){var n=m(e.theme);return Object.keys(e).map((function(r){return g(e,t,r,n)})).reduce(a.Z,{})}function b(e){return y(e,d)}function x(e){return y(e,f)}function w(e){return y(e,p)}b.propTypes={},b.filterProps=d,x.propTypes={},x.filterProps=f,w.propTypes={},w.filterProps=p;var S=w},6428:function(e,t,n){"use strict";n.d(t,{D:function(){return a}});var r=n(4942),o=n(114),i=n(4929);function a(e,t){return t&&"string"===typeof t?t.split(".").reduce((function(e,t){return e&&e[t]?e[t]:null}),e):null}function l(e,t,n){var r,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:n;return r="function"===typeof e?e(n):Array.isArray(e)?e[n]||o:a(e,n)||o,t&&(r=t(r)),r}t.Z=function(e){var t=e.prop,n=e.cssProperty,s=void 0===n?e.prop:n,u=e.themeKey,c=e.transform,d=function(e){if(null==e[t])return null;var n=e[t],d=a(e.theme,u)||{};return(0,i.k9)(e,n,(function(e){var n=l(d,c,e);return e===n&&"string"===typeof e&&(n=l(d,c,"".concat(t).concat("default"===e?"":(0,o.Z)(e)),e)),!1===s?n:(0,r.Z)({},s,n)}))};return d.propTypes={},d.filterProps=[t],d}},3649:function(e,t,n){"use strict";var r=n(4942),o=n(7330),i=n(9716),a=n(4929);function l(e){var t=e||{},n=t.sx,s=t.theme,u=void 0===s?{}:s;if(!n)return null;function c(e){var t=e;if("function"===typeof e)t=e(u);else if("object"!==typeof e)return e;var n=(0,a.W8)(u.breakpoints),s=Object.keys(n),c=n;return Object.keys(t).forEach((function(e){var n,s,d=(n=t[e],s=u,"function"===typeof n?n(s):n);if(null!==d&&void 0!==d)if("object"===typeof d)if(i.G[e])c=(0,o.Z)(c,(0,i.Z)(e,d,u));else{var f=(0,a.k9)({theme:u},d,(function(t){return(0,r.Z)({},e,t)}));!function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&void 0!==arguments[0]?arguments[0]:i;return(0,o.Z)(e)}},4290:function(e,t,n){"use strict";n.d(t,{Z:function(){return o}});var r=n(9023);function o(e){var t=e.theme,n=e.name,o=e.props;return t&&t.components&&t.components[n]&&t.components[n].defaultProps?(0,r.Z)(t.components[n].defaultProps,o):o}},4976:function(e,t,n){"use strict";var r=n(201);function o(e){return 0===Object.keys(e).length}t.Z=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=(0,r.Z)();return!t||o(t)?e:t}},114:function(e,t,n){"use strict";n.d(t,{Z:function(){return o}});var r=n(7219);function o(e){if("string"!==typeof e)throw new Error((0,r.Z)(7));return e.charAt(0).toUpperCase()+e.slice(1)}},4246:function(e,t,n){"use strict";function r(){for(var e=arguments.length,t=new Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:166;function r(){for(var r=this,o=arguments.length,i=new Array(o),a=0;a2&&void 0!==arguments[2]?arguments[2]:{clone:!0},a=n.clone?(0,r.Z)({},e):e;return o(e)&&o(t)&&Object.keys(t).forEach((function(r){"__proto__"!==r&&(o(t[r])&&r in e&&o(e[r])?a[r]=i(e[r],t[r],n):a[r]=t[r])})),a}},7219:function(e,t,n){"use strict";function r(e){for(var t="https://mui.com/production-error/?code="+e,n=1;n-1?o(n):n}},9962:function(e,t,n){"use strict";var r=n(1199),o=n(8476),i=o("%Function.prototype.apply%"),a=o("%Function.prototype.call%"),l=o("%Reflect.apply%",!0)||r.call(a,i),s=o("%Object.getOwnPropertyDescriptor%",!0),u=o("%Object.defineProperty%",!0),c=o("%Math.max%");if(u)try{u({},"a",{value:1})}catch(f){u=null}e.exports=function(e){var t=l(r,a,arguments);if(s&&u){var n=s(t,"length");n.configurable&&u(t,"length",{value:1+c(0,e.length-(arguments.length-1))})}return t};var d=function(){return l(r,i,arguments)};u?u(e.exports,"apply",{value:d}):e.exports.apply=d},3061:function(e,t,n){"use strict";function r(e){var t,n,o="";if("string"===typeof e||"number"===typeof e)o+=e;else if("object"===typeof e)if(Array.isArray(e))for(t=0;t=t?e:""+Array(t+1-r.length).join(n)+e},y={s:g,z:function(e){var t=-e.utcOffset(),n=Math.abs(t),r=Math.floor(n/60),o=n%60;return(t<=0?"+":"-")+g(r,2,"0")+":"+g(o,2,"0")},m:function e(t,n){if(t.date()68?1900:2e3)},l=function(e){return function(t){this[e]=+t}},s=[/[+-]\d\d:?(\d\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if("Z"===e)return 0;var t=e.match(/([+-]|\d\d)/g),n=60*t[1]+(+t[2]||0);return 0===n?0:"+"===t[0]?-n:n}(e)}],u=function(e){var t=i[e];return t&&(t.indexOf?t:t.s.concat(t.f))},c=function(e,t){var n,r=i.meridiem;if(r){for(var o=1;o<=24;o+=1)if(e.indexOf(r(o,0,t))>-1){n=o>12;break}}else n=e===(t?"pm":"PM");return n},d={A:[o,function(e){this.afternoon=c(e,!1)}],a:[o,function(e){this.afternoon=c(e,!0)}],S:[/\d/,function(e){this.milliseconds=100*+e}],SS:[n,function(e){this.milliseconds=10*+e}],SSS:[/\d{3}/,function(e){this.milliseconds=+e}],s:[r,l("seconds")],ss:[r,l("seconds")],m:[r,l("minutes")],mm:[r,l("minutes")],H:[r,l("hours")],h:[r,l("hours")],HH:[r,l("hours")],hh:[r,l("hours")],D:[r,l("day")],DD:[n,l("day")],Do:[o,function(e){var t=i.ordinal,n=e.match(/\d+/);if(this.day=n[0],t)for(var r=1;r<=31;r+=1)t(r).replace(/\[|\]/g,"")===e&&(this.day=r)}],M:[r,l("month")],MM:[n,l("month")],MMM:[o,function(e){var t=u("months"),n=(u("monthsShort")||t.map((function(e){return e.substr(0,3)}))).indexOf(e)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[o,function(e){var t=u("months").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\d+/,l("year")],YY:[n,function(e){this.year=a(e)}],YYYY:[/\d{4}/,l("year")],Z:s,ZZ:s};function f(n){var r,o;r=n,o=i&&i.formats;for(var a=(n=r.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var i=r&&r.toUpperCase();return n||o[r]||e[r]||o[i].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))).match(t),l=a.length,s=0;s-1)return new Date(("X"===t?1e3:1)*e);var r=f(t)(e),o=r.year,i=r.month,a=r.day,l=r.hours,s=r.minutes,u=r.seconds,c=r.milliseconds,d=r.zone,p=new Date,h=a||(o||i?1:p.getDate()),m=o||p.getFullYear(),v=0;o&&!i||(v=i>0?i-1:p.getMonth());var g=l||0,y=s||0,b=u||0,x=c||0;return d?new Date(Date.UTC(m,v,h,g,y,b,x+60*d.offset*1e3)):n?new Date(Date.UTC(m,v,h,g,y,b,x)):new Date(m,v,h,g,y,b,x)}catch(e){return new Date("")}}(t,l,r),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),c&&t!=this.format(l)&&(this.$d=new Date("")),i={}}else if(l instanceof Array)for(var p=l.length,h=1;h<=p;h+=1){a[1]=l[h-1];var m=n.apply(this,a);if(m.isValid()){this.$d=m.$d,this.$L=m.$L,this.init();break}h===p&&(this.$d=new Date(""))}else o.call(this,e)}}}()},6446:function(e){e.exports=function(){"use strict";var e,t,n=1e3,r=6e4,o=36e5,i=864e5,a=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,l=31536e6,s=2592e6,u=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,c={years:l,months:s,days:i,hours:o,minutes:r,seconds:n,milliseconds:1,weeks:6048e5},d=function(e){return e instanceof y},f=function(e,t,n){return new y(e,n,t.$l)},p=function(e){return t.p(e)+"s"},h=function(e){return e<0},m=function(e){return h(e)?Math.ceil(e):Math.floor(e)},v=function(e){return Math.abs(e)},g=function(e,t){return e?h(e)?{negative:!0,format:""+v(e)+t}:{negative:!1,format:""+e+t}:{negative:!1,format:""}},y=function(){function h(e,t,n){var r=this;if(this.$d={},this.$l=n,void 0===e&&(this.$ms=0,this.parseFromMilliseconds()),t)return f(e*c[p(t)],this);if("number"==typeof e)return this.$ms=e,this.parseFromMilliseconds(),this;if("object"==typeof e)return Object.keys(e).forEach((function(t){r.$d[p(t)]=e[t]})),this.calMilliseconds(),this;if("string"==typeof e){var o=e.match(u);if(o){var i=o.slice(2).map((function(e){return null!=e?Number(e):0}));return this.$d.years=i[0],this.$d.months=i[1],this.$d.weeks=i[2],this.$d.days=i[3],this.$d.hours=i[4],this.$d.minutes=i[5],this.$d.seconds=i[6],this.calMilliseconds(),this}}return this}var v=h.prototype;return v.calMilliseconds=function(){var e=this;this.$ms=Object.keys(this.$d).reduce((function(t,n){return t+(e.$d[n]||0)*c[n]}),0)},v.parseFromMilliseconds=function(){var e=this.$ms;this.$d.years=m(e/l),e%=l,this.$d.months=m(e/s),e%=s,this.$d.days=m(e/i),e%=i,this.$d.hours=m(e/o),e%=o,this.$d.minutes=m(e/r),e%=r,this.$d.seconds=m(e/n),e%=n,this.$d.milliseconds=e},v.toISOString=function(){var e=g(this.$d.years,"Y"),t=g(this.$d.months,"M"),n=+this.$d.days||0;this.$d.weeks&&(n+=7*this.$d.weeks);var r=g(n,"D"),o=g(this.$d.hours,"H"),i=g(this.$d.minutes,"M"),a=this.$d.seconds||0;this.$d.milliseconds&&(a+=this.$d.milliseconds/1e3);var l=g(a,"S"),s=e.negative||t.negative||r.negative||o.negative||i.negative||l.negative,u=o.format||i.format||l.format?"T":"",c=(s?"-":"")+"P"+e.format+t.format+r.format+u+o.format+i.format+l.format;return"P"===c||"-P"===c?"P0D":c},v.toJSON=function(){return this.toISOString()},v.format=function(e){var n=e||"YYYY-MM-DDTHH:mm:ss",r={Y:this.$d.years,YY:t.s(this.$d.years,2,"0"),YYYY:t.s(this.$d.years,4,"0"),M:this.$d.months,MM:t.s(this.$d.months,2,"0"),D:this.$d.days,DD:t.s(this.$d.days,2,"0"),H:this.$d.hours,HH:t.s(this.$d.hours,2,"0"),m:this.$d.minutes,mm:t.s(this.$d.minutes,2,"0"),s:this.$d.seconds,ss:t.s(this.$d.seconds,2,"0"),SSS:t.s(this.$d.milliseconds,3,"0")};return n.replace(a,(function(e,t){return t||String(r[e])}))},v.as=function(e){return this.$ms/c[p(e)]},v.get=function(e){var t=this.$ms,n=p(e);return"milliseconds"===n?t%=1e3:t="weeks"===n?m(t/c[n]):this.$d[n],0===t?0:t},v.add=function(e,t,n){var r;return r=t?e*c[p(t)]:d(e)?e.$ms:f(e,this).$ms,f(this.$ms+r*(n?-1:1),this)},v.subtract=function(e,t){return this.add(e,t,!0)},v.locale=function(e){var t=this.clone();return t.$l=e,t},v.clone=function(){return f(this.$ms,this)},v.humanize=function(t){return e().add(this.$ms,"ms").locale(this.$l).fromNow(!t)},v.milliseconds=function(){return this.get("milliseconds")},v.asMilliseconds=function(){return this.as("milliseconds")},v.seconds=function(){return this.get("seconds")},v.asSeconds=function(){return this.as("seconds")},v.minutes=function(){return this.get("minutes")},v.asMinutes=function(){return this.as("minutes")},v.hours=function(){return this.get("hours")},v.asHours=function(){return this.as("hours")},v.days=function(){return this.get("days")},v.asDays=function(){return this.as("days")},v.weeks=function(){return this.get("weeks")},v.asWeeks=function(){return this.as("weeks")},v.months=function(){return this.get("months")},v.asMonths=function(){return this.as("months")},v.years=function(){return this.get("years")},v.asYears=function(){return this.as("years")},h}();return function(n,r,o){e=o,t=o().$utils(),o.duration=function(e,t){var n=o.locale();return f(e,{$l:n},t)},o.isDuration=d;var i=r.prototype.add,a=r.prototype.subtract;r.prototype.add=function(e,t){return d(e)&&(e=e.asMilliseconds()),i.bind(this)(e,t)},r.prototype.subtract=function(e,t){return d(e)&&(e=e.asMilliseconds()),a.bind(this)(e,t)}}}()},8743:function(e){e.exports=function(){"use strict";return function(e,t,n){t.prototype.isBetween=function(e,t,r,o){var i=n(e),a=n(t),l="("===(o=o||"()")[0],s=")"===o[1];return(l?this.isAfter(i,r):!this.isBefore(i,r))&&(s?this.isBefore(a,r):!this.isAfter(a,r))||(l?this.isBefore(i,r):!this.isAfter(i,r))&&(s?this.isAfter(a,r):!this.isBefore(a,r))}}}()},3825:function(e){e.exports=function(){"use strict";var e={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};return function(t,n,r){var o=n.prototype,i=o.format;r.en.formats=e,o.format=function(t){void 0===t&&(t="YYYY-MM-DDTHH:mm:ssZ");var n=this.$locale().formats,r=function(t,n){return t.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,r,o){var i=o&&o.toUpperCase();return r||n[o]||e[o]||n[i].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))}(t,void 0===n?{}:n);return i.call(this,r)}}}()},1635:function(e){e.exports=function(){"use strict";var e="minute",t=/[+-]\d\d(?::?\d\d)?/g,n=/([+-]|\d\d)/g;return function(r,o,i){var a=o.prototype;i.utc=function(e){return new o({date:e,utc:!0,args:arguments})},a.utc=function(t){var n=i(this.toDate(),{locale:this.$L,utc:!0});return t?n.add(this.utcOffset(),e):n},a.local=function(){return i(this.toDate(),{locale:this.$L,utc:!1})};var l=a.parse;a.parse=function(e){e.utc&&(this.$u=!0),this.$utils().u(e.$offset)||(this.$offset=e.$offset),l.call(this,e)};var s=a.init;a.init=function(){if(this.$u){var e=this.$d;this.$y=e.getUTCFullYear(),this.$M=e.getUTCMonth(),this.$D=e.getUTCDate(),this.$W=e.getUTCDay(),this.$H=e.getUTCHours(),this.$m=e.getUTCMinutes(),this.$s=e.getUTCSeconds(),this.$ms=e.getUTCMilliseconds()}else s.call(this)};var u=a.utcOffset;a.utcOffset=function(r,o){var i=this.$utils().u;if(i(r))return this.$u?0:i(this.$offset)?u.call(this):this.$offset;if("string"==typeof r&&null===(r=function(e){void 0===e&&(e="");var r=e.match(t);if(!r)return null;var o=(""+r[0]).match(n)||["-",0,0],i=o[0],a=60*+o[1]+ +o[2];return 0===a?0:"+"===i?a:-a}(r)))return this;var a=Math.abs(r)<=16?60*r:r,l=this;if(o)return l.$offset=a,l.$u=0===r,l;if(0!==r){var s=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(l=this.local().add(a+s,e)).$offset=a,l.$x.$localOffset=s}else l=this.utc();return l};var c=a.format;a.format=function(e){var t=e||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return c.call(this,t)},a.valueOf=function(){var e=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||(new Date).getTimezoneOffset());return this.$d.valueOf()-6e4*e},a.isUTC=function(){return!!this.$u},a.toISOString=function(){return this.toDate().toISOString()},a.toString=function(){return this.toDate().toUTCString()};var d=a.toDate;a.toDate=function(e){return"s"===e&&this.$offset?i(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():d.call(this)};var f=a.diff;a.diff=function(e,t,n){if(e&&this.$u===e.$u)return f.call(this,e,t,n);var r=this.local(),o=i(e).local();return f.call(r,o,t,n)}}}()},2781:function(e){"use strict";var t="Function.prototype.bind called on incompatible ",n=Array.prototype.slice,r=Object.prototype.toString,o="[object Function]";e.exports=function(e){var i=this;if("function"!==typeof i||r.call(i)!==o)throw new TypeError(t+i);for(var a,l=n.call(arguments,1),s=function(){if(this instanceof a){var t=i.apply(this,l.concat(n.call(arguments)));return Object(t)===t?t:this}return i.apply(e,l.concat(n.call(arguments)))},u=Math.max(0,i.length-l.length),c=[],d=0;d1&&"boolean"!==typeof t)throw new a('"allowMissing" argument must be a boolean');var n=P(e),r=n.length>0?n[0]:"",i=E("%"+r+"%",t),l=i.name,u=i.value,c=!1,d=i.alias;d&&(r=d[0],w(n,x([0,1],d)));for(var f=1,p=!0;f=n.length){var y=s(u,h);u=(p=!!y)&&"get"in y&&!("originalValue"in y.get)?y.get:u[h]}else p=b(u,h),u=u[h];p&&!c&&(m[l]=u)}}return u}},5520:function(e,t,n){"use strict";var r="undefined"!==typeof Symbol&&Symbol,o=n(541);e.exports=function(){return"function"===typeof r&&("function"===typeof Symbol&&("symbol"===typeof r("foo")&&("symbol"===typeof Symbol("bar")&&o())))}},541:function(e){"use strict";e.exports=function(){if("function"!==typeof Symbol||"function"!==typeof Object.getOwnPropertySymbols)return!1;if("symbol"===typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),n=Object(t);if("string"===typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(n))return!1;for(t in e[t]=42,e)return!1;if("function"===typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"===typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var r=Object.getOwnPropertySymbols(e);if(1!==r.length||r[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"===typeof Object.getOwnPropertyDescriptor){var o=Object.getOwnPropertyDescriptor(e,t);if(42!==o.value||!0!==o.enumerable)return!1}return!0}},7838:function(e,t,n){"use strict";var r=n(1199);e.exports=r.call(Function.call,Object.prototype.hasOwnProperty)},7861:function(e,t,n){"use strict";var r=n(2535),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},i={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},a={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?a:l[e.$$typeof]||o}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=a;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,h=Object.prototype;e.exports=function e(t,n,r){if("string"!==typeof n){if(h){var o=p(n);o&&o!==h&&e(t,o,r)}var a=c(n);d&&(a=a.concat(d(n)));for(var l=s(t),m=s(n),v=0;v=t||n<0||d&&e-u>=i}function w(){var e=h();if(x(e))return S(e);l=setTimeout(w,function(e){var n=t-(e-s);return d?p(n,i-(e-u)):n}(e))}function S(e){return l=void 0,g&&r?y(e):(r=o=void 0,a)}function k(){var e=h(),n=x(e);if(r=arguments,o=this,s=e,n){if(void 0===l)return b(s);if(d)return l=setTimeout(w,t),y(s)}return void 0===l&&(l=setTimeout(w,t)),a}return t=v(t)||0,m(n)&&(c=!!n.leading,i=(d="maxWait"in n)?f(v(n.maxWait)||0,t):i,g="trailing"in n?!!n.trailing:g),k.cancel=function(){void 0!==l&&clearTimeout(l),u=0,r=s=o=l=void 0},k.flush=function(){return void 0===l?a:S(h())},k}},4007:function(e,t,n){var r="__lodash_hash_undefined__",o="[object Function]",i="[object GeneratorFunction]",a=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,l=/^\w*$/,s=/^\./,u=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,c=/\\(\\)?/g,d=/^\[object .+?Constructor\]$/,f="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,p="object"==typeof self&&self&&self.Object===Object&&self,h=f||p||Function("return this")();var m=Array.prototype,v=Function.prototype,g=Object.prototype,y=h["__core-js_shared__"],b=function(){var e=/[^.]+$/.exec(y&&y.keys&&y.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}(),x=v.toString,w=g.hasOwnProperty,S=g.toString,k=RegExp("^"+x.call(w).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Z=h.Symbol,C=m.splice,P=I(h,"Map"),E=I(Object,"create"),M=Z?Z.prototype:void 0,T=M?M.toString:void 0;function O(e){var t=-1,n=e?e.length:0;for(this.clear();++t-1},R.prototype.set=function(e,t){var n=this.__data__,r=D(n,e);return r<0?n.push([e,t]):n[r][1]=t,this},j.prototype.clear=function(){this.__data__={hash:new O,map:new(P||R),string:new O}},j.prototype.delete=function(e){return _(this,e).delete(e)},j.prototype.get=function(e){return _(this,e).get(e)},j.prototype.has=function(e){return _(this,e).has(e)},j.prototype.set=function(e,t){return _(this,e).set(e,t),this};var L=F((function(e){var t;e=null==(t=e)?"":function(e){if("string"==typeof e)return e;if(H(e))return T?T.call(e):"";var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}(t);var n=[];return s.test(e)&&n.push(""),e.replace(u,(function(e,t,r,o){n.push(r?o.replace(c,"$1"):t||e)})),n}));function z(e){if("string"==typeof e||H(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function F(e,t){if("function"!=typeof e||t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function n(){var r=arguments,o=t?t.apply(this,r):r[0],i=n.cache;if(i.has(o))return i.get(o);var a=e.apply(this,r);return n.cache=i.set(o,a),a};return n.cache=new(F.Cache||j),n}F.Cache=j;var B=Array.isArray;function W(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function H(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&"[object Symbol]"==S.call(e)}e.exports=function(e,t,n){var r=null==e?void 0:A(e,t);return void 0===r?n:r}},2061:function(e,t,n){var r="Expected a function",o=/^\s+|\s+$/g,i=/^[-+]0x[0-9a-f]+$/i,a=/^0b[01]+$/i,l=/^0o[0-7]+$/i,s=parseInt,u="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,c="object"==typeof self&&self&&self.Object===Object&&self,d=u||c||Function("return this")(),f=Object.prototype.toString,p=Math.max,h=Math.min,m=function(){return d.Date.now()};function v(e,t,n){var o,i,a,l,s,u,c=0,d=!1,f=!1,v=!0;if("function"!=typeof e)throw new TypeError(r);function b(t){var n=o,r=i;return o=i=void 0,c=t,l=e.apply(r,n)}function x(e){return c=e,s=setTimeout(S,t),d?b(e):l}function w(e){var n=e-u;return void 0===u||n>=t||n<0||f&&e-c>=a}function S(){var e=m();if(w(e))return k(e);s=setTimeout(S,function(e){var n=t-(e-u);return f?h(n,a-(e-c)):n}(e))}function k(e){return s=void 0,v&&o?b(e):(o=i=void 0,l)}function Z(){var e=m(),n=w(e);if(o=arguments,i=this,u=e,n){if(void 0===s)return x(u);if(f)return s=setTimeout(S,t),b(u)}return void 0===s&&(s=setTimeout(S,t)),l}return t=y(t)||0,g(n)&&(d=!!n.leading,a=(f="maxWait"in n)?p(y(n.maxWait)||0,t):a,v="trailing"in n?!!n.trailing:v),Z.cancel=function(){void 0!==s&&clearTimeout(s),c=0,o=u=i=s=void 0},Z.flush=function(){return void 0===s?l:k(m())},Z}function g(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function y(e){if("number"==typeof e)return e;if(function(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&"[object Symbol]"==f.call(e)}(e))return NaN;if(g(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=g(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(o,"");var n=a.test(e);return n||l.test(e)?s(e.slice(2),n?2:8):i.test(e)?NaN:+e}e.exports=function(e,t,n){var o=!0,i=!0;if("function"!=typeof e)throw new TypeError(r);return g(n)&&(o="leading"in n?!!n.leading:o,i="trailing"in n?!!n.trailing:i),v(e,t,{leading:o,maxWait:t,trailing:i})}},1733:function(e,t,n){var r,o;r=function(){var e,t,n="2.0.6",r={},o={},i={currentLocale:"en",zeroFormat:null,nullFormat:null,defaultFormat:"0,0",scalePercentBy100:!0},a={currentLocale:i.currentLocale,zeroFormat:i.zeroFormat,nullFormat:i.nullFormat,defaultFormat:i.defaultFormat,scalePercentBy100:i.scalePercentBy100};function l(e,t){this._input=e,this._value=t}return(e=function(n){var o,i,s,u;if(e.isNumeral(n))o=n.value();else if(0===n||"undefined"===typeof n)o=0;else if(null===n||t.isNaN(n))o=null;else if("string"===typeof n)if(a.zeroFormat&&n===a.zeroFormat)o=0;else if(a.nullFormat&&n===a.nullFormat||!n.replace(/[^0-9]+/g,"").length)o=null;else{for(i in r)if((u="function"===typeof r[i].regexps.unformat?r[i].regexps.unformat():r[i].regexps.unformat)&&n.match(u)){s=r[i].unformat;break}o=(s=s||e._.stringToNumber)(n)}else o=Number(n)||null;return new l(n,o)}).version=n,e.isNumeral=function(e){return e instanceof l},e._=t={numberToFormat:function(t,n,r){var i,a,l,s,u,c,d,f=o[e.options.currentLocale],p=!1,h=!1,m=0,v="",g=1e12,y=1e9,b=1e6,x=1e3,w="",S=!1;if(t=t||0,a=Math.abs(t),e._.includes(n,"(")?(p=!0,n=n.replace(/[\(|\)]/g,"")):(e._.includes(n,"+")||e._.includes(n,"-"))&&(u=e._.includes(n,"+")?n.indexOf("+"):t<0?n.indexOf("-"):-1,n=n.replace(/[\+|\-]/g,"")),e._.includes(n,"a")&&(i=!!(i=n.match(/a(k|m|b|t)?/))&&i[1],e._.includes(n," a")&&(v=" "),n=n.replace(new RegExp(v+"a[kmbt]?"),""),a>=g&&!i||"t"===i?(v+=f.abbreviations.trillion,t/=g):a=y&&!i||"b"===i?(v+=f.abbreviations.billion,t/=y):a=b&&!i||"m"===i?(v+=f.abbreviations.million,t/=b):(a=x&&!i||"k"===i)&&(v+=f.abbreviations.thousand,t/=x)),e._.includes(n,"[.]")&&(h=!0,n=n.replace("[.]",".")),l=t.toString().split(".")[0],s=n.split(".")[1],c=n.indexOf(","),m=(n.split(".")[0].split(",")[0].match(/0/g)||[]).length,s?(e._.includes(s,"[")?(s=(s=s.replace("]","")).split("["),w=e._.toFixed(t,s[0].length+s[1].length,r,s[1].length)):w=e._.toFixed(t,s.length,r),l=w.split(".")[0],w=e._.includes(w,".")?f.delimiters.decimal+w.split(".")[1]:"",h&&0===Number(w.slice(1))&&(w="")):l=e._.toFixed(t,0,r),v&&!i&&Number(l)>=1e3&&v!==f.abbreviations.trillion)switch(l=String(Number(l)/1e3),v){case f.abbreviations.thousand:v=f.abbreviations.million;break;case f.abbreviations.million:v=f.abbreviations.billion;break;case f.abbreviations.billion:v=f.abbreviations.trillion}if(e._.includes(l,"-")&&(l=l.slice(1),S=!0),l.length0;k--)l="0"+l;return c>-1&&(l=l.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+f.delimiters.thousands)),0===n.indexOf(".")&&(l=""),d=l+w+(v||""),p?d=(p&&S?"(":"")+d+(p&&S?")":""):u>=0?d=0===u?(S?"-":"+")+d:d+(S?"-":"+"):S&&(d="-"+d),d},stringToNumber:function(e){var t,n,r,i=o[a.currentLocale],l=e,s={thousand:3,million:6,billion:9,trillion:12};if(a.zeroFormat&&e===a.zeroFormat)n=0;else if(a.nullFormat&&e===a.nullFormat||!e.replace(/[^0-9]+/g,"").length)n=null;else{for(t in n=1,"."!==i.delimiters.decimal&&(e=e.replace(/\./g,"").replace(i.delimiters.decimal,".")),s)if(r=new RegExp("[^a-zA-Z]"+i.abbreviations[t]+"(?:\\)|(\\"+i.currency.symbol+")?(?:\\))?)?$"),l.match(r)){n*=Math.pow(10,s[t]);break}n*=(e.split("-").length+Math.min(e.split("(").length-1,e.split(")").length-1))%2?1:-1,e=e.replace(/[^0-9\.]+/g,""),n*=Number(e)}return n},isNaN:function(e){function t(t){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}((function(e){return"number"===typeof e&&isNaN(e)})),includes:function(e,t){return-1!==e.indexOf(t)},insert:function(e,t,n){return e.slice(0,n)+t+e.slice(n)},reduce:function(e,t){if(null===this)throw new TypeError("Array.prototype.reduce called on null or undefined");if("function"!==typeof t)throw new TypeError(t+" is not a function");var n,r=Object(e),o=r.length>>>0,i=0;if(3===arguments.length)n=arguments[2];else{for(;i=o)throw new TypeError("Reduce of empty array with no initial value");n=r[i++]}for(;ir?e:r}),1)},toFixed:function(e,t,n,r){var o,i,a,l,s=e.toString().split("."),u=t-(r||0);return o=2===s.length?Math.min(Math.max(s[1].length,u),t):u,a=Math.pow(10,o),l=(n(e+"e+"+o)/a).toFixed(o),r>t-o&&(i=new RegExp("\\.?0{1,"+(r-(t-o))+"}$"),l=l.replace(i,"")),l}},e.options=a,e.formats=r,e.locales=o,e.locale=function(e){return e&&(a.currentLocale=e.toLowerCase()),a.currentLocale},e.localeData=function(e){if(!e)return o[a.currentLocale];if(e=e.toLowerCase(),!o[e])throw new Error("Unknown locale : "+e);return o[e]},e.reset=function(){for(var e in i)a[e]=i[e]},e.zeroFormat=function(e){a.zeroFormat="string"===typeof e?e:null},e.nullFormat=function(e){a.nullFormat="string"===typeof e?e:null},e.defaultFormat=function(e){a.defaultFormat="string"===typeof e?e:"0.0"},e.register=function(e,t,n){if(t=t.toLowerCase(),this[e+"s"][t])throw new TypeError(t+" "+e+" already registered.");return this[e+"s"][t]=n,n},e.validate=function(t,n){var r,o,i,a,l,s,u,c;if("string"!==typeof t&&(t+="",console.warn&&console.warn("Numeral.js: Value is not string. It has been co-erced to: ",t)),(t=t.trim()).match(/^\d+$/))return!0;if(""===t)return!1;try{u=e.localeData(n)}catch(d){u=e.localeData(e.locale())}return i=u.currency.symbol,l=u.abbreviations,r=u.delimiters.decimal,o="."===u.delimiters.thousands?"\\.":u.delimiters.thousands,(null===(c=t.match(/^[^\d]+/))||(t=t.substr(1),c[0]===i))&&(null===(c=t.match(/[^\d]+$/))||(t=t.slice(0,-1),c[0]===l.thousand||c[0]===l.million||c[0]===l.billion||c[0]===l.trillion))&&(s=new RegExp(o+"{2}"),!t.match(/[^\d.,]/g)&&!((a=t.split(r)).length>2)&&(a.length<2?!!a[0].match(/^\d+.*\d$/)&&!a[0].match(s):1===a[0].length?!!a[0].match(/^\d+$/)&&!a[0].match(s)&&!!a[1].match(/^\d+$/):!!a[0].match(/^\d+.*\d$/)&&!a[0].match(s)&&!!a[1].match(/^\d+$/)))},e.fn=l.prototype={clone:function(){return e(this)},format:function(t,n){var o,i,l,s=this._value,u=t||a.defaultFormat;if(n=n||Math.round,0===s&&null!==a.zeroFormat)i=a.zeroFormat;else if(null===s&&null!==a.nullFormat)i=a.nullFormat;else{for(o in r)if(u.match(r[o].regexps.format)){l=r[o].format;break}i=(l=l||e._.numberToFormat)(s,u,n)}return i},value:function(){return this._value},input:function(){return this._input},set:function(e){return this._value=Number(e),this},add:function(e){var n=t.correctionFactor.call(null,this._value,e);function r(e,t,r,o){return e+Math.round(n*t)}return this._value=t.reduce([this._value,e],r,0)/n,this},subtract:function(e){var n=t.correctionFactor.call(null,this._value,e);function r(e,t,r,o){return e-Math.round(n*t)}return this._value=t.reduce([e],r,Math.round(this._value*n))/n,this},multiply:function(e){function n(e,n,r,o){var i=t.correctionFactor(e,n);return Math.round(e*i)*Math.round(n*i)/Math.round(i*i)}return this._value=t.reduce([this._value,e],n,1),this},divide:function(e){function n(e,n,r,o){var i=t.correctionFactor(e,n);return Math.round(e*i)/Math.round(n*i)}return this._value=t.reduce([this._value,e],n),this},difference:function(t){return Math.abs(e(this._value).subtract(t).value())}},e.register("locale","en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(e){var t=e%10;return 1===~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th"},currency:{symbol:"$"}}),e.register("format","bps",{regexps:{format:/(BPS)/,unformat:/(BPS)/},format:function(t,n,r){var o,i=e._.includes(n," BPS")?" ":"";return t*=1e4,n=n.replace(/\s?BPS/,""),o=e._.numberToFormat(t,n,r),e._.includes(o,")")?((o=o.split("")).splice(-1,0,i+"BPS"),o=o.join("")):o=o+i+"BPS",o},unformat:function(t){return+(1e-4*e._.stringToNumber(t)).toFixed(15)}}),function(){var t={base:1e3,suffixes:["B","KB","MB","GB","TB","PB","EB","ZB","YB"]},n={base:1024,suffixes:["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"]},r=t.suffixes.concat(n.suffixes.filter((function(e){return t.suffixes.indexOf(e)<0}))).join("|");r="("+r.replace("B","B(?!PS)")+")",e.register("format","bytes",{regexps:{format:/([0\s]i?b)/,unformat:new RegExp(r)},format:function(r,o,i){var a,l,s,u=e._.includes(o,"ib")?n:t,c=e._.includes(o," b")||e._.includes(o," ib")?" ":"";for(o=o.replace(/\s?i?b/,""),a=0;a<=u.suffixes.length;a++)if(l=Math.pow(u.base,a),s=Math.pow(u.base,a+1),null===r||0===r||r>=l&&r0&&(r/=l);break}return e._.numberToFormat(r,o,i)+c},unformat:function(r){var o,i,a=e._.stringToNumber(r);if(a){for(o=t.suffixes.length-1;o>=0;o--){if(e._.includes(r,t.suffixes[o])){i=Math.pow(t.base,o);break}if(e._.includes(r,n.suffixes[o])){i=Math.pow(n.base,o);break}}a*=i||1}return a}})}(),e.register("format","currency",{regexps:{format:/(\$)/},format:function(t,n,r){var o,i,a=e.locales[e.options.currentLocale],l={before:n.match(/^([\+|\-|\(|\s|\$]*)/)[0],after:n.match(/([\+|\-|\)|\s|\$]*)$/)[0]};for(n=n.replace(/\s?\$\s?/,""),o=e._.numberToFormat(t,n,r),t>=0?(l.before=l.before.replace(/[\-\(]/,""),l.after=l.after.replace(/[\-\)]/,"")):t<0&&!e._.includes(l.before,"-")&&!e._.includes(l.before,"(")&&(l.before="-"+l.before),i=0;i=0;i--)switch(l.after[i]){case"$":o=i===l.after.length-1?o+a.currency.symbol:e._.insert(o,a.currency.symbol,-(l.after.length-(1+i)));break;case" ":o=i===l.after.length-1?o+" ":e._.insert(o," ",-(l.after.length-(1+i)+a.currency.symbol.length-1))}return o}}),e.register("format","exponential",{regexps:{format:/(e\+|e-)/,unformat:/(e\+|e-)/},format:function(t,n,r){var o=("number"!==typeof t||e._.isNaN(t)?"0e+0":t.toExponential()).split("e");return n=n.replace(/e[\+|\-]{1}0/,""),e._.numberToFormat(Number(o[0]),n,r)+"e"+o[1]},unformat:function(t){var n=e._.includes(t,"e+")?t.split("e+"):t.split("e-"),r=Number(n[0]),o=Number(n[1]);function i(t,n,r,o){var i=e._.correctionFactor(t,n);return t*i*(n*i)/(i*i)}return o=e._.includes(t,"e-")?o*=-1:o,e._.reduce([r,Math.pow(10,o)],i,1)}}),e.register("format","ordinal",{regexps:{format:/(o)/},format:function(t,n,r){var o=e.locales[e.options.currentLocale],i=e._.includes(n," o")?" ":"";return n=n.replace(/\s?o/,""),i+=o.ordinal(t),e._.numberToFormat(t,n,r)+i}}),e.register("format","percentage",{regexps:{format:/(%)/,unformat:/(%)/},format:function(t,n,r){var o,i=e._.includes(n," %")?" ":"";return e.options.scalePercentBy100&&(t*=100),n=n.replace(/\s?\%/,""),o=e._.numberToFormat(t,n,r),e._.includes(o,")")?((o=o.split("")).splice(-1,0,i+"%"),o=o.join("")):o=o+i+"%",o},unformat:function(t){var n=e._.stringToNumber(t);return e.options.scalePercentBy100?.01*n:n}}),e.register("format","time",{regexps:{format:/(:)/,unformat:/(:)/},format:function(e,t,n){var r=Math.floor(e/60/60),o=Math.floor((e-60*r*60)/60),i=Math.round(e-60*r*60-60*o);return r+":"+(o<10?"0"+o:o)+":"+(i<10?"0"+i:i)},unformat:function(e){var t=e.split(":"),n=0;return 3===t.length?(n+=60*Number(t[0])*60,n+=60*Number(t[1]),n+=Number(t[2])):2===t.length&&(n+=60*Number(t[0]),n+=Number(t[1])),Number(n)}}),e},void 0===(o="function"===typeof r?r.call(t,n,t,e):r)||(e.exports=o)},1843:function(e){"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;function o(e){if(null===e||void 0===e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(o){return!1}}()?Object.assign:function(e,i){for(var a,l,s=o(e),u=1;u0))throw new TypeError('options "indent" must be "\\t", an integer > 0, or `null`');if("undefined"===typeof t)return"undefined";if(null===t)return"null";if("boolean"===typeof t)return t?"true":"false";if("string"===typeof t)return N(t,l);if("number"===typeof t)return 0===t?1/0/t>0?"0":"-0":String(t);if("bigint"===typeof t)return String(t)+"n";var m="undefined"===typeof l.depth?5:l.depth;if("undefined"===typeof r&&(r=0),r>=m&&m>0&&"object"===typeof t)return T(t)?"[Array]":"[Object]";var b=function(e,t){var n;if("\t"===e.indent)n="\t";else{if(!("number"===typeof e.indent&&e.indent>0))return null;n=Array(e.indent+1).join(" ")}return{base:n,prev:Array(t+1).join(n)}}(l,r);if("undefined"===typeof o)o=[];else if(A(o,t)>=0)return"[Circular]";function S(t,n,i){if(n&&(o=o.slice()).push(n),i){var a={depth:l.depth};return j(l,"quoteStyle")&&(a.quoteStyle=l.quoteStyle),e(t,a,r+1,o)}return e(t,l,r+1,o)}if("function"===typeof t){var Z=function(e){if(e.name)return e.name;var t=g.call(v.call(e),/^function\s*([\w$]+)/);if(t)return t[1];return null}(t),R=B(t,S);return"[Function"+(Z?": "+Z:" (anonymous)")+"]"+(R.length>0?" { "+R.join(", ")+" }":"")}if(O(t)){var _=w?String(t).replace(/^(Symbol\(.*\))_[^)]*$/,"$1"):x.call(t);return"object"!==typeof t||w?_:I(_)}if(function(e){if(!e||"object"!==typeof e)return!1;if("undefined"!==typeof HTMLElement&&e instanceof HTMLElement)return!0;return"string"===typeof e.nodeName&&"function"===typeof e.getAttribute}(t)){for(var W="<"+String(t.nodeName).toLowerCase(),H=t.attributes||[],V=0;V"}if(T(t)){if(0===t.length)return"[]";var $=B(t,S);return b&&!function(e){for(var t=0;t=0)return!1;return!0}($)?"["+F($,b)+"]":"[ "+$.join(", ")+" ]"}if(function(e){return"[object Error]"===D(e)&&(!P||!("object"===typeof e&&P in e))}(t)){var U=B(t,S);return 0===U.length?"["+String(t)+"]":"{ ["+String(t)+"] "+U.join(", ")+" }"}if("object"===typeof t&&s){if(C&&"function"===typeof t[C])return t[C]();if("symbol"!==s&&"function"===typeof t.inspect)return t.inspect()}if(function(e){if(!i||!e||"object"!==typeof e)return!1;try{i.call(e);try{u.call(e)}catch(W){return!0}return e instanceof Map}catch(t){}return!1}(t)){var Y=[];return a.call(t,(function(e,n){Y.push(S(n,t,!0)+" => "+S(e,t))})),z("Map",i.call(t),Y,b)}if(function(e){if(!u||!e||"object"!==typeof e)return!1;try{u.call(e);try{i.call(e)}catch(t){return!0}return e instanceof Set}catch(n){}return!1}(t)){var q=[];return c.call(t,(function(e){q.push(S(e,t))})),z("Set",u.call(t),q,b)}if(function(e){if(!d||!e||"object"!==typeof e)return!1;try{d.call(e,d);try{f.call(e,f)}catch(W){return!0}return e instanceof WeakMap}catch(t){}return!1}(t))return L("WeakMap");if(function(e){if(!f||!e||"object"!==typeof e)return!1;try{f.call(e,f);try{d.call(e,d)}catch(W){return!0}return e instanceof WeakSet}catch(t){}return!1}(t))return L("WeakSet");if(function(e){if(!p||!e||"object"!==typeof e)return!1;try{return p.call(e),!0}catch(t){}return!1}(t))return L("WeakRef");if(function(e){return"[object Number]"===D(e)&&(!P||!("object"===typeof e&&P in e))}(t))return I(S(Number(t)));if(function(e){if(!e||"object"!==typeof e||!y)return!1;try{return y.call(e),!0}catch(t){}return!1}(t))return I(S(y.call(t)));if(function(e){return"[object Boolean]"===D(e)&&(!P||!("object"===typeof e&&P in e))}(t))return I(h.call(t));if(function(e){return"[object String]"===D(e)&&(!P||!("object"===typeof e&&P in e))}(t))return I(S(String(t)));if(!function(e){return"[object Date]"===D(e)&&(!P||!("object"===typeof e&&P in e))}(t)&&!function(e){return"[object RegExp]"===D(e)&&(!P||!("object"===typeof e&&P in e))}(t)){var G=B(t,S),K=k?k(t)===Object.prototype:t instanceof Object||t.constructor===Object,X=t instanceof Object?"":"null prototype",Q=!K&&P&&Object(t)===t&&P in t?D(t).slice(8,-1):X?"Object":"",J=(K||"function"!==typeof t.constructor?"":t.constructor.name?t.constructor.name+" ":"")+(Q||X?"["+[].concat(Q||[],X||[]).join(": ")+"] ":"");return 0===G.length?J+"{}":b?J+"{"+F(G,b)+"}":J+"{ "+G.join(", ")+" }"}return String(t)};var R=Object.prototype.hasOwnProperty||function(e){return e in this};function j(e,t){return R.call(e,t)}function D(e){return m.call(e)}function A(e,t){if(e.indexOf)return e.indexOf(t);for(var n=0,r=e.length;nt.maxStringLength){var n=e.length-t.maxStringLength,r="... "+n+" more character"+(n>1?"s":"");return N(e.slice(0,t.maxStringLength),t)+r}return E(e.replace(/(['\\])/g,"\\$1").replace(/[\x00-\x1f]/g,_),"single",t)}function _(e){var t=e.charCodeAt(0),n={8:"b",9:"t",10:"n",12:"f",13:"r"}[t];return n?"\\"+n:"\\x"+(t<16?"0":"")+t.toString(16).toUpperCase()}function I(e){return"Object("+e+")"}function L(e){return e+" { ? }"}function z(e,t,n,r){return e+" ("+t+") {"+(r?F(n,r):n.join(", "))+"}"}function F(e,t){if(0===e.length)return"";var n="\n"+t.prev+t.base;return n+e.join(","+n)+"\n"+t.prev}function B(e,t){var n=T(e),r=[];if(n){r.length=e.length;for(var o=0;o-1?e.split(","):e},u=function(e,t,n,r){if(e){var i=n.allowDots?e.replace(/\.([^.[]+)/g,"[$1]"):e,a=/(\[[^[\]]*])/g,l=n.depth>0&&/(\[[^[\]]*])/.exec(i),u=l?i.slice(0,l.index):i,c=[];if(u){if(!n.plainObjects&&o.call(Object.prototype,u)&&!n.allowPrototypes)return;c.push(u)}for(var d=0;n.depth>0&&null!==(l=a.exec(i))&&d=0;--i){var a,l=e[i];if("[]"===l&&n.parseArrays)a=[].concat(o);else{a=n.plainObjects?Object.create(null):{};var u="["===l.charAt(0)&&"]"===l.charAt(l.length-1)?l.slice(1,-1):l,c=parseInt(u,10);n.parseArrays||""!==u?!isNaN(c)&&l!==u&&String(c)===u&&c>=0&&n.parseArrays&&c<=n.arrayLimit?(a=[])[c]=o:a[u]=o:a={0:o}}o=a}return o}(c,t,n,r)}};e.exports=function(e,t){var n=function(e){if(!e)return a;if(null!==e.decoder&&void 0!==e.decoder&&"function"!==typeof e.decoder)throw new TypeError("Decoder has to be a function.");if("undefined"!==typeof e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var t="undefined"===typeof e.charset?a.charset:e.charset;return{allowDots:"undefined"===typeof e.allowDots?a.allowDots:!!e.allowDots,allowPrototypes:"boolean"===typeof e.allowPrototypes?e.allowPrototypes:a.allowPrototypes,allowSparse:"boolean"===typeof e.allowSparse?e.allowSparse:a.allowSparse,arrayLimit:"number"===typeof e.arrayLimit?e.arrayLimit:a.arrayLimit,charset:t,charsetSentinel:"boolean"===typeof e.charsetSentinel?e.charsetSentinel:a.charsetSentinel,comma:"boolean"===typeof e.comma?e.comma:a.comma,decoder:"function"===typeof e.decoder?e.decoder:a.decoder,delimiter:"string"===typeof e.delimiter||r.isRegExp(e.delimiter)?e.delimiter:a.delimiter,depth:"number"===typeof e.depth||!1===e.depth?+e.depth:a.depth,ignoreQueryPrefix:!0===e.ignoreQueryPrefix,interpretNumericEntities:"boolean"===typeof e.interpretNumericEntities?e.interpretNumericEntities:a.interpretNumericEntities,parameterLimit:"number"===typeof e.parameterLimit?e.parameterLimit:a.parameterLimit,parseArrays:!1!==e.parseArrays,plainObjects:"boolean"===typeof e.plainObjects?e.plainObjects:a.plainObjects,strictNullHandling:"boolean"===typeof e.strictNullHandling?e.strictNullHandling:a.strictNullHandling}}(t);if(""===e||null===e||"undefined"===typeof e)return n.plainObjects?Object.create(null):{};for(var c="string"===typeof e?function(e,t){var n,u={},c=t.ignoreQueryPrefix?e.replace(/^\?/,""):e,d=t.parameterLimit===1/0?void 0:t.parameterLimit,f=c.split(t.delimiter,d),p=-1,h=t.charset;if(t.charsetSentinel)for(n=0;n-1&&(v=i(v)?[v]:v),o.call(u,m)?u[m]=r.combine(u[m],v):u[m]=v}return u}(e,n):e,d=n.plainObjects?Object.create(null):{},f=Object.keys(c),p=0;p0?Z.join(",")||null:void 0}];else if(s(f))D=f;else{var N=Object.keys(Z);D=p?N.sort(p):N}for(var _=0;_0?x+b:""}},9837:function(e,t,n){"use strict";var r=n(5609),o=Object.prototype.hasOwnProperty,i=Array.isArray,a=function(){for(var e=[],t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e}(),l=function(e,t){for(var n=t&&t.plainObjects?Object.create(null):{},r=0;r1;){var t=e.pop(),n=t.obj[t.prop];if(i(n)){for(var r=[],o=0;o=48&&c<=57||c>=65&&c<=90||c>=97&&c<=122||i===r.RFC1738&&(40===c||41===c)?s+=l.charAt(u):c<128?s+=a[c]:c<2048?s+=a[192|c>>6]+a[128|63&c]:c<55296||c>=57344?s+=a[224|c>>12]+a[128|c>>6&63]+a[128|63&c]:(u+=1,c=65536+((1023&c)<<10|1023&l.charCodeAt(u)),s+=a[240|c>>18]+a[128|c>>12&63]+a[128|c>>6&63]+a[128|63&c])}return s},isBuffer:function(e){return!(!e||"object"!==typeof e)&&!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))},isRegExp:function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},maybeMap:function(e,t){if(i(e)){for(var n=[],r=0;r